【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 -altotal 152drwxr-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  .bashrcdrwx------  2 ubuntu ubuntu  4096 May 18  2022  .cachedrwxrwxr-x  2 ubuntu ubuntu  4096 Mar 25 16:51  compressdrwxr-xr-x  4 ubuntu ubuntu  4096 Mar 16 13:05  .configdrwxrwxr-x  4 ubuntu ubuntu  4096 Mar 26 21:32  currentdrwxrwxr-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$ lltotal 28drwxrwxrwx  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.1drwxrwxr-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.txtubuntu@VM-8-8-ubuntu:~/current$ lltotal 28drwxrwxrwx  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.1drwxrwxr-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$ lltotal 28drwxrwxrwx  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.1drwxrwxr-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.saveubuntu@VM-8-8-ubuntu:~/current$ lltotal 28drwxrwxrwx  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.1drwxrwxr-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 .sshdrwx------  2 ubuntu ubuntu  4096 May 18  2022 .cachedrwxrwxr-x  2 ubuntu ubuntu  4096 Mar 25 16:51 compressdrwxrwxr-x  2 ubuntu ubuntu  4096 Mar 27 21:42 difdrwxrwxr-x  2 ubuntu ubuntu  4096 May 18  2022 .pipdrwxrwxr-x  3 ubuntu ubuntu  4096 Mar 26 21:08 .localdrwxrwxr-x  4 ubuntu ubuntu  4096 Jan 28 10:02 .npmdrwxrwxr-x  4 ubuntu ubuntu  4096 Mar 26 21:32 currentdrwxr-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 .configlrwxrwxrwx  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 -rtotal 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 -ndrwx------  2 ubuntu ubuntu  4096 Dec 27 14:21 .sshdrwx------  2 ubuntu ubuntu  4096 May 18  2022 .cachedrwxrwxr-x  2 ubuntu ubuntu  4096 Mar 25 16:51 compressdrwxrwxr-x  2 ubuntu ubuntu  4096 Mar 27 21:42 difdrwxrwxr-x  2 ubuntu ubuntu  4096 May 18  2022 .pipdrwxrwxr-x  3 ubuntu ubuntu  4096 Mar 26 21:08 .localdrwxrwxr-x  4 ubuntu ubuntu  4096 Jan 28 10:02 .npmdrwxrwxr-x  4 ubuntu ubuntu  4096 Mar 26 21:32 currentdrwxr-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 -udrwx------  2 ubuntu ubuntu  4096 Dec 27 14:21 .sshdrwx------  2 ubuntu ubuntu  4096 May 18  2022 .cachedrwxrwxrwx 11 ubuntu ubuntu  4096 Apr  5 20:37 .drwxrwxrwx  4 root   ubuntu  4096 Mar 26 21:32 currentdrwxrwxr-x  2 ubuntu ubuntu  4096 Mar 25 16:51 compressdrwxrwxr-x  2 ubuntu ubuntu  4096 Mar 27 21:42 difffdrwxrwxr-x  2 ubuntu ubuntu  4096 May 18  2022 .pipdrwxrwxr-x  3 ubuntu ubuntu  4096 Mar 26 21:08 .localdrwxrwxr-x  4 ubuntu ubuntu  4096 Jan 28 10:02 .npm

uniq

和名字一样是对于文件排序过滤掉反复数据,能够用在独自命令,也能够用在管道符号当中配合其余命令应用。

uniq dogs.txtls | uniq

如果用在文件内容当中,会返回惟一的后果。

ubuntu@VM-8-8-ubuntu:~/current$ cat ../testdata.txtabcdefghijklmnaaaaubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txtabcdefghijklmnaa

如果用在文件夹当中,则返回不反复的文件。

ubuntu@VM-8-8-ubuntu:~/current$ ls .. | uniqrecipes.txt~archive.tarcompresscurrenterror.txtlist2.txtlist2.txt.gzlist.txt.gznewrecipes.txtotherfile2.txtotherfile.txttestdata2.txttestdata.txt

上面的命令和sort配合,排序之后过滤反复数据:

sort dogs.txt | uniq
ubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txtabcdefghijklmnaaubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txt | sortaaabcdefghijklmn

他的成果和sort命令的-n参数是一样的。

ubuntu@VM-8-8-ubuntu:~/current$ sort -u ../testdata.txtaaabcdefghijklmnubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txt | sortaaabcdefghijklmn

