统计linux入门到shell脚本之间的基础练习题。

答案都由本人奇特思路所创,如有错误,请在下面评论,好及时改正!

练习题:

1,显示当前时间,格式为:2016-06-18 10:20:30

答案:date “+%F,%T” 或者 date “+%F %H:%M:%S”

 

2,显示前天是星期几?

答案:date -d “-2 day” +%A

知识点:一 ,date +%s 是把当前时间转化为秒数         二, date -d @”1523604170″ 把秒数转化回来

 

3,今天18:30自动关机,并提示用户。

答案:hutdown -h 18:30 “dao dian guan ji,18:30” 如果想取消此操作输入: shutdown -c

 

4,在本机字符终端登录时,除显示原有信息外,在显示当前登录终端号,主机名和当前时间。

答案:vim /etc/profile.d/kaiji.sh 进去后输入:#********************************************************************
echo your hostname is hostname
who am i

 

5,显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录。

答案:ls /var/l*[0-9]*[[:lower:]]

 

6,显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录。

答案:ls /etc/[0-9]*[^0-9]

 

7,显示/etc/目录下以非字母开头,后面跟了一个字母及其他任意长度任意字符的文件或目录。

答案:ls /etc/[^[:alpha:]][a-zA-Z]*

 

8,显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其他为任意字符的文件或目录。

答案:ls /etc/rc[0-6]*

 

9,显示/etc目录下,所有以.d结尾的文件或目录。

答案:ls /etc/*.d

 

10,显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录。

答案:ls /etc/[m,n,r,p]*.conf

 

11,只显示/root下的隐藏文件和目录。 只显示/etc下的非隐藏目录

答案:ls -d /root/.* ls /etc/[^.]*/ -d

 

12,定义别名命令baketc,每天将/etc/目录下的所有文件,备份到/app独立的子目录下,并要求子目录格式为backupYYYY-mm-dd备份过程可见。

答案:alias baketc=”cp -av /etc /data/backupdate +%F

 

13,创建/app/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限。

答案:mkdir -p /app/rootdir cp -a /root /app/rootdir/

 

14,如何创建/testdir/dir1/x,/testdir/dir/y,/testdir/dir/x/a,/testdir/dir/x/b,/testdir/dir/y/a,/testdir/dir/y/b.

答案:mkdir -p /testdir/dir1/{x,y}/{a,b}

 

15,如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b.

答案:mkdir -p /testdir/dir2/{x/{a,b},y}

 

16,如何创建/testdir/dir3,/testdir/dir4,/testdir/dir5,/testdir/dir5/dir6,/testdir/dir5/dir7.

答案:mkdir -p /testdir/{dir3,dir4,dir5/{dir6,dir7}}

 

17,将/etc/issue文件中的内容转化为大写后保存至/tmp/issue.out文件中。

答案:cat /etc/issue | tr “[a-z]” “[A-Z]” > /tmp/issue.out

 

18,将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中。

答案:who | tr “[a-z]” “[A-Z]” >/tmp/who.out

 

19,一个linux用户给root发邮件,要求邮件标题为” help”,邮件正文如下:Heello,i am 用户名,The system version is here ,please help me to check it,thanks! 操作系统版本信息

答案:mail -s “help” root <<123
>Hello,I am $USER
>The system version is here,please help me to check it,thanks!
>cat /etc/centos-release
>123

 

20,将/root/下文件列表,显示成一行,并文件名之间用空格隔开。

答案:ls /root | tr “\n” ” ”

 

21,计算1+2+3+..+99+100的总和。

答案:echo {1..100}|tr ” ” “+”|bc

 

22,删除Windows文本文件中的^M字符

答案:tr -d “\15” win.txt

 

23,处理字符串 “xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4” ,只保留其中的数字和空格。

答案:echo “xt.,l 1 jr#hostnamemn 2 c*/fe 3 uz 4” |tr -dc “[:digit:][:space:]”

 

24,将PATH变量每个目录显示在独立的一行。

答案:echo $PATH |tr “:” “\n”

 

25,将指定文件中0-9分别代替成a-j .

答案:先创建文件touch f1 给f1 vim 输入0-9 cat f1 | tr “[0-9]” “[a-j]”

 

