Linux 命令 常用总结
目录
(1) xargs
命令简介
xargs可以将stdin中以空格或换行符进行分隔的数据,形成以空格分隔的参数(arguments),传递给其他命令。因为以空格作为分隔符,所以有一些文件名或者其他意义的字符串内含有空格的时候,xargs可能会误判。简单来说,xargs的作用是给其他命令传递参数,是构建单行命令的重要组件之一。
之所以要用到xargs,是因为很多命令不支持使用管道|来传递参数,例如:
find /sbin -perm +700 | ls -l # 这个命令是错误,因为标准输入不能作为ls的参数
find /sbin -perm +700 | xargs ls -l # 这样才是正确的
命令格式
xargs [OPTIONS] [COMMAND]
选项说明
注意,长选项的强制性参数对于短选项也是强制的。
-0, --null
#如果输入的stdin含有特殊字符,例如反引号 `、反斜杠 \、空格等字符时,xargs将它还原成一般字符。为默认选项
-a, --arg-file=FILE
#从指定的文件FILE中读取输入内容而不是从标准输入
-d, --delimiter=DEL
#指定xargs处理输入内容时的分隔符。xargs处理输入内容默认是按空格和换行符作为分隔符,输出arguments时按空格分隔
-E EOF_STR
#EOF_STR是end of file string,表示输入的结束
-e, --eof[=EOF_STR]
#作用等同于 -E 选项,与 -E 选项不同时,该选项不符合POSIX标准且EOF_STR不是强制的。如果没有EOF_STR则表示输入没有结束符
-I REPLACE_STR
#将xargs输出的每一项参数单独赋值给后面的命令,参数需要用指定的替代字符串REPLACE_STR代替。REPLACE_STR可以使用{} $ @ 等符号,其主要作用是当xargs command后有多个参数时,调整参数位置。
例如备份以 txt 为后缀的文件:find . -name "*.txt" | xargs -I {} cp {} /tmp/{}.bak
-i, --replace[=REPLACE_STR]
#作用同 -I 选项,参数 REPLACE_STR 是可选的,缺省为 {}。建议使用 -I 选项,因为其符合 POSIX
-L MAX_LINES
#限定最大输入行数。隐含了 -x 选项
-l, --max-lines[=MAX_LINES]
#作用同 -L 选项,参数 MAX_LINES 是可选的,缺省为 1。建议使用 -L 选项,因为其符合 POSIX 标准
-n, --max-args=MAX_ARGS
#表示命令在执行的时候一次使用参数的最大个数
-o, --open-tty
#在执行命令之前,在子进程中重新打开stdin作为/dev/TTY。如果您希望xargs运行交互式应用程序,这是非常有用的
-P, --max-procs=MAX_PROCS
#每次运行最大进程;缺省值为 1。如果MAX_PROCS为 0,xargs将一次运行尽可能多的进程。一般和-n或-L选项一起使用
-p, --interactive
#当每次执行一个argument的时候询问一次用户
--process-slot-var=NAME
#将指定的环境变量设置为每个正在运行的子进程中的唯一值。一旦子进程退出,将重用该值。例如,这可以用于初始负荷分配方案
-r, --no-run-if-empty
#当 xargs 的输入为空的时候则停止xargs,不用再去执行后面的命令了。为默认选项
-s, --max-chars=MAX_CHARS
#命令行的最大字符数,指的是xargs后面那个命令的最大命令行字符数,包括命令、空格和换行符。每个参数单独传入xargs后面的命令
--show-limits
#显示操作系统对命令行长度的限制
-t, --verbose
#先打印命令到标准错误输出,然后再执行
-x, --exit
#配合 -s 使用,当命令行字符数大于 -s 指定的数值时,退出 xargs
--help
#显示帮助信息并退出
--version
#显示版本信息并退出
常用示例
1、将 Shell 的特殊字符反引号还原为一般字符。
echo '`0123`4 56789' | xargs -t echo
echo `0123`4 56789
`0123`4 56789
如果直接进行如下操作,会报无法找到命令 01234 的错误,因为反引号在 Shell 中会将 01234 作为一个命令来执行,但是 01234 不是一个命令。-t 表示先打印命令,然后再执行。值得收藏!Linux系统常用命令速查手册
echo `01234` 56789
-bash: 01234: command not found
2、设置 xargs 读入参数时的结束标识,以逗号结束。这里要注意结束标志必须要是单独的字段,即以空格或者换行符分隔的字段。
echo 01234 , 56789 | xargs -E ","
01234
3、使用 rm、mv 等命令同时操作多个文件时,有时会报 “argument list too long” 参数列表过长的错误,此时可以使用 xargs 来解决。xargs 将标准输入的字符串分隔后,作为参数传递给后面的命令。例如,给当前目录的所有文件添加后缀名。
ls | xargs -t -i mv {} {}.bak
# 选择符合条件的文件
ls | grep -E "201701|201702|201703" | xargs -I {} mv {} {}.bak
4、设置命令行的最大字符数。参数默认一个一个单独传入命令中执行。
echo "01234 56789" | xargs -t -s 11
echo 01234
01234
echo 56789
56789
5、设置标准输入中每次多少行作为命令的参数,默认是将标准输入中所有行的归并到一行一次性传给命令执行。
echo -e "01234\n56789\n01234" | xargs -t -L 2 echo
echo 01234 56789
01234 56789
echo 01234
01234
6、将文件内容以空格分隔合并为一行输出。
# 列出文件内容
cat test.txt
a b c d e
f g h i j
k l m n o
# 多行输入合并为一行输出
cat test.txt | xargs
a b c d e f g h i j k l m n o
7、与ps、grep、awk和kill结合,强制终止指定进程。
ps -ef | grep spp | awk '{printf "%s ",$2}' | xargs kill -9
1
ps -ef|grep spp用于查找包含 spp 的进程,awk '{printf "%s ",$2,FNR}将目标进程 ID 打印输出,xargs kill -9则将目标进程 ID 作为参数传递给kill -9用于杀死进程。
(2)od
功能简介
od(Octal Dump)命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。od命令系统默认的显示方式是八进制。
常见的文件为文本文件和二进制文件。od命令主要用来查看保存在二进制文件中的值,按照指定格式解释文件中的数据并输出,不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值。
大家也可以了解一下hexdump命令,以十六进制输出,但感觉hexdump命令没有od命令强大。
命令格式
od [OPTION]... [FILE]...
选项说明
-A RADIX
--address-radix=RADIX
#选择以何种基数表示地址偏移
-j BYTES
--skip-bytes=BYTES
#跳过指定数目的字节
-N BYTES
--read-bytes=BYTES
#输出指定字节数
-S [BYTES]
--strings[=BYTES]
#输出长度不小于指定字节数的字符串,BYTES 缺省为 3
-v
--output-duplicates
#输出时不省略重复的数据
-w [BYTES]
--width[=BYTES]
#设置每行显示的字节数,BYTES 缺省为 32 字节
-t TYPE
--format=TYPE
#指定输出格式,格式包括 a、c、d、f、o、u 和 x,各含义如下:
a:具名字符;比如换行符显示为 nl
c:可打印字符或反斜杠表示的转义字符;比如换行符显示为 \n
d[SIZE]:SIZE 字节组成一个有符号十进制整数。SIZE 缺省为 sizeof(int)
f[SIZE]:SIZE 字节组成一个浮点数。SIZE 缺省为 sizeof(double)
o[SIZE]:SIZE 字节组成一个八进制整数。SIZE 缺省为 sizeof(int)
u[SIZE]:SIZE 字节组成一个无符号十进制整数。SIZE 缺省为 sizeof(int)
x[SIZE]:SIZE 字节组成一个十六进制整数。SIZE 缺省为 sizeof(int)
SIZE可以为数字,也可以为大写字母。如果 TYPE 是 [doux] 中的一个,那么SIZE 可以为C = sizeof(char),S = sizeof(short),I = sizeof(int),L = sizeof(long)。如果 TYPE 是 f,那么 SIZE 可以为 F = sizeof(float),D = sizeof(double) ,L = sizeof(long double)
--help
#在线帮助
--version
#显示版本信息
常用示例
1、设置第一列偏移地址以十进制显示。
od -Ad testfile
#偏移地址显示基数有:d for decimal, o for octal, x for hexadecimal or n for none。
2、od 不显示第一列偏移地址。
od -An testfile
3、以十六进制输出,默认以四字节为一组(一列)显示。
od -tx testfile
4、以十六进制输出,每列输出一字节。
od -tx1 testfile
5、显示ASCII字符和ASCII字符名称,注意换行符显示方式的区别。
#显示ASCII字符
[b3335@localhost]$ echo lvlv|od -a
0000000 l v l v nl
0000005
#显示ASCII字符名称
[b3335@localhost]$ echo lvlv|od -tc
0000000 l v l v \n
0000005
6、以十六进制显示的同时显示原字符。
[b3335@localhost]$ echo lvlv|od -tcx1
0000000 l v l v \n
6c 76 6c 76 0a
0000005
7、指定每行显示512字节。
od -w512 -tx1 testfile
8、od 命令输出时去除列与列之间的空格符。
当我们需要将文件内容显示为十六进制,需要输出连续的单个字节,每个字节以十六进制显示。这时我们可以通过od命令将文件以单个字节为一组,十六进制输出在同一行,并去除每个字节之间的空格。目前还不知道怎么通过指定od命令的相关选项去除列与列之间的空格,也许od命令本身并不支持。我的做法是:
-
(a)使用-An不输出偏移地址;
-
(b)使用-v输出时不省略重复的数据;
-
(c)使用-tx1以单个字节为一组按照十六进制输出,-w1每列输出一个字节;
-
(d)最后通过管道传递给 awk 的标准输入,通过awk不换行输出所有行,拼接为一行输出。
具体命令如下:
od -An -w1 -tx1 testfile|awk '{for(i=1;i<=NF;++i){printf "%s",$i}}'
(3):sed
功能简介
sed是一种流编辑器,也是文本处理中非常好的工具,配合正则使用更强大处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区的内容,完成后输出到屏幕,接着处理下一行。文件内容并没有改变,除非使用-i选项。sed主要用来编辑一个或多个文件,简化对文件的反复操作或者用来编写转换程序等。
sed功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk功能复杂,对列处理的功能比较强大。
命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
常用参数
-e #以指定的指令来处理输入的文本文件
-n #取消默认输出(如果和p命令同时使用只会打印发生改变的行)
-h #帮助
-V #显示版本信息
常用动作
a #在当前行下面插入文本
i #在当前行上面插入文本
c #把选定的行改为新的文本
d #删除,删除选择的行
D #删除模板块的第一行
s #替换指定字符
h #拷贝模板块的内容到内存中的缓冲区
H #追加模板块的内容到内存中的缓冲区
g #获得内存缓冲区的内容,并替代当前模板块中的文本
G #获得内存缓冲区的内容,并追加到当前模板块文本的后面
l #列表不能打印字符的清单
n #读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
N #追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码
p #打印匹配的行
P #(大写)打印模板的第一行
q #退出Sed
b #lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾
r #file 从file中读行
t #label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
T #label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
w #file 写并追加模板块到file末尾**
W #file 写并追加模板块的第一行到file末尾**
! #表示后面的命令对所有没有被选定的行发生作用**
= #打印当前行号码**
# #把注释扩展到下一个换行符以前**
Sed替换命令
g #表示行内全面替换(全局替换配合s命令使用)
p #表示打印行
w #表示把行写入一个文件
x #表示互换模板块中的文本和缓冲区中的文本
y #表示把一个字符翻译为另外的字符(但是不用于正则表达式)
1 #子串匹配标记
& #已匹配字符串标记
Sed正则
^ #匹配行开始
$ #匹配行结束
. #匹配一个非换行符的任意字符
* #匹配0个或多个字符
[] #匹配一个指定范围内的字符
[^] #匹配一个不在指定范围内的字符
(..) #匹配子串
& #保存搜索字符用来替换其他字符
< #匹配单词的开始
> #匹配单词的结束
x{m} #重复字符x,m次
x{m,} #重复字符x,至少m次
x{m,n} #重复字符x,至少m次,不多于n次
Sed常用实例
1、替换操作
echo "hello world" |sed 's/ /-/1g'
hello-world
#从第一个空格开始全局替换成-,只不过文本中只有一个空格
2、删除操作
sed '/^$/d' filename #删除空白行
sed '2d' filename #删除第二行
sed '2,$d' filename #删除第二直到未尾所有行
sed '$d' filename #删除最后一行
sed '/^test/'d filename #删除以test开头行
3、匹配替换
echo "hello world" |sed 's/w+/[&]/g'
[hello] [world]
echo "hello world" |sed 's/w+/"&"/g'
"hello" "world"
#w+匹配每一个单词,&表示匹配到的字符串
echo AAA bbb |sed 's/([A-Z]+) ([a-z]+)/[2] [1]/'
[bbb] [AAA]
#子串匹配替换
4、选定范围
sed -n '/= 0/,/max/p' svnserve.conf
#min-encryption = 0
#max-encryption = 256
#所有在=0到max范围内的行都会被打印出来
5、sed多点编辑功能(-e)
[root@centos001 ~]#cat -n test
1 this is a test file
2 welcome
3 to
4 here
5 hello WORLD
6
7 linux centos6.8
8 redhat
sed -e '2,6d' -e 's/linux centos6.8/Linux Centos6.8/' test
this is a test file
Linux Centos6.8
redhat
#如果两条命令功能一样,那么就需要用到下面的参数
sed --expression='s/linux centos6.8/Linux Centos6.8/' --expression='s/to/TO/' test**
this is a test file
welcome
TO
here
hello WORLD
Linux CenTOs6.8
redhat
6、读入与写入
[root@centos001 ~]#cat test1
welcom
to
here
[root@centos001 ~]#sed '/here/r test1' test
this is a test file
welcome
to
here
#welcom
to
here#
hello WORLD
linux centos6.8
redhat
#将test1的文件内容读取显示所有匹配here行的后面
sed -n '/centos6.8/w test2' test
[root@centos001 ~]#cat test2
linux centos6.8
#将test文件匹配到centos6.8的所有行都写入到test2文件中,文件可以不存在.
#如果文件存在,就会被重定向不是追加
7、追加与插入
[root@centos001 ~]#sed '/^l/a2017-08-08' test2
linux centos6.8
2017-08-08
#在匹配以l开头的行的后面追加2017-08-08
[root@centos001 ~]#sed '1a2017-08-08' test2
linux centos6.8
2017-08-08
#在第一行的后面追加2017-08-08
[root@centos001 ~]#sed '/^l/i2017-08-08' test2
2017-08-08
linux centos6.8
#在匹配以l开头的行的前面插入2017-08-08
#######以上操作是不会改变文件内容################
[root@centos001 ~]#sed -i '/^l/i2017-08-08' test2
[root@centos001 ~]#cat test2
2017-08-08
linux centos6.8
8、其它命令实例
[root@centos001 ~]#cat -n test2
1 2017-08-08
2 linux centos6.8
3 08
4
5 test
[root@centos001 ~]#**sed '/08/{ n; s/l/L/; }' test2
2017-08-08
Linux centos6.8
08
test
#如果08匹配到就跳到下一行,将小写l替换成大写,注意到第三行也是被匹配到
#但是后面的条件不满足,所有没有被替换
[root@centos001 ~]#sed '1,4y/8/9/' test2
2017-09-09
linux centos6.9
09
test
#将1至4行所有的数字8替换成9
[root@centos001 ~]#**sed '1q' test2**
2017-08-08
#打印第一行内容后退出
9、打印奇数或公偶数行
[root@centos001 ~]#sed -n 'p;n' test2
20170808
08
[root@centos001 ~]#sed -n 'n;p' test2
linux centos6.8
test
[root@centos001 ~]#sed -n '1~2p' test2
20170808
08
[root@centos001 ~]#sed -n '2~2p' test2
linux centos6.8
test
10、打印匹配字符串行的下一行
[root@centos001 ~]#sed -n '/linux/{n;p}' test2
08
[root@centos001 ~]#awk '/linux/{getline; print}' test2
08
(4):awk
命令简介
Awk pattern scanning and processing language,对文本和数据进行处理。
awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输(stdin)、一个或多个文件,或其它命令的输出。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
语法格式
awk [options] 'scripts' var=value filename
常用参数
-F 指定分隔符(可以是字符串或正则表达式)
-f 从脚本文件中读取awk命令
-v var=value 赋值变量,将外部变量传递给awk
脚本基本结构
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' filename
一个awk脚本通常由BEGIN语句+模式匹配+END语句三部分组成,这三部分都是可选项.
工作原理:
-
第一步执行BEGIN 语句
-
第二步从文件或标准输入读取一行,然后再执行pattern语句,逐行扫描文件到文件全部被读取
-
第三步执行END语句
实例展示:
echo "hello " | awk 'BEGIN{ print "welcome" } END{ print "2017-08-08" }'
welcome
2017-08-08
echo -e "hello" | awk 'BEGIN{ print "welcome" } {print} END{ print "2017-08-08" }'
welcome
hello
2017-08-08
#不加print参数时默认只打印当前的行
echo|awk '{ a="hello"; b="nihao"; c="mingongge"; print a,b,c; }'
hello nihao mingongge
#使用print以逗号分隔时,打印则是以空格分界
echo|awk '{ a="mgg"; b="mingg"; c="mingongge"; print a" is "b" or "c; }'
mgg is mingg or mingongge
#awk的print语句中双引号其实就是个拼接作用
Awk的变量
内置变量
$0 #当前记录
$1~$n #当前记录的第N个字段
FS #输入字段分隔符(-F相同作用)默认空格
RS #输入记录分割符,默认换行符
NF #字段个数就是列
NR #记录数,就是行号,默认从1开始
OFS #输出字段分隔符,默认空格
ORS #输出记录分割符,默认换行符
外部变量
[mingongge@ ~]#a=100
[mingongge@ ~]#b=100
[mingongge@ ~]#echo |awk '{print v1*v2 }' v1=$a v2=$b
10000
Awk运算与判断
算术运算符
+ - 加减
* / & 乘 除 求余
^ * 求幂
++ -- 增加或减少,作为前缀或后缀
[mingongge@ ~]#awk 'BEGIN{a="b";print a,a++,a--,++a;}'
b 0 1 1
[mingongge@ ~]#awk 'BEGIN{a="0";print a,a++,a--,++a;}'
0 0 1 1
[mingongge@ ~]#awk 'BEGIN{a="0";print a,a++,--a,++a;}'
0 0 0 1
#和其它编程语言一样,所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0
赋值运算符
= += -= *= /= %= ^= **=
正则运算符
~ !~ 匹配正则表达式/不匹配正则表达式
逻辑运算符
|| && 逻辑或 逻辑与
关系运算符
< <= > >= != =
其它运算符
$ 字段引用
空格 字符串链接符
?: 三目运算符
ln 数组中是否存在某键值
Awk正则
^ 行首定位符
$ 行尾定位符
. 匹配任意单个字符
* 匹配0个或多个前导字符(包括回车)
+ 匹配1个或多个前导字符
? 匹配0个或1个前导字符
[] 匹配指定字符组内的任意一个字符/^[ab]
[^] 匹配不在指定字符组内的任意一个字符
() 子表达式
| 或者
\ 转义符
~,!~ 匹配或不匹配的条件语句
x{m} x字符重复m次
x{m,} x字符至少重复m次
X{m,n} x字符至少重复m次但不起过n次(需指定参数-posix或--re-interval)
Awk实例介绍
awk –F : ‘{print $2}’ datafile
#以:分隔打印第二列
awk –F : ‘/^Dan/{print $2}’ datafile
#以:分隔打印以Dan开头行的第二列内容
awk –F : ‘/^[CE]/{print $1}’ datafile
#打印以C或E开头行的第一列
awk –F : ‘{if(length($1) == 4) print $1}’ datafile
#打印以:分隔且长度为4字符的第一列内容
awk –F : ‘/[916]/{print $1}’ datafile
#匹配916的行以:分隔打印第一列
awk -F : '/^Vinh/{print "a"$5}' 2.txt
#显示以Dan开头行并在第五列前加上a
awk –F : ‘{print $2”,”$1}’ datafile
#打印第二列第一列并以,分隔
awk -F : '($5 == 68900) {print $1}' 2.txt
#以:分隔打印第五列是68900的行第一列
awk -F : '{if(length($1) == 11) print $1}' 2.txt
#打印以:分隔且长度为4字符的第一列内容
awk -F : '$1~/Tommy Savage/ {print $5}' 2.txt
awk -F : '($1 == "Tommy Savage") {print $5}' 2.txt
#打印以:分隔且第一列为Tommy Savage的第五列内容
ll |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ",size}'
#统计目录个的文件所有的字节数
awk 'BEGIN{size=0;} {size=size+$5;} END{print "[end]size is ",size/1024/1024,"M"}'
#以M为单位显示目录下的所有字节数
awk 'BEGIN{a=10;a+=10;print a}'
20
#a+10等价于 a=a+10
echo|awk 'BEGIN{a="100testaaa"}a~/test/{print "ok"}'
#正则匹配a 是否有test字符,成立打印ok
awk 'BEGIN{a="b";print a=="b"?"ok":"err"}'
ok
awk 'BEGIN{a="b";print a=="c"?"ok":"err"}'
err
#三目运算符?:
awk '/root/{print $0}' passwd
#匹配所有包含root的行
awk -F: '$5~/root/{print $0}' passwd
# 以分号作为分隔符,匹配第5个字段是root的行
ifconfig eth0|awk 'BEGIN{FS="[[:space:]:]+"} NR==2{print $4}'
#打印IP地址
awk '{print toupper($0)}' test.txt
#toupper是awk内置函数,将所小写字母转换成大写
(5):grep
Github地址:
https://github.com/mingongge/Learn-a-Linux-command-every-day
命令简介
文本查找或搜索工具。用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则grep会从标准输入设备读取数据。
同样可以配合正则表达式来搜索文本,并将匹配的行打印输出,也可用于过滤与搜索特定字符串,使用十分灵活
常用参数
-a #不要忽略二进制数据
-A #除了显示符合范本样式的那一行之外,并显示该行之后的内容
-b #在显示符合范本样式的那一行之外,并显示该行之前的内容
-B #除了显示符合样式的那一行之外,并显示该行之前的内容
-c #计算符合范本样式的列数
-C #除了显示符合范本样式的那一列之外,并显示该列之前后的内容
-d #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作
-e #指定字符串作为查找文件内容的范本样式
-E #将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式
-f #指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式
-F #将范本样式视为固定字符串的列表
-G #将范本样式视为普通的表示法来使用
-h #在显示符合范本样式的那一列之前,不标示该列所属的文件名称
-H #在显示符合范本样式的那一列之前,标示该列的文件名称
-i #忽略字符大小写的差别
-l #列出文件内容符合指定的范本样式的文件名称
-L #列出文件内容不符合指定的范本样式的文件名称
-n #在显示符合范本样式的那一列之前,标示出该列的编号
-q #不显示任何信息
-R/-r #此参数的效果和指定“-d recurse”参数相同
-s #不显示错误信息
-v #反转查找
-V #显示版本信息
-w #只显示全字符合的列
-x #只显示全列符合的列
-y #此参数效果跟“-i”相同
-o #只输出文件中匹配到的部分
正则表达式
^ #匹配以XX开头的行
$ #匹配以XX结尾的行
常用实例
1、在多个文件中查找:
grep "file" file_1 file_2 file_3
2、输出除之外的所有行 -v 选项:
grep -v "file" file_name
3、标记匹配颜色 --color=auto 选项:
grep "file" file_name --color=auto
4、使用正则表达式 -E 选项:
grep -E "[1-9]+"
egrep "[1-9]+"
5、只输出文件中匹配到的部分 -o 选项:
echo this is a test line. | grep -o -E "[a-z]+."
line.
echo this is a test line. | egrep -o "[a-z]+."
line.
6、统计文件或者文本中包含匹配字符串的行数-c 选项:
grep -c "text" file_name
2
7、输出包含匹配字符串的行数 -n 选项:
grep "text" -n file_name
或
cat file_name | grep "text" -n
8、多个文件
grep "text" -n file_1 file_2
9、搜索多个文件并查找匹配文本在哪些文件中:
grep -l "text" file1 file2 file3...
10、grep递归搜索文件
在多级目录中对文本进行递归搜索:
grep "text" . -r -n
11、忽略匹配样式中的字符大小写:
echo "hello world" | grep -i "HELLO"
hello
12、选项 -e 指定多个匹配样式:
echo this is a text line | grep -e "is" -e "line" -o
is
line
13、也可以使用 -f 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。
cat patfile
aaa
bbb
echo aaa bbb ccc ddd eee | grep -f patfile -o
14、在grep搜索结果中包括或者排除指定文件:
只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --include *.{php,html}
15、在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"
16、在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist
更多Linux命令请参考>>>值得收藏!Linux系统常用命令速查手册
grep "San" testfile
#过滤有San的行
grep '^J' testfile
#显示以J开头的行
grep '70$' testfile
#显示以70结尾的行
grep -v "834" testfile
#显示所有不包括834的行
grep ':12/' testfile
#显示:12/的行
grep ':498-' testfile
#显示:498-的行
grep '[A-Z][a-z]{4}:[[:space:]][A-Z]' testfile
#显示这样的行,一个大写字母+四个小写字母+空格+一个大写字母
grep '[a-z]{1,}[[:space:]][Kk]' testfile
#显示包括K k的行
grep -n '[0-9]{6,}$' testfile
#显示6位数字的行,并打印行号
grep -i "lincoln" testfile
#显示有lincoln的行,不区分大小写
(6):shutdown
Github地址:
https://github.com/mingongge/Learn-a-Linux-command-every-day
命令介绍
shutdown 命令可以用执行系统关机或系统重启,shutdown可以关闭系统的所有应用程序,并按用户的指定要求,进行系统关闭或重启的动作执行。此命令需要具备系统管理员权限才能使用。
命令格式
shutdown [选项] [其它信息]
参数说明
-c:#执行shutdown命令后,只需要按+键就可以中断正在执行的命令
-f:#重启时不执行fsck
-F:#重启时执行fsck
-h:#关机
-k:#发送信息给所有用户,但不会关机
-n:#不调用init程序进行关机
-r:#关机之后再重新启动
-t<秒数>:#发送警告信息和删除信息之间的延迟时间
示例详解
1、马上关机
shutdown -H now
//或
halt
2、系统将在今天指定的时间23:59分关机
# shutdown -H 23:59
3、马上重启系统
shutdown -r now
//或
reboot
4、向所有用户发送告警信息,系统会在30分钟自动重启
shutdown -r +30 'The system will reboot 30mins later'
5、仅向所有用户发出警告信息,系统并不会真正关机
shutdown -k now 'This is just a warning message'
6、立即执行关机操作并且断电
shutdown -P now
//或
poweroff
7、仅发出警告,实际上不会执行关机操作,恶搞~~~~
shutdown +10 -k '10分钟后关机'
8、设置系统在那个时间点关机
shutdown -h 12:30
或后台执行
shutdown -h 12:30 &
9、取消shutdown命令的执行
如果执行了下面的命令,突然发现时间上有冲突,可以使用ctrl+c取消
shutdown -h 12:3
Shutdown cancelled.
或者,在另一个命令行窗口,使用下面的命令取消。
shutdown -c
(7):cd
命令简介
cd(Change Directory),用来切换工作目录至指定的目录。
指定的目录可以是绝对路径或相对路径。若指定目录名称省略,则直接切换至当前用户的home directory(也就是刚login时所在的目录)。另外,~ 也表示为 home directory 的意思,. 则是表示目前所在的目录,… 则表示目前目录位置的上一层目录。
命令格式
cd [-L|-P] [DIR]
参数说明
-p
#如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
-L
#如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
-
#当仅使用一个横杠-时,切换到环境变量OLDPWD所表示的目录
--
#两个横杠,切换到用户家目录
常用示例
1、切换至上一级目录。
cd ..
2、切换至根目录。
cd /
3、回到上次使用的目录。
cd –
4、回到用户家目录。
cd ~ 或 cd --
还可以使用绝对路径 cd /home/user_name/
cd /home/mingongge/ #切换到用户为mingongge的家目录
但是root用户除外,它的家目录就是/root
5、返回上两级目录
cd ../..
6、把上个命令的参数作为cd参数使用
cd !$
cd命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd命令上的。所以,学习Linux常用命令,首先就要学好cd命令的使用方法技巧。
(8):ls
命令简介
ls(list),ls命令显示指定目录下的内容,列出指定目录下所含的文件及子目录。此命令与Windows系统中dir命令功能相似。
ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
语法格式
ls(选项)(参数)
选项说明
-a #显示指定目录下的所有文件以及子目录,包含隐藏文件
-A #显示指定目录下的(除“.”和“..”之外)所有文件及子目录
-d #显示指定目录的属性信息
-l #显示指定目录下的文件及子目录详细信息,输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等
-r #倒序显示指定目录下的文件及子目录
-t #以时间顺序显示指定目录下的文件及子目录
-F #在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-k:#以KB(千字节)为单位显示文件大小
-m:#用“,”号区隔每个文件和目录的名称
-n:#以用户识别码和群组识别码替代其名称
-s:#显示文件和目录的大小,以区块为单位
-L:#如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录
-R:#递归处理,将指定目录下的所有文件及子目录一并处理
应用实例
1、以下命令列出/root目录下文件及子目录。
[root@test ~]# ls -l /root/
total 4
-rw-------. 1 root root 1330 Mar 26 09:50 anaconda-ks.cfg
drwxr-xr-x 2 root root 6 Apr 24 01:59 test
drwxr-xr-x 2 root root 6 Apr 24 01:59 tools
2、以下命令以时间顺序倒序显示/root目录下的文件及子目录,并显示其详细信息。
[root@test ~]# ls -lrt /root/
total 4
-rw-------. 1 root root 1330 Mar 26 09:50 anaconda-ks.cfg
drwxr-xr-x 2 root root 6 Apr 24 01:59 test
drwxr-xr-x 2 root root 6 Apr 24 01:59 tools
3、显示文件索引节点号(inode)。一个索引节点代表一个文件;
[root@ ~]# ls -i *
134435243 1.sh 134318146 anaconda-ks.cfg
4、列出当前工作目录下所有档案及目录;目录于名称后加'/',可执行档于名称后加'*'
ls -AF
5、计算当前目录下的文件数和目录数
ls -l * |grep "^-" |wc -l
ls -l * |grep "^d" |wc -l
6、在ls中列出文件的绝对路径
#ls |sed "s:^:`pwd`/:"
/root/scripts/1.c
/root/scripts/2.c
/root/scripts/3.c
/root/scripts/a b.txt
/root/scripts/b.pdf
/root/scripts/cecho.sh
/root/scripts/echo.sh
(9):useradd/userdel
命令简介
useradd/userdel 创建新用户/删除用户,需要管理员权限操作。
在创建用户时,如果不配置密码,用户的默认密码是不可用的,所以,useradd命令一般与passwd命令配合使用,下节我们将介绍这个命令。
语法格式
useradd 选项 用户名
userdel 选项 用户名
用户的分类
-
超级用户:root,拥有对系统的最高管理权限,UID默认为0。
-
虚拟用户:又叫系统用户或伪用户,具有一定特权,与系统或程序服务相关,但没有真正的使用者。一般不会用来登录系统,它主要用于维持某个访问的正常运行,如ftp,apache等。
-
普通用户:是一种受限制的用户,一般新建的用户都是普通用户。默认只能执行/bin、/usr/bin、/usr/local/bin以及自身主目录里的命令。
注意:UID即每个用户的身份标识,虽然可以修改/etc/passwd(命令设置的UID不允许重复),但尽量保持唯一性,类似于每个人的身份证号码。
选项说明
useradd 选项
-c #加上备注文字,备注文字保存在passwd的备注栏中。
-d #指定用户登入时的主目录,替换系统默认值/home/<用户名>
-D #变更预设值。
-e #指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。
-f #指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.
-g #指定用户所属的群组。值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。
-G #指定用户所属的附加群组。
-m #自动建立用户的登入目录。
-M #不要自动建立用户的登入目录。
-n #取消建立以用户名称为名的群组。
-r #建立系统账号。
-s #指定用户登入后所使用的shell。默认值为/bin/bash。
-u #指定用户ID号。该值在系统中必须是唯一的。0~499默认是保留给系统用户账号使用的,所以该值必须大于499。
userdel 选项
-f #强制删除用户账号
-r #删除用户主目录及其中的任何文件
-h #显示命令的帮助信息
应用实例
useradd -s mingongge
#新建系统用户mingongge
useradd mingongge -u 888
#设定ID值时尽量要大于500,以免冲突;一般0到499之间的值留给bin、mail这样的系统账号
useradd -m -d /home/mingongge mingongge
#指定创建用户家目录的路径,/home/mingongge目录会被创建
useradd -s /sbin/nologin mingongge
#创建一个没有家目录且不能登录的用户
useradd -m -G test,sudo mingongge
#创建时把用户加入不同的用户组test,sudo
useradd -u 2020 -m -g root mingongge
#添加用户mingongge其id为2020,并且将其添加到组群root中
使用useradd -D可以查看创建新用户时的默认信息,或直接cat /etc/default/useradd
useradd -D
GROUP=888
HOME=/home
INACTIVE=888
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
修改创建新用户时的默认信息。
useradd -D -f 999
#查看是否修改成功
useradd -D | grep INACTIVE
INACTIVE=999
删除用户,但不删除其家目录及文件
[root@mingongge ~]# userdel mingongge
删除用户,并将其家目录及文件一并删除
[root@mingongge ~]# userdel -r mingongge
强制删除用户
[root@mingongge ~]# userdel -f mingongge
下一节我们将介绍passwd这个命令,它与useradd命令是配合使用的,用来配置/修改用户的密码。
(10):passwd
命令简介
passwd创建或修改用户的密码,passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
普通用户在更改自己的密码之前,必须先输入当前密码进行验证(超级用户无需此步骤)。一款超牛逼的 Linux 终端复用神器(附安装、使用教程)
设置密码时需要符合系统对密码复杂性的要求。一般准则,密码应至少包含6个字符,包括以下每个字符中的一个或多个:值得收藏!Linux系统常用命令速查手册
-
小写字母
-
数字0到9
-
标点符号
语法格式
passwd [选项] [username]
选项说明
-d #删除密码
-f #强迫用户下次登录时必须修改口令
-w #口令要到期提前警告的天数
-k #更新只能发送在过期之后
-l #锁定账号使用
-S #显示密码信息
-u #启用已被停止的账户
-g #修改群组密码
-S #列出密码相关参数,即shadow文件内的大部分信息
-n #后面接天数,shadow的第4字段,多久不可修改密码
-x #后面接天数,shadow的第5字段,多久内必须要改动密码
-w #后面接天数,shadow的第6字段,密码过期前的警告天数
-i #后面接“日期”,shaodow的第7字段,密码失效日期
--help #显示帮助信息
--version #显示版本信息
--stdin #从标准输入中读入新密码(此时可以看见设置的密码)
应用实例
修改用户密码
[root@mingongge ~]# passwd test #设置test用户的密码
Enter new UNIX password: #输入新密码,输入的密码无回显
Retype new UNIX password: #确认密码
passwd: password updated successfully
显示账号密码信息
[root@mingongge ~]# passwd -S mingongge
mingongge P 12/25/2020 0 99999 7 -1
删除用户密码
[root@mingongge ~]# passwd -d mingongge
passwd: password expiry information changed.
锁定一个用户
[root@localhost ~]$ passwd -l mingongge #锁定用户mingongge不能更改密码
Locking password for user mingongge.
passwd: Success #锁定成功
[root@localhost ~]# su mingongge #切换到mingongge用户;
[mingongge@localhost ~]$ passwd #来更改mingongge密码
Changing password for user mingongge.
Changing password for mingongge
(current) UNIX password: #输入mingongge的当前密码
passwd: Authentication token manipulation error #失败,不能更改密码
清除一个用户的密码
[root@localhost ~]$ passwd -d mingongge #清除mingongge用户密码
Removing password for user mingongge.
passwd: Success #清除成功;
[root@localhost ~]# passwd -S mingongge #查询用户密码状态
Empty password. #空密码,也就是没有密码
注意:清除一个用户的密码之后,就代表着这个用户是没有密码了,也就是空密码可以登录。
(11):cp
命令简介
cp命令用来复制文件或目录。
cp命令用来将一个或多个文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
所以,cp命令还具备重命名的功能。
语法格式
cp [选项] [源文件或目录] [目标文件或目录]
cp [option] source destination
cp [option] source directory
注:cp命令默认情况下是不能直接复制目录,需要与-R选项配合使用。
选项说明
-a:#此参数的效果和同时指定"-dpR"参数相同;
-d:#当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:#强行复制文件或目录,不论目标文件或目录是否已存在;
-i:#覆盖既有文件之前先询问用户;
-l:#对源文件建立硬连接,而非复制文件;
-p:#保留源文件或目录的属性;
-R/r:#递归处理,将指定目录下的所有文件与子目录一并处理;
-s:#对源文件建立符号连接,而非复制文件;
-u:#使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:#在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:#覆盖已存在的文件目标前将目标文件备份;
-v:#详细显示命令执行的操作。
应用实例
复制文件举例
cp /usr/app/a.txt /usr/mingongge/b.txt
#b.txt不存在,创建b.txt文件
cp /usr/app/a.txt /usr/mingongge/b.sh
#b.sh不存在,创建b.sh文件,类似改名功能
cp /usr/app/a.txt /usr/mingongge/abc
#abc不存在,创建abc文件
将目录/usr/app中的以s开头的所有.x结尾的文件复制到目录/usr/mingongge中。
$ cp -i /usr/app s*.x /usr/mingongge
cp命令复制文件时,如果在目标目录下有同名文件时,我们需要通过输入Y来进行确认操作。
$cp mmm/* /MMM
#复制目录mmm下所有到/MMM目录下,这时如果/MMM目录下有和mmm同名的文件,需要按Y来确认,且会略过mmm目录下的子目录。
$cp -r mmm/* /MMM
#也需要输入Y来确认操作,但是没有忽略子目录。
$cp -r -a mmm/* /MMM
#也需要输入Y来确认操作,并且把mmm目录以及子目录和文件属性也传递到了/MMM。
$\cp -r -a mmm/* /MMM
#不会提示需要输入Y来确认操作、传递了目录属性、没有略过目录。
cp命令复制说明
如果源是一个文件,目标也是一个文件,则会覆盖这个目标文件
如果源是一个文件,目标文件不存在,则创建新文件
如果源是一个文件,目标是一个目录,则直接复制此文件到目标目录下
如果源是多个文件,目标是一个文件,复制失败
如果源是多个文件,目标是目录,则直接复制所有文件到目标目录下
如果源是多个文件,目标目录不存在,复制失败
如果源是一个目录,目标是一个文件且存在,复制失败
如果源是一个目录,目标是目录不存在,则会创建新目录
如果源是一个目录,目标是目录且存在,则会复制源目录至目标目录中,成为子目录,且保持原名
(12):chown
命令简介
chown命令用来变更文件或目录的拥有者或所属群组,通过chown改变文件的拥有者和群组。用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的文件列表,文件名也支持通配符。
系统管理员经常使用chown命令,去改变一个文件或目录的所属。普通用户是不能将自己所属文件或目录变成其它的拥有者。
语法格式
chown [选项] [用户或组] [文件或目录]
-
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
-
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。
Linux/Unix 文件目录所属分为三级 : 拥有者、群组、其他。
-
root:系统特权用户类,既 UID = 0 的用户
-
owner:所有者
-
group:所属组
-
other:其它人,不属于上面3类的所有其他用户
选项说明
-c或--changes #效果类似“-v”参数,但仅回报更改的部分;
-f或--quite或—-silent #不显示错误信息;
-h或--no-dereference #只对符号连接的文件作修改,而不更改其他任何相关文件;
-R或--recursive #递归处理,将指定目录下的所有文件及子目录一并处理;
-v或--version #显示指令执行过程;
--dereference #效果和“-h”参数相同;
--help #在线帮助
--reference=<参考文件或目录> #把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
--version #显示版本信息。
应用实例
将目录/usr/app及其下面的所有文件、子目录的文件主改成mingongge
chown -R mingongge /usr/app
使用mingongge用户可以有权限访问文件test.txt
chown mingongge test.txt
(13):touch
命令简介
touch 命令用来创建新的空文件。touch命令也可以用来修改文件时间戳。如果该文件不存在,则创建具有该名称的空文件。
与文件关联的时间戳
Access time #上次读取文件的时间,简称atime
Modification time #最后一次修改文件的内容,简称mtime
Change time #上次更改文件的元数据(称为“状态”)。状态信息包括文件的权限及其时间戳。每当文件发生任何事件时,其状态的至少一个元素都会更改,并且其ctime将设置为当前系统时间。简称ctime
atime和mtime是文件状态元数据的一部分。因此,当更改文件的atime(-a)或mtime(-m)时,其ctime会自动设置为当前时间。无法手动设置 ctime。
命令语法
touch [选项] [文件名]
touch [option] [filename]
选项说明
-a:或--time=atime或--time=access或--time=use #只更改读取时间
-c:或--no-create #不建立任何文件
-d:<时间日期> #更改文件的修改时间,使用指定的日期时间,而非现在的时间
-h,--no-dereference #如果file是符号链接并且指定了此选项,则touch将修改符号链接的时间戳,而不是其引用的文件。 如果未指定此选项,则在进行修改之前触摸将取消引用符号链接。此选项意味着-c:如果文件不存在,则不会创建任何内容。
-f:#此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify #只更该变动时间;
-r:<参考文件或目录> #把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> #使用指定的日期时间,而非现在的时间;
--help: #在线帮助;
--version: #显示版本信息。
应用举例
创建新文件
[root@centos7 testdir]# touch testfile
[root@centos7 testdir]# ls -l
total 0
-rw-r--r-- 1 root root 0 Jan 2 07:55 testfile
如果创建文件时,此文件存在,则会修改这个文件的其访问,修改和更改时间(atime,mtime和ctime)设置为当前系统时间。
[root@centos7 testdir]# date
Sat Jan 2 07:57:00 EST 2021
[root@centos7 testdir]# touch testfile
[root@centos7 testdir]# ls -l
total 0
-rw-r--r-- 1 root root 0 Jan 2 07:57 testfile
修改文件的atime与mtime
[root@centos7 testdir]# touch -d "25 Feb" testfile
[root@centos7 testdir]# ls -l
total 0
-rw-r--r-- 1 root root 0 Feb 25 2021 testfile
复制文件访问时间,把另一个文件的访问时间直接赋予到新创建的文件上
[root@centos7 testdir]# touch -r testfile filetest
[root@centos7 testdir]# ls -l
total 0
-rw-r--r-- 1 root root 0 Feb 25 2021 filetest
-rw-r--r-- 1 root root 0 Feb 25 2021 testfile
touch命令和mkdir命令功能相同,都是用来创建文件或目录所用,touch命令的功能稍多一些,也都是Linux上的基础必备命令。
(14):cat
命令简介
cat命令用来连接文件内容并打印输出到标准设备上,所以,它常常被用来查看显示文件的内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。
cat命令三大功能
-
1、显示一个文件的全部内容,cat file_name
-
2、创建一个文件,cat > file_name
-
3、合并文件,将几个文件合并到一个文件,cat file1 file2 > file
语法格式
cat [选项] [文件]
cat [OPTION] FILE
选项说明
-A, --show-all #等价于 -vET
-b, --number-nonblank #对非空输出行编号
-e #等价于 -vE
-E, --show-ends #在每行结束处显示 $
-n, --number #对输出的所有行编号,由1开始对所有输出的行数编号
-s, --squeeze-blank #有连续两行以上的空白行,就代换为一行的空白行
-t #与 -vT 等价
-T, --show-tabs #将跳格字符显示为 ^I
-u #(被忽略)
-v, --show-nonprinting #使用 ^ 和 M- 引用,除了LFD和TAB之外
应用实例
普通内容输出举例
[root@localhost ~]# cat mingongge.txt #输出文件全部内容
1111111111
2222222222
3333333333
[root@localhost ~]# cat -n mingongge.txt #输出全部内容,并显示行号
1 1111111111
2
3
4 2222222222
5
6 3333333333
[root@localhost ~]# cat -E mingongge.txt #以$结束
1111111111$
$
$
2222222222$
$
3333333333$
[root@localhost ~]# cat -s mingongge.txt #超过二个空行,合并成一个
1111111111
2222222222
3333333333
[root@localhost ~]# cat -ns mingongge.txt #合并空行,加行号
1 1111111111
2
3 2222222222
4
5 3333333333
从键盘录入内容到文件,回车是保存,退出Ctrl+z
[root@localhost ~]# cat > mingongge.tx
111111111111111
2233445566778899
0126459fdfdfdkffffkfkfkfkfdkfdkdfkk
^Z
[4]+ Stopped cat > mingongge.tx
合并文件
[root@localhost ~]# cat mingongge.tar.gz_?? > mingongge.tar.gz
#可以用cat命令将多个压缩包合并成一个
追加文件内容
[root@localhost ~]# cat mingongge.txt
aa
aabb
bbcc
[root@localhost ~]# cat mingongge.doc
111111111111
222222222222
[root@localhost ~]# cat mingongge.txt >> mingongge.doc #将mingongge.txt内容添加到mingongge.doc内容后
[root@localhost ~]# cat mingongge.doc
111111111111
222222222222
aa
aabb
bbcc
插入多行内容
[root@localhost ~]# cat >> mingongge.doc <<EOF
> 111111111111
> 222222222222
> aa+aabb-bbcc
> EOF
#将你所要输入的内容插入到文件中,输入EOF即为结束插入,EOF也可以使用其它字符替代。
[root@localhost ~]# cat mingongge.doc
111111111111
222222222222
aa+aabb-bbcc
清空文件内容
[root@localhost ~]# cat mingongge.doc
111111111111
222222222222
aa+aabb-bbcc
[root@localhost ~]# cat /dev/null > mingongge.doc
[root@localhost ~]# cat mingongge.doc
(15):man
命令简介
man 命令用于查看、显示 Linux 中命令的帮助信息,显示的帮助信息,可上下滚动,搜索特定文本的出现以及其他有用的功能。
man 命令是 Linux 系统下的帮助命令,通过 man 命令可以查看 Linux 系统中的命令帮助、配置文件帮助和编程帮助等信息,并且格式化显示出来所有的信息。
命令语法
man [选项] [命令]
选项说明
man命令常用参数
-a #显示所有匹配项
-d #显示man查照手册文件时候,搜索路径信息,不显示手册页内容
-D #同-d,显示手册页内容
-f #同命令whatis ,将在whatis数据库查找以关键字开同的帮助索引信息
-h #显示帮助信息
-k #同命令apropos 将搜索whatis数据库,模糊查找关键字
-S list #指定搜索的领域及顺序 如:-S 1:1p httpd 将搜索man1然后 man1p目录
-t #使用troff 命令格式化输出手册页 默认:groff输出格式页
-w #不带搜索title 打印manpath变量 带title关键字 打印找到手册文件路径,默认搜索一个文件后停止
-W #同-w
man命令其它参数
-c #显示使用 cat 命令的手册信息
-C #指定man 命令搜索配置文件 默认是man.config
-K #搜索一个字符串在所有手册页中,速度很慢
-M #指定搜索手册的路径
-P pro #使用程序pro显示手册页面,默认是less
-B pro #使用pro程序显示HTML手册页,默认是less
-H pro #使用pro程序读取HTML手册,用txt格式显示,默认是cat
-p str #指定通过groff格式化手册之前,先通过其它程序格式化手册
应用举例
显示帮助文件的路径
[root@centos7 ~]# man -w cd
/usr/share/man/man1/builtins.1.gz
[root@centos7 ~]# man -w ls
/usr/share/man/man1/ls.1.gz
[root@centos7 ~]# man -w chmod
/usr/share/man/man1/chmod.1.gz
#显示所有帮助文件的路径
[root@centos7 ~]# man -aw passwd
/usr/share/man/man1/passwd.1.gz
/usr/share/man/man1/sslpasswd.1ssl.gz
显示man执行过程搜索查找方法,以及查询手册通过怎么样格式化语句显示
显示man命令查找手册的路径
[root@centos7 ~]# man -w
/usr/local/share/man:/usr/share/man
显示某个命令的帮助信息所以,man命令对于任何一个学习Linux命令的人来说绝对是一个神器,也是必不可少的工具,大家一定要掌握并且能熟练运用它。
(16):mkdir
命令简介
mkdir 命令用于创建新目录。创建目录时,如果目录名前没有指定路径,那么就直接在当前工作目录下创建新的目录。如指定了路径,那么就会在这个指定的目录下创建一个新目录。
创建目录是需要注意,你所创建的目录名与当前目录下的文件名没有重名,如果有重名,系统会出现如下的提示,无法创建成功。
[root@centos7 test]# ls -l
total 0
-rw-r--r-- 1 root root 0 Jan 2 07:06 test
[root@centos7 test]# mkdir test
mkdir: cannot create directory ‘test’: File exists
命令语法
mkdir [选项] [目录名]
mkdir [option] [directory]
选项说明
-m,--mode=模式 #设定权限<模式>(类似 chmod)
-p,--parents #可以是一个路径名称,递归创建目录,可以创建目录路径不存在的目录,即一次可以建立多个目录;
-v,--verbose #显示创建目录的创建过程信息
--help #显示帮助信息并退出
--version #输出版本信息并退出
应用举例
创建新目录(一个目录)
[root@centos7 ~]# mkdir testdir
[root@centos7 ~]# ls -l
total 21884
-rw-------. 1 root root 1320 Aug 20 10:39 anaconda-ks.cfg
drwxr-xr-x 2 root root 6 Jan 2 07:12 testdir
一次创建多个目录
[root@centos7 ~]# cd testdir
[root@centos7 testdir]# ls
[root@centos7 testdir]# mkdir test1 test2 test3 test4
[root@centos7 testdir]# ls
test1 test2 test3 test4
[root@centos7 testdir]# mkdir -p test6/{1..5}
[root@centos7 testdir]# tree test6
test6
├── 1
├── 2
├── 3
├── 4
└── 5
5 directories, 0 files
递归创建目录,当上一级目录不存在时,需要使用递归参数
[root@centos7 testdir]# mkdir test5/test
mkdir: cannot create directory ‘test5/test’: No such file or directory
[root@centos7 testdir]# mkdir -p test5/test
[root@centos7 testdir]# tree
.
├── test1
├── test2
├── test3
├── test4
└── test5
└── test
6 directories, 0 files
创建目录时,并配置其权限
#创建的新目录,默认权限是755
[root@centos7 test5]# ll
total 0
drwxr-xr-x 2 root root 6 Jan 2 07:16 test
[root@centos7 test5]# mkdir -m 777 test1
[root@centos7 test5]# ll
total 0
drwxr-xr-x 2 root root 6 Jan 2 07:16 test
drwxrwxrwx 2 root root 6 Jan 2 07:38 test1
mkidr命令在日常的使用过程,基本上都是创建目录,没有其它常用的用途。所以,这个命令掌握起来也比较简单,易学、易上手。
(17):chmod
命令简介
chmod 命令用来变更文件或目录的权限。
文件或目录权限有读取、写入、执行这3种,另外还有3种特殊权限。用户可以使用chmod去设置文件与目录的权限,设置方式采用文字或数字皆可。链接文件的权限无法直接变更,如果用户需要对链接文件修改权限,其真实作用是作用在原始文件上。
语法格式
chmod [选项] [权限] [文件或目录]
chmod [OPTION] [MODE] FILE
chmod [OPTION] [MODE] DIRECETORY
选项说明
u #用户user,文件或目录的所有者。
g #用户组group,文件或目录所属组
o #其它用户others
a #所有用户all,系统默认
+ #添加权限
- #取消权限
= #配置文件的权限为指定的权限
r #可读权限
w #可写权限
x #可执行权限
- #没有权限
x #设置可执行权限
s #设置suid和sgid,可以使用“u+s”,“g+s”的方式来设置
t #只有目录或文件的所有者才可以删除目录下的文件
-c #效果类似“-v”参数
-f #操作过程中不显示任何错误信息;
-R #递归处理,将指定目录下的所有文件及子目录一并处理;
-v或——verbose #显示命令运行时的详细执行过程;
--reference=<参考文件或目录> #把指定文件或目录的所属组权限设成参考文件或目录的所属组一样;
<权限范围>+<权限设置> #开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置> #关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置> #指定权限范围的文件或目录的该选项权限设置;
--help #显示帮助信息
--version #显示版本信息
权限说明
-rw-r--r-- 1 mingongge mingongge 651 Oct 12 12:53 test.txt
# ↑╰┬╯╰┬╯╰┬╯
# ┆ ┆ ┆ ╰┈ 0 其他人
# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组
# ┆ ╰┈┈┈┈ u 属组
# ╰┈┈ 第一个字母是文件类型
#d代表的是目录(directroy)
#-代表的是文件(regular file)
#s代表的是套字文件(socket)
#p代表的管道文件(pipe)或命名管道文件(named pipe)
#l代表的是符号链接文件(symbolic link)
#b代表的是该文件是面向块的设备文件(block-oriented device file)
#c代表的是该文件是面向字符的设备文件(charcter-oriented device file)
r=读取属性 =4
w=写入属性 =2
x=执行属性 =1
特殊权限说明
Linux系统除了正常的读写操作权限外,还有Linux特殊权限。包括SET位权限(suid,sgid)和粘滞位权限(sticky)。
chmod u+s filename #设置suid位
chmod u-s filename #去掉suid设置
chmod g+s filename #设置sgid位
chmod g-s filename #去掉sgid设置
chmod +t filename #设置粘滞位权限
chmod -t filename #去掉粘滞位权限
如果一个文件被设置了suid或sgid,在其所有者或所属组权限的可执行位上有明显的标记,如果文件设置了suid且也设置了x(执行)权限,则在其执行权限位上会显示一个字母s(小写)。但是,如果没有设置x权限,则显示为字母S(大写)。如下:
-rwsr-xr-x #设置了suid,且文件所有者也配置了可执行权限
-rwSr--r-- #设置了suid,但文件所有者没有配置可执行权限
-rwxr-sr-x #设置了guid,且所属组也配置了可执行权限
-rw-r-Sr-- #设置了guid,但所属组没有配置可执行权限
一个文件或目录如果被设置了粘滞位权限,会在其他人权限的可执行位上有标记。如果文件设置了sticky还设置了x(执行)位,其他人权限的可执行位显示一个字母t(小写)。但是,如果没有设置x位,则显示一个字母T(大写)。如下:
-rwsr-xr-t #表示设置了粘滞位且其他人用户也配置了可执行权限
-rwSr--r-T #表示设置了粘滞位但其他人用户没有配置可执行权限
应用实例
$ chmod u+x file
#给file的属主增加执行权限
$ chmod 751 mingongge
#给mingongge的属主分配读、写、执行权限
$ chmod u=rwx,g=rx,o=x mingongge
#给mingongge属主分配读写执行权限,属组分配读执行权限,其它人分配执行权限
$ chmod =r mingongge
$ chmod 444 mingongge
#为mingongge的所有者、所属组、其他人分配读权限
$ chmod -R u+r mingongge
#递归地给mingongge录下所有文件和子目录的属主分配读的权限
$ chmod 4755 mingongge
#设置用户ID,给属主分配读、写和执行权限,给所属组和其他用户分配读、执行的权限。
(18):mv
命令简介
mv 命令用于移动并重命名文件和目录。或者将文件从一个目录移动到另一个目录中,如果将一个文件移动到一个已经存在的目标文件中,这时目标文件的内容会被此文件内容覆盖。
如果源为文件,而目标为目录,mv 将进行文件的位置移动。如果源为目录,则目标只能是目录(不能为文件),mv 将进行目录的重命令名。
mv 命令移动文件时,在目标不同的情况下,会有下面4种不同的结果:
-
如果目标是指定的某一个具体路径,则源文件会被移动到此目录下,且文件名不变。
-
如果目标不是目录,则源文件名(只能有一个)会变为此目标文件名,如果存在同名文件,则会覆盖己存在的同名文件。
-
如果源文件和目标文件在同一个目录下,mv 的作用就是修改文件名。
-
当目标是目录时,源文件或目录可以是多个,这时所有的源文件都会被移至目标目录下。且所有的文件都将保留以前的文件名。
语法格式
mv [选项] 源文件或目录 目标文件或目录
mv [options] source destination
选项说明
-b #当文件存在时,覆盖前,为其创建一个备份
-f #如果移到的文件或目录与目标重复,则直接覆盖
-i #交互式操作,覆盖前会提示用户进行确认操作,用户通过输入Y/N来确认是否覆盖
-u #若目标文件已存在,且与需移动的文件同名,只有在源文件比目标文件较新时,才会更新目标文件
-t #指定mv的目标目录,此选项使用于移动多个文件到一个目录的情况,此时目标文件在前,源文件在后。
-S<后缀>:#为备份文件指定后缀,而不使用默认的后缀(删除源文件中的斜杠“/”)
-n #不覆盖任何现有文件
-T #将目标当作普通文件,而不是目录
-v #详细输出命令的执行过程
应用举例
#移动文件到目标目录
[root@centos7 testdir]# ll
total 0
-rw-r--r-- 1 root root 0 Feb 25 2021 filetest
-rw-r--r-- 1 root root 0 Feb 25 2021 testfile
[root@centos7 ~]# mv mingongge.txt testdir/
[root@centos7 ~]# ll testdir/
total 0
-rw-r--r-- 1 root root 0 Feb 25 2021 filetest
-rw-r--r-- 1 root root 0 Jan 2 08:43 mingongge.txt
-rw-r--r-- 1 root root 0 Feb 25 2021 testfile
#移动并重命令文件
[root@centos7 testdir]# mv mingongge.txt test/mingongge
[root@centos7 testdir]# ll test/
total 0
-rw-r--r-- 1 root root 0 Jan 2 08:50 mingongge
如果目标位置有同名文件,我们不希望它被覆盖,可以加上-n选项。
[root@centos7 testdir]# ll *.txt dir/*.txt
-rw-r--r-- 1 root root 0 Jan 2 08:58 dir/test1.txt
-rw-r--r-- 1 root root 0 Jan 2 08:58 dir/test2.txt
-rw-r--r-- 1 root root 0 Jan 2 09:03 test1.txt
-rw-r--r-- 1 root root 0 Jan 2 08:57 test2.txt
-rw-r--r-- 1 root root 0 Jan 2 09:03 test3.txt
[root@centos7 testdir]# mv -nv *.txt dir/
‘test3.txt’ -> ‘dir/test3.txt’
#目标目录中没有test3.txt文件,所以移动成功
[root@centos7 testdir]# ll
total 0
drwxr-xr-x 2 root root 57 Jan 2 09:04 dir
-rw-r--r-- 1 root root 0 Jan 2 09:03 test1.txt
-rw-r--r-- 1 root root 0 Jan 2 08:57 test2.txt
备份功能
#如果test2.txt存在,它将会被重命令为test2.txt,原来的文件会被备份
[root@centos7 dir]# cat test1.txt
1
[root@centos7 dir]# cat test2.txt
2
[root@centos7 dir]# mv -b test1.txt test2.txt
mv: overwrite ‘test2.txt’? y
[root@centos7 dir]# ll
total 12
-rw-r--r-- 1 root root 2 Jan 2 09:12 test2.txt
-rw-r--r-- 1 root root 2 Jan 2 09:12 test2.txt~
-rw-r--r-- 1 root root 2 Jan 2 09:12 test3.txt
[root@centos7 dir]# cat test2.txt
1
[root@centos7 dir]# cat test2.txt~
2
#如果test3.txt存在,它将会被重命令为test3.txt.bak
[root@centos7 dir]# mv -b --suffix=.bak test2.txt test3.txt
mv: overwrite ‘test3.txt’? y
[root@centos7 dir]# ll
total 12
-rw-r--r-- 1 root root 2 Jan 2 09:12 test2.txt~
-rw-r--r-- 1 root root 2 Jan 2 09:12 test3.txt
-rw-r--r-- 1 root root 2 Jan 2 09:12 test3.txt.bak
[root@centos7 dir]# cat test3.txt
1
[root@centos7 dir]# cat test3.txt.bak
3
(19):rm
命令简介
rm 命令用来删除指定的文件或目录,此命令是一个危险的命令,操作前一定要再三确认是否正确,然后再执行操作步骤。
默认情况,它是不能直接删除目录的,需要配合选项来删除。当使用 -r 或 -R 选项来执行 rm 时,它会递归删除任何匹配到的目录,且它们的子目录以及子目录下包含的所有文件。
如需要针对文件扩展名字符匹配来删除多个文件时,rm 命令需要使用 -i 选项来配合完成。使用这个选项时,系统会逐一提示你是否要删除文件,当你输入y并按Enter键,文件就会被删除,反之,则文件不会被删除。
语法格式
rm [选项] 文件或目录
mv [options] FILE DIRECTORY
选项说明
-d:#把要删除的目录的硬连接数量变成0,删除该目录
-f:#强制删除文件或目录
-i:#删除之前提示用户是否删除
-r或-R:#递归处理
--preserve-root:#不对根目录进行递归操作;
-v:#显示指令的详细执行过程。
应用举例
删除文件test.txt和文件test1.txt前进行确认是否删除,删除命令如下
[root@test ~]# rm -i test.txt test1.txt
rm: remove regular file ‘test.txt’? y
rm: remove regular file ‘test1.txt’? y
#输入y确认删除
删除/test目录下所有目录,并删除前不进行确认。删除命令如下。
[root@test ~]# rm -rf /test/
[root@test ~]# ls /test
ls: cannot access /test: No such file or directory
(20):find
命令简介
find 命令在文件系统中搜索文件和目录。
find 命令用来在指定目录下查找文件,在参数之前的任何字符串都会当作是目录名。使用 find 命令时,如何不设置任何参数,则 find 命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部显示出来。
find 还是一个功能非常强大的用于处理 Linux 系统上文件的工具,它可以单独查找文件,也可以与其他程序(命令)结合对需要处理的文件进行操作。
补充说明
Linux文件类型:
f #普通文件
l #符号连接
d #目录
c #字符设备
b #块设备
s #套接字
p #Fifo
UNIX/Linux文件系统中的每个文件都有三种时间戳:
-
访问时间 (-atime/天,-amin/分钟):用户最近一次访问时间。
-
修改时间 (-mtime/天,-mmin/分钟):文件最后一次被修改的时间。
-
变化时间 (-ctime/天,-cmin/分钟):文件元数据(例如权限等)
语法格式
find [目录路径] [选项] [文件名]
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
选项说明
-amin<分钟>:#查找在指定时间内被存取过的文件或目录,单位分钟
-mmin<分钟>:#查找在指定时间内被更改过的文件或目录,单位分钟
-mtime<24小时数>:#查找在指定时间内被更改过的文件或目录,单位24小时
-atime<24小时数>:#查找在指定时间被写入过的文件或目录,单位24小时
-cmin<分钟>:#查找在指定时间之内被更改过的文件或目录
-ctime<24小时数>:#查找在指定时间之时被更改的文件或目录,单位以24小时计算
-daystart:#从今天开始计算时间
-depth:#从指定目录下最深层的子目录开始查找
-exec<执行指令>:#如果find命令返回值为True,就执行该指令
-false:#将find命令返回值都设为False
-fstype<文件系统类型>:#只查找此指定文件系统类型下的文件或目录
-gid<群组识别码>:#查找匹配此群组识别码的文件或目录
-group<群组名称>:#查找匹配此群组名称的文件或目录
-help或——help:#帮助信息
-links<连接数目>:#查找匹配指定的硬连接数目的文件或目录
-maxdepth<目录层级>:#设置查找的最大目录层级
-mindepth<目录层级>:#设置查找的最小目录层级
-name<范本样式>:#指定字符串作为寻找文件或目录的范本
-path<范本样式>:#指定字符串作为寻找目录的范本样式
-perm<权限数值>:#查找符合指定的权限数值的文件或目录
-size<文件大小>:#查找符合指定的文件大小的文件
-true: #将find命令返回值都设为True
-type<文件类型>:#只查找匹配指定的文件类型的文件
-uid<用户识别码>:#只查找匹配指定的用户识别码的文件或目录
-user<拥有者名称>:#只查找匹配指定的拥有者名称的文件或目录
-version:#显示版本信息
应用举例
当前目录搜索所有文件,文件内容包含 “192.168.1.111” 的内容
find . -type f -name "*" | xargs grep "192.168.1.111"
根据文件或者正则表达式进行匹配,查找需要的文件或目录
#列出当前目录及子目录下所有文件和文件夹
[root@centos7 ~]# find .
#在/mingongge目录下查找包含mingongge开头的文件名
[root@centos7 ~]# find /mingongge -name "mingongge*.log"
/mingongge/mingongge_errors.log
/mingongge/mingongge.log
/mingongge/mingongge_test.log
#当前目录及子目录下查找所有以.txt和.log结尾的文件
[root@centos7 ~]# find . \( -name "*.txt" -o -name "*.log" \)
或
[root@centos7 ~]# find . -name "*.txt" -o -name "*.log"
#匹配文件路径或者文件
[root@centos7 ~]# find /usr/ -path "*txt*"
#基于正则表达式匹配文件路径
[root@centos7 ~]# find . -regex ".*\(\.txt\|\.log\)$"
#忽略大小写
[root@centos7 ~]# find . -iregex ".*\(\.txt\|\.log\)$"
find 否定参数用法举例
#找出/mingongge下不是以.log结尾的文件
[root@centos7 ~]# find /mingongge ! -name "*.log"
基于目录深度搜索
#向下最大深度限制为5
[root@centos7 ~]# find . -maxdepth 5 -type f
#搜索出深度距离当前目录至少3个子目录的所有文件
[root@centos7 ~]# find . -mindepth 3 -type f
根据文件时间戳进行查找
#查找最近10天内被访问过的所有文件
[root@centos7 ~]# find . -type f -atime -10
#查找超过10天内被访问过的所有文件
[root@centos7 ~]# find . -type f -atime +10
#查找访问时间超过20分钟的所有文件
[root@centos7 ~]# find . -type f -amin +20
#找出比mingongge修改时间更长的所有文件
[root@centos7 ~]# find . -type f -newer mingongge
删除查找到的匹配文件
#删除当前目录下所有.txt文件
[root@centos7 ~]# find . -type f -name "*.txt" -delete
根据文件权限/所有权进行匹配:
#当前目录下找出权限为777的文件
[root@centos7 ~]# find . -type f -perm 777#找出当前目录下所有者是mingongge的所有文件
[root@centos7 ~]# find . -type f -user mingongge
#找出当前目录下用户组为mingongge的所有文件
[root@centos7 ~]# find . -type f -group mingongge #找出当前目录下权限不是644的.log文件
[root@centos7 ~]# find . -type f -name "*.log" ! -perm 644
find 和 -exec 选项结合使用
#找出当前目录下所有者为root的文件,并把所有者更改为mingongge这个用户
[root@centos7 ~]# find .-type f -user root -exec chown mingongge {} \;
#找出当前用户家目录下所有的.log文件并执行删除动作
[root@centos7 ~]# find $HOME/. -name "*.log" -exec rm {} \;
#查找当前目录下所有.log文件并将他们拼接起来然后写入到mingongge.txt这个文件中
[root@centos7 ~]# find . -type f -name "*.log" -exec cat {} \;> /mingongge.txt
#查找出10天前的.log文件,然后全部移动到mingongge目录下
[root@centos7 ~]# find . -type f -mtime +10 -name "*.log" -exec cp {} mingongge \;
#找出当前目录下所有.log文件,然后以“File:文件名”的格式打印输出到屏幕上
[root@centos7 ~]# find . -type f -name "*.log" -exec printf "File: %s\n" {} \;
根据文件大小来查找目标文件
#查找当前目录下文件大小超过500M的文件
[root@centos7 ~]# find . -type f -size +500M
./mingongge/backup_file.tar.gz
./mingongge/upload.tar.gz
#查找当前目录超过500M的文件,并打印出文件的详细属性信息
[root@centos7 ~]# find . -type f -size +800M -print0 | xargs -0 ls -l
-rw-r--r-- 1 root root 4250099200 Apr 15 2019 ./mingongge/backup_file.tar.gz
-rw-r--r-- 1 root root 6832225765 Oct 14 12:57 ./mingongge/upload.tar.gz
#查找当前目录超过500M的文件,并打印出文件的具体大小
[root@centos7 ~]# find . -type f -size +500M -print0 | xargs -0 du -h|sort -nr
6.8G ./mingongge/upload.tar.gz
4G ./mingongge/backup_file.tar.gz
查找系统中前5的大文件
# find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 5
1.1G /download/ubuntu-17.04-desktop-amd64.iso
377M /download/app_backup.tar.gz
100M /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.0
93M /usr/lib/firefox/libxul.so
84M /var/lib/snapd/snaps/core_3604.snap
方法有很多种,都需要与其它命令配合使用,才能查找出来。
find 命令在文件查找及其它的应用方面具有强大的功能,学习系统命令,find 命令是需要重点掌握的,不管是平时的学习,还是日后工作中,这个命令都有着非常重要的作用。