马哥2016全新Linux+Python高端运维班第五周作业

1、显示当前系统上root、fedora或user1用户的默认shell;

答:需要找到3个字符串,需要用到“或”命令,所以使用egrep。找到后cut再次筛选出我们需要显示的用户默认的shell。

2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();

答:

3、使用echo命令输出一个绝对路径,使用grep取出其基名;

答:首先我们要了解什么是路径的基名和路径名:

基名:可以理解为路径名最右边的名称;

路径名:除基名以外的路径;

了解之后我们使用grep取出一个路径的基名

注:"\<[^/]\+" 意思为匹配非"/"开头的单词,"\<"为词首锚定,"\+"为匹配前面的条件至少一次;

"/\?$" 意思为匹配行尾"/"符号可有可无的行,"\?"匹配前面的字符0或1次,"$"行尾锚定。

条件"\<[^/]\+/\?$" 即匹配非"/"开头的单词并且行尾的"/"可有可无

命令扩展:

grep的条件中使用了很多"\"来转义,为了方便简洁,还可以使用egrep来完成,如下图;

此外,我们还可以使用basename命令直接获取一个路径的基名,如下图;      

也可以使用dirname命令直接获取一个路径的路径名,如下图;

扩展:取出其路径名

4、找出ifconfig命令结果中的1-255之间数字;

答:此匹配模式仅仅只是找出1-255之间的数字,不考虑IP等因素‘

5、挑战题:写一个模式,能匹配合理的IP地址;

答:可编写一个脚本来实现,思路是先判断每个数字是否小于255,要合理且可用必须小于255;然后通过行首行尾锚定来确定给出的IP地址位数,大于或小于4位判断为非可用IP。脚本如下:

测试结果如下:

[[email protected] ~]# alias testip="./testip.sh"   ##定义脚本别名,要永久定义请修改配置文件
[[email protected] ~]# testip 254.254.254                 ##给出的IP地址只有3个,不符合可用IP要求
The ip is not reasonable
[[email protected] ~]# testip 2.111.111.111               ##正确可使用IP
The ip is reasonable
[[email protected] ~]# testip 199.250.3.1
The ip is reasonable
[[email protected] ~]# testip 255.3.2.1                   ##有一个不小于255,不可用
The ip is not reasonable
[[email protected] ~]# testip 14.0.0.1
The ip is reasonable
[[email protected] ~]# testip 14.0.0.0                    ##此IP理论上可用,但是若要配置给服务器使用
The ip is not reasonable                           是不行的,故不放在考虑范围
[[email protected] ~]# testip 14.0.0.1.2                  ##大于4个,不可用
The ip is not reasonable

6、挑战题:写一个模式,能匹配出所有的邮件地址;

答:可编写一个脚本来实现;思路为匹配任意字母或数字开头且有@符号,后跟任意字母或数字且以.com或.cn结尾的字符串。

测试结果如下

[[email protected] ~]# alias testm="./testmail.sh"       ##定义脚本别名,要永久定义请修改配置文件
[[email protected] ~]# testm [email protected]
This is a email address
[[email protected] ~]# testm [email protected]
This is a email address
[[email protected] ~]# testm [email protected]
This is a email address
[[email protected] ~]# testm [email protected]
This is a email address
[[email protected] ~]# testm lkjsdfkljs
This is not a email address
[[email protected] ~]# testm [email protected]
This is not a email address 
[[email protected] ~]# testm [email protected]
This is a email address

7、查找/var目录下属主为root,且属组为mail的所有文件或目录;

答:

注:-user root:查找指定属主为root的文件或目录;

-group mail:查找指定属组为mail的文件或目录;

-ls:相当与ls -l

8、查找当前系统上没有属主或属组的文件;

答:find命令中查找没有属主的选项为"-nouser";查找没有属组的选项为"-nogroup"

进一步:查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录;

为了便于演示,我们先创建2个文件文件,修改其属主和属组以及访问时间:

[[email protected] test]# touch testatime1.txt         ##创建文件1
[[email protected] test]# touch testatime2.txt         ##创建文件2
[[email protected] test]# touch -a -t 201609011342.34 testatime1.txt       ##修改文件1访问时间 
[[email protected] test]# touch -a -t 201609021521.54 testatime2.txt       ##修改文件2访问时间
[[email protected] test]# chown 1001:1001 /test/testatime1.txt           ##修改文件1属主和属组为无
[[email protected]sd test]# chown 1001:1001 /test/testatime2.txt           ##修改文件2属主和属组为无

  ##说明:所谓无属组和无属主,就是在/etc/passwd文件中无有效的UID和GID,此次试验中我的/etc/passwd文件
