马哥2016全新Linux+Python高端运维班-Linux grep正则表达式练习,及find命令

本周作业内容:

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

    [[email protected] home]# grep -E  "^(root|fedora|user1)\>" /etc/passwd |cut -d: -f1,7  
    root:/bin/bash            
    user1:/bin/bash
    fedora:/bin/bash
    #本题使用扩展的正则表达式
    #^:首行 |:或者 ():将一个或者多个字符捆绑在一起当作一个整体来处理 \>:表示词尾定锚定
    #cut -d: f1,7 表示用:号作为分隔符,截取第1字段和第7个字段.分别代表用户名和默认的登陆shell

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

    [[email protected] /]# grep -E -o "[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions 
    fstab_decode_str()
    checkpid()
    __readlink()
    __fgrep()
    __umount_loop()
    __umount_loopback_loop()
    __pids_var_run()
    __pids_pidof()
    daemon()
    killproc()
    pidfileofproc()
    pidofproc()
    status()
    echo_success()
    echo_failure()
    echo_passed()
    echo_warning()
    update_boot_stage()
    success()
    failure()
    passed()
    warning()
    action()
    strstr()
    confirm()
    get_numeric_dev()
    is_ignored_file()
    is_true()
    is_false()
    apply_sysctl()
    key_is_random()
    find_crypto_mount_point()
    init_crypto()
    #使用grep -E 或者egrep扩展正则表达式,-o 表示只匹配到符合的字符
    #[_[:alpha:]]表示以_或者大小写字母开头的字符;+表示前面的字符出现一次或多次;
    #要匹配包含()的行,在过滤时需要对小括号进行转义:\(\)

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

    [[email protected] /]# echo "/tmp/ljohn/useradd.sh" | grep -E -o "[^/]+$"
    useradd.sh
    [[email protected] ~]# echo "/tmp/ljohn/useradd.sh/" |grep -Eo "[^/]+/?$" |cut -d‘/‘ -f1
    useradd.sh

#基名basename /tmp/ljohn/useradd.sh

    [[email protected] ~]# basename /tmp/ljohn/useradd.sh
    useradd.sh
    [[email protected] ~]# basename /tmp/ljohn/useradd.sh/
    useradd.sh
     #这样可以看出第二种同basename命令。
    #行尾的字符串[^/]除了/斜线的任意内容,+代表这个/至少出现1次
    #$:表示行尾锚定

扩展:取出其路径名

    [[email protected] /]# echo "/tmp/ljohn/useradd.sh" | grep -E -o "^/.*/"
    /tmp/ljohn/
    [[email protected] ~]# echo "/tmp/ljohn/useradd.sh" |grep -Eo "^/.*/" |grep -Eo "^/.*[^/]"
    /tmp/ljohn
    #目录名dirname /tmp/ljohn/useradd.sh
    [[email protected] ~]# dirname /tmp/ljohn/useradd.sh
    /tmp/ljohn
    [[email protected] ~]# dirname /tmp/ljohn/useradd.sh/
    /tmp/ljohn
    #这样可以看出第二种同dirname命令
    #^/.*/ 表示以/开头,中间任意长度字符,以/结尾。
    #.*:任意长度的任意字符
    #[^/]:除了斜线的任意内容

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

    [[email protected] /]# ifconfig | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\>" | sort 
    -n -u
    5
    8
    19
    20
    29
    30
    31
    38
    39
    41
    42
    45
    64
    100
    127
    128
    137
    150
    164
    168
    192
    255
    #[1-9]表示1-9;[1-9][0-9]表示10-99;1[0-9][0-9]表示100-199;2[0-9][0-9])表示200-299
    #使用-o参数表示只显示匹配到的字符;
    #sort -n -u 按数字大小排序并去重;

5、挑战题:写一个模式,能匹配合理的IP地址;
    # A类地址范围:1.0.0.1—126.255.255.254   B类地址范围:128.0.0.1—191.255.255.254
    # C类地址范围:192.0.0.1—223.255.255.254  D类地址范围:224.0.0.1—239.255.255.254
    # E类地址范围:240.0.0.1—255.255.255.254  127.X.X.X是保留地址,用做循环测试用的
    # 匹配范围为 1-255.0-255.0-255.1-254

[[email protected] /]# ifconfig | grep -E -o "(2[0-5]{2}|1[0-9]{2}|[1-9][0-9]|[1-9])\.((2[0-5]{2}|1[0-9]{2}|[1-9][0-9]|[0-9])\.){2}\<(2[0-5][0-4]|1[0-9]{2}|[1-9][0-9]|[1-9])\>"
    192.168.137.30
    127.0.0.1

#此题参考http://ld0381.blog.51cto.com/3318114/1845601;    http://2368360.blog.51cto.com/2358360/1846091
    #详细解析:
        ^PATTERN$ 用于模式匹配整行
        {2}表示前面字符正好出现两次
        | 的意思是或者
        ( )上面的括号不能少,是为了匹配括号中整体字符串,表达式中有几个()就表示有几个相应的匹配字符串
        [0-4]表示0~4的任何一个数字
        [0-9]表示0~9的任何一个数字
        [1-9]的意思是1~9之间的任意一个数字
        [1-9][0-9]的意思是10~99之间的任意一个数字
        1[0-9]{2}的意思就是100~199之间的任意一个数字
        2[0-4][0-9]的意思是200~249之间的任意一个数字
        25[0-5]的意思是250~255之间的任意一个数字
        \.的意思是.点要转义为普通字符

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

    [[email protected] /]# cat /tmp/mail.txt
    [email protected]
    [email protected]
    [email protected]
    [email protected]_cmd.cn
    [email protected]
    lkjdas_#@123_.com
    [[email protected] /]# grep -E   "^[[:alnum:]][email protected][[:alnum:]]+\.[[:alnum:]]+$"  /tmp/mail.txt 
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    #先创建了一个mail.txt的文件事先编辑了几个邮箱
    #首先要了解邮箱的格式:数字字母@数字字母.数字字母
    #[[:alnum:]]+ 表示任意数字或字母

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

    [[email protected] ~]# find /var -user root -group mail -ls
    262296    4 drwxrwxr-x   2 root     mail         4096 9月  4 15:35 /var/spool/mail
    262048    4 -rw-------   1 root     mail         2353 9月  3 17:33 /var/spool/mail/root
    #find命令格式:find [OPTION]... [查找路径] [查找条件] [处理动作]
    #find命令实现对属主,数组的匹配,使用-user 和-group来实现。

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

    [[email protected] ~]# find / -nouser -o -nogroup
    /home/mandirva
    /home/mandirva/.gnome2
    /home/mandirva/.bashrc
    /home/mandirva/.mozilla
    /home/mandirva/.mozilla/plugins
    /home/mandirva/.mozilla/extensions
    /home/mandirva/.bash_logout
    /home/mandirva/.bash_profile
    /var/spool/mail/mandirva
    #-nouser 没有属主;-nogroup 没有数组

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

    [[email protected] ~]# find / \( -nouser -o -nogroup \) -atime -3
    find: “/proc/3759/task/3759/fd/5”: 没有那个文件或目录
    find: “/proc/3759/task/3759/fdinfo/5”: 没有那个文件或目录
    find: “/proc/3759/fd/5”: 没有那个文件或目录
    find: “/proc/3759/fdinfo/5”: 没有那个文件或目录
    /home/mandirva
    /home/mandirva/.gnome2
    /home/mandirva/.mozilla
    /home/mandirva/.mozilla/plugins
    /home/mandirva/.mozilla/extensions

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

    [[email protected] ~]# find /etc -perm -222
    /etc/rc.d/rc1.d/K73winbind
    /etc/rc.d/rc1.d/K92iptables
    /etc/rc.d/rc1.d/K99rngd
    /etc/rc.d/rc1.d/K84wpa_supplicant
    /etc/rc.d/rc1.d/K89portreserve
    ...

#根据权限查找:
        -perm [+|-]MODE
            MODE: 精确权限匹配
            +MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可;
            -MODE:每一类对象都必须同时拥有为其指定的权限标准;
            -222:表示每一个用户都有写权限。
10、查找/etc目录下大于1M,且类型为普通文件的所有文件;

    [[email protected] ~]# find /etc/ -type f -size +1M
    /etc/selinux/targeted/modules/active/policy.kern
    /etc/selinux/targeted/policy/policy.24
    /etc/gconf/gconf.xml.defaults/%gconf-tree.xml

