Linux(23)—— shell操作(1)
这几章笔记是针对redhat8系统中bash的操作指令做记录。
1. diff
用于对比两文件或者目录内容是否相同。当相同时无提示信息,不同时返回输出信息。
[root@rhserver Desktop]# diff [options] files|directorys
options | 功能 |
---|---|
-b | 忽略空格 |
-B | 忽略空行 |
-i | 忽略大小写 |
-c | 显示文件所有内容并标示不同 |
-r | 对比目录 |
-u | 合并输出 |
# 提示信息说明
输出格式 文件1存在差异行数+提示信息+文件2存在差异行数
提示信息:
a #添加
c #更改
d #删除
< #文件1存在差异的内容
> #文件2存在差异的内容
file1,file2的内容如下所示
当文件内容相同时,diff运行无提示信息
修改文件内容:
3c3,4 表示第一个文件的第三行与第二个文件的第三、四行存在更改导致文件差异。<33 表示file1存在差异的内容为 33所在行,同理file2的存在差异内容也被标出。
当存在空格时,添加参数可以对空格进行忽略。
对比目标为目录时,则可以提示出目录内文件的差异。
2. patch
用于针对两个文件的差异产生补丁,打上补丁之后两文件内容变相同。
用法:
[root@rhserver Desktop]# patch [OPTION] [ORIGFILE [PATCHFILE]]
首先需要安装 patch应用,补丁内容 依靠 diff -u 产生。
然后针对文件应用产生的补丁,目标文件应用补丁后内容将变为另一个文件的内容,-b 参数可以备份源文件。
3. cut
cut命令可以将文本进行分割显示
用法:
[root@rhserver Desktop]# cut [OPTION] [FILE]
-d #指定分隔符
-f #指定显示的列
# 3 表示第三列 4-5表示4-5列 1,3表示1和3列
# -3 表示到第三列 3-表示3列以后
-c #指定截取的字符(数字用法同-f)
- 截取 /etc/passwd 内 前5个用户的用户名:
- 截取过滤网卡ip:
3. sort
对文件内容进行排序显示。
使用:
[root@rhserver Desktop]# sort [OPTION] [FILE]
-n #纯数字排序
-r #倒叙
-u #去掉重复
-o #输出到指定文件
-t #指定分隔符
-k #指定排序的列
对passwd文件后5行,针对uid进行降序排列输出:
4. uniq
对文件内容进行去重显示。
使用:
[root@rhserver Desktop]# uniq [OPTION] [FILE]
-c #合并重复并统计重复个数
-d #显示重复的行
-u #显示唯一的行
- 找出能登陆系统用户中UID最大的用户,并显示其名称:
- 找出文件中出现次数最多的数字 并输出:
uniq -c file1 | sort -n -t ' ' -k 7 | awk '{ print$2 }'|tail -n `uniq -c file1 | sort -n -t ' ' -k 7 | awk '{ print$1 }'|uniq -c|tail -n 1|awk '{ print$1 }'`
5. tr
对文件内容指定字符进行替换。
使用:
[root@rhserver Desktop]# tr [OPTION] SET1
[root@rhserver Desktop]# tr 'a-z' 'A-Z' file1 #小写转大写
[root@rhserver Desktop]# tr 'A-Z' 'a-z' file1 #大写转小写
支持单个字符的各种替换:
6. test
判断条件是否成立,不输出信息,需要搭配 && 与 || 使用
使用:
[root@rhserver Desktop]# test 判断信息 && 结果成立动作|| 不成立动作
[root@rhserver Desktop]# [ 判断信息 ] && 结果成立动作|| 不成立动作
对数字判断:
# test数字对比:
= #等于
!= #不等于
-eq #等于
-ne #不等于
-le #小于等于
-lt #小于
-ge #大于等于
-gt #大于
# test逻辑运算
-a #条件与
-o #条件或
# test空判定
-n #内容不为空
-z #内容为空
# test文件判定
-ef #节点号是否一致(硬链)
-nt #文件1是否比文件2新
-ot #文件1是否比文件2旧
-d #是否为目录
-S #是否为套结字
-L #是否为软连接
-e #是否为存在
-f #是否为普通文件
-b #是否为快设备
-c #是否为字符设备
- 执行下列脚本来判断用户类型:
user_check.sh 用户
用户类型为
super user
system user
common user
#!/bin/bash
[ -z "$1" ] && {
echo "Please input username!"
exit
}
uid=$( grep -E "^$1" /etc/passwd | cut -d : -f 3 )
[ -z "$uid" ] && {
echo "User is not exist!"
exit
}
[ "$uid" -eq 0 ] && {
echo "This is a super user."
exit
}
[ "$uid" -le 999 ] && {
echo "This is a system user."
exit
}||{
echo "This is a common user."
}
- 编写脚本完成以下条件:
file_check.sh 在执行时
如果脚本后未指定检测文件报错“未指定检测文件,请指定”
如果脚本后指定文件不存在报错“此文件不存在”
当文件存在时请检测文件类型并显示到输出中
[ -z "$1" ] && {
echo "未指定检测文件,请指定!"
exit
}
[ -e "$1" ] || {
echo "此文件不存在"
exit
}
[ -L "$1" ] && {
echo "软连接"
exit
}
[ -f "$1" ] && {
echo "普通文件"
exit
}
[ -S "$1" ] && {
echo "套接字"
exit
}
[ -b "$1" ] && {
echo "快设备"
exit
}
[ -c "$1" ] && {
echo "字符设备"
exit
}
[ -d "$1" ] && {
echo "目录"
exit
}