Mostly Used Linux Commands
cd
cd命令用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚login时所在的目录)。另外,~也表示为home directory的意思,.则是表示目前所在的目录,..则表示目前目录位置的上一层目录。
语法
1 | cd (选项) (参数) |
选项
1 | -p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录 |
实例
1 | cd 进入用户主目录; |
ls
ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
语法
1 | ls(选项)(参数) |
选项
1 | -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出); |
参数
目录:指定要显示列表的目录,也可以是具体的文件。
实例
显示当前目录下非影藏文件与目录
1 | [root@localhost ~]# ls |
显示当前目录下包括影藏文件在内的所有文件列表
1 | [root@localhost ~]# ls -a |
输出长格式列表
1 | [root@localhost ~]# ls -1 |
显示文件的inode信息
索引节点(index inode简称为“inode”)是Linux中一个特殊的概念,具有相同的索引节点号的两个文本本质上是同一个文件(除文件名不同外)。
1 | [root@localhost ~]# ls -i -l anaconda-ks.cfg install.log |
水平输出文件列表
1 | [root@localhost /]# ls -m |
修改最后一次编辑的文件
最近修改的文件显示在最上面。
1 | [root@localhost /]# ls -t |
显示递归文件
1 | [root@localhost ~]# ls -R |
打印文件的UID和GID
1 | [root@localhost /]# ls -n |
列出文件和文件夹的详细信息
1 | [root@localhost /]# ls -l |
列出可读文件和文件夹详细信息
1 | [root@localhost /]# ls -lh |
显示文件夹信息
1 | [root@localhost /]# ls -ld /etc/ |
按时间列出文件和文件夹详细信息
1 | [root@localhost /]# ls -lt |
按修改时间列出文件和文件夹详细信息
1 | [root@localhost /]# ls -ltr |
按照特殊字符对文件进行分类
1 | [root@localhost nginx-1.2.1]# ls -F |
列出文件并标记颜色分类
1 | [root@localhost nginx-1.2.1]# ls --color=auto |
mkdir
mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。
注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。
在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。
语法
1 | mkdir (选项)(参数) |
选项
1 | -Z:设置安全上下文,当使用SELinux时有效; |
参数
目录:指定要创建的目录列表,多个目录之间用空格隔开。
实例
在目录/usr/meng下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问
1 | mkdir -m 700 /usr/meng/test |
在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问
1 | mkdir -p-m 750 bin/os_1 |
rmdir
rmdir命令用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。利用rmdir命令可以从一个目录中删除一个或多个空的子目录。该命令从一个目录中删除一个或多个子目录,其中dirname佬表示目录名。如果dirname中没有指定路径,则删除当前目录下由dirname指定的目录;如dirname中包含路径,则删除指定位置的目录。删除目录时,必须具有对其父目录的写权限。
注意:子目录被删除之前应该是空目录。就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。
虽然还可以用带有-r选项的rm命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。
语法
1 | rmdir(选项)(参数) |
选项
1 | -p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除; |
参数
目录列表:要删除的空目录列表。当删除多个空目录时,目录名之间使用空格隔开。
实例
删除子目录os_1和其父目录bin
1 | cd /usr/meng/test |
pwd
pwd命令以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用/分隔。第一个/表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。
语法
1 | pwd(选项) |
选项
1 | --help:显示帮助信息; |
实例
1 | [root@localhost ~]# pwd |
cp
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
语法
1 | cp(选项)(参数) |
选项
1 | -a:此参数的效果和同时指定"-dpR"参数相同; |
参数
源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
实例
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点.或点点..的形式。例如,下面的命令将指定文件复制到当前目录下:
1 | cp ../mary/homework/assign . |
所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。
将文件file复制到目录/usr/men/tmp下,并改名为file1
1 | cp file /usr/men/tmp/file1 |
将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中
1 | cp -r /usr/men /usr/zh |
交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中
1 | cp -i /usr/men m*.c /usr/zh |
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:
1 | cp aaa/* /bbb |
mv
mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:
如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
语法
1 | mv(选项)(参数) |
选项
1 | --backup=<备份模式>:若需覆盖文件,则覆盖前先行备份; |
参数
源文件:源文件列表。
目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。
实例
将文件ex3改名为new1
1 | mv ex3 new1 |
将目录/usr/men中的所有文件移到当前目录(用.表示)中:
1 | mv /usr/men/* . |
rm
rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
语法
1 | rm (选项)(参数) |
选项
1 | -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录; |
参数
文件:指定被删除的文件列表,如果参数中含有目录,则必须加上-r或者-R选项。
实例
交互式删除当前目录下的文件test和example
1 | rm -i test example |
删除当前目录下除隐含文件外的所有文件和子目录
1 | # rm -r * |
应注意,这样做是非常危险的!
sudo
sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
语法
1 | sudo(选项)(参数) |
选项
1 | -b:在后台执行指令; |
参数
指令:需要运行的指令和对应的参数。
实例
配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。
visudo默认的是在vi里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理,就像:
1 | >>> sudoers file: syntax error, line 22 << |
此时我们有三种选择:键入“e”是重新编辑,键入“x”是不保存退出,键入“Q”是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。
现在,我们一起来看一下神秘的配置文件,学一下如何编写它。让我们从一个简单的例子开始:让用户Foobar可以通过sudo执行所有root可执行的命令。以root身份用visudo打开配置文件,可以看到类似下面几行:
1 | # Runas alias specification |
我们一看就明白个差不多了,root有所有权限,只要仿照现有root的例子就行,我们在下面加一行(最好用tab作为空白):
1 | foobar ALL=(ALL) ALL |
保存退出后,切换到foobar用户,我们用它的身份执行命令:
1 | [foobar@localhost ~]$ ls /root |
好了,我们限制一下foobar的权利,不让他为所欲为。比如我们只想让他像root那样使用ls和ifconfig,把那一行改为:
1 | foobar localhost= /sbin/ifconfig, /bin/ls |
再来执行命令:
1 | [foobar@localhost ~]$ sudo head -5 /etc/shadow |
现在让我们来看一下那三个ALL到底是什么意思。第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明foobar可以在此主机上执行后面的命令。第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个ALL当然就是指命令名了。例如,我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令,这样编写配置文件:
1 | foobar linux=(jimmy,rene) /bin/kill |
但这还有个问题,foobar到底以jimmy还是rene的身份执行?这时我们应该想到了sudo -u了,它正是用在这种时候。 foobar可以使用sudo -u jimmy kill PID或者sudo -u rene kill PID,但这样挺麻烦,其实我们可以不必每次加-u,把rene或jimmy设为默认的目标用户即可。再在上面加一行:
1 | Defaults:foobar runas_default=rene |
Defaults后面如果有冒号,是对后面用户的默认,如果没有,则是对所有用户的默认。就像配置文件中自带的一行:
1 | Defaults env_reset |
另一个问题是,很多时候,我们本来就登录了,每次使用sudo还要输入密码就显得烦琐了。我们可不可以不再输入密码呢?当然可以,我们这样修改配置文件:
1 | foobar localhost=NOPASSWD: /bin/cat, /bin/ls |
再来sudo一下:
1 | [foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log |
当然,你也可以说“某些命令用户foobar不可以运行”,通过使用!操作符,但这不是一个好主意。因为,用!操作符来从ALL中“剔出”一些命令一般是没什么效果的,一个用户完全可以把那个命令拷贝到别的地方,换一个名字后再来运行。
日志与安全
sudo为安全考虑得很周到,不仅可以记录日志,还能在有必要时向系统管理员报告。但是,sudo的日志功能不是自动的,必须由管理员开启。这样来做:
1 | touch /var/log/sudo |
在syslog.conf最后面加一行(必须用tab分割开)并保存:
1 | local2.debug /var/log/sudo |
重启日志守候进程,
1 | ps aux grep syslogd |
把得到的syslogd进程的PID(输出的第二列是PID)填入下面:
1 | kill –HUP PID |
这样,sudo就可以写日志了:
1 | [foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg |
不过,有一个小小的“缺陷”,sudo记录日志并不是很忠实:
1 | [foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null |
重定向没有被记录在案!为什么?因为在命令运行之前,shell把重定向的工作做完了,sudo根本就没看到重定向。这也有个好处,下面的手段不会得逞:
1 | [foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 权限不够 |
sudo 有自己的方式来保护安全。以root的身份执行sudo-V,查看一下sudo的设置。因为考虑到安全问题,一部分环境变量并没有传递给sudo后面的命令,或者被检查后再传递的,比如:PATH,HOME,SHELL等。当然,你也可以通过sudoers来配置这些环境变量。
ping
ping命令用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
语法
1 | ping(选项)(参数) |
选项
1 | -d:使用Socket的SO_DEBUG功能; |
参数
目的主机:指定发送ICMP报文的目的主机。
实例
1 | [root@AY1307311912260196fcZ ~]# ping www.linuxde.net |
tar
tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
语法
1 | tar(选项)(参数) |
选项
1 | -A或--catenate:新增文件到以存在的备份文件; |
参数
文件或目录:指定要打包的文件或目录列表。
实例
将文件全部打包成tar包:
1 | tar -cvf log.tar log2012.log 仅打包,不压缩! |
在选项f之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加z选项,则以.tar.gz或.tgz来代表gzip压缩过的tar包;如果加j选项,则以.tar.bz2来作为tar包名。
查阅上述tar包内有哪些文件:
1 | tar -ztvf log.tar.gz |
由于我们使用 gzip 压缩的log.tar.gz,所以要查阅log.tar.gz包内的文件时,就得要加上z这个选项了。
将tar包解压缩:
1 | tar -zxvf /opt/soft/test/log.tar.gz |
在预设的情况下,我们可以将压缩档在任何地方解开的
只将tar内的部分文件解压出来:
1 | tar -zxvf /opt/soft/test/log30.tar.gz log2013.log |
我可以透过tar -ztvf来查阅 tar 包内的文件名称,如果单只要一个文件,就可以透过这个方式来解压部分文件!
文件备份下来,并且保存其权限:
1 | tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log |
这个-p的属性是很重要的,尤其是当您要保留原本文件的属性时。
在文件夹当中,比某个日期新的文件才备份:
1 | tar -N "2012/11/13" -zcvf log17.tar.gz test |
备份文件夹内容是排除部分文件:
1 | tar --exclude scf/service -zcvf scf.tar.gz scf/* |
其实最简单的使用 tar 就只要记忆底下的方式即可:
1 | 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 |
unzip
unzip命令用于解压缩由zip命令压缩的“.zip”压缩包。
语法
1 | unzip(选项)(参数) |
选项
1 | -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换; |
参数
压缩包:指定要解压的“.zip”压缩包。
实例
将压缩文件text.zip在当前目录下解压缩。
1 | unzip test.zip |
将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。
1 | unzip -n test.zip -d /tmp |
查看压缩文件目录,但不解压。
1 | unzip -v test.zip |
将压缩文件test.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件。
1 | unzip -o test.zip -d tmp/ |
uname
uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。
语法
1 | uname(选项) |
选项
1 | -a或--all:显示全部的信息; |
实例
使用uname命令查看全部信息:
1 | [root@localhost ~]# uname #单独使用uname命令时相当于uname -s |
df
df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
语法
1 | df(选项)(参数) |
选项
1 | -a或--all:包含全部的文件系统; |
参数
文件:指定文件系统上的文件。
实例
查看系统磁盘设备,默认是KB为单位:
1 | [root@LinServ-1 ~]# df |
使用-h选项以KB以上的单位来显示,可读性高:
1 | [root@LinServ-1 ~]# df -h |
查看全部文件系统:
1 | [root@LinServ-1 ~]# df -a |
ps
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
语法
1 | ps(选项) |
选项
1 | -a:显示所有终端机下执行的程序,除了阶段作业领导者之外。 |
由于ps命令能够支持的系统类型相当的多,所以选项多的离谱!
top
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
语法
1 | top(选项) |
选项
1 | -b:以批处理模式操作; |
top交互命令
在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。
1 | h:显示帮助画面,给出一些简短的命令总结说明; |
实例
1 | top - 09:44:56 up 16 days, 21:23, 1 user, load average: 9.59, 4.75, 1.92 |
解释:
top - 09:44:56[当前系统时间],
16 days[系统已经运行了16天],
1 user[个用户当前登录],
load average: 9.59, 4.75, 1.92[系统负载,即任务队列的平均长度]
Tasks: 145 total[总进程数],
2 running[正在运行的进程数],
143 sleeping[睡眠的进程数],
0 stopped[停止的进程数],
0 zombie[冻结进程数],
Cpu(s): 99.8%us[用户空间占用CPU百分比],
0.1%sy[内核空间占用CPU百分比],
0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比],
0.2%id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比],
0.0%hi[],
0.0%st[],
Mem: 4147888k total[物理内存总量],
2493092k used[使用的物理内存总量],
1654796k free[空闲内存总量],
158188k buffers[用作内核缓存的内存量]
Swap: 5144568k total[交换区总量],
56k used[使用的交换区总量],
5144512k free[空闲交换区总量],
2013180k cached[缓冲的交换区总量],
chmod
chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
权限范围的表示法如下:
u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
r 读取权限,数字代号为“4”;
w 写入权限,数字代号为“2”;
x 执行或切换权限,数字代号为“1”;
- 不具任何权限,数字代号为“0”;
s 特殊功能说明:变更文件或目录的权限。
语法
1 | chmod(选项)(参数) |
选项
1 | -c或——changes:效果类似“-v”参数,但仅回报更改的部分; |
参数
权限模式:指定文件的权限模式;
文件:要改变权限的文件。
知识扩展和实例
Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在/etc/passwd文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group內!
linux文件的用户权限的分析图
例:rwx rw- r—
r=读取属性 //值=4
w=写入属性 //值=2
x=执行属性 //值=1
1 | chmod u+x,g+w f01 //为文件f01设置自己可以执行,组员可以写入的权限 |
文件的属主和属组属性设置
1 | chown user:market f01 //把文件f01给uesr,添加到market组 |
chown
chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。
语法
1 | chown(选项)(参数) |
选项
1 | -c或——changes:效果类似“-v”参数,但仅回报更改的部分; |
参数
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。
实例
将目录/usr/meng及其下面的所有文件、子目录的文件主改成 liu:
1 | chown -R liu /usr/meng |
cat
cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于下的type命令。
注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态。
语法
1 | cat(选项)(参数) |
选项
1 | -n或-number:有1开始对所有输出的行数编号; |
参数
文件列表:指定要连接的文件列表。
实例
设ml和m2是当前目录下的两个文件
1 | cat m1 (在屏幕上显示文件ml的内容) |
tail
tail命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。
注意:如果表示字节或行数的N值之前有一个”+”号,则从文件开头的第N项开始显示,而不是显示文件的最后N项。N值后面可以有后缀:b表示512,k表示1024,m表示1 048576(1M)。
语法
1 | tail(选项)(参数) |
选项
1 | --retry:即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用; |
参数
文件列表:指定要显示尾部内容的文件列表。
实例
1 | tail file (显示文件file的最后10行) |
less
less命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。
语法
1 | less(选项)(参数) |
选项
1 | -e:文件内容显示完毕后,自动退出; |
参数
文件:指定要分屏显示内容的文件。
more
more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。
该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:—More—(XX%)可以用下列不同的方法对提示做出回答:
按Space键:显示文本的下一屏内容。
按Enier键:只显示文本的下一行内容。
按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
按H键:显示帮助屏,该屏上有相关的帮助信息。
按B键:显示上一屏内容。
按Q键:退出rnore命令。
语法
1 | more(语法)(参数) |
选项
1 | -<数字>:指定每屏显示的行数; |
参数
文件:指定分页显示内容的文件。
实例
显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
1 | more -dc file |
显示文件file的内容,每10行显示一次,而且在显示之前先清屏。
1 | more -c -10 file |
grep
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
选项
1 | -a 不要忽略二进制数据。 |
在文件中搜索一个单词,命令会返回一个包含“match_pattern”的文本行:
1 | grep match_pattern file_name |
在多个文件中查找:
1 | grep "match_pattern" file_1 file_2 file_3 ... |
输出除之外的所有行 -v 选项:
1 | grep -v "match_pattern" file_name |
标记匹配颜色 —color=auto 选项:
1 | grep "match_pattern" file_name --color=auto |
使用正则表达式 -E 选项:
1 | grep -E "[1-9]+" |
只输出文件中匹配到的部分 -o 选项:
1 | echo this is a test line. | grep -o -E "[a-z]+\." |
统计文件或者文本中包含匹配字符串的行数 -c 选项:
1 | grep -c "text" file_name |
输出包含匹配字符串的行数 -n 选项:
1 | grep "text" -n file_name |
打印样式匹配所位于的字符或字节偏移:
1 | echo gun is not unix | grep -b -o "not" |
搜索多个文件并查找匹配文本在哪些文件中:
1 | grep -l "text" file1 file2 file3... |
grep递归搜索文件
在多级目录中对文本进行递归搜索:
1 | grep "text" . -r -n |
忽略匹配样式中的字符大小写:
1 | echo "hello world" | grep -i "HELLO" |
选项 -e 制动多个匹配样式:
1 | echo this is a text line | grep -e "is" -e "line" -o |
在grep搜索结果中包括或者排除指定文件:
1 | #只在目录中所有的.php和.html文件中递归搜索字符"main()" |
使用0值字节后缀的grep与xargs:
1 | #测试文件: |
grep静默输出:
1 | grep -q "test" filename |
打印出匹配文本之前或者之后的行:
1 | #显示匹配某个结果之后的3行,使用 -A 选项: |