近期的一些Linux文本工具练习题
自上次学了之后就一直没学了,主要是工作太忙,这次决定静下心来好好学,工作已辞。
简单工具练习
1、找出ifconfig “网卡名”命令结果中本机的IPv4地址
[root@centos81 ~]#ifconfig ens160 | head -n2 | tail -n1 | tr -s " " | cut -d " " -f3
10.0.0.205
2、查出分区空间使用率的最大百分比值
[root@centos81 ~]#df -h | grep "/dev/nv*" | tr -s " " | cut -d" " -f5 | sort -nr | head -n1
15%
3、查出用户UID最大值的用户名、UID及shell类型
[root@centos81 ~]#cat /etc/passwd | cut -d: -f1,3,7 | sort -nr | head -n1
wang:1101:/bin/bash
4、查出/tmp的权限,以数字方式显示
[root@centos81 ~]#stat /tmp | head -n4 | tail -n1 | cut -d" " -f2 | tr -d "(" | cut -d"/" -f1
1777
5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
[root@centos81 ~]#netstat -nt | tail -n+3 | tr -s " " | cut -d" " -f4 | sort -nr | uniq -c
2 10.0.0.205:22
grep练习
1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
[root@centos81 ~]#grep -i ^s /proc/meminfo
[root@centos81 ~]#grep ^[sS] /proc/meminfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行
[root@centos81 ~]#grep -v ".*/bin/bash$" /etc/passwd
3、显示用户rpc默认的shell程序
[root@centos81 ~]#grep ^rpc.* /etc/passwd | cut -d: -f7
[root@centos81 ~]#grep ^rpc.* /etc/passwd | grep -o "/[a-z]\+/[a-z]\+$"
4、找出/etc/passwd中的两位或三位数
[root@centos81 ~]#grep -o "\b[0-9]\{2,3\}\b" /etc/passwd
5、显示CentOS8的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
[root@centos81 etc]#grep -E "^ {1,}[^ ]{1,}" /etc/grub2.cfg
6、找出"netstat -tan"命令结果中以LISTEN后跟任意多个空白字符结尾的行
[root@centos81 ~]#netstat -tan | grep ".*LISTEN \+$"
7、显示CentOS8上所有UID小于1000以内的用户名和UID
[root@centos81 ~]#cat /etc/passwd | cut -d: -f1,3 | grep ".*\:[0-9]\{,3\}$"
8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行
[root@localhost ~]# echo bash testbash basher sh nologin | xargs -n1 useradd
[root@localhost ~]# usermod -s /sbin/nologin nologin
[root@localhost ~]# grep "^sh:" /etc/passwd
9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
[root@centos81 ~]#df -h | grep "/dev/nv*" | tr -s " " | cut -d" " -f5 | sort -nr
egrep练习
1、显示三个用户root、mage、wang的UID和默认shell
[root@centos81 ~]#grep -E "^(root|mage|wang).*" /etc/passwd | cut -d: -f1,3,7
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
[root@centos81 ~]#grep -E "^[[:alnum:]]*\(\).*" /etc/rc.d/init.d/functions
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
[root@centos81 ~]#echo /etc/rc.d/init.d/functions | egrep -o "[a-z]*$"
4、使用egrep取出上面路径的目录名
[root@centos81 ~]#echo /etc/rc.d/init.d/functions | egrep -o "^/.*/"
5、统计last命令中以root登录的每个主机IP地址登录次数
[root@centos81 ~]#last | egrep "^root" | egrep -o "([0-9]+\.){3}[0-9]+" | uniq -c
6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
[root@centos81 data]#cat file1
0
9
10
99
100
199
200
249
250
255
[root@centos81 data]#egrep -o "^[0-9]$" file1
[root@centos81 data]#egrep -o "^[0-9]{2}$" file1
[root@centos81 data]#egrep -o "^[0-1][0-9]{2}$" file1
[root@centos81 data]#egrep -o "^2[0-4][0-9]$" file1
[root@centos81 data]#egrep -o "^25[0-5]$" file1
7、显示ifconfig命令结果中所有IPv4地址
[root@centos81 data]#ifconfig | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
8、将此字符串: welcome to magedu linux中的每个字符去重并排序,重复次数多的排到前面
[root@centos81 data]#echo "welcome to magedu linux" | egrep -o "[[:alpha:]]" | sort | uniq -c |sort -nr
sed练习:
1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符
[root@centos81 data]#sed -nr "s/^[[:space:]]+(.*)/\1/p" /data/grub2.txt
2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
[root@centos81 data]#sed -nr 's/^#[[:space:]]+(.*)/\1/p' /data/fstab
3、在centos6系统/root/install.log每一行行首增加#号
[root@centos6 data]#sed -nr 's/(.*)/#\1/p' install.log
4、在/etc/fstab文件中不以#开头的行的行首增加#号
[root@centos81 data]#sed -nr 's/^[^#](.*)/#\1/p' fstab
5、处理/etc/fstab路径,使用sed命令取出其目录名和基名
[root@centos81 data]#echo "/etc/fstab" | sed -nr 's/(^\/.*\/)*(.*)/\1/p'
/etc/
[root@centos81 data]#echo "/etc/fstab" | sed -nr 's/(^\/.*\/)*(.*)/\2/p'
fstab
6、利用sed取出ifconfig命令中本机的IPv4地址
[root@centos81 data]#ifconfig ens160 | sed -nr '/^[[:space:]]*inet\b/s@^[^0-9]*([0-9.]+).*@\1@p'
10.0.0.205
7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数
[root@centos81 data]#ls /mnt/Packages/ | sed -nr 's/.*\.(.*)\.rpm/\1/p'| sort | uniq -c
8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)
这道题感觉自己做的不对,因为文件里面的单词很多以下划线分开,众所周知下划线是无法分开单词的,所以用sed的话某些单词的出现次数会增多
[root@centos81 data]#egrep -ow "[[:alpha:]]+" /etc/init.d/functions | sort | uniq -c | sort -n
[root@centos81 data]#sed -r 's/[^[:alpha:]]+/\n/g' /etc/init.d/functions | sed -r '/^$/d' | sort | uniq -c | sort -n
9、将文本文件的n和n+1行合并为一行,n为奇数行
[root@centos81 data]#sed '1~2N;s/\n//p' a.txt