26,将文件/etc/centos-release中每个单词(由字母组成)显示在独立的一行,并无空行。

答案:cat /etc/centos-release |tr -c “[:alpha:]” ” ” |tr -s ” ” “\n”

 

27,创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为”Gentoo Distribution”.

答案:useradd -G bin,root -s /bin/csh -c “Gentoo Distribution” gentoo

 

28,创建下面的用户,组和组成员关系
名字为webs的组 用户nginx使用webs作为附加组 用户varnish,也使用webs作为附加组
用户mysql,不可交互登录系统,且不是webs的成员,nbinx,varnish,mysql密码都是magedu

答案: groupadd webs       useradd -G webs nginx        useradd -G webs varnish         useradd -s /sbin/nologin masql

echo magedu |passwd –stdin nginx;
echo magedu |passwd –stdin varnish;
echo magedu |passwd –stdin mysql;

 

29,当用户docker对/testdir 目录无执行权限时,意味着无法做哪些操作?

答案: 不能cd进去,不能查看文件详细属性,也不能去访问目录里的文件内容(即使有读权限)。

 

30,当用户mongodb对/testdir 目录无读权限时,意味着无法做哪些操作?

答案:不能对目录下的文件进行访问。

 

31, 当用户redis 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?

答案:不能,因为对目录没有权限,所以不能。文件能不能删,不由文件决定,而由目录决定。

 

32,当用户zabbix对/testdir 目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除?

答案:可以修改和删除

 

33,复制/etc/fstab 文件到/var/tmp 下,设置文件所有者为tomcat 读写权限,所属组为apps组有读写权限,其他人无权限。

答案:(一)cp -a /etc/fstab /var/tmp (二) useradd tomcat (三) groupadd apps (四) chown tomcat /var/tmp (五) chgrp apps /var/tmp (六) chmod 660 /var/tmp

 

34,误删除了用户git的家目录,请重建并恢复该用户家目录及相应的权限属性。

答案:           rm -rf /home/git ;      mkdir /home/git;          cp -a /etc/skel/.[^.]* /home/git;                                                         chown -R git:git  /home/git;

35,在/testdir/dir 里创建的新文件自动属于webs组,组apps的成员如:tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文件有读权限,其他用户(不属于webs,apps,dbs)不能访问文件夹。

答案:                     mkdir -p /testdir/dir                                                                                                                                                       chgrp webs /testdir/dir                                                                                                                                                  chmod g=s /testdir/dir
setfacl -m g:apps:rw /testdir/dir                                                                                                                                     setfacl -m g:dbs:r /testdir/dir

chmod o= /testdir/dir

 

36,备份/testdir/dir 里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限。

答案:                     getfacl -R /testdir/dir > /root/acl.txt                                                                                                                          setfacl -b /testdir/dir

setfacl -R –set-file=acl.txt /testdir/dir

 

37, 找出ifconfig “网卡名” 命令结果中本机的IPv4地址。

答案:(方法一)ifconfig ens33 | grep netmask | tr -s ” ” “:” |cut -d: -f3

(方法二)ifconfig ens33 |egrep -o \<“(([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])”\>

(方法三)ifconfig ens33 | sed -n “2p” | sed -r s’@(.*inet)(.*)( netmask.*)@\2@’

 

38,查出分区空间使用率的最大百分比值。

答案:(方法一)df | grep ^/dev | tr -s ” ” “:” | cut -d: -f5 |cut -d% -f1 | sort -nr | head -n1

(方法二) df | grep -o “[0-9]\{1,3\}%” |grep -o “[0-9]\+” |sort -nr |head -n1

 

39,查出用户UID最大值得用户名,UID及shell类型。

答案:cat  /etc/passwd |sort -nr -t: -k3 |head -n1 |cut -d: -f1,3,7

 

40,查出/tmp的权限,以数字方式显示

答案:stat  /tmp |head -n4|tail -n1|cut -d/ -f1|cut -d'(‘ -f2

 

41, 统计当前连接本机的每个远程主机IP的连接数,并从大到小排序。

答案: 先从桌面获取rz 获取文件,再进行处理。                                                                                                                  cat access_log |egrep -o “\<(([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 -dc|sort -nr

 

 

42,显示/proc/meminfo 文件中以大小s开头的行(要求:使用两种方法)

答案:(方法一)cat /proc/meminfo |egrep -oi ^s.*

(方法二)cat /proc/meminfo |egrep ^[Ss].*

 

43,显示/etc/passwd文件中不以/bin/bash结尾的行。

答案:cat  /etc/passwd |egrep -v /bin/bash$

 

44,显示用户rpc默认的shell程序。

答案:(方法一)cat  /etc/passwd |egrep rpc|cut -d: -f1,7

(方法二)cat  /etc/passwd |egrep rpc|sed -r ‘s/(.*:)([^:]+:?$)/\2/’

 

45,找出/etc/passwd 中的两位或三位数

答案:cat  /etc/passwd | egrep -o “[0-9]{2,3}”

 

46,显示Centos7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行。

答案:cat  /etc/grub2.cfg |egrep ^[[:space:]][^[:space:]].*$

 

47,找出”netstat -tan” 命令结果中以LISTEN后跟任意多个空白字符结尾的行。

答案:netstat -tan |egrep .*LISTEN[[:space:]]+

 

48, 显示Centos7上所有系统用户的用户名和UID。

答案:cat  /etc/passwd |egrep .*/sbin/nologin$ |cut -d: -f1,3

 

49,添加用户bash,testbash,basher,sh,nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行。

答案:cat  /etc/passwd | egrep “^(.*)(:.*)\1$”

 

50,利用df和grep,去出磁盘各分区利用率,并从大到小排序。

答案:df |grep ^/dev |tr -s ” ” “:”|cut -d: -f5 |cut -d% -f1 |sort -nr|head -n1

 

51,显示三个用户root,mage,wang的UID和默认shell.

答案:cat /etc/passwd |egrep ^”(root|mage|wang)” |cut -d: -f1,3,7

 

52,找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行。

答案:cat /etc/rc.d/init.d/functions | egrep “^[a-zA-Z_]+\(\).*”

 

53,使用egrep取出/etc/rc.d/init.d/functions中其基名。

答案:echo /etc/rc.d/init.d/functions |egrep -o “[^/]*/?$”

 

54,使用egrep取出上面 路径的目录名。

答案:(方法一)echo /etc/rc.d/init.d/functions |egrep -o “/.*/”

(方法二)echo /etc/rc.d/init.d/functions |egrep -o “(/).*\1”

 

55,统计last命令中以root登录的每个主机IP地址登录次数。

答案:                  last |egrep root |egrep “\<(([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])\>”|tr -s ” ” “:”|sort -t: -k3|cut -d: -f3|uniq -dc

 

56,利用扩展正则表达式分别表示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]

 

57,显示ifconfig命令结果中所有IPV4地址。

答案:               ifconfig | egrep -o “\<(([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])\>”

 

58,将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的放在最前面。

答案:         echo “welcometomagedulinux” |grep -o “.”|sort|uniq -c|sort -nr

 

59,复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符。

答案:                                 cp /etc/profile /tmp/                                                                                                                                                            vim /tmp/profile                                                                                                                                               命令模式下按“:”进入扩展模式输入 %s/^[[:space:]]*//g

 

60, 复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号。

答案:                                    cp /etc/rc.d/init.d/functions /tmp                                                                                                                                 vim /tmp/functions                                                                                                                                                命令模式下按“:”进入扩展模式输入         %s/^[[:space:]] */#&/                                                                                                                                            或者           %s/\(^[[:space:]]\+.*\)/#\1/g

 

61, 在VIM中设置tab缩进为4个字符。

答案:                vim /etc/vimrc
在文件最后添加:
set ts=4
set expandtab
set autoindent
:wq

 

62,复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log.

答案:                                            cp /etc/rc.d/init.d/functions /tmp                                                                                                                              vim /tmp/functions                                                                                                                      命令模式下按“:”进入扩展模式输入               %s@\/etc\/sysconfig\/init@\/var\/log@

 

63, 删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号。

答案:                              vim /tmp/functions                                                                                                                                                      命令模式下按“:”进入扩展模式输入          %s@^#\(” “\+.*\)@\1@

 

64, 编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPV4,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。

答案: vim /root/bin/systeminfo.sh
#********************************************************************
echo hostname
echo ifconfig ens33 | egrep -o "\<(([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])\>"|head -n1

echo cat /etc/centos-release
echo uname -r
echo lscpu |grep "^Model name.*" |cut -d: -f2|tr -s " "
echo cat /proc/meminfo |head -n1
echo lsblk |grep '^sda'|tr -s " " "%"|cut -d% -f4
:wq

 

65, 编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYY-mm-dd中。

vim /root/bin/backup.sh                     cp -a /etc /root/etcdate +%F          :wq

 

66,编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值。

答案:       e=df|egrep ^/dev |tr -s " " ":"|cut -d: -f5|cut -d% -f1|sort -nr|head -n1
echo $e                                                                                                                                                                             :wq

 

67, 编写脚本/root/bin/links.sh ,显示正连接本主机的每个远程主机的IPV4地址和连接数,并按连接数从大到小排序。

      答案:                  vim /root/bin/linsk.sh                                                                                                                                                     a=cat access_log |egrep -o "\<(([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|sort -nr                                                                           echo $a

68, 编写脚本/root/bin/sumid.sh ,计算/etc/passwd 文件中的第10个用户和第20用户的ID之和。

答案:              vim /root/bin/sumid.sh                                                                                                                                                 a=cat /etc/passwd | head -n10 |tail -n1|cut -d: -f3
b=cat /etc/passwd | head -n20 |tail -n1|cut -d: -f3
let c=a+b 或 d=$[ a+b ]                                                                                                                                                  echo $d

 

69, 编写脚本/root/bin/sumspace.sh ,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和。

答案:                                 vim /root/bin/sumspace.sh                                                                                                                                         a=cat f1 |egrep ^[[:space:]]*$ |wc -l                                                                                                                         b=cat f2 |egrep ^[[:space:]]*$ |wc -l

let c=a+b

 

70, 编写脚本/root/bin/sumfile.sh ,统计/etc ,/var,/usr 目录中共有多少个一级子目录和文件。

答案:vim /root/bin/sumfile.sh                       a=ls /etc/ |wc -l                                                                                                                                                           b=ls /var/ |wc -l c=ls /usr/ |wc -l
let d=a+b+c

 

71, 编写脚本/root/bin/argsnum.sh ,接受一个文件路径作为参数;如果参数个数小于1,则提示用户 “至少应该给一个参数”,并立即退出;如果参数个数不少于1,则显示第一个参数所指向的文件中的空白行数。

答案:         vim /root/bin/argsnum.sh                                                                                                                                             [ $# -lt 1] &&  echo “At least one parameter should be given” && exit
[ $# -ge 1] &&  echo egrep "^[[:space:]]*$"  $1|wc -l

 

73, 编写脚本/root/bin/hostping.sh ,接受一个主机的IPV4地址做为参数,测试是否可连通。如果能ping通,则提示用户 “该IP地址可以访问” ;如果不可ping通,则提示用户 “该IP地址不可访问”。

答案:                vim /root/bin/hostping.sh                                                                                                                                         [[ $1 =~ “\<(([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])\>” ]] || echo { “IP error”;exit; }                                                                                    ping $1 && echo “This address can be accessed”|| echo “This address cannot be accessed”

74, 编写脚本/root/bin/checkdisk.sh , 检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满。

答案:                    vim /root/bin/checkdisk.sh                                                                                                                                       a=df |egrep ^/dev |tr -s " " ":" |cut -d: -f5 |cut -d% -f1|sort -nr|head -n1
[[ $a -ge 80 ]] && echo “zhao huo la ” || echo { “yi qie zheng chang”;exit; }

 

75, 编写脚本/bin/per.sh ,判断当前用户对指定参数文件,是否不可读并且不可写。

答案:           [ -not -r $1 -a -not -w $1 ] && echo “bu ke du ”
[ \( -r $1 -o -w $1 \) ] || echo “ke du ”

 

 

76,编写脚本/root/bin/excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件。

答案:            vim /root/bin/excute.sh                                                                                                                                                   [[ $1 =~ .*sh$ ]] && chmod +x $1 || echo “bu shi jiao ben wen jian “

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96122

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班