上篇文章,我们分享了几个基本的指令。我们可以通过pwd指令来查看我们当前所在的路径,可以通过cd指令切换我们所在的路径,可以通过touch指令来创建普通文件,可以通过mkdir指令来创建目录文件,可以通过ls指令来查看当前路径下的文件等等。
本篇文章,我们继续分享一些常用的基本指令。本次文章会涉及man,echo,cat,cp,mv,which,alias,more,less,head,tail等指令。
Linux操作系统本身的指令就有很多,一旦再加上参数。一个指令,就就有了十几种的用法。这么多的指令和用法,我们是没法全部记住的,也没必要全部记住。当我们遇到某条不会使用的指令时,我们可以查询man手册。
man指令
man指令的作用也就相当于C语言官网,我们可以通过man手册查询一些指令和函数的用法介绍。那怎么去使用man手册呢?man的用法是:man+空格+要查询函数的函数名或指令。我们先拿ls指令为例:
运行后,我们可以看到关于ls指令及它相关的选项的介绍。
man手册按q退出,按h可以查看帮助。
下面,我们再试着查询一下函数:
从结果看我们并没有查到相应的函数,这是什么原因呢?
这是因为man手册分为八章,不同的章节存放着不同的内容:
第一章:是普通命令,也就是ls,pwd这些指令的存放章节
第二章:是系统调用,如open,write之类的函数
第三章: 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件。
第五章: 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
第六章: 是给游戏留的,由各个游戏自己定义
第七章: 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
第八章: 是系统管理用的命令,这些命令只能由root使用,如ifconfig
目前,我们会经常用到的是前四个章节。向我们刚刚查询的open函数在第二个章节。所以,我们可以直接告诉man到第二章节去查找。
从运行结果看,我们确实在第二章找到了open函数。除此之外,我们还可以通过使用-a选项,一个一个章节的找。
当man手册查到第一个后,就会停止,然后,显示,如果不是我们要查的,就按q退出,man手册会继续往后查,我们按回车键即可查看下一个结果。
今后,对于一些我们不懂得函数或指令就可以通过man手册来查询。比如说echo指令。
echo指令
通过man手册查找,我们可以了解到echo的功能,它可以打印一行文本。
我们来看看使用效果。
从运行结果看,我们不难看出echo的功能,就是将跟在它后面的内容,打印出来。可是当我们加上双引号的时候,它会帮我们去掉双引号,这是为什么呢?这是因为echo将其后面的内容当成了字符串。你不加双引号也没事,我默认它是字符串,你加双引号也行,表明它是字符串。
echo指令后面跟着的字符串,默认打在显示器上。我们可以通过输出重定向符号’>',来让它把它后面的内容打到文件里。
首先,我们先创建一个文件,text.txt。然后,使用echo指令。这次使用echo指令,我们发现内容并没有往显示器上面打,而是打印到文件里了。
我们如何去查看文件中的内容呢?
这里我们需要用到了一个新的指令cat。
cat指令
cat指令的作用是打印文件里面的内容。
我们再次使用echo指令将内容写到文件里。然后,查看text.txt文件里的内容,我们发现上一次我们打印到里面的内容没了。这是什么原因?这是因为输出重定向会将文件里的内容先清空,再进行写入。
如果你想追加写入文件,需要使用追加重定向'>>'。
我们将输出重定向改为输出追加重定向后,发现。我们再次对文件进行写入时,文件原有的内容并没有被覆盖清除,新的内容在原有内容的基础上进行写入。
我们来总结一下这两个符号的异同点。输出重定向,对文件进行写入是先对原有的内容做清楚,在进行新内容的写入。输出追加重定向,对文件进行写入是在原有内容的基础之上进行写入。它们的功能都是改变内容写入文件的方向。当它们向一个文件写入时,如果该文件不存在,则会先创建该文件在进行对文件的写入。
接下来,我们来验证一下:
首先,我们先查看当前路径下,存在的文件。很显然,什么也没有。我们分别对输出重定向和输出追加重定向两个符号进行使用。然后,当我们再次查看文件时,发现多了两个文件,恰好就是我们要写入的两个文件,并且,这两个文件里,什么内容都没有。
这时的它们,就有点类似touch,可以用来创建普通文件。
cat指令除了直接使用外,还可以加上-n选项,给查看的文件内容的每一行加上编号。
上图中,不管是空行还是非空行都加上了编号。
如果我们只想给非空行加上编号,可以使用-b选项。
对于多个空行,我们可以使用-s选项,压缩成一行。
在Windowns系统下,我们会经常用到Ctrl+c和Ctrl+v来进行对文件的复制,然后,粘贴到其他文件中。
那在Linux操作系统之下,我们该如何去将一个文件拷贝到另一个文件呢?这里需要用到cp指令。
cp指令
cp指令,它的作用是将一个文件拷贝到别的路径下。使用的方式是:cp+文件(要拷贝的)+路径(要拷贝到那个文件中)。
首先,我们先创建一个目录文件dir,使用一个指令tree(一个小程序)来查看我们新建的目录。很显然,它是空的。现在,我们使用cp指令,将我们的目录文件dd拷贝到我们新建的文件中。从结果看拷贝失败,原因是文件dd是一个目录文件。
这是为什么呢?当我们加上-r选项,再次使用cp指令。这一次没有报错,我们再次使用tree指令查看dir目录,确实发现,目录文件dd被拷贝了目录dir中。当我们对目录文件进行拷贝时,要使用-r选项,告诉系统这是一个目录文件,它里面包含有多个文件,需要递归式的一个一个的进行拷贝。
cp指令是在我们需要拷贝文件的时候,进行使用。如果我们单纯的想移动某个文件到某个路径下,该如何操作。
如果想移动某个文件到某个路径下,需要用到一个新的指令mv。
mv指令
mv指令,它的作用是移动某个文件到某个路径下。有点类似剪切+粘贴。
首先,我们先分别查看当前路劲dir目录下的文件和它的上级路径下的文件都有那些。
我们可以看到dir目录中有一个dd的目录文件,现在,我们使用mv指令把它移动到上级目录中。
通过ls指令查看当前目录的文件,我们发现dd目录文件不见了。再通过ls指令查看上级目录的文件,我们发现并没有dd目录文件,可是多了一个dir1目录文件。
那它们是不是同一个文件呢?
通过tree指令,我们可以验证得到,dir1和dd是同一个文件。可为什么它们得名字不同呢?这是因为mv指令相当于剪切+粘贴+重命名。当我们将一个文件移动到某个路径下的某个文件里时,如果该文件不存在,系统就会将文件(要移动的文件)移动到相应的路径下,并以那个不存在的文件的名字,来重新命名移动过来的文件。
根据mv指令的这个特性,我们还可以用mv指令来进行给文件进行重命名操作。就像下面这样:
将目录文件dd的名字重新命名为ddir。
说到这里,加上上篇文章,我们已经学了不少指令了。对于这些指令你是如何去看待的呢?
其实,这些指令的本质就是一个个可执行程序,存放在操作系统的特定路径下。
那我们怎么知道,那个指令在那个文件里呢?我们可以使用which指令。
which指令
which指令,它的功能是查找某个指令在那个路径下。
我们以ls指令为例:
通过which查找,我们可以知道ls指令在/usr/bin/ls路径下。
在我们使用which指令查找时,同样,可以知道cd指令所在的路径,可为什么cd指令没有alias这一行。
alias指令
这是因为ls是等号后面那一行字符串的别名。如果你觉得ls指令带上各种选项太长,太麻烦了,为了方便使用,就可以给它取个别名。就像这样:
通过取别名后,22_cmd达到了和指令ls -a -l 一样的效果。如果我们想删除掉这个别名的功能,可以把它设为空。
这样22_cmd就失去原设的作用了。指令ll的功能和指令ls -l的功能一样,是因为前者是后者的别名。通常来说,不建议给指令取别名,因为Linux系统本身的指令就很多,要是我们把取的别名忘了。有一天,我们明明输了一个乱码,结果出来一些莫名其妙的数据。
前面,我们认识了cat指令,它可以用来查看文件内容。但cat的功能有限,它更适用于查看内容较少的文本文件。对于内容较多的文本文件,我们需要用到功能更多more指令。
more指令
more指令,它的功能是用来查看文本文件的内容。
more指令查看文本,按回车可以往下翻找,不可以往上。按q退出。
如果知道直接要查看的内容大概的第几行,可以加上行号,直接查看相应位置。
从使用上看,more的功能,使用起来还是有点笨拙,接下来,我们来认识一个比more指令更强的文本查看指令less
less指令
less指令,它的功能也是查看文本文件的内容。但是它的功能相对于more指令,更强。它可以上下随便移动查看。
在查看的过程中,我们可以通过输入斜杠加上字符串直接查找相应的内容。
然后,按下回车,确认即可。
less指令,也是按q退出查看。它有两个常用的选项,一是带上-N选项,给展示的内容加上编号。
二是加上-i选项,这样在使用less中的搜索功能时,就会忽略大小写。
下面,我们来使用以下-i选项,看看它们的区别。
从图中我们可以看到都是对字母l的查找,可是,标识出来的字母却不一样。带上了-i选项的less指令,很明显,在使用搜索的时候,忽略了大小写的区别。
看到这里,我们已经学会如何取查看文本内容。小文本用cat指令。大文本用less指令。
如果我现在想,把一个大型文本文件的某一个片段截取出来查看,有没有什么方法呢?
方法是有的,不过在讲述这个方法之前,我们得先认识两个新的指令。head和tail.
head指令
head指令,它的功能是查看文本文件最上面的几行内容。
至于是前几行,你可以自行决定。加上-n(行数)。
我们来试着打印前三行。
亦或者最上面的五行。
head指令是打印最前面的几行,tail指令是打印最末尾的几行。
tail指令
tail指令,它的功能是打印文本文件的末尾几行。
至于打印末尾的几行,就有你决定了。用法和head类似,加上-n(要打印的行数)选项。
看到这里,head和tail的用法,我们就了解清楚了。现在,我们来尝试着利用head指令和tail指令,来把text.txt第77行附近的文本内容截取出来查看。
我们先对text.txt文本文件的前100行,通过head截取出来,在通过管道文件传输给tail指令,截取这100行的后30行,这样一来,我们就可以把77行附近的内容截取出来了。
这里管道文件运用,减少了我们创建临时文件的操作。
如果我们不使用管道操作,则需要先创建一个临时文件temp去保存,head指令截取的内容,然后,再通过tail截取temp这个文本文件,才能得到我们要的结果。
利用这个管道的操作,我们还可以结合cat指令计算我们截取内容有多少行。
好了,到这里,我们本次的分享就到此结束了,不知道我有没有说明白,给予你一点点收获。如果你有所收获,别忘了给我点个赞,这是对我最好的回馈,当然你也可以在评论发表一下你的收获和心得,亦或者指出我的不足之处。如果喜欢我的分享,别忘了给我点关注噢。