在linux系统中,shell,它是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
基本上shell分两大类:
一:图形界面shell(Graphical User Interface shell 即 GUI shell)
二:命令行式shell(Command Line Interface shell ,即CLI shell)
shell的类型:在UNIX中主要有:
Bourne shell (包括 sh,ksh,and bash)
Bourne shell ( sh)
Korn shell ( ksh)
Bourne Again shell ( bash)
POSIX shell ( sh)
C shell (包括 csh and tcsh)
C shell ( csh)
TENEX/TOPS C shell ( tcsh)
下 面 我 们 将 主 要 去 介 绍 一 些 在 s h e l l 中 常 用 到 的 指 令 \color{blue}{下面我们将主要去介绍一些在shell中常用到的指令} 下面我们将主要去介绍一些在shell中常用到的指令
第一部分:【diff】
diff 命令是用来比较两个文件或目录的不同
diff [options] target1 target2 ### diff [参数] 目标1 目标2
diff file1 file2 ###比较两个文件
diff direcory1 directory2 ###比较两个目录
diff 在比较文件过程中结果读取方式
[num1 , num2][a|c|d][num3,num4]
num1,num2 表示在第一个文件中的行数
a 表示添加 ----add
c 表示更改 ----change
d 表示删除 ----delete
< 表示第一个文件中的内容, > 表示第二个文件中的内容, — 分割线
num3,num4 表示在第二个文件中的行数
2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中
的第二行和第四行
diff 中常用的参数 【可以使用man diff查看】
-b 或 --ignore-space-change 不检查空格字符的不同
-B 或 --ignore-blank-lines 不检查空白行
-c 显示全部内文,并标出不同之处
-i 或 --ignore-case 不检查大小写的不同
-p 若比较的文件为 C 语言的程序码文件时,显示差异所在的
函数名称;
-q 或 --brief :仅显示有无差异,不显示详细的信息
-r 或 --recursive :比较子目录中的文件
-u 以合并的方式来显示文件内容的不同
依旧是上面的两个文件:
比较目录
d
i
f
f
−
u
以
合
并
的
方
式
显
示
不
同
,
和
p
a
t
c
h
一
起
使
用
:
\color{blue}{diff -u以合并的方式显示不同,和patch一起使用:}
diff−u以合并的方式显示不同,和patch一起使用:
patch 需要下载:yum install patch
patch 命令读取如何更改文件的源文件指示信息,然后应用这些更改。源文件包含由 diff 命令产生的差别列表(或者 diff 列表)。差异列表是比较两个文件和构建关于如何纠正差别的指示信息的结果。
补丁的最后结果事实上与文件2相同,那就会有疑问,为什么不直接使用文件2呢?
因为使用文件2,那么就需要做文件的重新指定,如果多处调用文件,那么就会是较大的工作量。另外,补丁只是在源文件上做少量的修改,并没有重新写文件。
第二部分:【cut】
cut是计算机操作系统LINUX命令之一,可以将其描述为从一行上移除部分内容、选择性显示出已筛选内容的文本操作命令。
cut -d : -f 1 passwd ###-d指定分隔符 -f 显示第n列
cut -c 2-4 passwd ###指定字符【第二个到第四个】
cut 命令多用与字符截取
cut -d 指定分隔符
cut -f 1,7|1-7 指定截取的列,“,”代表几和几,“-”代表几到几
cut -c 1,4|1-4 指定截取的字符位置
第三部分:【sort】
sort多用于字符排序
sort -n 纯数字排序
sort -r 倒序
sort -u 去掉重复数字
sort -o 输出到指定文件中
sort -t 指定分隔符
sort -k 指定要排序的列
第四部分:【uniq】
重复的行一定相邻。(在发出 uniq 命令之前,请使用 sort 命令使所有重复行相邻。)最后,uniq 命令将最终单独的行写入标准输出或由 OutFile 参数指定的文件
uniq对重复字符做相应的处理
uniq -u 显示唯一的行
uniq -d 显示重复的行
uniq -c 每行显示一次并统计重复次数
练 习 : 筛 选 出 登 陆 本 主 机 次 数 最 多 的 I P , 并 输 出 其 登 陆 次 数 和 I P 。 \color{blue}{练习:筛选出登陆本主机次数最多的IP,并输出其登陆次数和IP。} 练习:筛选出登陆本主机次数最多的IP,并输出其登陆次数和IP。
last -i | grep 0.0.0.0 -v | grep wtmp -v | cut -d " " -f 14 | uniq -c | sort -rn -k 1 |head -n 1
做筛选的时候同样可以用:last -i | grep -E "0.0.0.0|wtmp" -v | awk '{print $3}'
来筛选,之后会讲解awk的使用。
第五部分:【&& 和 ||】
&& 用来执行条件成立后执行的命令
|| 用来执行条件不成立后执行的命令
ping -c1 -w1 172.25.254.111 &> /dev/null && echo up ###-c:ping的次数
ping -c1 -w1 172.25.254.111 &> /dev/null || echo down ###-w:等待结束的时间
我们写一个脚本,通过脚本的使用来查看效果:
第六部分:【test】
百度百科对Linux中的test指令说明: https://baike.baidu.com/item/test/10804281
用于判别条件的成立或者正确
【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并且
["$A" -ne "$B" -o "$A" -gt "$B" ] ### -o或者
[-z "$A" ] 是否为空
[-n "$A" ] 不为空
["file1" -ef "file2" ] ###是否互为硬链接【有同样的节点号】
["file1" -nt "file2" ] ###前面的比后面的新
["file1" -ot "file2" ] ###前面的比后面的旧【建立时间】
[-e "file" ] 是否存在
[-f "file" ] 普通文件
[-L "file" ] 软链接
[-S "file" ] 套接字
[-b "file" ] 块设备
[-d "file" ] 目录
[-c "file" ] 字符设备
这里我们也可以写一个脚本,进行判断文件类型。
测
试
:
写
一
个
脚
本
,
当
/
的
使
用
超
过
规
定
值
时
,
就
会
发
出
警
告
提
醒
,
并
在
/
v
a
r
/
l
o
g
/
m
e
s
s
a
g
e
中
显
示
警
告
\color{blue}{测试:写一个脚本,当/的使用超过规定值时,就会发出警告提醒,并在/var/log/message中显示警告}
测试:写一个脚本,当/的使用超过规定值时,就会发出警告提醒,并在/var/log/message中显示警告
思路:
1.首先需要知道如何查看/的使用情况,然后提取出当前的使用值
2.与规定值做对比,超了会执行哪些动作,没超会执行哪些动作
3.发出警告
下面写脚本:
这里完善一个脚本内容:
我们上面写了一个ping某个ip可以直接得到是否可以ping通的脚本,这里完善:
![在这
大大的小小阳