shell中的简单命令(diff,cut,sort,uniq,test命令&& 和 ||)

1.diff在比较文件过程中结果读取方式

[num1 , num2][a/c/d][num3 , num4]
nmu1,num2表示在第一个文件中的行数
a表示添加 —add
c表示更改 —change
d表示删除 —delete
<表示第一个文件中的内容,>表示第二个文件中的内容,
—表示分隔线
num3 , num4表示在第二个文件中的行数
2,4c2,4表示改变第一个文件中的第二行和第二行和第四行才能匹配第二个文件中的第二行和第四行

实验:
-1-添加

[root@desktop ~]# vim test 
[root@desktop ~]# vim test1 
[root@desktop ~]# cat test
[root@desktop ~]# cat test1
[root@desktop ~]# diff test test1

在这里插入图片描述
输出的结果表示:当给第一个文件的第一行添加123后才能匹配第二个文件的第二行
-2-删除
将比较的文件换个位置后结果也会不同

[root@desktop ~]# diff test1 test

在这里插入图片描述
输出的结果表示:当将第一个文件的第二行删除之后才能匹配第二个文件中的第一行
-3-更改

[root@desktop ~]# vim test
[root@desktop ~]# cat test
[root@desktop ~]# cat test1
[root@desktop ~]# diff test test1

在这里插入图片描述
输出的结果表示:当将第一个文件的第二行更改成第二个文件中的第二行时才能匹配第二个文件中的第二行(反向也可)
-4-布丁的使用
patch:用于文件不同文件打布丁
patch[options]file.old file.path

<1>比较test和test1中的内容(布丁中的内容)

[root@desktop ~]# diff -u test test1

在这里插入图片描述
输出的结果表示:文件内容的不同:
<2>将test1中的内容放到补丁

[root@desktop ~]# diff -u test test1 > test.path

在这里插入图片描述
<3>安装patch的,然后将test中的内容利用patch命令进行修改,继而查看test和test1的内容是相等的

[root@desktop ~]# yum install patch -y
[root@desktop ~]# patch test test.path
[root@desktop ~]# cat test
[root@desktop ~]# cat test1

在这里插入图片描述

2.diff在比较目录过程中结果的读取

Only in directory/:filename
directory表示在哪个目录中
filename表示在哪个目录

<1>单纯的diff目录westos和目录westos1,发现没有报错

[root@desktop ~]# cd /mnt
[root@desktop mnt]# mkdir westos
[root@desktop mnt]# mkdir westos1
[root@desktop mnt]# diff -r westos westos1

在这里插入图片描述
<2>在westos目录下新建一个file,再次diff时,会发现报错only in westos1:file

[root@desktop mnt]# touch westos1/file
[root@desktop mnt]# diff -r westos westos1

在这里插入图片描述

3.diff中常用的参数

-b或–ignore-space-change不检查空格字符的不同
-B或–ignore-blank-lines不检查空白处
-c 显示全部内容,并标出不同之处
-i或–Ignore-case不检查大小写的不同
-p:若比较的文件为c语言的程序码文件时,显示差异所在的函数名称
-q或–brief:仅显示有无差异,不显示详细的信息
—r或–recursive:比较子目录中的文件

实验:
<1>diff -b的用法

[root@desktop mnt]# vim test
[root@desktop mnt]# vim test1
[root@desktop mnt]# diff test test1
[root@desktop mnt]# diff -b test test1

在这里插入图片描述
因为两个文件内中的内容中有空格字符不同,所以使用-b参数时不会报错
<2>diff -B的用法

[root@desktop mnt]# vim test
[root@desktop mnt]# vim test1
[root@desktop mnt]# cat test
[root@desktop mnt]# cat test1
[root@desktop mnt]# diff test test1
[root@desktop mnt]# diff -B test test1

在这里插入图片描述
因为两个文件内中的内容的空白处不同,所以使用-B参数时不会报错
<5>diff-c1/c2/c3/c的用法
前提工作(在两个文件内写入不同的内容):

