diff命令是用来比较两个文件或目录的不同的。
[num1,num2][a|b|c][num3,num4]
num1,num2表示在第一个文件中的行数
a表示添加——add
c表示更改——change
d表示删除——delete
<表示第一个文件中的内容
>表示第二个文件中的内容
---是分割线
num3,num4表示在第二个文件中的行数
diff -b或--ignore-space-change 不检查空格字符的不同
diff -B或--ignore-blank-lines 不检查空白行
diff -c 显示全部内文,并标出不同之处
diff -p 显示c语言的程序码文件差异所在的函数名称
diff -q或--brief 仅显示有无差异,不显示详细的信息
diff -r或--recursive 比较子目录中的文件
diff -u 以合并的方式来显示文件内容的不同(生成补丁)
cd /mnt/
vim file1 编辑file1
hello
bye~
vim file2 编辑file2
HELLO
bye~
diff file1 file2 比较file1和file2的差别
1c1 表示第一个文件需要更改
< hello
> HELLO
vim file2 编辑file2(在“hello”后面加两个空格)
hello
bye~
diff file1 file2 -q 比较file1和file2有无差别,但是不显示详细信息
Files file1 and file2 differ
diff file1 file2 -q -b 比较file1和file2有无差别(不计空格字符),但是不显示详细信息,此时发现没有差别
vim file2 编辑file2(在“hello”后面加一个空行)
hello
bye~
diff file1 file2 比较file1和file2有无差别,此时显示file1比file2少一个空行
1a2
>
diff file1 file2 -B 比较file1和file2有无差别,但不检查空白行,此时发现没有差别
diff file1 file2 -c 比较file1和file2有无差别,显示全部内文,并标出不同之处
*** file1 2019-08-16 22:42:21.905423652 -0400
--- file2 2019-08-16 22:46:43.334423652 -0400
*************** 分割线
*** 1,2 ****
--- 1,3 ----
hello
+ 提示第二个文件比第一个文件多一个空白行
bye~
mkdir westos
touch westos/haohao 建立westos目录并建立haohao文件
mkdir haohao
touch haohao/westos 建立haohao目录并建立westos文件
diff -r westos haohao 比较file1和file2有无差别
Only in westos: haohao 提示只有westos中有haohao
Only in haohao: westos 提示只有haohao中有westos
diff -u file1 file2 > file.path 比较file1和file2有无差别,并且生成补丁
cat file.path 查看生成的补丁
--- file1 2019-08-16 22:42:21.905423652 -0400
+++ file2 2019-08-16 22:46:43.334423652 -0400
@@ -1,2 +1,3 @@
hello
+
bye~
yum install patch -y 安装打补丁的软件
patch -b file1 file.path 给file1文件打补丁
patching file file1
diff file1 file2 -q 比较file1和file2有无差别,但是不显示详细信息,此时发现没有差别
cut命令多用于字符截取
cut -d 指定分隔符
cut -f 1,7|1-7 指定截取第一列和第七列|第一列到第七列
cut -c 1,4|1-4 指定截取第一个和第四个字符|第一个到第四个字符
cp /etc/passwd . 复制passwd到/mnt目录下
cut -d : -f 1-2 passwd 以“:”为分隔符,截取第一列到第二列
截取本机的ip(只显示ip)
使用cut命令:
ifconfig eth0 | cut -c 14-27 | head -n 2 | tail -n 1
172.25.254.128
简便方法:
ifconfig eth0 | awk '/inet\>/{print $2}'
172.25.254.128
sort命令多用于字符排序,uniq命令对重复字符做相应的处理。
命令 | 功能 |
---|---|
sort -n | 纯数字排序 |
sort -r | 倒序 |
sort -u | 去掉重复数字 |
sort -o | 输出到指定文件中 |
sort -t | 指定分隔符 |
sort -k | 指定要排序的列 |
命令 | 功能 |
---|---|
uniq -u | 显示唯一的行 |
uniq -d | 显示重复的行 |
uniq -c | 每行显示一次并统计重复次数 |
sort -n lee 将文件中的数据按纯数字排序
sort -r lee 将文件中的数据按倒序排列,此时只会将首字符倒序排列
sort -nr lee 将文件中的数据按纯数字倒序排列
sort -nu lee 将文件中的数据按纯数字排列,并且每个数字只出现一次不重复
sort -nru lee 将文件中的数据按纯数字倒序排列,并且每个数字只出现一次不重复
sort -nr lee | uniq -u 将文件中的数据按纯数字倒序排列,但有重复的数字全部不显示
sort -nr lee | uniq -c 将文件中的数据按纯数字倒序排列,并统计重复的次数
sort -nr lee | uniq -c | sort -t " " -k 2 -r 将文件中的数据按纯数字倒序排列,并统计重复的次数,然后按重复次数从多到少排列
ll | cut -c 24-99 | sort -rn | head -n 5 | cut -c 21-99
ls -S | head -n 5
**&&**用来执行条件成立后执行的命令
**||**用来执行条件不成立后执行的命令
ping -c1 -w1 172.25.254.50 && echo 172.25.254.50 is up || echo 172.25.254.50 is down
vim ping.sh 编写脚本
#!/bin/bash
ping -c1 -w1 $1 &> /dev/null && {
echo $1 is up
}||{
echo $1 is down
}
sh ping.sh 172.25.254.50 执行脚本
test命令和**[ ]**等同,test " A " = = “ A"==“ A"==“B”等同[“ A ” = = “ A”==“ A”==“B”]
[ "$A" -ge "$B" ] 若A大于等于B,则为真
[ "$A" -gt "$B" ] 若A大于B,则为真
[ "$A" -ne "$B" -a "$A" -gt "$B" ] 若A不等于B且A大于B,则为真
[ "$A" -ne "$B" -o "$A" -gt "$B" ] 若A不等于B或A大于B,则为真
[ -z "$A" ] 若A长度为0,则为真
[ -n "$A" ] 若A长度不为0,则为真
[ "file1" -ef "file2" ] 查看两个文件是否使用同一个节点区域
[ "file1" -nt "file2" ] 查看文件1是否比文件2建立的晚
[ -e "file" ] 若文件存在,则为真
[ -f "file" ] 若文件存在且是一个规则文件,则为真
[ -L "file" ] 若文件存在且是一个软链接,则为真
[ -S "file" ] 若文件存在且其大小大于零,则为真
[ -b "file" ] 若文件存在且是一个块设备文件,则为真
[ -d "file" ] 若文件存在且是一个目录,则为真
[ -c "file" ] 若文件存在且是一个字符设备文件,则为真
vim check_file.sh
#!/bin/bash
[ -z "$1" ] && {
echo Plesse input filename following script!!!
exit
}
[ -e "$1" ] && {
[ -L "$1" ] && {
echo "$1" is softlink file
}||{
[ -d "$1" ] && {
echo "$1" is directory
}||{
[ -f "$1" ] && {
echo "$1" is common file
}||{
echo "$1" is another typ
}
}
}
}||{
echo No such file or directory...
}
grep的格式:grep 匹配条件 处理文件
例:
grep root passwd
grep root passwd 筛选passwd中有root字符的
grep ^root passwd 筛选passwd中以root字符开头的
grep root$ passwd 筛选passwd中以root字符结尾的
grep -i root passwd 筛选passwd中有root字符的且不区分大小写
grep -E "root|ROOT" passwd 筛选有root或者ROOT字符的(-E 可以识别“|”(或者)符)
grep root passwd -v 显示除了所筛选的字符
grep root passwd -2 所筛选字符的上下两行也显示
grep "w....s" file
grep "w...." file
grep "....s" file
vim passwd
rootwetos
ROOTwesos
ROOTWESTOS
westosroot
wetsosROot
grep "root" passwd 筛选passwd中有root字符的
grep "root" passwd -i 筛选passwd中有root字符的且不区分大小写
grep "root" passwd -in 筛选passwd中有root字符的且不区分大小写,显示行号
grep -in "^root" passwd 筛选passwd中以root字符开头且不分大小写的并显示行号
grep -in "root$" passwd 筛选passwd中以root字符结尾且不分大小写的并显示行号
grep -Ein "^root|root$" passwd 筛选passwd中以root字符开头或结尾且不分大小写的并显示行号
grep ROOT passwd -2 筛选passwd中有root字符,并且的上下两行也显示
grep中字符的匹配次数设定
* 字符出现[0-任意次]
\? 字符出现[0-1次]
\+ 字符出现[1-任意次]
\{n\} 字符出现[n次]
|{m,n\} 字符出现[至少m次,最多出现n次]
\{0,n\} 字符出现[0-n次]
\{m,\} 字符出现[至少m次]
\(xy\)\{n}xy 关键字出现[n次]
.* 关键字之间匹配任意字符
^关键字
关键字&
\<关键字
关键字\>
\<关键字\>
sed,即stream editor,是用来操作ASC||码的文本。处理时把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)可以指定仅仅处理哪些行。sed符合模式条件的处理,不符合条件的不予处理,处理完成之后把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。
p 显示
d 删除
a 添加
c 替换
w 写入
i 插入
sed -n '/\:/p' fstab 显示含有":"的行
sed -n '/UUID$/p' fstab 显示以UUID结尾的行
sed -n '/^UUID/p' fstab 显示以UUID开头的行
sed -n '2,6p' fstab 显示第二行到第六行
sed -n '2,6!p' fstab 显示除过第二到六行的信息
sed '/^UUID/d' fstab 除了以“UUID”开头的都显示
sed '/^#/d' fstab 除了以“#”开头的都显示
sed '/4$/d' fstab 除了以“4”结尾的都显示
sed '1,4d' fstab 除了1至4行都显示
sed '/^$/d' fstab 不显示空行
sed '1d;4d' fstab 除了第1行和第4行都显示
sed '/^UUID/!d' fstab 除了不是以“UUID”开头的都显示(显示以UUID开头的)
sed '/^UUID/a\hello sed' fstab 在以“UUID”开头的行的后面一行添加"hello sed"
sed '/^UUID/a\hello sed\nwestos' fstab 在以“UUID”开头的行的后面一行添加"hello sed",然后在下一行添加"westos"
sed '/^UUID/i\hello' fstab 在以“UUID”开头的行的前面一行添加"hello"
sed '/^UUID/i\hello sed\nwestos' fstab 在以“UUID”开头的行的前面一行添加"hello sed",然后再添加一行"westos"
sed '/^UUID/w hahaha' fstab 将fstab以“UUID”开头的行添加到文件hahaha中
sed -n '/^UUID/w haha' fstab 将fstab以“UUID”开头的行添加到文件hahaha中,并且不显示
sed '6r /mnt/lee' fstab 将fstab中除过前6行的都添加到文件lee中
sed '/^UUID/c\hello sed\nwestos' fstab 将fstab以“UUID”开头的行替换为"hello sed",并且在下一行添加"westos"
sed '/^UUID/=' fstab 在以“UUID”开头的行前面一行添加行号
或者
sed -n -e '/^UUID/p' -e '/^UUID/=' fstab 显示以“UUID”开头的行并在后面面一行添加行号
sed -e 's/sbin/lee/g;s/nologin/#####/' passwd 将passwd中的"sbin"替换为"lee",并且把"nologin"替换为"#####"
sed 's/^#/%/' fstab 将fstab中以“#”开头的“#”替换为“%”
或者
sed 's@^#@%@g' fstab 将fstab中以“#”开头的“#”替换为“%”
sed 's/\//####/g' fstab 将fstab中“/”替换为####
awk '{print FILENAME}' passwd 文件passwd中信息全部显示为文件名
awk '{print NR}' passwd 显示文件passwd中的行号,但不显示内容
awk -F : '{print NF}' passwd 显示文件passwd中的以":"为分隔符的每行的列数
awk 'BEGIN{n=0}/bash$/{n++}END{print n}' /etc/passwd 显示文件passwd中的以bash结尾的信息个数
awk -F : 'BEGIN{print "NAME"}{print $1}END{print "END"}' passwd 显示文件passwd中的第一列并且在第一行显示"NAME"在第最后一行显示"END"
awk '/bash$/{print}' /etc/passwd 显示文件passwd中的以"bash"结尾的信息
awk -F : '$6~/\
awk -F : '$6!~/\
显示主机中家目录不是home且可登陆用户个数及其信息
awk -F : 'BEGIN{n=0}/bash$/&&$6!~/^\/home/{print;n++}END{print n}' /etc/passwd