-d 参数能够打印unqi当中的反复数据

ubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txt | sortaaabcdefghijklmnubuntu@VM-8-8-ubuntu:~/current$ uniq -d ../testdata.txt | sortaa

-u参数是打印没有反复的数据。

ubuntu@VM-8-8-ubuntu:~/current$ uniq ../testdata.txt | sortaaabcdefghijklmnubuntu@VM-8-8-ubuntu:~/current$ uniq -u ../testdata.txt | sortabcdefghijklmn

-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 aaaaa12345bbbbbcccccubuntu@VM-8-8-ubuntu:~/dif$ cat compare_a.txt bbbbbcccccaaaaa

间接不带任何参数应用此命令:

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                                aaaaa12345                                12345bbbbb                                bbbbbccccc                                  |

-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.txtubuntu@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
如果只是要单纯打印&dollar;须要反斜杠本义。

请留神,特殊字符须要用反斜杠\本义,例如$

ubuntu@VM-8-8-ubuntu:~$ echo the cost is \$5the 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$ whoamiubuntuubuntu@VM-8-8-ubuntu:~/current$ chown ubuntu ./merge.txtubuntu@VM-8-8-ubuntu:~/current$ chown root ./merge.txtchown: changing ownership of './merge.txt': Operation not permitted

须要留神chown root xx通常状况下是不被容许的,只有root有权限把文件的所有人变为本人,或者咱们用sudo命令转为root身份执行。

ubuntu@VM-8-8-ubuntu:~/current$ sudo chown root ./merge.txtubuntu@VM-8-8-ubuntu:~/current$ lltotal 28drwxrwxrwx  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.1drwxrwxr-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 28drwxrwxrwx  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.1drwxrwxr-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 ./currentubuntu@VM-8-8-ubuntu:~$ ll current/total 28drwxrwxrwx  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.1drwxrwxr-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:~$ umask0002

0022通常代表:拥有者用户有全副权限,用户组能够读写,不能执行,其他人只能看。

这里有一个列表,对应的数字以意义,前面三个数字别离对应领有人、所属组、其余:

0 读、写、执行
1 读和写
2 读和执行
3 只读
4 写和执行
5 只写
6 只执行
7 无权限

0002中的第一个数字比拟非凡,这几个数字通常对应了前面三个数字。对应的咱们只须要umask 002这样的写法批改前面三位数字批改umask权限。

ubuntu@VM-8-8-ubuntu:~$ umask 002ubuntu@VM-8-8-ubuntu:~$ umask0002

从这些数字能够看出,批改umask相似chmod的写法,然而umask是刚好反过来的,0权限最大,7权限最小。

这里可能有疑难后面第一位数字是什么?本着只学有用的内容准则,咱们不须要关怀。

du

作用:计算文件夹大小。

du * 遍历(当前目录)所有文件夹并且计算总大小,大小单位是字节。

ubuntu@VM-8-8-ubuntu:~$ du *0    recipes.txt~12    archive.tar16    compress4    current/test4    current/test224    current12    dif4    error.txt0    list2.txt4    list2.txt.gz4    list.txt.gz0    newrecipes.txt4    otherfile2.txt4    otherfile.txt4    testdata2.txt4    testdata.txt4    testdata.txt.gz4    test.txt

-a:参数遍历到每一个文件。

ubuntu@VM-8-8-ubuntu:~$ du -a *0    recipes.txt~12    archive.tar4    compress/list2.txt.gz4    compress/aaa.txt4    compress/list.txt.gz16    compress4    current/merge.txt.save.14    current/merge.txt4    current/merge.txt.save4    current/test4    current/test224    current4    dif/compare_a.txt4    dif/a.txt12    dif4    error.txt0    list2.txt4    list2.txt.gz4    list.txt.gz0    newrecipes.txt4    otherfile2.txt4    otherfile.txt4    testdata2.txt4    testdata.txt4    testdata.txt.gz4    test.txt

-h:用于一个最大的可读的标记展现大小,比方Linux一个读写是 4kb。

ubuntu@VM-8-8-ubuntu:~$ du -h *0    recipes.txt~12K    archive.tar16K    compress4.0K    current/test4.0K    current/test224K    current12K    dif4.0K    error.txt0    list2.txt4.0K    list2.txt.gz4.0K    list.txt.gz0    newrecipes.txt4.0K    otherfile2.txt4.0K    otherfile.txt4.0K    testdata2.txt4.0K    testdata.txt4.0K    testdata.txt.gz4.0K    test.txt