[root@desktop mnt]# vim test
[root@desktop mnt]# vim test1
[root@desktop mnt]# cat test
[root@desktop mnt]# cat test1

在这里插入图片描述

c1的用法(即显示报错的前一条和报错的后一条)
[root@desktop mnt]# diff -c1 test test1
c2的用法(即显示报错的前两条和报错的后一条)
[root@desktop mnt]# diff -c2 test test1
c3的用法(即显示报错的前三条和报错的后一条)
[root@desktop mnt]# diff -c3 test test1
c的用法(即显示全部内容以及报错的信息)
[root@desktop mnt]# diff -c test test1

在这里插入图片描述
<4>diff -p的用法

[root@desktop mnt]# vim test.c
[root@desktop mnt]# vim test1.c
[root@desktop mnt]# diff -p test.c test1.c

在这里插入图片描述
<5>diff -q的用法

[root@desktop mnt]# yum install gcc -y	##安装gcc编译软件
[root@desktop mnt]# vim test.c
[root@desktop mnt]# vim test1.c
[root@desktop mnt]# gcc test.c -o test	##编译test.c
[root@desktop mnt]# gcc test1.c -o test1
[root@desktop mnt]# ls
[root@desktop mnt]# diff -p test test1
[root@desktop mnt]# diff -p test.c test1.c
[root@desktop mnt]# diff -q test.c test1.c

在这里插入图片描述
在这里插入图片描述

4.cut命令

cut命令多用于字符截取
cut -d 指定分隔符
cut -f 1,7|1-7 指定截取的列
cut -c 1,4|1-4 指定截取的字符位置

实验:
<1>前提条件:

[root@desktop mnt]# mv /etc/passwd /mnt
[root@desktop mnt]# vim passwd	##可删除一部分,说明效果既可

在这里插入图片描述
<2>指定截取passwd文件中的第一列

[root@desktop mnt]# cut -d ":" -f 1 passwd

在这里插入图片描述
<3>指定截取passwd文件中的第一列和第七列

[root@desktop mnt]# cut -d ":" -f 1,7 passwd

在这里插入图片描述
<4>指定截取passwd文件中的第三列至第五列

[root@desktop mnt]# cut -d ":" -f 3-5 passwd

在这里插入图片描述
<5>指定截取passwd文件中的第1个字符和第5个字符

[root@desktop mnt]# cut -c 1,5 passwd

在这里插入图片描述
<6>指定截取passwd文件中的第1个字符至第4个字符

[root@desktop mnt]# cut -c 1-4 passwd

在这里插入图片描述

5.sort命令与uniq命令

1.sort命令
多用于字符排序
sort -n 纯数字排序
sort -r 倒序
sort -u 去掉重复数字
sort -o 输出到指定文件中
sort -t 指定分隔符
sort -k 指定要排序的列

2.uniq命令
对重复字符作相应的处理
uniq -u 显示唯一的行
uniq -d 显示重复的行
uniq -c 每行显示一次并统计重复次数

<1>前提工作(首先在westos文件下写入一些信息便于实验):

[root@desktop mnt]# vim westos
[root@desktop mnt]# cat westos

在这里插入图片描述
<2>将文件westos中的数字,从大到小进行正向排序

[root@desktop mnt]# sort -n westos

在这里插入图片描述
<3>将文件westos中的数字,从大到小进行倒序排序

[root@desktop mnt]# sort -rn westos

在这里插入图片描述
<4>将文件westos中的数字,从大到小进行倒序排序时,将重复的删除

[root@desktop mnt]# sort -run westos

在这里插入图片描述
<5>将文件westos中的数字,正向排序并在前方标出每个数字出现的次数

[root@desktop mnt]# sort -n westos | uniq -c

在这里插入图片描述
<6>将文件westos中的数字,正向排序并只显示出现了多次的数字

