find命令
find介绍:【English:放的】find由于文件目录查找# 常用操作-name 按名称查找-size 按大小查找-user 按属性查找-type 按类型查找 d: 目录 c: 字型装置文件 b: 区块装置文件 p: 具名贮列 f: 一般文件 l: 符号连结 s: socket-iname 忽略大小写# 通过时间权限等查找-amin n : 在过去 n 分钟内被读取过-anewer file : 比文件 file 更晚被读取过的文件-atime n : 在过去n天内被读取过的文件-cmin n : 在过去 n 分钟内被修改过-cnewer file :比文件 file 更新的文件-ctime n : 在过去n天内被修改过的文件-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
grep命令
grep介绍:【E:瓜儿铺】grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来grep家族:grep、egrep、fgrepgrep的使用: 1、单个文件中查找指定字符串 【 grep "test" demo.log 】 2、多个文件中查找指定字符串 【 grep "test" *.log 】 3、忽略大小写 【grep -i "Test" demo.log】 4、在文件中匹配正则表达式 【 】 5、查找全匹配,不包括子字符串 【grep -w】 6、用grep -A -B -C查看文件{后,前,前后}行【grep -C 5 "前后5行" /test.txt 】 7、用GREP_OPTIONS来让查找的项醒目【export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8'】 8、搜索所有的文件及子目录 【grep -r】 9、过滤匹配项,反向 【grep -v】 10、计算匹配的数量 【grep -c】 11、显示匹配的文件名 【grep -l "test" *.log】 12、只显示匹配的字符串 【grep -o】 13、显示行数 【grep -n】 14、显示匹配的字符字节位置 【grep -b】 15、通常grep解决行内匹配问题,跨行建议【 awk/sed 】 16、使用扩展正则表达式 【 egrep grep -E】# 系统报警显示了时间,但是日志文件太大无法直接 cat 查看grep -n '2019-10-24 00:01:11' *.log正则表达式: ‘^‘: 锚定行首 ‘$’: 锚定行尾 ‘.‘: 匹配任一一个字符 ‘*’: 匹配零个或多个先前字符 ‘?‘:匹配其前面的字符0次或者1次; ‘+’:匹配其前面的字符1次或者多次; ‘{m}‘:匹配其前面的字符m次(\为转义字符) ‘{m,n}’:匹配其前面的字符至少m次,至多n次 ‘()’:将一个或多个字符捆绑在一起,当做一个整体进行处理,反向引用照常使用。 ‘|’:或(注:‘C|cat’为C与cat,‘(C|c)at才是Cat与cat’) ‘[]‘: 匹配一个指定范围内的字符 | ‘[^]’匹配指定范围外的任意单个字符 ‘\<‘或‘\b’:锚定词首,‘\>’或‘\b’:锚定词尾(可用\<PATTERN\>:匹配完整单词) ‘\(\)’:将多个字符当做一个整体进行处理 后向引用:引用前面的分组括号中的模式所匹配到的字符 分组括号中的模式匹配到的内容或被正则表达式引擎自动记录于内部的变量中: \1:模式从左侧起,第一个左括号及与之匹配的右括号之间模式匹配到的内容 \2:模式从左侧起,第二个左括号及与之匹配的右括号之间模式匹配到的内容...
awk命令
awk介绍:【E:啊克】 数据统计,日志分析-F 指定输入时用到的字段分隔符-v 自定义变量-f 从脚本中读取awk命令-m 对val值设置内在限制 #通过netstat命令查看tcp连接,再通过grep找到连接数,并把第六列输出netstat -ant |grep "ESTABLISHED"|awk '{print $6}'#通过"/etc/passwd"这个文件把前5个用户名列出来【-F: 指定格式默认空格】awk -F: '{print $1}' /etc/passwd |head -5 【格式为“:”】#根据上面我们还想要用户的shell,这个文件最后一列 【并且加上:】awk -F: '{print $1":"$NF}' /etc/passwd |head -5 #双引号在awk里面是添加的意思,这样就在第一列和最后一列中间加上了冒号。这里可以添加任意字符#想要把ip地址192.168.1.244输出并且变为 192-169-1-244ifconfig |grep "192" |awk '{print $2}'|awk -F. '{print $1"-"$2"-"$3"-"$4}'ifconfig |grep "inet" |awk '{print $2}'|awk -F. '{print $1"-"$2"-"$3"-"$4}'#passwd文件不显示第2行awk 'NR!=2' /etc/passwd#将后面输出的结果当作主机名hostname `ifconfig | grep "inet"| grep -v "127" |grep -v "0.0.0.0" | awk '{print $2}' | awk -F. '{print $1"-"$2"-"$3"-"$4}'`
sed命令
sed介绍:【E:色的】替换、删除、更新文件中的内容,流编辑器#不改动源文件,输出 head -5 /etc/passwd > /shell/pass sed 's/root/toor/' /shell/pass #修改第一个root sed 's/root/toor/2' /shell/pass #修改第二个root sed 's/root/toor/g' /shell/pass #修改全部root sed 's#root#t/o/o/r#g' /shell/pass #通过#进行修改(因为修改内容有“/”,如果还是用/作为分隔,则需要对内容里面的“/”进行转义"\/") # 删除带games的"行" 【/d】 sed '/games/d' /etc/passwd # 打印带games的"行" 【/p】---【需要加上“-n”选项,不然它将这个文件会先打印一遍】 head -5 pass |sed -n '/root/p'# 修改原文件,加上选项"-i" sed -i 's/root/toor/g' /shell/pass# 范围设定 #显示 test 文件的第 10 行到第 20 行的内容 sed -n '10,20p' test.txt #将所有以 d 或 D 开头的行里的所有小写 x 字符变为大写 X 字符 sed '/^[dD]/s/x/X/g' test.txt #删除每行最后的两个字符 sed 's/..$//' text.txt #删除每一行的前两个字符 sed 's/^..//' test.txt#sed中的&符号的使用【匹配到的内容,用&表示】 #在“sandbenene”的sand后面加上2002让它变成“sand2002benene” sed 's/sand/&2002/' text.txt#sed中的()括号的使用 #将“hello world”改成“world hello” # 【#\(hello\) \(world\)#】:匹配了整段 ; 【#\2 \1#】:将()中匹配到的引用 echo "hello world" | sed 's#\(hello\) \(world\)#\2 \1#'#灵活的定位 cat > SandAge.txt <<OFF sand 2001 age-1 sand 2002 age-2 sand 2003 age-3 sand 2004 age-4 sand 2005 age-5 OFF # 通过'/首行/,/尾行/p'【只会匹配发现的第一个】 sed -n '/2003/,/2005/p' SandAge.txt # 通过“-e”选项设置多个【例子中,我不想知道第三行是什么,只想知道1,2,4的内容】 # "-e"选项的是安照"先后顺序来执行" sed -n -e '1,2p' -e '4p' SandAge.txt # 把匹配内容放到一个文件中储存,通过【-f 选项指定匹配规则】 echo "/2003/,/2005/p" > PiPei sed -n -f PiPei SandAge.txt#内容插入 echo " ===开始说话===" > TianJia sed '/2002/r TianJia' SandAge.txt #【插入方向,匹配到的下一行】 sed '/2004/a\ ===开始上学' SandAge.txt #【插入方向,匹配到的下一行】 sed '/2005/i\ ===开始上学' SandAge.txt #【插入方向,匹配到的上一行】#字符替换 【sand 2001 age-1】 sed 'y/age/eit/' SandAge.txt 【send 2001 eit-1】 #可以看到:a->e g->i 但不是所有的 e->t ,前面改变过的没变#隔行处理的效果【如只改变--偶数行】 sed '/200/{n;y/sand/Sand/;}' SandAge.txt#将指定行写入到特定文件中 sed -n -e '1,2w new.txt' -e '4w 1.txt' SandAge.txt sed '/200[1-3]/w new.txt' SandAge.txt cat new.txt范围设定,可以采用两种不同的方式来表达: 指定行数:比如‘3,5’表示第 3、第 4 和第 5行;而‘5,$’表示第 5 行至文件最后一行。 模式匹配:比如/^[^dD]/表示匹配行首不是以 d 或 D 开头的行。而动作处理部分,会提供很丰富的动作供你选择,下面就来介绍几个最常用的动作吧: d:表示删除行。 p:打印该行。 r:读取指定文件的内容。 w:写入指定文件。 a:在下面插入新行新内容。 i:在上面插入新行新内容。
sort命令
sort介绍:【所特】以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序sort的使用:1.忽略大小写,默认会大写字母排在前面 #【-f】2.忽略每行前面的空格 #【-b】3.按照数字进行排序 #【-n】4.反向排序 #【-r】5.等同uniq,表示相同的数据仅显示一行,去重 #【-u】6.指定字段分隔符,默认使用tab键分隔 #【-t】7.指定排序字段 #【-k】8.将排序后的结果转存至指定文件 #【-o】uniq命令uniq介绍:【un肯】用于报告或者忽略文件中连续的重复行,常与sort命令结合使用uniq使用:1.进行计数,并删除文件中重复出现的行 #【-c】2.仅显示连续的重复行 #【-d】3.仅显示出现一次的行 #【-u】例子:cat test.txtsandbenenesandSand123234,./!@#通过sort按照数字排序,然后通过uniq对重复行计数sort -n test.txt | uniq -c 1 ,./ 1 !@ 1 benene 2 sand 1 Sand 1 123 1 234#通过sort按照数字排序,然后通过uniq显示连续的重复行sort -n test.txt | uniq -dsand#通过sort按照数字排序,然后通过uniq显示不重复的行sort -n test.txt | uniq -u,./!@beneneSand123234
tr命令
tr介绍:【tr】常用于对来自标准输入的字符进行替换、压缩和删除
tr使用:
1.保留字符集1的字符,其他的字符(包括换行符\n)用字符集2替换 【-c】
2.删除所有属于字符集1的字符 【-d】
3.将重复出现的字符串压缩为一个字符串,用字符集2 替换 字符集1 【-s】
4.字符集2 替换 字符集1,不加选项同结果 【-t】
例子:
#将所有小写字母替换成大写
echo "abcdefj" |tr 'a-z' 'A-Z'
ABCDEFJ
#按照ABC顺序替换,选择的字符【adf -> ABC】
echo "abcdefj" |tr 'adf' 'A-Z'
AbcBeCj
#【-c】的使用,将abc后面改成0 (\n 表示换行)
echo "abcdefjhizk" | tr -c 'abc\n' '0'
abc00000000
#【-d】的使用,删除选择字段(删除全部的o,d)
echo "hello world" |tr -d 'do'
hell wrl
#【-s】的使用,去重,(去除a,b重复出现的,改成一个)
echo "aaabc abbbccc" |tr -s 'ab'
abc abccc
#打印数组中使用的值,并通过数字排序
num=(2 5 8 0 7) #数组
echo ${num[@]} #打印数组中使用的值
#通过tr将所有空格改成换行符,在通过sort -n安照数字大小排序
echo ${num[@]} |tr ' ' '\n' |sort -n
0
2
5
7
8
cut命令
cut介绍:【卡特...】显示行中的指定部分,删除文件中指定字段
cut使用
1、通过指定哪一个字段进行提取。cut命令使用“TAB”作为默认的字段分隔符 【-f】
2、“TAB”是默认的分隔符,使用此选项可以更改为其他的分隔符 【-d】
例子:
#
lsblk |grep '^.d' |tr -s ' ' |cut -d " " -f4
#显示windows的换行符;或者 vim -b cat -v [win比unix多了 “^M”]
cat -A win.txt
20011113hdlcy^M$
cat -A unix.txt
20011113hdlcy$
#将不含换行符的文本存入另一个文本中
cat win.txt | tr -s "\r" "\n" > unix.txt
cat win.txt | tr -d "\r" > unix.txt
cat win.txt | cut -b 1-13 > unix.txt
yum install -y dos2unix |dos2unix win.txt #安装命令
WC命令
统计文本
-w 统计字数,或--words:只显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串
-c 统计字节数,或--bytes或--chars:只显示Bytes数
-l 统计行数,或--lines:只显示列数
-m 统计字符数
-L 打印最长行的长度
# 统计当前系统登入的人数
who |wc -l
locate命令
# 使用命令前安装locate数据库
yum install mlocate
updatedb #更新数据库
在文件资料中查找文件:【直接通过名字查找 模糊搜索 】
locate nginx.conf
/opt/nginx-1.18.0/conf/nginx.conf
/usr/local/nginx/conf/nginx.conf
/usr/local/nginx/conf/nginx.conf.default
which命令
搜索命令所在的目录及别名信息:
which nginx
/usr/local/sbin/nginx
whereis命令
搜索命令所在的目录及帮助文档路径:
whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz