Linux阶段练习(1)

坚强是说给别人听的谎言 提交于 2020-12-31 14:20:12

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 's@(.*/)(.+/?)+$@\1@' 注意有无/的区别就是后面是否有字符,(.+/?)+$ 锚定行尾需要有字符 

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 's@.*inet ((([0-9]{1,3}\.){3})([0-9]{1,3})).*@\1@' 注意要使用括号括住整个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:]]*)$'


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!