【Linux】《The Command Line Handbook》读书笔记(下半局部)
前言
这篇博客介绍的命令的确比拟多,并且受到平台字数影响,拆分为高低两个局部。
与其说是读书笔记,实际上更像是学学英语顺带学学 Linux 命令。这本书是通过每天挤一点工夫边看边学边敲实现的,每天日常翻翻所以程序和原始博客网站长处不一样。
集体起初看这个“书”的时候 PDF 还是收费凋谢的,不过当初博主曾经转为免费了,然而在线版本仍然收费对外公开。
此外英文博主还出过很多小而美的初级教程,英文用词和语法都比较简单,非常适合像我一样词汇量单薄的人看看。
这个教程对于一些简略的 Linux 入门是用是十分足够,话不多说咱们间接开始。
英文博客网址
网址:https://thevalleyofcode.com/linux/#54-traceroute
在最近的更新当中,作者改名并且把书名改为了《The Command Line Handbook》,在线网址如下:flaviocopes.com
介绍
Linux 是操作系统,和 MacOs 和 Windows 没什么区别。Linux“外围”(称为内核)于 1991 年在芬兰诞生,从其不起眼的开始经验了很长的路要走。它持续成为 GNU 操作系统的内核,创立了双核 GNU/Linux。
相比 Windows 和 MacOs 零碎不同的是,Linux 是永恒收费的。如果你应用 Mac,你须要晓得 macOS 是一个 UNIX 操作系统,它与 GNU/Linux 零碎有很多相独特的思维,Shell 命令也甚至局部软件能够间接兼容,因为 GNU/Linux 是基于 UNIX 开源的。
而如果应用 Windows,则提供了 Windows Subsystem for Linux 来实现运行 Linux 的相干内容。然而集体并不举荐是用 WSL 来学习 Linux 命令。(更举荐虚拟机)
绝大多数下应用 Linux 是在 VPS (Virtual Private Server) 等环境当中,Linux 提供了 shell 来执行脚本或者文原本执行一系列操作。同时 shell 容许以比 GUI(图形用户界面)更优化的形式执行操作。命令行工具能够提供许多不同的配置选项,并且应用过程中并不会特地简单。
最初留神,博主用的是 Mac 电脑编写的笔记,局部命令在 CenterOs 零碎和 Ubuntu 不肯定实用,请以集体试验成果为准。
chmod
每个 linux 操作系统都具备三个权限,读取,写入,执行。
因为 linux 所有皆文件理念,能够发现这些设计和文件系统的常见操作一模一样。
应用命令 ls -al
能够列表查看目录所有文件,并且获取所有文件的读写权限。
ubuntu@VM-8-8-ubuntu:~$ ls -al
total 152
drwxr-x--- 11 ubuntu ubuntu 4096 Apr 2 12:09 .
drwxr-xr-x 4 root root 4096 Nov 10 07:16 ..
-rw-rw-r-- 1 ubuntu ubuntu 0 Mar 25 11:15 ''$'\033''[200~recipes.txt~'
-rw-rw-r-- 1 ubuntu ubuntu 10240 Mar 25 14:45 archive.tar
-rw------- 1 ubuntu ubuntu 11962 Apr 2 12:11 .bash_history
-rw-r--r-- 1 ubuntu ubuntu 220 Jan 7 2022 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3771 Jan 7 2022 .bashrc
drwx------ 2 ubuntu ubuntu 4096 May 18 2022 .cache
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 25 16:51 compress
drwxr-xr-x 4 ubuntu ubuntu 4096 Mar 16 13:05 .config
drwxrwxr-x 4 ubuntu ubuntu 4096 Mar 26 21:32 current
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 27 21:42 dif
-rw-rw-r-- 1 ubuntu ubuntu 131 Mar 15 09:38 error.txt
rwx
代表所有的文件操作形象,也是对于文件操作权限形象,r 代表读取,w 代表吸入,x 代表运行。chmod 的非凡用法如下:
chmode a+rwx test.txt
-a
:代表 all。-u
:代表用户。-g
:代表用户组。-o
:代表第三方。
上面是对应的参考案例:
ubuntu@VM-8-8-ubuntu:~/current$ ll
total 28
drwxrwxrwx 4 ubuntu ubuntu 4096 Mar 26 21:32 ./
drwxrwxrwx 11 ubuntu ubuntu 4096 Apr 5 12:12 ../
-rw-rw-r-- 1 ubuntu ubuntu 80 Mar 26 20:55 merge.txt
-rw-rw-r-- 1 ubuntu ubuntu 105 Mar 26 21:10 merge.txt.save
-rw-rw-r-- 1 ubuntu ubuntu 107 Mar 26 21:32 merge.txt.save.1
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:18 test/
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:19 test2/
ubuntu@VM-8-8-ubuntu:~/current$ chmod a+rwx merge.txt
ubuntu@VM-8-8-ubuntu:~/current$ ll
total 28
drwxrwxrwx 4 ubuntu ubuntu 4096 Mar 26 21:32 ./
drwxrwxrwx 11 ubuntu ubuntu 4096 Apr 5 12:12 ../
-rwxrwxrwx 1 ubuntu ubuntu 80 Mar 26 20:55 merge.txt*
-rw-rw-r-- 1 ubuntu ubuntu 105 Mar 26 21:10 merge.txt.save
-rw-rw-r-- 1 ubuntu ubuntu 107 Mar 26 21:32 merge.txt.save.1
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:18 test/
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:19 test2/
还有一种形式是通过数字加减权限,也是更为罕用的形式,摈弃其余所有介绍,咱们只须要晓得 Linux 零碎规定权限的最大值为 7,这个 7 能够拆分为运行、写入、读取
,1:为运行,权限最小,
2:为写入。
4:为读取
如果咱们想要给某个文件所有的用户读取写入和执行的权限,能够是用 chmod 777
的命令简略的形式调配权限。
第一个 7 对应 u。
第二个 7 对应 g。
最初的 7 对应 other。
ubuntu@VM-8-8-ubuntu:~/current$ ll
total 28
drwxrwxrwx 4 ubuntu ubuntu 4096 Mar 26 21:32 ./
drwxrwxrwx 11 ubuntu ubuntu 4096 Apr 5 12:12 ../
-rwxrwxrwx 1 ubuntu ubuntu 80 Mar 26 20:55 merge.txt*
-rw-rw-r-- 1 ubuntu ubuntu 105 Mar 26 21:10 merge.txt.save
-rw-rw-r-- 1 ubuntu ubuntu 107 Mar 26 21:32 merge.txt.save.1
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:18 test/
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:19 test2/
ubuntu@VM-8-8-ubuntu:~/current$ chmod 777 merge.txt.save
ubuntu@VM-8-8-ubuntu:~/current$ ll
total 28
drwxrwxrwx 4 ubuntu ubuntu 4096 Mar 26 21:32 ./
drwxrwxrwx 11 ubuntu ubuntu 4096 Apr 5 12:12 ../
-rwxrwxrwx 1 ubuntu ubuntu 80 Mar 26 20:55 merge.txt*
-rwxrwxrwx 1 ubuntu ubuntu 105 Mar 26 21:10 merge.txt.save*
-rw-rw-r-- 1 ubuntu ubuntu 107 Mar 26 21:32 merge.txt.save.1
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:18 test/
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:19 test2/
rwx
还是是用数字的形式调配权限,每个人能够依据本人的习惯应用,集体认为数字的形式比字母的形式更加易懂一些。
sort
排序命令 sort 命令通常是文件排序应用,默认依照字段程序进行排序。
ubuntu@VM-8-8-ubuntu:~$ ls -al | sort
drwx------ 2 ubuntu ubuntu 4096 Dec 27 14:21 .ssh
drwx------ 2 ubuntu ubuntu 4096 May 18 2022 .cache
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 25 16:51 compress
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 27 21:42 dif
drwxrwxr-x 2 ubuntu ubuntu 4096 May 18 2022 .pip
drwxrwxr-x 3 ubuntu ubuntu 4096 Mar 26 21:08 .local
drwxrwxr-x 4 ubuntu ubuntu 4096 Jan 28 10:02 .npm
drwxrwxr-x 4 ubuntu ubuntu 4096 Mar 26 21:32 current
drwxr-x--- 11 ubuntu ubuntu 4096 Apr 2 13:16 .
drwxr-xr-x 4 root root 4096 Nov 10 07:16 ..
drwxr-xr-x 4 ubuntu ubuntu 4096 Mar 16 13:05 .config
lrwxrwxrwx 1 ubuntu ubuntu 11 Mar 25 11:16 newrecipes.txt -> recipes.txt
-rw------- 1 ubuntu ubuntu 12081 Apr 2 13:18 .bash_history
-rw------- 1 ubuntu ubuntu 177 Apr 2 13:16 .Xauthority
-r
:能够逆序输入后果。
ubuntu@VM-8-8-ubuntu:~$ ls -al | sort -r
total 152
-rw-rw-r-- 1 ubuntu ubuntu 73 Nov 10 07:16 .pydistutils.cfg
-rw-rw-r-- 1 ubuntu ubuntu 49 Mar 14 13:13 testdata.txt.gz
-rw-rw-r-- 1 ubuntu ubuntu 42 Mar 29 07:59 test.txt
-rw-rw-r-- 1 ubuntu ubuntu 30 Mar 15 13:24 list2.txt.gz
-rw-rw-r-- 1 ubuntu ubuntu 23 Mar 14 13:06 testdata2.txt
-rw-rw-r-- 1 ubuntu ubuntu 22 Mar 26 20:16 testdata.txt
-ignore-case
:参数疏忽大小写。
ubuntu@VM-8-8-ubuntu:~$ ls -al | sort -r --ignore-case
-n
:参数是进行数字程序排序。
ubuntu@VM-8-8-ubuntu:~$ ls -al | sort -n
drwx------ 2 ubuntu ubuntu 4096 Dec 27 14:21 .ssh
drwx------ 2 ubuntu ubuntu 4096 May 18 2022 .cache
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 25 16:51 compress
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 27 21:42 dif
drwxrwxr-x 2 ubuntu ubuntu 4096 May 18 2022 .pip
drwxrwxr-x 3 ubuntu ubuntu 4096 Mar 26 21:08 .local
drwxrwxr-x 4 ubuntu ubuntu 4096 Jan 28 10:02 .npm
drwxrwxr-x 4 ubuntu ubuntu 4096 Mar 26 21:32 current
drwxr-x--- 11 ubuntu ubuntu 4096 Apr 2 13:16 .
drwxr-xr-x 4 root root 4096 Nov 10 07:16 ..
-u
:参数返回不反复的后果。
ubuntu@VM-8-8-ubuntu:~$ ls -al | sort -u
ubuntu@VM-8-8-ubuntu:~$ ls -al | sort -u
drwx------ 2 ubuntu ubuntu 4096 Dec 27 14:21 .ssh
drwx------ 2 ubuntu ubuntu 4096 May 18 2022 .cache
drwxrwxrwx 11 ubuntu ubuntu 4096 Apr 5 20:37 .
drwxrwxrwx 4 root ubuntu 4096 Mar 26 21:32 current
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 25 16:51 compress
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 27 21:42 difff
drwxrwxr-x 2 ubuntu ubuntu 4096 May 18 2022 .pip
drwxrwxr-x 3 ubuntu ubuntu 4096 Mar 26 21:08 .local
drwxrwxr-x 4 ubuntu ubuntu 4096 Jan 28 10:02 .npm
uniq
和名字一样是对于文件排序过滤掉反复数据,能够用在独自命令,也能够用在管道符号当中配合其余命令应用。
uniq dogs.txt
ls | uniq
如果用在文件内容当中,会返回惟一的后果。
ubuntu@VM-8-8-ubuntu:~/current$ cat ../testdata.txt
abcdefg
hijklmn
aa
aa
ubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txt
abcdefg
hijklmn
aa
如果用在文件夹当中,则返回不反复的文件。
ubuntu@VM-8-8-ubuntu:~/current$ ls .. | uniq
recipes.txt~
archive.tar
compress
current
error.txt
list2.txt
list2.txt.gz
list.txt.gz
newrecipes.txt
otherfile2.txt
otherfile.txt
testdata2.txt
testdata.txt
上面的命令和 sort 配合,排序之后过滤反复数据:
sort dogs.txt | uniq
ubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txt
abcdefg
hijklmn
aa
ubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txt | sort
aa
abcdefg
hijklmn
他的成果和 sort
命令的 -n
参数是一样的。
ubuntu@VM-8-8-ubuntu:~/current$ sort -u ../testdata.txt
aa
abcdefg
hijklmn
ubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txt | sort
aa
abcdefg
hijklmn
-d
参数能够打印 unqi 当中的 反复数据。
ubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txt | sort
aa
abcdefg
hijklmn
ubuntu@VM-8-8-ubuntu:~/current$ uniq -d ../testdata.txt | sort
aa
-u
参数是打印没有反复的数据。
ubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txt | sort
aa
abcdefg
hijklmn
ubuntu@VM-8-8-ubuntu:~/current$ uniq -u ../testdata.txt | sort
abcdefg
hijklmn
-c
参数能够打印 unqi 当中反复数据的细节,比方上面通过显示数字示意反复的次数。
ubuntu@VM-8-8-ubuntu:~/current$ sort ../testdata.txt | uniq -c
2 aa
1 abcdefg
1 hijklmn
最初是一段组合参数,罕用于文件搜寻。
ubuntu@VM-8-8-ubuntu:~/current$ sort ../testdata.txt | uniq -c | sort -nr
2 aa
1 hijklmn
1 abcdefg
diff
相似集体比拟罕用的 BeCompare 相似,能够通过命令比照两个文件不同。首先筹备两个文件,内容如下:
ubuntu@VM-8-8-ubuntu:~/dif$ cat a.txt
aaaaa
12345
bbbbb
ccccc
ubuntu@VM-8-8-ubuntu:~/dif$ cat compare_a.txt
bbbbb
ccccc
aaaaa
间接不带任何参数应用此命令:
ubuntu@VM-8-8-ubuntu:~/dif$ diff compare_a.txt a.txt
4c4
<
---
> ccccc
下面的命令会通知你第四行去少一行c
。如果颠倒一下文件比拟程序,那么后果也会颠倒一下:
ubuntu@VM-8-8-ubuntu:~/dif$ diff a.txt compare_a.txt
4c4
< ccccc
---
>
-y
参数能够逐行比照数据,这样的比照要直观很多,也更像BeCompare
:
ubuntu@VM-8-8-ubuntu:~/dif$ diff -y a.txt compare_a.txt
aaaaa aaaaa
12345 12345
bbbbb bbbbb
ccccc |
-u
参数能够像是 git 的界面一样比照两个文件,也十分有意思。
ubuntu@VM-8-8-ubuntu:~/dif$ diff -u a.txt compare_a.txt
--- a.txt 2023-03-27 21:36:05.656000000 +0800
+++ compare_a.txt 2023-03-27 21:42:08.936000000 +0800
@@ -1,4 +1,4 @@
aaaaa
12345
bbbbb
-ccccc
+
-rq
参数组合能够只显示两个文件是否存在区别。
ubuntu@VM-8-8-ubuntu:~/dif$ diff -rq a.txt compare_a.txt
Files a.txt and compare_a.txt differ
echo
和单词意思一样只干一件事:打印,打印你想要的内容。
ubuntu@VM-8-8-ubuntu:~$ echo "hello"
hello
双右尖括号能够把打印内容重定向到一个磁盘文件:
ubuntu@VM-8-8-ubuntu:~$ echo "hello" >> echoresult.txt
ubuntu@VM-8-8-ubuntu:~$ cat echoresult.txt
hello
$
变量名称能够打印零碎参数或者环境变量,当然也能够脚本自定义参数。
ubuntu@VM-8-8-ubuntu:~$ echo "The path variable is $PATH"
The path variable is /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
如果只是要单纯打印 $ 须要反斜杠本义。
请留神,特殊字符须要用反斜杠 \
本义,例如$
:
ubuntu@VM-8-8-ubuntu:~$ echo the cost is \$5
the cost is $5
echo
也能够用于打印当前目录文件:
ubuntu@VM-8-8-ubuntu:~$ echo *
recipes.txt~ archive.tar compress current dif echoresult.txt error.txt list2.txt list2.txt.gz list.txt.gz newrecipes.txt otherfile2.txt otherfile.txt testdata2.txt testdata.txt testdata.txt.gz test.txt
正则输入,打印家目录都能够。
ubuntu@VM-8-8-ubuntu:~$ echo o*
otherfile2.txt otherfile.txt
ubuntu@VM-8-8-ubuntu:~$ echo ~
/home/ubuntu
echo $(ls -al)
能够打印命令的后果:
echo $(ls -al)
ubuntu@VM-8-8-ubuntu:~$ echo $(ls -al)
total 160 drwxr-x--- 11 ubuntu ubuntu 4096 Apr 2 13:35 . drwxr-xr-x 4 root root 4096 Nov 10 07:16 .. -rw-rw-r-- 1 ubuntu ubuntu 0 Mar 25 11:15 recipes.txt~ -rw-rw-r-- 1 ubuntu ubuntu 10240 Mar 25 14:45 archive.tar -rw------- 1 ubuntu ubuntu 12577 Apr 2 14:00 .bash_history -rw-r--r-- 1 ubuntu ubuntu 220 Jan 7 2022 .bash_logout -rw-r--r-- 1 ubuntu ubuntu 3771 Jan 7 2022 .bashrc drwx------ 2 ubuntu ubuntu 4096 May 18 2022 .cache drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 25 16:51 compress drwxr-xr-x 4 ubuntu ubuntu 4096 Mar 16 13:05 .config drwxrwxr-x 4 ubuntu ubuntu 4096 Mar 26 21:32 current drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 27 21:42 dif -rw-rw-r-- 1 ubuntu ubuntu 6 Apr 2 13:35 echoresult.txt -rw-rw-r-- 1 ubuntu ubuntu 131 Mar 15 09:38 error.txt -rw------- 1 ubuntu ubuntu 20 Mar 26 21:13 .lesshst -rw-rw-r-- 1 ubuntu ubuntu 0 Mar 15 13:24 list2.txt -rw-rw-r-- 1 ubuntu ubuntu 30 Mar 15 13:24 list2.txt.gz -rw-rw-r-- 1 ubuntu ubuntu 114 Mar 15 13:25 list.txt.gz drwxrwxr-x 3 ubuntu ubuntu 4096 Mar 26 21:08 .local lrwxrwxrwx 1 ubuntu ubuntu 11 Mar 25 11:16 newrecipes.txt -> recipes.txt drwxrwxr-x 4 ubuntu ubuntu 4096 Jan 28 10:02 .npm -rw-rw-r-- 1 ubuntu ubuntu 16 Mar 15 09:28 otherfile2.txt -rw-rw-r-- 1 ubuntu ubuntu 16 Mar 14 13:28 otherfile.txt drwxrwxr-x 2 ubuntu ubuntu 4096 May 18 2022 .pip -rw-r--r-- 1 ubuntu ubuntu 807 Jan 7 2022 .profile -rw-rw-r-- 1 ubuntu ubuntu 73 Nov 10 07:16 .pydistutils.cfg drwx------ 2 ubuntu ubuntu 4096 Dec 27 14:21 .ssh -rw-r--r-- 1 ubuntu ubuntu 0 Jan 24 22:53 .sudo_as_admin_successful -rw-rw-r-- 1 ubuntu ubuntu 23 Mar 14 13:06 testdata2.txt -rw-rw-r-- 1 ubuntu ubuntu 22 Mar 26 20:16 testdata.txt -rw-rw-r-- 1 ubuntu ubuntu 49 Mar 14 13:13 testdata.txt.gz -rw-rw-r-- 1 ubuntu ubuntu 42 Mar 29 07:59 test.txt -rw-r--r-- 1 ubuntu ubuntu 12288 Mar 29 08:08 .test.txt.swp -rw------- 1 ubuntu ubuntu 8163 Mar 29 08:10 .viminfo -rw-rw-r-- 1 ubuntu ubuntu 165 Jan 28 10:57 .wget-hsts -rw------- 1 ubuntu ubuntu 177 Apr 2 13:16 .Xauthority
除此之外,echo 还有一些非凡用法,echo {1..5}
打印 1 到 5。
ubuntu@VM-8-8-ubuntu:~$ echo {1..5}
1 2 3 4 5
下面写法都是 shell 中比拟罕用的语法。
chown
这个命令的全称叫做 change own,在 Linux 或 macOS 这样的操作系统中,每个文件 / 目录(以及个别的 UNIX 零碎)都有所有者。
命令格局如下:
chown 用户名 文件
一个文件的所有者能够对它做任何事件,它能够决定文件的命运。所有者(和根用户)也能够应用 chown
命令将所有者改为其余用户:
ubuntu@VM-8-8-ubuntu:~/current$ whoami
ubuntu
ubuntu@VM-8-8-ubuntu:~/current$ chown ubuntu ./merge.txt
ubuntu@VM-8-8-ubuntu:~/current$ chown root ./merge.txt
chown: changing ownership of './merge.txt': Operation not permitted
须要留神 chown root xx
通常状况下是不被容许的,只有 root 有权限把文件的所有人变为本人,或者咱们用 sudo
命令转为 root 身份执行。
ubuntu@VM-8-8-ubuntu:~/current$ sudo chown root ./merge.txt
ubuntu@VM-8-8-ubuntu:~/current$ ll
total 28
drwxrwxrwx 4 ubuntu ubuntu 4096 Mar 26 21:32 ./
drwxrwxrwx 11 ubuntu ubuntu 4096 Apr 5 12:12 ../
-rwxrwxrwx 1 root ubuntu 80 Mar 26 20:55 merge.txt*
-rwxrwxrwx 1 ubuntu ubuntu 105 Mar 26 21:10 merge.txt.save*
-rw-rw-r-- 1 ubuntu ubuntu 107 Mar 26 21:32 merge.txt.save.1
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:18 test/
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:19 test2/
大部分操作系统中都存在文件所属和用户的概念,然而文件 / 目录不仅有一个所有者,它们也有所属组。通过上面的命令格局,你能够在扭转所有者的同时扭转它的所属组:
chown <owner>:<group> <file>
ubuntu@VM-8-8-ubuntu:~/current$ chown ubuntu:ubuntu merge.txt.save.1
如果要批改一整个文件夹的所属人和所属组,能够应用-R
参数。
ubuntu@VM-8-8-ubuntu:~$ ll current/
total 28
drwxrwxrwx 4 ubuntu ubuntu 4096 Mar 26 21:32 ./
drwxrwxrwx 11 ubuntu ubuntu 4096 Apr 5 16:07 ../
-rwxrwxrwx 1 ubuntu ubuntu 80 Mar 26 20:55 merge.txt*
-rwxrwxrwx 1 ubuntu ubuntu 105 Mar 26 21:10 merge.txt.save*
-rw-rw-r-- 1 ubuntu ubuntu 107 Mar 26 21:32 merge.txt.save.1
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:18 test/
drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 26 20:19 test2/
ubuntu@VM-8-8-ubuntu:~$ sudo chown root -R ./current
ubuntu@VM-8-8-ubuntu:~$ ll current/
total 28
drwxrwxrwx 4 root ubuntu 4096 Mar 26 21:32 ./
drwxrwxrwx 11 ubuntu ubuntu 4096 Apr 5 16:07 ../
-rwxrwxrwx 1 root ubuntu 80 Mar 26 20:55 merge.txt*
-rwxrwxrwx 1 root ubuntu 105 Mar 26 21:10 merge.txt.save*
-rw-rw-r-- 1 root ubuntu 107 Mar 26 21:32 merge.txt.save.1
drwxrwxr-x 2 root ubuntu 4096 Mar 26 20:18 test/
drwxrwxr-x 2 root ubuntu 4096 Mar 26 20:19 test2/
用户名: 用户组
能够批改用户组,chgrp 也是一样的成果。
chgrp <group> <filename>
umask
umask 意思是说在你创立文件之前零碎主动给予创立文件的默认权限。间接应用 umask 命令,能够看到 0022 的标记,0002 也是比拟常见的设置。
ubuntu@VM-8-8-ubuntu:~$ umask
0002
0022 通常代表:拥有者用户有全副权限,用户组能够读写,不能执行,其他人只能看。
这里有一个列表,对应的数字以意义,前面三个数字别离对应领有人、所属组、其余:
0 读、写、执行
1 读和写
2 读和执行
3 只读
4 写和执行
5 只写
6 只执行
7 无权限
0002 中的第一个数字比拟非凡,这几个数字通常对应了前面三个数字。对应的咱们只须要 umask 002
这样的写法批改前面三位数字批改 umask 权限。
ubuntu@VM-8-8-ubuntu:~$ umask 002
ubuntu@VM-8-8-ubuntu:~$ umask
0002
从这些数字能够看出,批改umas
k 相似 chmod 的写法,然而 umask 是刚好反过来的,0 权限最大,7 权限最小。
这里可能有疑难后面第一位数字是什么?本着只学有用的内容准则,咱们不须要关怀。
du
作用:计算文件夹大小。
du *
遍历(当前目录)所有文件夹并且计算总大小,大小单位是字节。
ubuntu@VM-8-8-ubuntu:~$ du *
0 recipes.txt~
12 archive.tar
16 compress
4 current/test
4 current/test2
24 current
12 dif
4 error.txt
0 list2.txt
4 list2.txt.gz
4 list.txt.gz
0 newrecipes.txt
4 otherfile2.txt
4 otherfile.txt
4 testdata2.txt
4 testdata.txt
4 testdata.txt.gz
4 test.txt
-a
:参数遍历到每一个文件。
ubuntu@VM-8-8-ubuntu:~$ du -a *
0 recipes.txt~
12 archive.tar
4 compress/list2.txt.gz
4 compress/aaa.txt
4 compress/list.txt.gz
16 compress
4 current/merge.txt.save.1
4 current/merge.txt
4 current/merge.txt.save
4 current/test
4 current/test2
24 current
4 dif/compare_a.txt
4 dif/a.txt
12 dif
4 error.txt
0 list2.txt
4 list2.txt.gz
4 list.txt.gz
0 newrecipes.txt
4 otherfile2.txt
4 otherfile.txt
4 testdata2.txt
4 testdata.txt
4 testdata.txt.gz
4 test.txt
-h
:用于一个最大的可读的标记展现大小,比方 Linux 一个读写是 4kb。
ubuntu@VM-8-8-ubuntu:~$ du -h *
0 recipes.txt~
12K archive.tar
16K compress
4.0K current/test
4.0K current/test2
24K current
12K dif
4.0K error.txt
0 list2.txt
4.0K list2.txt.gz
4.0K list.txt.gz
0 newrecipes.txt
4.0K otherfile2.txt
4.0K otherfile.txt
4.0K testdata2.txt
4.0K testdata.txt
4.0K testdata.txt.gz
4.0K test.txt
-ah
参数通常配合一起用于看每一个文件大小。
xander@xander:~$ du -ah *
4.0K demo2.sh
4.0K demo-arges.sh
4.0K error.txt
4.0K func-args.sh
4.0K log.txt
4.0K tesgt
如果想要想要用其余的单位计算文件大小,能够应用上面的命令。
ubuntu@VM-8-8-ubuntu:~$ du -m *
0 recipes.txt~
1 archive.tar
1 compress
1 current/test
1 current/test2
1 current
1 dif
1 error.txt
0 list2.txt
1 list2.txt.gz
1 list.txt.gz
0 newrecipes.txt
1 otherfile2.txt
1 otherfile.txt
1 testdata2.txt
1 testdata.txt
1 testdata.txt.gz
1 test.txt
从大到小打印文件。
ubuntu@VM-8-8-ubuntu:~$ du -ah | sort -nr | head
880K ./.npm/_cacache/index-v5
240K ./.npm/_cacache/content-v2/sha512/46
220K ./.config/cheat/cheatsheets/community/.git
212K ./.npm/_cacache/content-v2/sha512/55
208K ./.npm/_cacache/content-v2/sha512/55/2f
204K ./.npm/_cacache/content-v2/sha512/55/2f/5e0e35de2cf59c21f42175d90c6fcee84dbbb18295027bc011f4668bcf344beb7ee179507f8fda53eb338d0de387d7e8ee1d52219b6590a3ce23cb00b8fb
196K ./.npm/_cacache/content-v2/sha512/f1
152K ./.config/cheat/cheatsheets/community/.git/objects
148K ./.npm/_cacache/content-v2/sha512/34
148K ./.npm/_cacache/content-v2/sha512/27
最初是集体的一些其余试验。
Shell
xander@xander:~$ du *
4 demo2.sh
4 demo-arges.sh
4 error.txt
4 func-args.sh
4 log.txt
xander@xander:~$ du -a *
4 demo2.sh
4 demo-arges.sh
4 error.txt
4 func-args.sh
4 log.txt
xander@xander:~$ mkdir tesgt
xander@xander:~$ du -a *
4 demo2.sh
4 demo-arges.sh
4 error.txt
4 func-args.sh
4 log.txt
4 tesgt
xander@xander:~$ du -ah *
4.0K demo2.sh
4.0K demo-arges.sh
4.0K error.txt
4.0K func-args.sh
4.0K log.txt
4.0K tesgt
# df
此命令是查看以后的磁盘空间。`df -h`:罕用。查看以后磁盘的所有信息。`df 磁盘名称 `:能够查看某个磁盘的详情。## df -h
`df -h` 能够查看以后零碎的磁盘空间占用状况。
xander@xander:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 389M 1.7M 388M 1% /run
/dev/mapper/ubuntu–vg-ubuntu–lv 14G 7.4G 5.6G 58% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 251M 1.6G 14% /boot
tmpfs 389M 4.0K 389M 1% /run/user/1000
xander@xander:~$ df tmpfs
df: tmpfs: No such file or directory
xander@xander:~$ df /dev/sda2
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 1992552 256924 1614388 14% /boot
xander@xander:~$ df -h /dev/sda2
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 2.0G 251M 1.6G 14% /boot
查看某个磁盘信息,带入对应的磁盘名称即可。
ubuntu@VM-8-8-ubuntu:~$ df -h /dev/vda2
Filesystem Size Used Avail Use% Mounted on
/dev/vda2 40G 9.6G 28G 26% /
# basename
根本用处是返回文件门路所在的最初一层文件夹,如果是文件的绝对路径名称,则间接显示文件名。
xander@xander:~$ basename /usr/local/bin/
bin
xander@xander:~$ basename /home/xander/demo2.sh
demo2.sh
# dirname
和 `basename` 命令有点相似,如果是文件的绝对路径,截取到以后所在文件夹的门路局部:
xander@xander:~$ dirname /home/xander/demo2.sh
/home/xander
# ps
ps 是应用频率极高的命令,能够应用 ps 命令查看以后运行的所有程序,不应用任何参数的 `ps` 命令是查看以后用户以后正在运行的启动线程。
xander@xander:~$ ps
PID TTY TIME CMD
15178 pts/0 00:00:00 bash
15334 pts/0 00:00:00 ps
## `ps ax`
`ps` 要看所有的用户过程或者零碎过程,须要配合 `option` 参数应用。作者在这里介绍了 `ps ax` 的罕用用法:
xander@xander:~$ ps
PID TTY TIME CMD
15178 pts/0 00:00:00 bash
15333 pts/0 00:00:00 ps
xander@xander:~$ ps
PID TTY TIME CMD
15178 pts/0 00:00:00 bash
15334 pts/0 00:00:00 ps
xander@xander:~$ ps ax
…..
936 ? Ss 0:00 /lib/systemd/systemd-logind
938 ? Ssl 0:00 /usr/libexec/udisks2/udisksd
957 tty1 Ss+ 0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
980 ? Ssl 0:00 /usr/sbin/ModemManager
981 ? Ss 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startup
995 ? Ssl 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unatte
1242 ? S 0:00 bpfilter_umh
1932 ? Ssl 0:02 dockerd –group docker –exec-root=/run/snap.docker —
2026 ? Ssl 0:16 containerd –config /run/snap.docker/containerd/contai
13649 ? Ssl 0:00 /usr/libexec/packagekitd
15067 ? Ss 0:00 sshd: xander [priv]
15070 ? Ss 0:00 /lib/systemd/systemd –user
15072 ? S 0:00 (sd-pam)
15175 ? R 0:00 sshd: xander@pts/0
15178 pts/0 Ss 0:00 -bash
15219 ? I 0:02 [kworker/1:1-events]
15314 ? I 0:00 [kworker/u256:2-events_power_efficient]
15316 ? I 0:00 [kworker/1:0-cgroup_destroy]
15317 ? I 0:00 [kworker/0:0-mm_percpu_wq]
15319 ? I 0:00 [kworker/0:2-events]
15327 ? I 0:00 [kworker/u256:1-events_power_efficient]
15332 ? I 0:00 [kworker/u256:0-events_unbound]
`-a` 参数能够查看以后所有用户的过程,`-x` 参数能够展现任意的所有非 link 终端(没有管制终端)的过程。## `ps axww`
应用 `ps axww` 命令,在新的一行持续列出命令而不是将其剪掉。
xander@xander:~$ ps axww
…
936 ? Ss 0:00 /lib/systemd/systemd-logind
938 ? Ssl 0:00 /usr/libexec/udisks2/udisksd
957 tty1 Ss+ 0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
980 ? Ssl 0:00 /usr/sbin/ModemManager
981 ? Ss 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
995 ? Ssl 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
1242 ? S 0:00 bpfilter_umh
1932 ? Ssl 0:02 dockerd –group docker –exec-root=/run/snap.docker –data-root=/var/snap/docker/common/var-lib-docker –pidfile=/run/snap.docker/docker.pid –config-file=/var/snap/docker/2746/config/daemon.json
2026 ? Ssl 0:23 containerd –config /run/snap.docker/containerd/containerd.toml –log-level error
13649 ? Ssl 0:00 /usr/libexec/packagekitd
15067 ? Ss 0:00 sshd: xander [priv]
15070 ? Ss 0:00 /lib/systemd/systemd –user
15072 ? S 0:00 (sd-pam)
15175 ? R 0:00 sshd: xander@pts/0
15178 pts/0 Ss 0:00 -bash
15219 ? I 0:04 [kworker/1:1-mm_percpu_wq]
15316 ? I 0:00 [kworker/1:0-cgroup_destroy]
15317 ? I 0:00 [kworker/0:0-mm_percpu_wq]
15319 ? I 0:02 [kworker/0:2-mm_percpu_wq]
15332 ? I 0:00 [kworker/u256:0-events_unbound]
15338 ? I 0:00 [kworker/u256:2-events_unbound]
15356 ? I 0:00 [kworker/u256:1-events_unbound]
15358 pts/0 R+ 0:00 ps axww
## `ps axww | grep bash`
须要留神 `ps ax` 的缺点是会把较长的命令间接裁剪掉。咱们能够通过 `ps axww` 查看残缺的内容。
@xander:~ ps axww | grep bashsh
15178 pts/0 Ss 0:00 -bash
15379 pts/0 S+ 0:00 grep –color=auto bash
上面是案例:
ubuntu@VM-8-8-ubuntu:~$ ps axww
PID TTY STAT TIME COMMAND
1 ? Ss 5:47 /lib/systemd/systemd --system --deserialize 36
2 ? S 0:04 [kthreadd]
3 ? I< 0:00 [rcu_gp]
4 ? I< 0:00 [rcu_par_gp]
5 ? I< 0:00 [netns]
7 ? I< 0:00 [kworker/0:0H-events_highpri]
9 ? I< 0:00 [mm_percpu_wq]
10 ? S 0:00 [rcu_tasks_rude_]
11 ? S 0:00 [rcu_tasks_trace]
778 ? Ss 0:03 @dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
787 ? Ss 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
793 ? Ssl 0:00 /usr/libexec/polkitd --no-debug
795 ? Ssl 4:18 /usr/sbin/rsyslogd -n -iNONE
807 ? Ss 0:12 /lib/systemd/systemd-logind
872 ? Ssl 0:00 /usr/sbin/ModemManager
951 ? Ssl 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
1098 ttyS0 Ss+ 0:00 /sbin/agetty -o -p — \u –keep-baud 115200,57600,38400,9600 ttyS0 vt220
1100 tty1 Ss+ 0:00 /sbin/agetty -o -p — \u –noclear tty1 linux
1348 ? Sl 1:01 /usr/local/qcloud/stargate/bin/sgagent -d
然而咱们会发现 `ps axww` 的内容十分多,咱们能够应用管道符配合其余命令进行筛选。
ps axww | grep “Visual Studio Code”
## 参数解释
**PID**:过程 ID,拿到过程 ID 咱们能够对于过程发送信号做一系列操作,比方 `kill` 掉。**TTY**:应用的终端 ID,比方 `pts/0`。**S**:通知咱们过程的状态:`STAT`。这里的多个字符 `Ss` 关键在于第二个字符的含意。> \+ s 含意:在其终端中示意该过程处于前台。并且是该过程是一个会话领导者。**TIME**:过程运行了多长时间,0:00
# top
该命令用于显示零碎中运行过程的动静实时信息,top 是十分实用的命令,应用起来非常简单。
top – 02:21:18 up 1:56, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 212 total, 1 running, 211 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3889.8 total, 1159.4 free, 414.5 used, 2315.9 buff/cache
MiB Swap: 2860.0 total, 2860.0 free, 0.0 used. 3200.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2026 root 20 0 1279536 43780 31944 S 0.3 1.1 0:31.00 containerd
1 root 20 0 167768 13240 8300 S 0.0 0.3 0:07.83 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 slub_flushwq
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
10 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_rude_
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_trace
13 root 20 0 0 0 0 S 0.0 0.0 0:00.26 ksoftirqd/0
14 root 20 0 0 0 0 I 0.0 0.0 0:01.76 rcu_sched
15 root rt 0 0 0 0 S 0.0 0.0 0:00.08 migration/0
16 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/0
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
20 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/1
21 root rt 0 0 0 0 S 0.0 0.0 0:00.98 migration/1
22 root 20 0 0 0 0 S 0.0 0.0 0:00.35 ksoftirqd/1
24 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpri
25 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
26 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 inet_frag_wq
27 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd
29 root 20 0 0 0 0 S 0.0 0.0 0:00.01 khungtaskd
30 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
31 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
32 root 20 0 0 0 0 S 0.0 0.0 0:00.42 kcompactd0
33 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
执行 top 命令之后,top 会实时监听,能够通过 `ctrl+c` 的形式强制退出。## top -o %MEM
如上所示,占用最多内存和 CPU 的过程列表一直被更新。默认状况下,正如从突出显示的那一栏所看到的,它们是按所应用的 **CPU(占用)排序 ** 的。如果想要换成依照占用的内存排序,能够应用上面的命令。
top -o mem
具体的案例如下:
xander@xander:~$ top -o %MEM
top – 02:24:30 up 1:59, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 212 total, 1 running, 211 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3889.8 total, 1159.4 free, 414.5 used, 2315.9 buff/cache
MiB Swap: 2860.0 total, 2860.0 free, 0.0 used. 3200.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1932 root 20 0 1411224 66668 47308 S 0.0 1.7 0:02.97 dockerd
934 root 20 0 1022948 54380 20692 S 0.0 1.4 0:14.22 snapd
2026 root 20 0 1279536 43780 31944 S 0.3 1.1 0:31.82 containerd
560 root rt 0 354884 27360 9072 S 0.0 0.7 0:01.26 multipathd
995 root 20 0 109744 21436 13280 S 0.0 0.5 0:00.12 unattended-upgr
13649 root 20 0 295544 20808 17900 S 0.0 0.5 0:00.18 packagekitd
929 root 20 0 32796 18844 10204 S 0.0 0.5 0:00.20 networkd-dispat
516 root 19 -1 64224 14920 13788 S 0.0 0.4 0:00.54 systemd-journal
1 root 20 0 167768 13240 8300 S 0.0 0.3 0:07.83 systemd
938 root 20 0 392680 12768 10496 S 0.0 0.3 0:00.38 udisksd
909 systemd+ 20 0 25260 12356 8416 S 0.0 0.3 0:00.14 systemd-resolve
805 root 20 0 51128 11848 9880 S 0.0 0.3 0:00.07 VGAuthService
980 root 20 0 317004 11596 9756 S 0.0 0.3 0:00.14 ModemManager
15067 root 20 0 17180 10980 8804 S 0.0 0.3 0:00.09 sshd
15070 xander 20 0 17164 9720 7960 S 0.0 0.2 0:00.15 systemd
806 root 20 0 314904 9176 7568 S 0.0 0.2 0:11.81 vmtoolsd
981 root 20 0 15424 8756 7184 S 0.0 0.2 0:00.02 sshd
907 systemd+ 20 0 16244 8460 7420 S 0.0 0.2 0:00.13 systemd-network
15175 xander 20 0 17312 8216 5812 S 0.3 0.2 0:00.64 sshd
936 root 20 0 15332 7308 6344 S 0.0 0.2 0:00.20 systemd-logind
930 root 20 0 234484 6844 6212 S 0.0 0.2 0:00.03 polkitd
798 systemd+ 20 0 89356 6492 5688 S 0.0 0.2 0:00.12 systemd-timesyn
564 root 20 0 25884 6392 4248 S 0.0 0.2 0:00.51 systemd-udevd
931 syslog 20 0 222400 5856 4508 S 0.0 0.1 0:00.05 rsyslogd
15178 xander 20 0 8864 5704 3840 S 0.0 0.1 0:00.27 bash
15072 xander 20 0 170680 5228 16 S 0.0 0.1 0:00.00 (sd-pam)
921 message+ 20 0 8772 4972 4156 S 0.0 0.1 0:00.48 dbus-daemon
15394 xander 20 0 10636 4048 3188 R 0.3 0.1 0:00.02 top
927 root 20 0 82828 3804 3440 S 0.0 0.1 0:00.28 irqbalance
920 root 20 0 6892 2912 2672 S 0.0 0.1 0:00.02 cron
957 root 20 0 6172 1072 984 S 0.0 0.0 0:00.02 agetty
1242 root 20 0 2772 1024 936 S 0.0 0.0 0:00.01 bpfilter_umh
# grep
`grep` 命令常常用于配合其余命令应用,它的关键作用是筛选和疾速检索,也能够用于从其余的命令当中合并和过滤多个输入后果。> 如果你想晓得,grep 代表全局正则表达式打印。比如说在某个文件当中搜寻须要的关键词:
ubuntu@VM-8-8-ubuntu:~$ cat /etc/profile | grep /bin
if [“${BASH-}” ] && [“$BASH” != “/bin/sh”]; then
通过 -`n` 参数能够打印行号:
ubuntu@VM-8-8-ubuntu:~$ cat /etc/profile | grep -n /bin
5: if [“${BASH-}” ] && [“$BASH” != “/bin/sh”]; then
如果咱们想要理解搜寻后果的简短上下文来加深印象,能够退出 "-C 上下文行数" 参数(留神大写),上面的例子演示的是打印被搜寻语句,以及对应的两行上下文信息。
ubuntu@VM-8-8-ubuntu:~$ cat /etc/profile | grep -n -C 2 /bin
3-
4-if [“${PS1-}” ]; then
5: if [“${BASH-}” ] && [“$BASH” != “/bin/sh”]; then
6- # The file bash.bashrc already sets the default PS1.
7- # PS1=’\h:\w$ ‘
# kill
Linux 过程能够接管信号并对其作出反应。这是咱们与运行中的程序互动的一种形式。杀死程序能够向一个程序发送各种信号。它不仅仅是用来终止一个程序,就像它的名字所暗示的那样,但这是它的次要工作。咱们以这种形式应用它:
kill <PID>
这个 **PID** 能够通过 `ps` 命令来获取,比方咱们日常是用的 `ps -ef | grep xxx` 这样的形式。默认状况下,这将向指定的过程 ID 发送 TERM 信号。咱们能够发送各种信号标识告诉其余的过程:
kill -HUP <PID>
kill -INT <PID>
kill -KILL <PID>
kill -TERM <PID>
kill -CONT <PID>
kill -STOP <PID>
HUP 意味着挂起。当启动一个过程的终端窗口在终止该过程之前被敞开时,它会主动发送。INT 示意中断,它发送的信号与咱们在终端中按下 `ctrl-C` 时所用的信号雷同,通常会终止过程。**KILL 不是发给过程的,而是发给操作系统内核的 **,内核收到响应之后立刻进行并终止该过程。TERM 是终止的意思。过程会收到它并自行终止。这是 kill 发送的默认信号。CONT 示意持续。它能够用来复原一个进行的过程。STOP 不是发给过程的,而是发给操作系统内核的,它立刻进行(但不终止)过程。你可能会看到用数字代替,比方 `kill -1 <PID>`。在这种状况下、1 对应的是 HUP。2 对应的是 INT。9 对应的是 KILL。15 对应的是 TERM。18 对应的是 CONT。15 对应的是 STOP。# killall
killall 命令次要是为多个过程发送信号量,也就是能够操作多个过程的敞开。比方你有多个 top 过程就能够应用 Kill top 的形式完结多个 top 过程。`Kill HUP name` 的形式通过信号量做非凡敞开操作,就像是应用 Kill 一样。killall 简直没什么用途,因为这个命令十分危险。为了验证 `killall` 命令,咱们能够开启三个 Shell,后面两个 shell 执行 top 命令,最初一个 Shell 执行 killall 看看是否进行所有的 top 过程。执行 killall 之后,能够看到后面两个 shell 都被进行了:
ubuntu@VM-8-8-ubuntu:~$ killall top
ubuntu@VM-8-8-ubuntu:~$
# jobs
jobs 命令能够看到以后用户所有的后盾过程,咱们能够通过 `top &` 命令来开启一个后盾过程,这样的写法十分有用。
ubuntu@VM-8-8-ubuntu:~$ top &
[1] 2431613
咱们接着再新建一个后盾过程,这里应用 top -o MEM &
ubuntu@VM-8-8-ubuntu:~$ top -o %MEM &
[2] 2432106
咱们能够应用 `fg` 命令 ** 回到 ** 后台程序。须要留神多个后盾应用工作编号:fg 1, fg 2 等等能力失常切换。为了取得工作编号,咱们应用 `jobs` 命令。通过执行 fg 命令,后果却提供错误信息 `failed tty set: Interrupted system call`,,这个报错通常是在执行 top 命令时终端会话被意外中断。这种状况下 `top` 命令就会抛出 "tty set interrupted system call" 的谬误。
ubuntu@VM-8-8-ubuntu:~$ fg
top -o %MEM
top: failed tty set: Interrupted system call
如何防止非交互模式下调用 top 命令报错问题?答案是应用 `-b` 的选项。然而应用 `-b` 选项会导致控制台始终打印信息。> Starts top in Batch mode, which could be useful for sending output from top to other programs or to a file. In this mode, top will not accept input and runs until the iterations limit you\<A1>\<AF>ve set with the -n command-line option or until killed.
> 在批处理模式下启动 top,这对于将 top 的输入发送到其余程序或文件中很有用。在这种模式下,top 不承受输出,始终运行到你用 -n 命令行选项设置的迭代次数限度或被杀死为止。当初咱们能够用 `fg <jobid>` 切换回其中一个。要再次进行程序,咱们能够点击 cmd-Z。当然因为 top 命令自身的限度,这里就不做演示了。运行 `jobs -l` 能够打印以后每个工作的过程 ID。
ubuntu@VM-8-8-ubuntu:~$ jobs -l
# bg
bg 命令用于复原一个后盾 jobs 工作,没有任何参数选项状况下,bg 会是抉择列表中的第一个后盾过程进行复原。![image.png](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20230405172818.png)
比方下面的命令就能够应用 `bg 1` 来复原第一个执行工作。# fg
当一个命令在后盾运行时,因为你在结尾处用 & 启动它(例如:top & 或者因为你用 bg 命令把它放在后盾,你能够用 fg 把 ** 后台任务放到前台 **。![image.png](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20230405172900.png)
运行 fg 会把上一个被暂停的工作复原到前台。运行 fg2 将复原 2 号工作。![image.png](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20230405172912.png)
# type
一个命令能够是这 4 种类型中的一种:- 可执行程序
- 内置程序
- shell 函数
- 别名
type 命令针对不同的内容会给出不同的提醒,留神 type 是用于 Linux 命令的,如果 type 一个文件,会给出报错的提醒:
[zxd@localhost ~]$ type top
top is /usr/bin/top
[zxd@localhost ~]$ type ls
ls is aliased to `ls –color=auto’
[zxd@localhost ~]$ type cd
cd is a shell builtin
[zxd@localhost ~]$ type pwd
pwd is a shell builtin
[zxd@localhost ~]$ type env
env is /usr/bin/env
# which
假如你有一个能够执行的命令,因为它在 shell 门路中,但你想晓得它的地位。
[zxd@localhost ~]$ which ls
alias ls=’ls –color=auto’
/usr/bin/ls
which 命令只对存储在磁盘上的 ** 可执行文件 ** 起作用,而不是别名或内置的 shell 函数。
[zxd@localhost ~]$ which a.txt
/usr/bin/which: no a.txt in (/opt/maven-3.8.6/bin:/opt/jdk8/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/zxd/.local/bin:/home/zxd/bin)
那么如果是用户自定义的可执行文件呢?集体尝试了下,答案也是不行:
[zxd@localhost ~]$ ll
total 354368
-rwxrwxr-x 1 zxd zxd 8304 Oct 15 22:02 a.out
-rw-rw-r– 1 zxd zxd 8760013 Jun 7 2022 apache-maven-3.8.6-bin.zip
-rw-rw-r– 1 zxd zxd 1112 Jan 31 21:57 a.txt
-rw-rw-r– 1 zxd zxd 10 Jan 31 21:59 b.txt
-rw-rw-r– 1 zxd zxd 11 Jan 31 21:58 c.txt
-rw-rw-r– 1 zxd zxd 15 Oct 15 22:01 hello.c
-rw-rw-r– 1 zxd zxd 148003999 Mar 10 2022 jdk-8u331-linux-x64.tar.gz
-rw-rw-r– 1 zxd zxd 71611122 Sep 10 2022 kafka_2.13-2.8.2.tgz
-rw-rw-r– 1 zxd zxd 93566066 Dec 26 19:32 seata-server-1.6.1.tar.gz
-rw-rw-r– 1 zxd zxd 41 Jan 31 23:29 ss.json
-rw-rw-r– 1 zxd zxd 0 Jan 31 23:26 sss.json
-rw-r–r– 1 root root 532315 Jan 22 00:15 sys_dump.sql
-rw-rw-r– 1 zxd zxd 420 Jan 31 23:04 test.json
-rwxrwxr-x 1 zxd zxd 57 Feb 24 21:15 test.sh
-rw-rw-r– 1 zxd zxd 37676320 Feb 12 15:29 zookeeper-3.4.14.tar_3.gz
-rw-rw-r– 1 zxd zxd 2670592 Feb 12 15:28 zookeeper-3.4.14.tar.gz.1
[zxd@localhost ~]$ ./a.out
[zxd@localhost ~]$ which a.out
/usr/bin/which: no a.out in (/opt/maven-3.8.6/bin:/opt/jdk8/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/zxd/.local/bin:/home/zxd/bin)
# nohup
有时你必须在一个近程机器上运行一个长期的过程,而后你须要断开连接,或者你只是想在你和服务器之间呈现任何网络问题时避免命令被进行。应用 nohup 命令能够长期挂起一个程序在后盾执行,也就是咱们常说的用守护进行去执行程序,通常的写法如下:
nohup <command> &
# xargs
xargs 通常是用于把前一个命令移交给后一个命令进行操作。为了不便了解该命令应用,这里举一个例子:
[zxd@localhost ~]$ cat c.txt
6
7
8
9
10
[zxd@localhost ~]$ ll
drwxrwxr-x 2 zxd zxd 6 Mar 16 22:07 10
drwxrwxr-x 2 zxd zxd 6 Mar 16 22:07 6
drwxrwxr-x 2 zxd zxd 6 Mar 16 22:07 7
drwxrwxr-x 2 zxd zxd 6 Mar 16 22:07 8
drwxrwxr-x 2 zxd zxd 6 Mar 16 22:07 9
这个文件中有 6 -10 这几个数字,对应了文件夹 6、7、8、9、10,咱们把要删除的文件夹名称记录到 `c.txt` 当中,之后利用 xargs 的命令把整个文件的内容进行清空:
cat todelete.txt | xargs rm
它的工作形式是 xargs 将运行 `rm` 命令 2 次,cat 返回的每一行运行一次的后果。下面是 xarge 的最简略用法,除此之外还有一些可用的选项。在我看来,其中最有用的是 -p,特地是在开始学习 xargs 的时候。应用这个选项将使 xargs 打印出一个确认提醒阐明它要采取的口头:![image.png](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20230405175236.png)
`-I` 选项是另一个宽泛应用的选项。它容许你把输入的内容放到一个占位符中,而后你能够做各种事件。`-n` 选项让你通知 xargs 一次执行一个迭代,所以你能够用 `-p` 独自确认它们。这里咱们用 `-n1` 通知 `xargs` 一次执行一个迭代:![image.png](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20230405175326.png)
通过上面的办法能够运行多个命令:
command1 | xargs -I % /bin/bash -c ‘command2 %; command3 %’
下面的命令能够把我下面应用的 % 符号换成其余货色,它是一个变量。# vim
vim 是一个十分风行的文件编辑器。vim 编辑器不必多介绍。VIM 会议:[https://vimconf.org](https://vimconf.org/)
古代 Linux 零碎中的 `v`i 只是 `vim` 的一个别名,`vi` 属于一种简写。通过执行 vi 命令,能够取得如下的后果
![](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20230329075044.png)
能够通过 `vi filename` 的形式批改或者新建文件。在 vim 当中有命令模式和插入模式。在命令模式下不能做任何操作,咱们能够通过按键 `i` 的形式进入到插入模式,插入模式当中,在编辑器底部会有 `-- INSERT --` 字样。![](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20230329075409.png)
你能够用方向键在文件中挪动,或者退出插入模式,用命令模式的 `h-j-k-l` 键。`h-l` 示意左右,`j-k` 示意向下向上。在命令模式下,你能够浏览文件,但你不能向它增加内容(要留神你按的是哪个键,因为它们可能是命令)。> 总感觉 hjkl 的设计十分顺当。你当初可能想做的一件事是保留文件。你能够通过按:(冒号),而后按 w。![](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20230329075835.png)
如果是 ** 保留并且退出 **,就输出 `:wq`。如果是 ** 退出然而不保留 **,就 `:q!`,这里的感叹号示意强制退出,因为 vim 判断你有改变文件没有保留不能失常的 `:q`.
命令模式下,`u` 能够进行 `undo` 操作,如果无奈 `undo`,编辑器会提醒 `Already at oldest change`。如果要撤销 `undo` 操作,则能够应用 `ctrl + r` 进行 `redo`。到此最为根本的操作就实现了,进阶内容不再介绍,这里再简要介绍一些好用的性能:- 按 `x` 键能够删除以后突出显示的字符
- 按 `A` 键进入以后所选行的开端
- 按 `0` 键,进入该行的结尾。- 词的第一个字符处能够按 `d`,而后按 `w` 来删除该词。如果你用 `e` 而不是 `w`,那么下一个字之前的空白局部将被保留下来。- 应用 `d` 和 `w` 之间的数字来删除一个以上的字,例如应用 `d3w` 来删除 3 个字。- 按 d 前面的 d 能够删除一整行。按 d 前面的 $ 能够删除从光标处开始的整行,直到最初。最初举荐浏览上面的 FAQ 理解 Vim 应用:[https://vimhelp.org/vim_faq.txt.html](https://vimhelp.org/vim_faq.txt.html)
特地是运行 `vimtuto`r 命令,它应该曾经装置在你的零碎中,将极大地帮忙你开始 vim 的摸索。# emacs
emacs 已经是 Unix 零碎上最棒的编辑器,已经甚至在国外有 `emacs` 和 `vi`(Vim)命令的和平:[https://news.ycombinator.com/item?id=19127258](https://news.ycombinator.com/item?id=19127258)
你能够通过调用 emacs 来关上一个新的 emacs 会话,然而很遗憾,Ubuntu 零碎默认不须要手动装置的:
ubuntu@VM-8-8-ubuntu:~$ emacs
Command ’emacs’ not found, but can be installed with:
sudo snap install emacs # version 28.2, or
sudo apt install e3 # version 1:2.82+dfsg-2
sudo apt install emacs-gtk # version 1:27.1+1-3ubuntu5
sudo apt install emacs-lucid # version 1:27.1+1-3ubuntu5
sudo apt install emacs-nox # version 1:27.1+1-3ubuntu5
sudo apt install jove # version 4.17.3.6-2
See ‘snap info emacs’ for additional versions.
Mac 零碎在应用 emacs 上可能会呈现一些问题,原博主这里巴拉巴拉吐槽一大堆,然而解决办法总结就是用 `homebrew` 就完事了,这个工具的弱小之处置信 Mac 机主都应该很理解。具体装置和应用过程这里就跳过展现了,既然 ubuntu 默认都曾经不自带 emacs,集体认为也没有学习的必要了,如果的确十分感兴趣,浏览英文博客原文即可。# nano
集体在起初齐全用不懂的一个命令,然而简略用用就会发现就是 Linux 版本的文本编辑器。即开即用。你能够应用 `ctrl-X` 退出并且不进行编辑。如果你编辑了文件的缓冲区,编辑器会要求你确认,你能够保留编辑内容,或者放弃编辑抛弃缓冲区。底部的帮忙显示了让你解决文件的键盘命令:![image.png](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20230403215853.png)
pico 也差不多,只管 nano 是 pico 的 GNU 版本,但 pico 在历史上的某个时刻是不开源的,nano 的克隆版是为了满足 **GNU** 操作系统的许可要求。![image.png](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20230403220057.png)
# whoami
`who am i` 能够查找以后登陆用户的用户名。然而须要留神 `whoami` 和 `who am i` 略有不同:
ubuntu@VM-8-8-ubuntu:~$ whoami
ubuntu
ubuntu@VM-8-8-ubuntu:~$ who am i
ubuntu pts/0 2023-04-03 21:50 (120.231.210.178)
# ~~open~~
须要留神 open 是 Mac 零碎的命令,open 命令让你用上面这种语法关上一个文件。
open <filename>
在 macOS 上,它能够关上当前目录的 Finder 应用程序。然而在非 Mac 零碎上,多半会呈现上面的报错:
[zxd@localhost ~]$ open a.txt
Couldn’t get a file descriptor referring to the console
[zxd@localhost ~]$ open a.txt
Couldn’t get a file descriptor referring to the console
[zxd@localhost ~]$ open a.txt
Couldn’t get a file descriptor referring to the console
[zxd@localhost ~]$ open c.txt
Couldn’t get a file descriptor referring to the console
在桌面版的 Linux 虚拟机上,能够应用 xdg-open 代替,具体能够看上面的文章:[https://stackoverflow.com/questions/42463929/couldnt-find-a-file-descriptor-referring-to-the-console-on-ubuntu-bash-on-win](https://stackoverflow.com/questions/42463929/couldnt-find-a-file-descriptor-referring-to-the-console-on-ubuntu-bash-on-win "https://stackoverflow.com/questions/42463929/couldnt-find-a-file-descriptor-referring-to-the-console-on-ubuntu-bash-on-win")
> For linux, use **xdg-open**. **open** is for Mac OS. **open** in linux is an name alias of openvt (open virtual terminal).