没有UID号为1001的用户和GID号为1001的组,所以判定为无属主或无属组。

[[email protected] test]# stat testatime1.txt          ##查看文件1的状态
  File: "testatime1.txt"
  Size: 0         	Blocks: 0          IO Block: 4096   普通空文件
Device: 802h/2050d	Inode: 395343      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-09-01 13:42:34.000000000 +0800      ##此为访问时间
Modify: 2016-09-03 01:58:41.270874816 +0800      ##此为修改时间
Change: 2016-09-03 01:59:09.409420634 +0800      
[[email protected] test]# stat testatime2.txt          ##查看文件2的状态    
  File: "testatime2.txt"
  Size: 0         	Blocks: 0          IO Block: 4096   普通空文件
Device: 802h/2050d	Inode: 395769      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-09-02 15:21:54.000000000 +0800
Modify: 2016-09-03 01:58:44.166927110 +0800
Change: 2016-09-03 01:59:28.165787554 +0800
[[email protected] test]# find / \( -nouser -o -nogroup \) -atime -3 -ls   ##find可使用组合条件            
                                        "-o"表示为条件或,
                                        "-a"指明访问时间,
                                        "-ls"同等于"ls -l"
                                        使用条件组合时必须使用
                                        括号且括号需转义

结果图如下:

9、查找/etc目录下所有用户都有写权限的文件;

答:find命令可以根据权限来查找,使用选项为"-perm"。

[[email protected] test]# find /etc -perm -222 -ls;

效果如下

"-222"匹配的权限为属主拥有写权限,属组拥有写权限,其他用户拥有写权限;

说明:find使用权限查找时有三种用法;

①find /etc -perm /MODE;此用法表示任何一类(u,g,o)对象权限中的只要能一位匹配即可;

②find /etc -perm -MODE;此用法表示每一类对象都必须同时拥有为其指定的权限标准;

③find /etc -perm MODE;此用法表示精确权限匹配;

10、查找/etc目录下大于1M,且类型为普通文件的所有文件;

答:find命令可根据文件大小来查找,使用选项"-size"

说明:

-size [+|-]#UNIT

常用单位:k,M,G

#UNIT:不加+-号,大于#-1,小于或等于#

-#UNIT:大于0,小于或等于#-1

+#NUIT:大于#

效果如下:

11、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的文件;

答:

12、查找/usr目录下不属于root、bin或hadoop的文件;

答:为了便于演示,我们首先创建两个test文件,并修改属主;

[[email protected] usr]# touch test1.txt            ##创建文件
[[email protected] usr]# touch test2.txt
[[email protected] usr]# chown bash: test1.txt         ##修改文件属主
[[email protected] usr]# chown testbash: test2.txt
[[email protected] ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls   ##find支持条件查询,"-o"为或;"-not"为非。
133800    0 -rw-r--r--   1 bash     bash            0 9月  3 14:18 /usr/test1.txt
133804    0 -rw-r--r--   1 testbash testbash        0 9月  3 14:18 /usr/test2.txt
137096   12 -rwsr-xr-x   1 abrt     abrt        10096 8月 14  2013 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache

结果如下:

13、查找/etc/目录下至少有一类用户没有写权限的文件;

答:

[[email protected] ~]# find /etc ! -perm -222 -ls
 说明:"-222"表示查找所有权限中都有写权限的文件和目录,要查找至少有一类用户没有写权限的,我们进行取反即可;
    "!"表示非,等同于"-not"

效果如下:

14、查找/etc目录下最近一周内其内容被修改过,且不属于root或hadoop的文件;

答:

[[email protected] etc]# touch test.txt                ##新建文件
[[email protected] etc]# touch test1.txt  
[[email protected] etc]# chown bash: test.txt          ##修改文件属主
[[email protected] etc]# chown basher: test1.txt 
[[email protected] etc]# vi test.txt                   ##编辑文件,满足一周内被修改过的条件
[[email protected] etc]# vi test1.txt 
[[email protected] ~]# find /etc \( ! \( -user root -o -user hadoop \) \) -a \( -mtime -7 \) -ls
  3781    4 -rw-r--r--   1 basher   basher         16 9月  3 14:46 /etc/test1.txt
  3782    4 -rw-r--r--   1 bash     bash           17 9月  3 14:46 /etc/test.txt
  
[[email protected] ~]# touch -m -t 201608021423.42 /etc/test1.txt   ##修改/etc/text1.txt的modify time
[[email protected] ~]# stat /etc/test1.txt                          ##查看/etc/text1.txt文件状态
  File: "/etc/test1.txt"
  Size: 16        	Blocks: 8          IO Block: 4096   普通文件
Device: 802h/2050d	Inode: 3781        Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 3006/  basher)   Gid: ( 3008/  basher)
Access: 2016-09-03 14:46:38.969278255 +0800
Modify: 2016-08-02 14:23:42.000000000 +0800
Change: 2016-09-03 14:52:48.479680378 +0800

[[email protected] ~]# find /etc \( ! \( -user root -o -user hadoop \) \) -a \( -mtime -7 \) -ls
  3782    4 -rw-r--r--   1 bash     bash           17 9月  3 14:46 /etc/test.txt

效果如下:

为了更好的看出效果,我们修改下test1的modify time

时间: 2024-12-10 14:41:13

马哥2016全新Linux+Python高端运维班第五周作业的相关文章

马哥2016全新Linux+Python高端运维班第三周作业作答

                    马哥2016全新Linux+Python高端运维班第三周作业                                           1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可.     [[email protected] ~]# who | awk '{print $1 $NF}'| uniq -d     [[email protected] ~]# who     yicx     :0  

马哥2016全新Linux+Python高端运维班第八周作业

1.请描述网桥.集线器.二层交换机.三层交换机.路由器的功能.使用场景与区别. 答: 网桥:双端口的二层设备,可以隔离冲突域,一般用于划分LAN,或者链接LAN. 集线器:物理层设备,多端口,无法隔离冲突域,用于连接主机. 二层交换机:数据链路层设备,多端口,与网桥相比,交换机可学习MAC地址,根据MAC地址转发数据,可隔离冲突域,用于在路由设备与主机之间架设,接入层与汇聚层皆可使用. 三层交换机:相当于是带路由功能的二层交换机,工作在网络层,有更高的带宽,可做核心层使用,用于大中型网络的路由交

马哥2016全新Linux+Python高端运维班第三周作业

本周作业内容: 1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. # who | cut -d' ' -f1 | sort -u 2.取出最后登录到当前系统的用户的相关信息. # id $(who | sort -t' ' -k3,4 | tail -1 | cut -d' ' -f1) 3.取出当前系统上被用户当作其默认shell的最多的那个shell. # cut -d: -f7 /etc/passwd | sort | uniq -c | sort

[作业] 马哥2016全新Linux+Python高端运维班第八周作业

1.请描述网桥.集线器.二层交换机.三层交换机.路由器的功能.使用场景与区别. 网桥:比较古老的方式二层交换设备,网桥的两个端口分别有一条独立的交换信道,不是共享一条背板总线,可隔离冲突域.类似中继器. 集线器: 二层交换设备,多口的网桥 二层交换机: 二层交换设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中 三层交换机: 工作在二层和三层,具有路由功能的交换机.三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有

马哥2016全新Linux+Python高端运维班第七周作业

1.创建一个10G分区,并格式为ext4文件系统: (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl: (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳: 2.创建一个大小为1G的swap分区,并创建好文件系统,并启用之: 3.写一个脚本 (1).获取并列出当前系统上的所有磁盘设备: (2).显示每个磁盘设备上每个分区相关的空间使用信息: 4.总结RAID的各个级别及其组合方式和性能的不同

马哥2016全新Linux+Python高端运维班第六周作业

1.复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#: 答:可使用vim的查找替换功能完成: 命令如下: [[email protected] ~]# cp /etc/rc.d/rc.sysinit /tmp       ##复制文件 [[email protected] ~]# vim /tmp/rc.sysinit            ##vim编辑该文件 命令结果如下(下图红框为与上图对比效果):

马哥2016全新Linux+Python高端运维班-Linux用户创建及权限管理

第三周作业内容:1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可.     [[email protected] ~]# who | cut -d' ' -f1 | sort -u      centos     liu     root 2.取出最后登录到当前系统的用户的相关信息.     第一种方式:         [[email protected] ~]# last | head -n1         liu      tty8        

马哥2016全新Linux+Python高端运维班-Linux服务 DNS,httpd,加密通讯,vsftp,NFS,samba服务练习

本周作业内容: 1.详细描述一次加密通讯的过程,结合图示最佳. 一次加密通讯的过程: 首先Bob用单向加密的方法提取数据的特征码,用自己的私钥加密这段特征码,并附加到数据的后面. Bob用对称加密算法把数据及特征码整个进行加密. Bob用接收方的公钥加密对称密钥并附加到数据后面. Alice用私钥解密对称密钥. Alice用对称密钥解密出数据及加密的特征码. Alice用发送方的公钥解密特征码,并用相同的算法算出数据的特征码,比较两个特征码是否一致,若一致即可获得Bob的数据. 如图所示: 单向

马哥2016全新Linux+Python高端运维班十一次作业

一.源码编译安装LNMP架构环境: 安装编译工具及库文件 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl