当前位置: 首页 > news >正文

命令行快速进阶(一)常用命令行

常用命令行

我们可能没有办法统计平均一个用户使用多少条命令行语句,如果推测的话,可以认为是25条命令。这25条命令是几乎是每一个使用命令行环境的用户都必须掌握的命令。现在,我们对这些常用命令进行详细的介绍。

  1. cat——打印/输出文件的内容
  2. cd——修改当前目录
  3. chmod——更改文件权限
  4. cp——复制文件
  5. du——打印/输出硬盘使用情况
  6. emacs——编辑文本文件
  7. find——搜索文件
  8. gcc——编译C/C++/Fortran程序
  9. grep——搜索输入中的字符串
  10. less——格式化输出页面显示
  11. ln——在文件之间创立链接
  12. locate——通过索引查找文件
  13. ls——列出当前目录下的文件
  14. make——编译安装程序
  15. man——显示使用手册
  16. mkdir——创建目录
  17. mv——移动文件
  18. ps——列出进程
  19. rm——删除文件和目录
  20. ssh——使用secure shell connection连接到其他机器
  21. tail——打印/输出文件最后几行
  22. top——打印/输出资源使用情况
  23. vim——编辑文本文件
  24. which——打印/输出命令的位置
  25. xargs——从命令的输出执行命令

当然还有其他一些很常见的命令,比如cut, diff, gzip, history, ping, su, tar, uptime,who等。但是只要你能掌握上述25条命令,你就可以非常熟练的创建定制你自己的命令组合。命令行通常都含有很多参数,用来配合不同的使用场合和使用目的。大部分的参数平常很少用到,使用时可以通过"man+命令"来查询命令使用方法。

我们在这里只是讲解这些命令的常见用法和常用参数,对于最后一个命令:xargs,我们将讲解下如何利用该命令来创建命令行组合。


cat命令打印输出文件内容

cat myfile.txt

该命令打印/输出文件myfile.txt的内容。该用法用两个常见使用参数:-n添加输出的行标,-s(squeeze)规定一次可输出的空白行的最大数目。这里举个简单的例子:

如果你的文件的内容是1行文本,10行空白行,1行文本,10行空白行……。当你使用-s参数时,显示结果为1行文本,1行空白行,1行文本,1行空白行……。当你将参数-n和参数-s结合使用,即-sn时,cat命令只对输出的行数添加行标。10行空白行讲被输出成1行空白行,也被计算行数目1次。

下列命令输出你的cpu信息,并将多个空白行省略为1个空白行,且显示行标:

cat -sn /proc/cpuinfo

你还可以使用cat命令一次打印/输出多个文件

cat -s myfile.txt myotherfile.txt

在这条命令中,cat命令合并myfile.txtmyotherfile.txt并输出结果,省略连续的多行空白行。需要注意的是,cat命令并不会区别这两个文件,不输出文件名,在两个文件的交接处也没有明显的标志。这种处理方便你将2个文件当作1个文件来处理,甚至可以通过再命令行中加入多个文件,将20个文件当作1个文件来处理。


cd命令更改当前目录

事实上cd本身并不是一个命令,而是内建于bash的。不过它的使用方法和命令一样,所以我们通常把它当作命令来处理。

cd最基本的使用方法如下:

cd somedir

该命令在当前目录中寻找somedir子目录,然后进入somedir子目录。你也可以在cd后放入目录的绝对路径,如:

cd /home/cindy/stuff/somedir

cd-cd~命令,第1个表示进入上一目录,第2条进入用户的home目录。如下:

  1. cindy@cindy-ThinkPad-X200:/usr/local$cd
  2. cindy@cindy-ThinkPad-X200:~$cd /usr/local
  3. cindy@cindy-ThinkPad-X200:/usr/local$cd bin
  4. cindy@cindy-ThinkPad-X200:/usr/local/bin$cd -
  5. /usr/local
  6. cindy@cindy-ThinkPad-X200:/usr/local$cd ~
  7. cindy@cindy-ThinkPad-X200:~$

分析:第1条命令,我们进入到/usr/local目录,该命令没有输出。第2条命令,我们进入到bin目录,bin目录是/usr/local的子目录。第3条命令cd-使得我们回到上一目录。这一次bash输出了上一目录的目录名,于是我们知道此刻当前目录的位置。最后cd~使得我们回到了用户的home目录。事实上cdcd~命令等价,都能使得我们回到用户的home目录,也就是home/cindy

cd命令的另一个结合CDPATH系统环境变量使用。如下:(当前目录为/home/cindy/empty),empty是一个空白目录。

  1. cindy@cindy-ThinkPad-X200:~/empty$pwd
  2. /home/cindy/empty
  3. cindy@cindy-ThinkPad-X200:~/empty$ls
  4. cindy@cindy-ThinkPad-X200:~/empty$mkdir local
  5. cindy@cindy-ThinkPad-X200:~/empty$ls
  6. local
  7. cindy@cindy-ThinkPad-X200:~/empty$cd local
  8. cindy@cindy-ThinkPad-X200:~/empty/local$cd ..
  9. cindy@cindy-ThinkPad-X200:~/empty$export CDPATH=/usr
  10. cindy@cindy-ThinkPad-X200:~/empty$cd local
  11. /usr/local
  12. cindy@cindy-ThinkPad-X200:/usr/local$cd -
  13. /home/cindy/empty
  14. cindy@cindy-ThinkPad-X200:~/empty$export CDPATH=.:/usr
  15. cindy@cindy-ThinkPad-X200:~/empty$cd local
  16. /home/cindy/empty/local
  17. cindy@cindy-ThinkPad-X200:~/empty/local$

分析:第1-3行说明我们所在当前目录为/home/cindy/empty,并且该目录为一空白目录。ls没有任何输出。第4-6行说明local这个子目录被创建,因此存在目录/home/cindy/empty/local。第7-8行显示我们进入local子目录并返回原目录。在第9行中,CAPATH设置为/usr。这样设置的原因是Ubuntu/usr/local目录,意味着我们的当前目录(/home/cindy/empty)和我们的CDPATH目录(/usr)都包含了一个local子目录。在第10行中,尽管在/home/cindy/empty目录中我们使用cdlocal命令,bash将我们带入到/usr/local,同时输出当前目录/usr/local确保我们知道我们操作的结果。第12-13行我们回到上一目录/home/cindy/empty。第14CDPATH设置为.:/usr。符号:为目录分割符,(.:/usr)的意思是bash首先在当前目录中查找,.,然后再进入到/usr目录。第14行我们使用cdlocal命令,这次进入到目录/home/cindy/empty/local。第16bash输出当前目录确保我们知道我们操作的结果。(每次使用CDPATH后,bash都会将目录回显,确保我们知道我们操作的结果)


chmod命令更改文件权限

chmod命令的-c参数非常重要,它使得chmod打印出chmod把更改结果打印出来。这意味着我们可以使用chmod的输出结果,用来进行其他操作。如下:

  1. cindy@cindy-ThinkPad-X200:~/empty$chmod -c 600 *
  2. modeof "1.txt" changed from 0664 (rw-rw-r--) to 0600(rw-------)
  3. modeof "2.txt" changed from 0664 (rw-rw-r--) to 0600(rw-------)
  4. modeof "3.txt" changed from 0664 (rw-rw-r--) to 0600(rw-------)
  5. cindy@cindy-ThinkPad-X200:~/empty$chmod -c 600 *
  6. cindy@cindy-ThinkPad-X200:~/empty$

在第1行中chmod命令与参数-c结合使用,你可以看到输出结果:3个文件被更改为rw-------(只能被用户读写)。当该命令被再次执行(第5行)时,没有返回任何输出。这是因为-c参数只输出chmod所更改的结果。如果文件现有权限和你想要更改成的权限一致时,-c参数不产生输出。

其他两个有意思的参数是--reference-R--reference参数可以让你使用模版来规定文件的权限而不是手动设置文件的权限。例如,你想让当前目录中的所有文件拥有和/home/cindy/myfile.txt相同的权限,你可以使用以下命令来实现:

chmod --reference /home/cindy/myfile.txt *

你可以使用参数-R来启用递归操作。也就是说如果你在一个目录上使用chmod命令配上-R参数时,你不仅更改了该目录的权限,而且更改了该目录下所有的文件以及子目录的权限。例如,你可以使用命令chmod -R 600 /home来更改/home目录下所有的文件和子目录的权限为对他们的owner/写。


cp命令复制文件

cp命令使用非常简单。但是有两个功能非常强大的参数平时很少用到,这里简单讲解一下。这两个参数分别是--parent-u。第一个是复制文件的全路径到新的目录,第二个是只有当源文件比目的文件新时才执行复制命令。

下面对--parent参数举例说明一下。你现在有一个文件/home/cindy/desktop/documents/work/notes.txt,然后想把它拷贝到/home/cindy/backup文件夹。你可以使用一个普通的cp命令,这样你将会得到/home/cindy/backup/notes.txt,这样你以后再也无法知道这个文件是从哪里复制过来的。但是如果你加上--parent参数,文件将会被复制到/home/cindy/backup/desktop/documents/work/notes.txt

参数-u可以用来同步两个目录。因为你可以使用命令cp -Ru myfiles myotherfiles来重新复制myfiles目录下修改的文件。-R参数是递归操作的参数,该参数使得你可以操作目录的内容。


du命令打印硬盘使用情况

du命令用来打印/输出当前目录下文件以及目录的大小。最基本的用法如下:

du

这个命令将会输出目录的列表以及它们的文件所占用的空间。

你可以加上-a参数,这样du不仅输出目录的大小也会输出文件的大小。

另外一个有用的参数是-h,使得du使用18M18MB)来表示文件的大小,而不是不使用-h参数时的17532bytes)。最后一个有用的参数是-c,输出文件的从总大小。

因此,使用命令du,我们可以输出用户目录/home/cindy下每一个文件的大小,使用用户可读的格式,在最后加上一个总和,使用以下命令:

du -ahc /home/cindy

还有一些更为高级的参数可以让你计数时排除某些文件。第一个参数是--exclude,使得你可以定义一个模式用来排除某些文件。这个模式是一个标准的shell文件匹配模式,而不是一个常规表达式。也就是说,你可以使用"?"去匹配单个字符,使用"*"去匹配0个或多个字符,使用多个--exclude参数来排除多种模式。例如:

du --exclude="*.xml" --exclude="*.xsl"

当然,键入多个--exclude有些浪费时间。你可以使用-X指定一个文件,文件内容是你想要排除的模式的列表。比如这个文件可以是以下内容:

*.xml

*.xsl

也就是说,每一个想要排除的模式需要单独成行。如果这个文件的名字是xml_exclude.txt,我们可以使用如下命令达到与上一命令相同的结果

du -X xml_exclude.txt

你可以让你的exclusion文件尽可能的长。或者你也可以使用多个-X参数。

还有一个注意事项是,当你du的目录中包含的多个文件是同一个inodehard-linked,那么只计算该文件的大小一次。如果你因为某种原因需要计算每一个hardlink的大小,需要使用-l参数(小写的L)。


find命令搜索文件

find命令是Linux领域的一个难点,但是find命令具有强大的功能。find命令使用X-style形式的参数。UNIX标准的参数是-c,-s等形式,GNU标准是--dosomething,--mooby等形式。X-style参数结合了这两中形式,使用单词前只加一个dash的形式。

find命令的另外一个难点是,它包含了非常多的参数。它甚至拥有比你想做的事情更多的功能。最基本的用法如下:

find -name "*.txt"

该命令搜索当前目录及其子目录中所有以.txt结尾的文件。这条命令搜索以.txt结尾的文件,不包括其他变形比如.TXT,.Txt等。如果想要忽略大小写,需要使用参数-iname而不是-name。你也可以在-name参数前制定搜索开始的目录,例如:

find /home -name "*.txt"

另外一个有用的参数是-size,使得你可以指定文件需要匹配的大小。你可以以kilobytes为单位指定你要匹配的文件的大小,也可以使用+-指定文件是大于或小于这个大小。例如:

  1. find /home -name "*.txt" -size 100k
  2. find /home -name "*.txt" -size +100k
  3. find /home -name "*.txt" -size -100k

1条命令是搜索大小为100KB的文件,第2条命令是搜索大小大于100KB的文件,第3条命令是搜索大小小于100KB的文件。

参数-user指定你所搜索的文件的拥有者(owner)。因此,搜索目录/home下,以.txt结尾,大小小于100KB,所有者为用户cindy的所有文件的命令为:

find /home -name "*.txt" -size -100k -user cindy

此外你可以在参数前加-not来取反。比如你可以搜索所有不属于用户cindy的文件,用以下命令:

find /home -name "*.txt" -size 100k -not -user cindy

你可以根据需要使用任意多个-not。甚至可以使用-not-not来取消-not的效果。注意,-not-size -100k将匹配大于或等于100KB大小的文件,而-size+100k只匹配大于100KB的文件不匹配等于100KB的文件。

使用参数-perm指定所要搜索的文件的权限属性。权限指定的方法和chmod命令相同,u指用户userg指群组groupo只其他人othersr读,w写,x执行。但是在你指定权限时,你需要在权限前加上符号+或符号-或空格键。当你不使用+-时,系统将匹配指定的权限的文件。当你使用-,文件必须匹配你指定的所有模式,当你使用+时,文件将满足你指定的模式之一。下面我们举例说明这个概念。也就是说符号-相当于与关系,而符号+相当于或关系

find /home -perm -o=r

该命令返回所有具有o=r权限的文件(对于其他用户可读)。这些文件可能具有u=rw权限或者其他权限。

find /home -perm -o=rw

该命令返回具有o=rw权限的所有文件,但不会返回只具有o=ro=w权限的文件。如果你想搜索满足o=r或者o=w权限的所有文件,可以使用以下命令:

find /home -perm +o=rw

类似的,以下命令表示的是同时对于user,group, others具有读权限的文件:

find/home -perm -ugo=r

而如果想搜索对user,或者group,或者others具有读权限的文件,需要使用以下命令:

find /home -perm +ugo=r

当既不使用符号+也不使用符号-的时候,搜索结果匹配恰好具有指定权限的文件。比如,以下命令返回可以被user,group, others读的文件,但是返回结果中的文件即不可以被user,group, others写也不可以被执行。

find /home -perm ugo=r

你可以具体指明你所有搜索的文件的权限。例如以下命令搜索可以被user,group, others读,并且只能被user写的文件

find /home -perm ugo=r,u=w

如果要搜索不可以被others读的文件,可以使用-not参数。例如:

find /home -not -perm +o=r

此外,还有一个非常强大的命令参数-exec参数。可以指定命令,操作于满足搜索条件的结果。这里有几点需要注意:要执行的命令及命令的参数必须紧随-exec,并以\结束。你可以在任意点使用花括号{}插入匹配的文件名。例如,你要匹配文件系统中的所有大于10KB,属于cindy所有,并对于其他用户不可读的文本文件,然后使用chmod命令启动可读权限,可使用以下命令:

find / -name "*.txt" -size +10k -user cindy -not -perm +o=r-exec chmod 0+r {} \;

当你使用-exec参数时,需要记得在\前的空格,否则会报错:missing augument to '-exec'


grep命令搜索输入中的字符串

grepfind命令不同的是,它不仅可以处理文件,而且可以处理标准输入。最基本的用法如下:

grep "some text" *

该命令搜索当前目录(不包括子目录)下所有包含有字符串sometext的文件并将包含该字符串的行和文件名打印/输出。如果想递归搜索子目录,加上-r参数即可。如下:

grep -r "some text" *

每当字符串在文件中找到匹配,文件名和匹配行都被打印/输出。如果一个文件包含多处匹配,每一个匹配都将被打印/输出。可以使用参数-l(小写L)使得grep只输出至少包含一次匹配字符串的文件名,而不输出匹配结果。如果一个文件包含多个匹配,也只输出一次。参数-c输出所有被搜索的文件名和其中包含字符串匹配的个数,及时匹配个数是0也会输出文件名和0。参数-v具有取反效果,比如想要返回文件myfile.txt中所有不包含hello的行可使用下列命令

grep -v "hello" myfile.txt

此外可使用正则表达式来表示搜索内容。例如搜索文件myfile.txt中,包含cat,satmat的行可使用下列命令:

grep "[csm]at" myfile.txt

参数-i可用来忽略大小写。可以匹配诸如Cat,CAT, MaT的字符串

grep -i "[csm]at" myfile.txt

打印/输出结果也可以被参数-n--color参数控制。-n参数告诉grep命令打印/输出匹配字符串在源文件中的行数。--color参数使得grep命令将匹配结果用颜色标注出来。你可以通过环境变量GREP_COLOR来设置颜色类型,比如exportGREP_COLOR=36是靛色,exportGREP_COLOR=32是荧光绿。

下列命令将所有结果的行标输出,并将匹配处用颜色标注:

grep -in --color "[cms]at" myfile.txt


less命令格式化输出结果

less命令比cat命令的优点是,可以阅读长文档。cat命令所阅读的文档长度大于屏幕容量时,前若干行将不再显示,在cat命令中,可以使用方向键导航阅读内容,q可以从less阅读退回到shell终端。

less命令的输入可以分为两类:在使用less命令前你输入的内容,和运行less命令过程中输入的内容。

less命令的常用参数为-M,-N+-M命令将会输出文件名,行号,从行数,当前进度条。-N启动行号。符号+允许你传递命令给less,也就是说在less运行时调用其他命令。这种情况和less的输入为命令(即运行less命令过程中输入其他命令)的情况相同。

less中的导航键有up,down, left, rightHome,End; Page Up, PageDown。此外,命令/启动文本检索。你键入你想搜索的字符并按Enter键,less将找到第一个匹配处,并将所有的匹配标注出来。再次键入/Enter键,可以跳到下一个匹配处。与/想对应的是?,反方向操作。

/和?检索经常和命令行参数+配合使用。参数+用来传递给less一个命令,当文件被load后执行。例如,以下命令使得less载入一个文件,并且将光标停留在第一次出现hello字符串的位置:

less +/hello myfile.txt

以下命令将光标停留在最后一个匹配位置上:

less +?hello myfile.txt

除了上面所说的导航方式外,还有其他控制方式(数字+字符)。例如50g可以进入第50行,75p可以进入到文件的75%的位置。你还可以使用不可见的标记点,通过按m键,然后再按一个字母。之后,在同一个less下,通过键入‘(单引号)+之前键入的字母,可以导航到同一位置。可以使用的字母有52个,小写的a-z,大些的A-Z

使用less打开多个文件

less -MN 1.txt 2.txt 3.txt

该命令会将3个文件载入到less中,从1.txt开始。当你浏览多个文件时,less通常会告诉你当前你所在的文件,并且按数字标记:1.txt(file 1 of 3)将会出现在屏幕下侧。

你可以通过键入":"然后键入"p"导航到上一个文件,或者通过键入":"然后键入"n"导航到下一个文件。你可以通过键入":"然后键入"e"并提供文件名,打开一个新的文件。这个文件必须是你具有读权限的文件,但可以不是当前目录下的文件。用Tab键标志你键入的文件名以结束。这种方法打开的文件将会插入到你现在的位置,例如当你浏览file1 of 4时打开一个新的文件,这个新的文件将会标记为file2 of 5然后被打开浏览。如果要关闭一个文件并将它从列表中移除,使用:d

当同时浏览多个文件时,默认less将会在当前文件中搜索。但是也可以设置在多个文件中检索。当你键入/或者?,后面加上符号*,你将会看到一个搜索提示符,你现在可以开始检索,less首先在当前文件中检索,如果当前文件中没有匹配,将会在下一文件中检索,直至找到匹配。使用Esc或者n或者N重复检索。n重复前向检索,N重复后向检索。

最后一个重要的事情是,你可以从less进入shell执行命令。最简单的方式是键入!和Enter。可以进入到shell命令行,然后你可以使用任何想使用的命令。键入exitshell返回到less。你也可以在符号!后键入一些命令,并使用符号%来表示当前文件名,例如du-h %将会打印/输出当前文件的大小。你可以使用!!来重复上一条命令。


ln命令创建文件间的链接

Linux中的链接包括两种:硬链接(hardlink)和符号链接(symlinks)。Linux系统中的每一个文件都指向一个inode,即为文件的绝对位置。Linux允许你将多个文件名指向同一个inode,这被成为硬链接,两个文件名指向同一个文件,同一个inode。当你编辑其中一个时,另一个也跟着改变,因为它们是同一个文件。而符号链接,通常称为软链接,是一个真实文件的导向(redirect)。当一个程序都如一个符号链接时,它被带到符号链接所指向的文件。事实上,symlinks是一个具有两个优点的指针,你可以链接到一个不存在的文件(你可以以后再创建这个文件),你可以链接到目录。

两种链接都有自己的用途。创建一个硬链接可以在同一个硬盘上备份文件。例如,当你在一个位置删除这个文件时,另一个位置的文件仍然完好。symlinks的好处在于它可以允许一个文件出现在不同的位置,例如,你可以将你的网站存储在/var/www/live,将一个正在建设中的网页存在/var/www/construction。然后你可以使用Apach指向一个symlink/var/www/html,这个symlink可以根据你的需要链接到live目录或者construction目录。

shred命令可以用随机数据写入一个文件,这是一种安全删除方法。因为这个命令直接更改了文件的内容,而不仅仅是文件名。因此与该文件硬链接到同一inode的文件都会受到影响。

这两种链接都是通过ln命令创建的。ln命令默认创建硬链接,但可以通过参数-s创建软链接。例如

ln -s myfile.txt mylink

上面命令创建了一个符号链接mylink指向了文件myfile.txt

可以使用ls -l查看创建的文件的属性,结果如下:

lrwxrwxrwx1 cindy cindy 10 七月2422:36 mylink -> myfile.txt

第一个字符l表示文件类型为link。软链接通常很小,这里是10bytes

如果创建一个硬链接,

ln myfile.txt myhardlink

-rw-rw-r--2 cindy cindy 0 七月2422:36 myhardlink

注意到数字22表示的是有多少个硬链接指向这个文件。这个硬链接文件的大小通常和源文件一样大,而不仅仅是一个指针。Symlinkslinux中的使用非常广泛,例如,zlib应用程序载入的为symlink/usr/lib/libz.so。这个symlink指向的是实际的zlib库:/usr/lib/libz.so.1.2.1.2。这种处理方式使得多个版本的库被安装,而程序开发者不用去关心他们具体的细节。


locate命令用索引查找文件

Ubuntu系统每天晚上会为你系统中所有的文件创建索引。用索引来查找文件比find命令快得多。查找索引中的文件,使用如下命令:

locate myfile.txt

locate命令速度快,但不如find命令灵活。只有一个参数-i用来忽略大小写。尽管Ubuntu每天晚上会重新建立索引,但是你可以手动建立索引,通过命令sudo updatedb。通常需要几分钟,建立后,你将立马拥有一个新的索引database


ls命令列出当前目录下的文件。

最简单的用法是ls,它将列出当前目录下所有的文件及目录。你可以通过noraml wildcards来定制返回结果,例如:

ls *

ls *.txt

ls my*ls *.txt *.xml

ls命令的常用参数有:

-a          包括所有隐含文件

-h         使用human-readable格式表示大小

-l           启用长列表

-r           逆序

-R          递归列出目录内容(直到所有子目录内容被列出)

-s           列出大小

--sort       排列结果(配合参数extension,size, time, -r使用)

简单解释下目录的读写执行权限。目录的读权限是指,用户可以看见目录内容;目录的写权限是指,用户可以在目录中创建文件和子目录;目录的执行权限是指,用户可以通过cd命令进入该目录。


man命令阅读帮助文档

man命令可以查阅命令使用方法。此外,还有两个具有类似功能的命令是whatis命令和apropos命令。例如:

whatis ls

返回结果为:

ls(1) - list directory contents

whatis命令返回其他命令的描述,通常是该命令的manpage的第一行,同时返回man pages section number

apropos命令接受一个字符串作为参数,并返回所有匹配该字符串的man page。例如命令apropos mixer的返回结果为:

alsamixer(1) - soundcard mixer for ALSA soundcard driver, withncurse...

amixer(1) - command-line mixer for ALSA soundcard driver

SDL::Mixer(3pm) - a SDL perl extension

也就是说apropos帮助你找到命令行,然后whatis告诉你命令行的用处。

另外一个需要提及的事情是,在man查看帮助文档时,原来在less浏览时用到的导航键在这里仍然可以使用。利用/?搜索匹配等。

除此之外,还有许多其他可能用到的搜索文件系统的命令:

whereis command,返回命令的位置(比如/bin/sbin/usr/bin/command)和命令的man页面。

whatis command,返回man页面第一行对命令的介绍。

locate file,是非常快速的查找文件的方法。因为locate是在一个所有文件的索引数据库中进行查找,这个数据库通常名字为mlocate.db,位于/var/lib/mlocate目录下,每天6:25am重新建立。如果你想让该数据库强制更新建立,可使用sudoupdatedb命令。更高级的用户可以通过修改调用该命令的cronjob来修改数据库每天更新的时间。一个在目录/etc/cron.daily下的叫做mlocate的脚本调用这个命令作为数据库日常维护的一部分。

type name,返回如果name被作为命令时的用处。例如typels返回"ls`ls--color=auto'的别名"


mkdir命令创建目录

有一个重要的参数-p需要记住。例如,如果你想要在目录/home/cindy下创建目录/home/cindy/audio/sound,而此时audio目录并不存在。这时你使用以下命令:

mkdir /home/cindy/audio/sound

将会报错:

mkdir:无法创建目录"/home/cindy/audio/sound":没有那个文件或目录

这个错误是因为audio目录并不存在造成的。而使用-p将成功创建目录。这时系统首先创建目录audio,然后创建目录sound

mkdir -p /home/cindy/audio/sound


mv命令移动文件

mv命令简单易用。有两个参数要记住。-f参数重写文件时不再询问。-u只有当源文件比目的文件版本新时才移动源文件。


ps命令列出系统进程

首先要知道的一点是,ps命令通常与BSD-style的参数结合使用。我们讨论过的参数类型有UNIX-styleGNU-styleX-style(分别如-c--dosomething,-dosomething),但是BCD-style参数不同点在于,该参数使用一个单独的字母并且不使用dash

ps命令的基本用法是列出该用户的连接到该终端的所有正在运行的进程。你可以通过加参数x,使得命令列出该用户的所有进程(包括连接到该终端和其他终端,甚至没有连接到任何终端的正在运行的进程)。你可以通过结合使用参数xapsxa列出所有用户的所有正在运行的进程。此外,u参数可以返回与用户相关的输出,得到大量重要的信息比如owner的用户名,每个进程使用的CPU时间和RAM空间,进程开始的时间等。f参数可以为如此大量的信息建立进程关系图。至此,你可以把这几个参数结合起来使用psfaux

你可以使用--sort参数来控制排列顺序。通常用+-符号来链接你想要排列的依据(默认是+,你可能想根据command%cpupiduser等排列结果。+符号为正向排列,-符号为逆向排列。例如,下面这条命令,列出所有进程,并按照cpu使用情况逆向排列

ps aux --sort=-%cpu


rm命令删除文件和目录

rm一个有用的参数是--preserve-root。至此,你应该知道sudo rm -rf/命令会彻底摧毁你安装的Linux。因为-r参数意味着递归操作,-f意味着强制操作(强制操作意思时不会询问确认你是否要执行该操作)。

而通常情况下这个命令是被误操作调用,而不是用户有意为之。

例如,以下命令是删除/home目录中用户cindy的主文件夹。当你已经删除了一个用户并备份了该用户的相关数据后,通常都会执行这样的操作。

rm -rf /home/cindy

但是如果/home之间不小心加入了一个空格,结果将大大不同。如下面的命令

rm -rf / home/cindy

这个命令的意思是,从/开始递归删除所有的文件,然后再删除home/cindy。你可以通过设置参数--preserve-root参数避免这种误操作带来的不良后果。

通常用户不希望每次都要敲入--preserve-root这么长的参数。那么你可以通过在/home/cindy目录下的.bashrc文件中加入下面一句话来实现:

aliasrm='rm --preserve-root'

这个别名将会自动加上--preserve-root参数在你调用rm命令时。Ubuntu已经默认设置了这个参数在rm命令上,不过并不是通过在bashrc中添加别名实现的,而是使该参数成为rm命令的默认设置。


tail命令打印/输出文件最后几行

以下命令告诉tail输出文件/var/log/httpd/access_logApachehit日志)的最后几行

tail /var/log/httpd/access_log

tail运行过程中,更新tail查看的文件,需要使用参数-f

tail -f /var/log/httpd/access_log

你可以使用参数--pid,使得tail查看一个文件知道指定的PIDprocessID)对应的进程结束。

tail打开多个文件时,tail会跟踪两个文件,当输入源文件变化时,tail会打印/输出文件头。

Ctrl+C退出tail


top命令打印资源使用情况

top命令和其他命令的不同之处在于,top命令的参数非常少。然而,在top命令运行的过程中,用户可以调用其他命令从而定制top命令的输出结果。想要更深入的了解top命令,打开两个终端。在第一个终端中输入命令yes让这个命令执行,然后在另一个终端中输入top命令。

top命令的默认排序是按照cpu占有的激烈程度。首先,如果你想要把除了使用yes命令的用户之外的其他用户从top结果中排除。你可以键入u,然后输入使用yes命令的用户名cindy,然后键入Enter。此时,只有用户cindy运行的进程被显示出来。

下一个例子是kill命令yesPID。我们首先需要理解下面这些重要的field

PID        进程的ID

User       进程的owner

PR          优先级

NI           Niceness

Virt         以kilobytes为单位的virtual image大小

Res        kilobytes为单位的resident大小

Shr         kilobytes为单位的共享内存大小