#根据类型查找:
            -type TYPE:
                f: 普通文件
                d: 目录文件
                l: 符号链接文件
                s:套接字文件
                b: 块设备文件
                c: 字符设备文件
                p: 管道文件
    #根据文件大小查找:
                -size [+|-]#UNIT
                常用单位:k, M, G

#UNIT: (#-1, #]
                -#UNIT:[0,#-1]
                +#UNIT:(#,oo)

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

    [[email protected] ~]# find /etc/init.d -perm -113 -ls
    652914    0 lrwxrwxrwx   1 root     root           11 2月 12  2015 /etc/init.d -> rc.d/init.d

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

    [[email protected] ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
     20956    8 -rwsr-xr-x   1 abrt     abrt         6700 11月 23  2013 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
或者:
    [[email protected] ~]# find /usr -not -user root -a -not -user bin -a -not -user hadoop -ls
     20956    8 -rwsr-xr-x   1 abrt     abrt         6700 11月 23  2013 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache

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

    [[email protected] ~]# find /etc -not  -perm -222 -ls
    652802   12 drwxr-xr-x 118 root     root        12288 9月  4 15:35 /etc
    652826    0 -rw-r--r--   1 root     root            0 1月 12  2010 /etc/exports
    661961    4 drwxr-xr-x   2 root     root         4096 8月 30 23:52 /etc/glances
    662033    4 -rw-r--r--   1 root     root         3288 1月 18  2014 /etc/glances/glances.conf

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

    [[email protected] etc]# cat > findtest.txt <<EOF
    > 123123
    > Hello!!
    > How are you !
    > EOF
    [[email protected] etc]# chown liu.liu findtest.txt
    [[email protected] etc]# ls -l findtest.txt
    -rw-r--r--. 1 liu liu 29 9月   5 05:07 findtest.txt
    [[email protected] etc]# find /etc -mtime -7 -not -user root -not -user hadoop
    /etc/findtest.txt
时间: 2024-10-13 18:21:41

马哥2016全新Linux+Python高端运维班-Linux grep正则表达式练习,及find命令的相关文章

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

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

马哥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 网络基础管理,包管理,bash脚本练习

本周作业内容: 1.请描述网桥.集线器.二层交换机.三层交换机.路由器的功能.使用场景与区别.     集线器:又称"HUB"主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上.它工作于OSI(开放系统互联参考模型)参考模型第一层,即"物理层".     二层交换机:工作于OSI模块的第2层(数据链路层),故称为二层交换机.可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录

马哥2016全新Linux+Python高端运维班-Linux vim 末行模式,sed命令,基本bash脚本

本周作业内容: 1.复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#:%[email protected]^[[:space:]]\[email protected]#&@g384 substitutions on 384 lines#vim末行模式下%:表示全文相当于1,$s: 在末行模式下完成查找替换操作    s/要查找的内容/替换为的内容/修饰符    要查找的内容:可使用模式        替换

马哥2016全新Linux+Python高端运维班-Linux基础命令文件管理类及目录创建

周二作业内容: 1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 文件管理类命令:cp(复制),mv(移动),rm(删除) 1) cp:   cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE... cp SRC DEST 如果目标不存在,新建DEST,并将SRC中的内容填充至DEST 如果目录存在 如果DEST是文件

马哥2016全新Linux+Python高端运维班-Linux grep命令及基本正则表示

本周作业内容: 1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限.     第一种方式:         [[email protected] /]#chmod -R go=--- /home/tuser1         [[email protected] tuser1]# ls -l /home/tuser1/         总用量 4         -rw-------. 1 root root 47

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

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

Linux+Python高端运维班第二次作业

Linux+Python高端运维班第二次作业 1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. [[email protected] ~]# who |cut -d" " -f1|uniq (unknown) root test1 [[email protected] ~]# who |cut -d" " -f1|sort -u root (unknown) wangyanglin 2.取出当前系统上被用户当作其默认shel

马哥2016全新Linux+Python高端运维班第四期-第五次作业

1.写一个脚本,完成如下功能 (1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在: (2) 如果存在,则显示此设备上的所有分区信息: [[email protected] ~]# vi week5-01.sh[[email protected]moban ~]# cat week5-01.sh#!/bin/bash#author:Wangyafei#read -p "Please enter a disk device path:" path while [ -z"$