-ah 参数通常配合一起用于看每一个文件大小。

xander@xander:~$ du -ah *4.0K  demo2.sh4.0K  demo-arges.sh4.0K  error.txt4.0K  func-args.sh4.0K  log.txt4.0K  tesgt

如果想要想要用其余的单位计算文件大小,能够应用上面的命令。

ubuntu@VM-8-8-ubuntu:~$ du -m *0    recipes.txt~1    archive.tar1    compress1    current/test1    current/test21    current1    dif1    error.txt0    list2.txt1    list2.txt.gz1    list.txt.gz0    newrecipes.txt1    otherfile2.txt1    otherfile.txt1    testdata2.txt1    testdata.txt1    testdata.txt.gz1    test.txt

从大到小打印文件。

ubuntu@VM-8-8-ubuntu:~$ du -ah | sort -nr | head880K    ./.npm/_cacache/index-v5240K    ./.npm/_cacache/content-v2/sha512/46220K    ./.config/cheat/cheatsheets/community/.git212K    ./.npm/_cacache/content-v2/sha512/55208K    ./.npm/_cacache/content-v2/sha512/55/2f204K    ./.npm/_cacache/content-v2/sha512/55/2f/5e0e35de2cf59c21f42175d90c6fcee84dbbb18295027bc011f4668bcf344beb7ee179507f8fda53eb338d0de387d7e8ee1d52219b6590a3ce23cb00b8fb196K    ./.npm/_cacache/content-v2/sha512/f1152K    ./.config/cheat/cheatsheets/community/.git/objects148K    ./.npm/_cacache/content-v2/sha512/34148K    ./.npm/_cacache/content-v2/sha512/27

最初是集体的一些其余试验。

Shellxander@xander:~$ du *4  demo2.sh4  demo-arges.sh4  error.txt4  func-args.sh4  log.txtxander@xander:~$ du -a *4  demo2.sh4  demo-arges.sh4  error.txt4  func-args.sh4  log.txtxander@xander:~$ mkdir tesgtxander@xander:~$ du -a *4  demo2.sh4  demo-arges.sh4  error.txt4  func-args.sh4  log.txt4  tesgtxander@xander:~$ du -ah *4.0K  demo2.sh4.0K  demo-arges.sh4.0K  error.txt4.0K  func-args.sh4.0K  log.txt4.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

# psps是应用频率极高的命令,能够应用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-logind938 ?        Ssl    0:00 /usr/libexec/udisks2/udisksd957 tty1     Ss+    0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux980 ?        Ssl    0:00 /usr/sbin/ModemManager981 ?        Ss     0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startup995 ?        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-logind938 ?        Ssl    0:00 /usr/libexec/udisks2/udisksd957 tty1     Ss+    0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux980 ?        Ssl    0:00 /usr/sbin/ModemManager981 ?        Ss     0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups995 ?        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-only787 ?        Ss     0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers793 ?        Ssl    0:00 /usr/libexec/polkitd --no-debug795 ?        Ssl    4:18 /usr/sbin/rsyslogd -n -iNONE807 ?        Ss     0:12 /lib/systemd/systemd-logind872 ?        Ssl    0:00 /usr/sbin/ModemManager951 ?        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&dollar; '

# killLinux过程能够接管信号并对其作出反应。这是咱们与运行中的程序互动的一种形式。杀死程序能够向一个程序发送各种信号。它不仅仅是用来终止一个程序,就像它的名字所暗示的那样,但这是它的次要工作。咱们以这种形式应用它:

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。# killallkillall命令次要是为多个过程发送信号量,也就是能够操作多个过程的敞开。比方你有多个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:~$

# jobsjobs命令能够看到以后用户所有的后盾过程,咱们能够通过`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

# bgbg命令用于复原一个后盾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> &

# xargsxargs通常是用于把前一个命令移交给后一个命令进行操作。为了不便了解该命令应用,这里举一个例子:

[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 %'

下面的命令能够把我下面应用的%符号换成其余货色,它是一个变量。# vimvim是一个十分风行的文件编辑器。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的摸索。# emacsemacs 已经是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).