%CPU      CPU使用情况

%Mem    内存使用情况

Time+      CPUtime

Command  运行的命令

我们最感兴趣的几个有PIDUser%CPU%MEMTime+Command。进程的Niceness指的是相对于系统的其他进程CPU分配给该进程的时间。最低值是19,最高值是-20

下面我们学习如何关闭一个进程。在top命令中,找到yes这个命令所对应的PID


这里我们可以看到yes命令的PID4653。在top命令运行的终端键入k,然后输入yes命令的PID也就是4653,然后键入Enter。然后会出现以下提示语句:

Kill PID 4653 with signal [15]:

Signal 15(也就是SIGTERMterminate)是一种礼貌的关闭进程的方法,所有运行着的程序都要响应。给top几秒钟的相应时间,通常情况下,yes命令应该被关闭了。如果没有成功关闭yes命令,你可以选择另外一种强制关闭的方法,键入k,然后输入PID,然后键入Enter。当出现以上提示语句时,键入9,然后键入Enter。这种关闭方法成为SIGKILL,或者是“terminate whether you like it or not”

你可以通过键入f来定制显示的field。一个新的屏幕将弹出并列出所有可能的fields,并且有一个字母用来控制这些field的可见性。



选中的field前有一个星号,例如:

*APID =Process Id

当你输入PID相应的左侧的字母时,会变成

a:PID =Process Id

你再次输入PID相应的左侧的字母时,又回到原来的情况:

*APID =Process Id

当你最后配置完所有的fields,可以使用Enter键返回正常的top界面。

你可以键入F来选择排序时使用的field。与键入f用法相同,不同的是,一次只能选择一个field

你可以键入B,可以启动黑体功能。默认情况下,这个命令会使得header bar和正在运行的command变成黑体,但如果你键入x,你可以使得排序的列变成黑体,你可以使用y来取消使正在运行的command变成黑体。

最后一个命令是r,允许你renice,或者调整进程的nice值。你需要键入进程的PID,键入Enter,然后键入一个nice值。记住19是最低值,-20是最高值,任何小于0的值都是"high"值,使用时尽量少用。


which命令打印/输出命令的位置

which是输出你所键入的命令的具体位置。例如which mkdir返回/bin/mkdir,告诉你当你使用mkdir命令时,运行的是/bin/mkdir


相关文章:

  • 命令行快速进阶(二)Redirection:通过文件来输入/输出
  • 命令行快速进阶(三)将命令结合使用combining commands
  • 命令行快速进阶(四)使用环境变量
  • 命令行快速进阶(五)Ubuntu下常用文本编辑器
  • 命令行快速进阶(六)Ubuntu中对压缩文件的操作和处理
  • 命令行快速进阶(七)通过byobu使用多个命令终端
  • Ubuntu中的用户管理(一)用户账户
  • Ubuntu中的用户管理(二)群组管理
  • Ubuntu中的用户管理(三)用户管理
  • Ubuntu中的用户管理(四)密码管理
  • Ubuntu中的用户管理(五)授予常规用户系统管理员权限
  • Ubuntu中的用户管理(六)硬盘配额
  • Ubuntu中的用户管理(七)相关Ubuntu命令
  • Windows下Ubuntu 12.04 LTS 的安装(双系统使用EasyBCD)
  • Ubuntu 12.04下安装QQ2012Beta3
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Lsb图片隐写
  • passportjs 源码分析
  • Protobuf3语言指南
  • Python学习之路16-使用API
  • spark本地环境的搭建到运行第一个spark程序
  • zookeeper系列(七)实战分布式命名服务
  • 测试开发系类之接口自动化测试
  • 欢迎参加第二届中国游戏开发者大会
  • 码农张的Bug人生 - 见面之礼
  • 栈实现走出迷宫(C++)
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # 数据结构
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (ZT)一个美国文科博士的YardLife
  • (超详细)语音信号处理之特征提取
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四)Linux Shell编程——输入输出重定向
  • (新)网络工程师考点串讲与真题详解
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)http协议
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .net 7 上传文件踩坑
  • .NET CLR基本术语
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET关于 跳过SSL中遇到的问题
  • ::before和::after 常见的用法
  • @KafkaListener注解详解(一)| 常用参数详解
  • @vue/cli脚手架
  • [20170705]diff比较执行结果的内容.txt
  • [AIGC] 如何建立和优化你的工作流?