Linux阶段练习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux阶段练习相关的知识,希望对你有一定的参考价值。
1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
# cat /proc/meminfo | grep -i '^s'
# grep '^[sS]' /proc/meminfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行
# grep -E '/bin/bash$' /etc/passwd
3、显示用户wang默认的shell程序
# grep '^wang' /etc/passwd | grep -oE '/s?bin.*/.*$'
# grep '^wang' /etc/passwd | cut -d: -f7
4、找出/etc/passwd中的两位或三位数
# grep -Eo '[0-9]{2,3}' /etc/passwd
5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
# grep -E '^[[:space:]]+[^[:space:]]+' /etc/grub2.cfg
6、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行
# netstat -ant |grep -E 'LISTEN[[:space:]]+$'
7、显示CentOS7上所有系统用户的用户名和UID
# cat /etc/passwd|grep -E '.*:[2-9][0-9][0-9]:[0-9]+.*' |cut -d: -f1,3
8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行
# cat /etc/passwd |grep -E '^(.*):x:.*/\1$' 注意grep后向引用的使用
9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
# df |grep -E '1?[0-9]?[0-9]%'|tr -s ' '|sort -t' ' -k5 -nr | cut -d' ' -f5
10、显示三个用户root、mage、wang的UID和默认shell
# cat /etc/passwd | grep -E '^(root|mage|wang)'| cut -d: -f3,7
11、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
# cat functions |grep -E '^_*[[:alpha:]]+_*[[:alpha:]]+_*\(' 注意最后小括号的转义
12、使用egrep取出/etc/rc.d/init.d/functions中其基名
# echo "/etc/rc.d/init.d/functions" | egrep -o '[[:alpha:]]+$' 注意要使用[[:space:]],非[:space:],只有tr使用[:space:]类似的格式,因为是字符'a-z'
# echo /etc/rc.d/init.d/functions |sed -r '[email protected](.*/)(.+/?)[email protected]\[email protected]' 注意有无/的区别就是后面是否有字符,(.+/?)+$ 锚定行尾需要有字符
13、使用egrep取出上面路径的目录名
# echo "/etc/rc.d/init.d/functions" | egrep -o '.*/'
14、统计last命令中以root登录的每个主机IP地址登录次数
# last |grep -Eo "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" |sort | uniq -c
注意前面匹配时的双括号不然不能出现三个.只有1个. 后面的也要有()号,grep 使用时注意pattern一定要加引号,单引号、双引号均可
15、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
# "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
16、显示ifconfig命令结果中所有IPv4地址
# ifconfig |grep -Eo '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
17、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
# echo "welcome to magedu linux" |grep -o '.'|sed '/^[[:space:]]*$/d'|sort|uniq -c|sort -nr
注意: sed '/^$/d' 注意两个斜线必须有,否则报错,更保险的写法: /^[[:space:]]*$/d
18、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
# :%s/^[[:space:]]+//
19、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
# :%s/^ \+/#&/
20、显示当前时间,格式:2016-06-18 10:20:30
# date "+%F %T"
21、显示前天是星期几
# date -d '-2 day' +%A
22、设置当前日期为2019-08-0706:05:10
# date 080706052019.10 (月日时分年.秒)
********************************************
文件通配符:
1.* 匹配0个或多个字符
2.? 匹配任意单个字符
3.[0-9] 匹配数字范围
4.[a-z] a A b B ... y Y z
5.[A-Z] A b c C ..z Z
6.[wang] 匹配列表中任何一个字符
7.[^wang] 匹配列表中的所有字符以外的字符
预定义的字符类:
[[:digit:]]: 任意数字,相当与[0-9]
[[:lower:]]:任意小写字母
[[:upper:]]: 任意大写字母
[[:alpha:]]: 任意大小写字母
[[:alnum:]]:任意数字或字母
[[:blank:]]:水平空白字符
[[:space:]]:水平或垂直空白字符
********************************************
23、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
# ls -d /var/l*[[:digit:]]*[[:lower:]]
24、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
# ls -d /etc/[[:digit:]]*[^[:digit:]]
25、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
# ls -d /etc/[^[:alpha:]][[:alpha:]]*
26、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
# ls -d /etc/rc[0-6]*
27、显示/etc目录下,所有以.d结尾的文件或目录
# ls -d /etc/*.d
28、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
# ls -d /etc/[mnrp]*.conf
29、只显示/root下的隐藏文件和目录
# ls -d /root/.[^.]*
30、只显示/etc下的非隐藏目录
# ls -d /etc/*/
31、定义别名命令baketc,每天将/etc/目录下所有文件,备份到/app独立的子目录下,并要求子目录格式为backupYYYY-mm-dd,备份过程可见
# alias baketc='cp -av /etc /app/backup`date +%F`'
32、创建/app/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
# mkdir /app
# cp -a /root /app/rootdir
33、如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
# mkdir -pv /testdir/dir1/{x/,y/}{a,b}
34、如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b
# mkdir -pv /testdir/dir2/{x/{a,b},y}
35、如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
# mkdir -pv /testdir/dir{3,4,5/dir{6,7}}
36、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
# tr 'a-z' 'A-Z' < /etc/issue > /tmp/issue.out
# tr '[:lower:]' '[:upper:]' < /etc/issue > /tmp/issue.out
37、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
# who |tr 'z-z' 'A-Z' > /tmp/who.out
38、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,The system version is here,please help me to check it ,thanks!
操作系统版本信息
# mail -s 'help' << EOF
Hello, I am $USER,
The System version is here, please help me to check it ,thanks
OS Version: `cat /etc/centos-release`
EOF
39、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
# ls /root |tr '\n' ' '
40、计算1+2+3+..+99+100的总和
# echo {1..100}| tr -s ' ' '+'| bc
# seq -s"+" 100 |bc
41、删除Windows文本文件中的‘^M’字符
# tr -d '\r' < windows_file
# tr -d '\15' < windows_file
42、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格
# echo "xt.,l 1 jr#' 'mn 2 c*/fe 3 uz 4" | tr -c -d '[^0-9 ]' -c 取反
43、将PATH变量每个目录显示在独立的一行
# echo $PATH |tr ':' '\n'
44、将指定文件中0-9分别替代成a-j
# cat file | tr '0-9' 'a-j'
45、将文件/etc/centos-release中每个单词(由字母组成)显示在独立的一行,并无空行
# cat /etc/centos-release | tr ' ' '\n' | tr -d '[:digit:][:punct:]'|grep -v '^$'
46、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"
# useradd -s /bin/csh -c "Centoo Distribution" -G bin,root gentoo
47、创建下面的用户、组和组成员关系
名字为webs 的组
用户nginx 使用webs 作为附属组
用户varnish,也使用webs 作为附属组
用户mysql,不可交互登录系统,且不是webs 的成员,nginx,varnish,mysql密码都是magedu
# groupadd webs
# useradd nginx -G webs
# useradd varnish -G webs
# useradd -r mysql
# echo "mage" |passwd --stdin mysql
# echo "mage" |passwd --stdin varnish
# echo "mage" |passwd --stdin nginx
48、当用户docker对/testdir 目录无执行权限时,意味着无法做哪些操作?(只有rw权限)
# 不能使用cd切换至该目录,不能删除目录下的文件,不能显示文件夹下文件的属性信息
49、当用户mongodb对/testdir 目录无读权限时,意味着无法做哪些操作?(只有wx权限)
# 能够切换至该testdir目录,但使用ls不能查看到目录下的文件或文件夹,可以删除文件夹下知道的文件或文件夹,但却不能使用rm -f * 来删除所有文件,也可以修改知道的文件内容
50、当用户redis 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?(只有rx权限)
# 不可删除,能否删除文件与文件的权限和所属关系无关,只查看所处文件夹是否有写权限。
51、当用户zabbix对/testdir 目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除?
# 可以修改目录下的只读文件file1,需要强制修改,使用wq!,也可以删除目录下的file1
52、复制/etc/fstab文件到/var/tmp下,设置文件所有者为tomcat读写权限,所属组为apps组有读写权限,其他人无权限
# cp /etc/fstab /var/tmp
# chown tomcat.apps /var/tmp
# chmod 660 /var/tmp
53、误删除了用户git的家目录,请重建并恢复该用户家目录及相应的权限属性
# mkdir -pv /home/git -m 700
# cp -a /etc/skel/.[^.]* /home/git
# chown -R git:git /home/git
54、在/testdir/dir里创建的新文件自动属于webs组,组apps的成员如:tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文件有读权限,其它用户(不属于webs,apps,dbs)不能访问这个文件夹
# groupadd apps
# groupadd webs
# groupadd dbs
# useradd tomcat
# useradd mysql
# groupmems -a tomcat -g apps
# groupmems -a mysql -g dbs
# chmod 770 /testdir/dir
# chown webs:webs /testdir/dir
# chmod g+s /testdir/dir
# setfacl -m g:apps:rwx /testdir/dir
# setfacl -m g:dbs:rx /testdir/dir
55、备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限
# getfacl -R /testdir/dir > /root/acl.txt
# setfacl -R -b /testdir/dir
# setfacl --restore acl.txt
56、找出ifconfig “网卡名” 命令结果中本机的IPv4地址
# ifconfig ens33 |sed -n '2p'|sed -r 's/.*inet //' |sed -r 's/ net.*//'
# ifconfig ens33 | sed -n '2p' |sed -r '[email protected]*inet ((([0-9]{1,3}\.){3})([0-9]{1,3})).*@\[email protected]' 注意要使用括号括住整个ip作为后向\1
57、查出分区空间使用率的最大百分比值
# df |grep -Eo '[[:digit:]]{1,3}%'|sort -nr |head -1
# df |tr -s ' ' ':'| sed -n '2,$p'|cut -d: -f5 |sort -nr |head -1
58、查出用户UID最大值的用户名、UID及shell类型
# cat /etc/passwd|sort -t: -k3 -n -r| head -1 |cut -d: -f1,3,7
59、查出/tmp的权限,以数字方式显示
# 1777
60、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
# netstat -nt |grep 'ESTABLISHED'|tr -s ' ' ':'|cut -d: -f6|sort -nr |uniq -c
61、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
# cat /proc/meminfo |grep -i '^s'
# cat /proc/meminfo |grep '^[Ss]'
62、显示/etc/passwd文件中不以/bin/bash结尾的行
# cat /etc/passwd |grep -v '/bin/bash$'
63、显示用户rpc默认的shell程序
# cat /etc/passwd |grep -w 'rpc'|sed -r 's/.*://'
64、找出/etc/passwd中的两位或三位数
# cat /etc/passwd |grep -Eo'[0-9]{2,3}'
65、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
# cat /etc/grub2.cfg | grep -E '^[[:space:]]+[^[:space:]]+'
66、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行
# netstat -ant |grep -E '(LISTEN[[:space:]]*)$'
以上是关于Linux阶段练习的主要内容,如果未能解决你的问题,请参考以下文章