[root@desktop mnt]# sort -n westos | uniq -d

在这里插入图片描述
<7>将文件westos中的数字,正向排序并只显示出现了一次的数字

[root@desktop mnt]# sort -n westos | uniq -u

在这里插入图片描述
<8>对文件westos中的内容进行修改

[root@desktop mnt]# vim westos
[root@desktop mnt]# cat westos

在这里插入图片描述
<9>对文件westos中的数字进行排序,发现字母比数字要前,且比较时主要看的是分隔符之前的字符

[root@desktop mnt]# sort -n westos

在这里插入图片描述
<10>对文件westos中的数字以“:"作为分隔符,并且指定排序的列为第二列

[root@desktop mnt]# sort -t : -k 2 westos

在这里插入图片描述
<11>对文件westos中的数字以“:"作为分隔符,并且指定排序的列为第二列,再加上-n排序后,就会按照从小到大的顺序正向排序

[root@desktop mnt]# sort -t : -k 2 -n westos

在这里插入图片描述

6.&& 和 ||

&&用来执行条件成立后执行的命令
||用来执行条件不成立后执行的命令
例如:
ping -c1 -w1 172.25.254.128 && echo yes
ping -c1 -w1 172.25.254.128 || echo no

<1>试图连接172.25.254.66(与本机ip在同一网段且合法),可以连通,所以输出yes

[root@desktop mnt]# ping -c1 -w1 172.25.254.66 &> /dev/null && echo yes || echo no
[root@desktop mnt]# ping 172.25.254.66	##测试

在这里插入图片描述
<2>试图连接172.25.254.335(与本机ip在同一网段但不合法),不可以连通,所以输出no

[root@desktop mnt]# ping -c1 -w1 172.25.254.335 &> /dev/null && echo yes || echo no
[root@desktop mnt]# ping 172.25.254.335

在这里插入图片描述
注意:
c=次数,w=运行时间。-c1 , -w1表示一分钟一次

7.test命令

test命令和[]等同
test "$A" == "$B" 等同 [ "$A" == "$B" ]
[ "$A" = "$B" ]
[ "$A != "B" ]
[ "$A" -eq "$B" ]
[ "$A" -ne "$B" ]
[ "$A" -le "$B" ]
[ "$A" -lt "$B" ]
[ "$A" -ge "$B" ]
[ "$A" -gt "$B" ]
[ "$A" -ne "$B" -a "$A" -gt "$B" ]
[ "$A" -ne "$B" -o "$A" -gt "$B" ]
[ -z "$A" ]
[ -n "$A" ]
[ "file1" -ef "file2" ]
[ "file1" -nt "file2" ]
[ "file1" -ot "file2" ]

1.test命令的简单使用
<1>输出变量a=1,b=1,比较a和b的值并利用&&和||输出结果,如果a和b的值相等,则输出yes,如果不相等,则输出no。由设置及结果可知,a和b的值相等。

[root@desktop mnt]# a=1
[root@desktop mnt]# b=1
[root@desktop mnt]# test "$a" = "$b" && echo yes || echo no

在这里插入图片描述
<2>输出变量a=1,b=1,比较a和b的值并利用&&和||输出结果,如果a和b的值相等,则输出yes,如果不相等,则输出no。由设置及结果可知,a和b的值不相等。

[root@desktop mnt]# a=3
[root@desktop mnt]# b=1
[root@desktop mnt]# test "$a" = "$b" && echo yes || echo no

在这里插入图片描述
因为test命令和[]等同,所以上述的命令也可写成以下命令:

[root@desktop mnt]# [ "$a" = "$b" ] && echo yes || echo no

在这里插入图片描述
<3>判断两个变量不相等时可以写入以下命令:

[root@desktop mnt]# [ "$a" != "$b" ] && echo yes || echo no
[root@desktop mnt]# [ ! "$a" = "$b" ] && echo yes || echo no

在这里插入图片描述
<4>当两个变量相等时,可以依靠以下命令今进行判定

[root@desktop mnt]# a=2
[root@desktop mnt]# b=2
[root@desktop mnt]# [ "$a" = "$b" ] && echo yes || echo no
[root@desktop mnt]# [ "$a" -eq "$b" ] && echo yes || echo no	##比较两个变量是否相等
[root@desktop mnt]# [ "$a" -ge "$b" ] && echo yes || echo no	##比较第一个变量是否大于或等于第二个变量
[root@desktop mnt]# [ "$a" -le "$b" ] && echo yes || echo no	##比较第一个变量是否小于或等于第二个变量

在这里插入图片描述
注意:
在等于的时候不能使用参数 -t 因为其只是比较大小,并不能用来说明两个变量是否相等

<5>当第一个变量小于第二个变量时,可以依靠以下命令进行判定

[root@desktop mnt]# a=2
[root@desktop mnt]# b=3
[root@desktop mnt]# [ "$a" -eq "$b" ] && echo yes || echo no	##说明第一个变量不等于第二个变量
[root@desktop mnt]# [ "$a" -le "$b" ] && echo yes || echo no	##说明第一个变量小于等于第二个变量(即第一个变量小于第二个变量)
[root@desktop mnt]# [ "$a" -lt "$b" ] && echo yes || echo no	##说明第一个变量小于第二个变量(即第一个变量小于第二个变量)
[root@desktop mnt]# [ "$a" -ge "$b" ] && echo yes || echo no	##说明第一个变量不大于等于第二个变量(即第一个变量小于第二个变量)
[root@desktop mnt]# [ "$a" -gt "$b" ] && echo yes || echo no	##说明第一个变量不大于第二个变量(即第一个变量小于第二个变量)

在这里插入图片描述
<6>当第一个变量大于第二个变量时,可以依靠以下命令进行判定

[root@desktop mnt]# a=10
[root@desktop mnt]# b=3
[root@desktop mnt]# [ "$a" -eq "$b" ] && echo yes || echo no	##说明第一个变量不等于第二个变量
[root@desktop mnt]# [ "$a" -le "$b" ] && echo yes || echo no	##说明第一个变量不小于等于第二个变量(即第一个变量大于第二个变量)
[root@desktop mnt]# [ "$a" -lt "$b" ] && echo yes || echo no	##说明第一个变量不小于第二个变量(即第一个变量大于第二个变量)
[root@desktop mnt]# [ "$a" -ge "$b" ] && echo yes || echo no	##说明第一个变量大于等于第二个变量(即第一个变量大于第二个变量)
[root@desktop mnt]# [ "$a" -gt "$b" ] && echo yes || echo no	##说明第一个变量大于第二个变量(即第一个变量大于第二个变量)

在这里插入图片描述
<7>判断a中的内容是否为空,若为空,则输出yes,若不为空,则输出no

[root@desktop mnt]# a=1
[root@desktop mnt]# [ -z "$a" ] && echo yes || echo no

在这里插入图片描述
<8>判断a中的内容是否为空,若为空,则输出yes,若不为空,则输出no

[root@desktop mnt]# a=""
[root@desktop mnt]# [ -z "$a" ] && echo yes || echo no

在这里插入图片描述
2.查看文件的uid及属性

[root@localhost mnt]# touch westos	##新建一个文件
[root@localhost mnt]# vim westos	##在westos内写入内容
[root@localhost mnt]# ls -li westos	##查看westos的uid及属性
[root@localhost mnt]# touch westos1	##新建一个文件westos1
[root@localhost mnt]# ls -li	##查看mnt下新建的两个文件的区别
[root@localhost mnt]# rm -rf westos1	##删除westos1
[root@localhost mnt]# ls	##查看mnt下的文件
[root@localhost mnt]# ln /mnt/westos /mnt/westos1	##建立文件westos的一个链接文件westos1
[root@localhost mnt]# ls -li	##查看链接文件及源文件的uid及属性,发现除了文件名不相同,其他都相同

在这里插入图片描述
3.比较两个文件的建立时间

[root@localhost mnt]# [ "westos" -ef "westos1" ] && echo yes || echo no	##比较两个文件建立的时间是否相等
[root@localhost mnt]# [ "westos" -nt "westos1" ] && echo yes || echo no	##比较westos文件是否比westos1文件建立的时间新,因为是链接文件,所以不存在时间早晚
[root@localhost mnt]# [ "westos" -ot "westos1" ] && echo yes || echo no	##比较westos文件是否比westos1文件建立的时间旧,因为是链接文件,所以不存在时间早晚

在这里插入图片描述
4.比较两个文件的建立时间

[root@localhost mnt]# touch file1	##新建立一个文件file1
[root@localhost mnt]# [ "westos" -ef "file1" ] && echo yes || echo no	##比较两个文件的建立时间是否相同
[root@localhost mnt]# [ "westos" -nt "file1" ] && echo yes || echo no	##比较westos文件是否比file1文件建立的时间新,查看结果可知westos比file1文件建立的时间旧
[root@localhost mnt]# [ "westos" -ot "file1" ] && echo yes || echo no	##比较westos文件是否比file1文件建立的时间旧,查看结果可知westos比file1文件建立的时间旧

在这里插入图片描述
5.查看文件的文件类型

[-e "file"]
[-f "file"]
[-L "file"]
[-S "file"]
[-b "file"]
[-d "file"]
[-c "file"]

<1>.-e(查看文件是否存在)

[root@localhost mnt]# ls
[root@localhost mnt]# [ -e "file1" ] && echo yes || echo no
[root@localhost mnt]# rm -rf file1
[root@localhost mnt]# [ -e "file1" ] && echo yes || echo no

在这里插入图片描述
<2>.-f(查看文件是否是文本文件)

[root@localhost mnt]# ln -s westos file1
[root@localhost mnt]# ls -l
[root@localhost mnt]# [ -f "file1" ] && echo yes || echo no

在这里插入图片描述
<3>-L(查看文件是否是链接文件)

[root@localhost mnt]# [ -L "file1" ] && echo yes || echo no

在这里插入图片描述
<4>-b(查看文件是否是块设备文件)

[root@localhost mnt]# [ -b "/dev/vda" ] && echo yes || echo no

在这里插入图片描述
<5>.-c(查看文件是否是字符设备文件)

[root@localhost mnt]# [ -c "/dev/pts/0" ] && echo yes || echo no

在这里插入图片描述
<6>-d(查看文件是否是目录)

[root@localhost mnt]# [ -d "/dev" ] && echo yes || echo no

在这里插入图片描述
<7>-S(查看文件时都是套接字文件)

[root@localhost mnt]# yum install mariadb-server.x86_64 -y	##安装mariadb(数据库)
[root@localhost mnt]# systemctl start mariadb	##开启mariadb服务
[root@localhost mnt]# ls /var/lib/mysql	##进入mysql目录下查看文件
[root@localhost mnt]# ls /var/lib/mysql/mysql.sock	
[root@localhost mnt]# [ -S "/var/lib/mysql/mysql.sock" ] && echo yes || echo no	##查看文件是否是套接字文件
[root@localhost mnt]# ls -l /var/lib/mysql/mysql.sock	##查看文件的属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:
1.以上文件都可以通过“ls -l 绝对路径”查看其文件类型进行验证
2.链接文件比较特殊,所以一般情况下先判断是不是链接,再判断是不是文本(因为一个文本,可能是链接)
3./var/lib/mysql目录中存放的是数据库默认的数据目录(一般情况下不要动,数据库卸载之后数据还存在的原因)

猜你喜欢

转载自blog.csdn.net/qq_39376481/article/details/88747603