美文网首页
Linux基础之grep,find

Linux基础之grep,find

作者: 请叫我飘哥 | 来源:发表于2018-12-25 16:07 被阅读0次

    1、定义一个对所有用户都生效的命令别名,例如:lftps='lftp 172.168.0.1/pub'

    别名我们经常用到最简单的方法就是
    alias: 用法:alias [-p] [名称[=值] ... ]
    例如:alias du='du -sh'
    但是这样有个缺点只有在当前shell下生效,我们可以将其写在profile文件中永久生效。

    [root@node01 ~]# cd /etc/profile.d/
    [root@node01 profile.d]# vim alias.sh 
    alias  du='du -sh'
    保存退出,
    [root@node01 profile.d]# source /etc/profile
    [root@node01 profile.d]# du /tmp
    40M /tmp
    [root@node01 profile.d]# alias 
    alias cp='cp -i'
    alias du='du -sh'
    

    2、显示/etc/passwd文件中不以/bin/bash结尾的行

    解决思路:先找出以/bin/bash结尾的行。
    [root@node01 profile.d]# grep "/bin/bash\>$" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    gentoo:x:4001:4001::/data/gentoo:/bin/bash
    user01:x:4004:4004::/usr/user01:/bin/bash
    roobash:x:4005:4005::/home/roobash:/bin/bash
    让后加-v 参数取反
    [root@node01 profile.d]# grep -v "/bin/bash\>$" /etc/passwd
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    fedora:x:4002:4002:Fedora Core:/home/fedora:/bin/tcsh
    mariadb:x:4003:4003::/home/mariadb:/sbin/nologin
    [root@node01 profile.d]# 
    

    3、找出/etc/passwd文件中,包含二位数字或者三位数的行。

    解决思路:[0-9]表示数字,{2,3}表示出现2-3次,\<,\>首尾锚定
    [root@node01 profile.d]# egrep "\<[0-9]{2,3}\>" /etc/passwd 
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    或
    [root@node01 profile.d]# grep "\<[0-9]\{2,3\}\>" /etc/passwd 
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    

    4、显示/proc/meminfo文件中以大写或小写S开头的行;用三种方式实现。

    方法一:[Ss]
    [root@node01 tmp]# grep "^[Ss]" /proc/meminfo 
    SwapCached:            0 kB
    SwapTotal:       4063228 kB
    SwapFree:        4063228 kB
    Shmem:              8684 kB
    Slab:              66736 kB
    SReclaimable:      35124 kB
    SUnreclaim:        31612 kB
    方法二:-i 参数区分大小写
    [root@node01 tmp]# grep -i "^s" /proc/meminfo 
    SwapCached:            0 kB
    SwapTotal:       4063228 kB
    SwapFree:        4063228 kB
    Shmem:              8684 kB
    Slab:              66736 kB
    SReclaimable:      35124 kB
    SUnreclaim:        31612 kB
    方法三:扩展表达式(S|s)
    [root@node01 tmp]# grep  -E  "^(S|s)" /proc/meminfo 
    SwapCached:            0 kB
    SwapTotal:       4063228 kB
    SwapFree:        4063228 kB
    Shmem:              8684 kB
    Slab:              66736 kB
    SReclaimable:      35124 kB
    SUnreclaim:        31612 kB
    

    5、使用echo输出一个绝对路径,使用egrep取出路径名,类型执行dirname /etc/passwd 的结果。

    解决思路:"/"后面一定要有字符。所以我们锚定字符末尾的"/",后面要跟一个或多个字符。
    [root@node01 tmp]# echo "/etc/passwd/"  | grep -o ".*\<"
    /etc/
    [root@node01 tmp]# echo "/etc/passwd"  | grep -o ".*\<"
    /etc/
    [root@node01 tmp]# dirname /etc/passwd/
    /etc
    但是我们看到路径名末尾是没有"/"的,所以我们再过滤掉末尾的"/"。
    [root@node01 tmp]# echo "/etc/passwd"  | grep -o ".*\<" |grep -o ".*[^/]"
    /etc
    

    6、找出ifconfig中的ip地址。要求结果只显示IP地址。

    解决思路:我们将IP地址分为4段,前三段都是数字和"."号,最后一段是数字
    ([0-9]|[1-9][0-9]|[1[0-9][0-9]|2[0-4][0-9]|25[0-5])表示0-255之间的数字
    [root@node01 tmp]# ifconfig |egrep  -o "\<(([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|25[0-5])\>"
    10.192.2.222
    255.255.255.0
    10.192.2.255
    127.0.0.1
    255.0.0.0
    

    7、vim定制自动缩进四个字符。

    • 如果是对单个文本文件设置自动缩进四个字符,那么只需要在末行模式下设置
      :set ai
      :set shiftwidth=4
      :set tabstop=4
      :set softtabstop=4
    • 如果是对全局设置,需要修改vim的配置文件,如下:
    在修改配置文件之前我们先备份
    [root@node01 etc]# cp /etc/vimrc /etc/vimrc.bak
    编辑vimrc文件,在文件末尾添加
    set ai
    set shiftwidth=4
    set tabstop=4 
    set softtabstop=4
    

    8、编写脚本,实现自动添加三个用户,并计算这三个用户的uid之和。

    解决思路:通过文件读取需要添加的用户名
    #!/bin/bash
    #自动添加用户
    if [ $# -lt 1 ];then
        echo "use like this: sh  useradd.sh  userfile"
        exit 1
    fi
    
    declare suid=0
    
    for i in `cat $1`;do
    
        if grep "^$i\>" /etc/passwd  &>/dev/null ;then
            echo "user $i is exists"
        else
            useradd $i
            echo $i |passwd --stdin $i &> /dev/null
            echo "add user $i finished"
            uid=$(id -u $i)
            suid=$[$suid + $uid]
        fi
    
    done
    echo "新增用户ID之和为:$suid"
    [root@node01 ~]# vim  name
    zhangsan
    lisi
    wangwu
    zhaoliu
    
    [root@node01 ~]# sh useradd.sh name 
    add user zhangsan finished
    add user lisi finished
    add user wangwu finished
    add user zhaoliu finished
    新增用户ID之和为:16030
    [root@node01 ~]# tail -4 /etc/passwd
    zhangsan:x:4006:4006::/home/zhangsan:/bin/bash
    lisi:x:4007:4007::/home/lisi:/bin/bash
    wangwu:x:4008:4008::/home/wangwu:/bin/bash
    zhaoliu:x:4009:4009::/home/zhaoliu:/bin/bash
    
    

    9、find用法以及常用用法的实例演示。

    find [OPTIONS] [查找起始路径] [查找条件] [处理动作]

    • 查找起始路径:指定具体搜索目标起始路径,默认为当前目录
    • 查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标准进行,默认为找出指定路径下的所有文件
      • 根据文件的从属关系查找
        -user USERNAME 找出属主指定用户的所有文件
        -group RPUNAME 找出属组指定用户的所有文件
        -uid UID 找出属主指定用户UID的所有文件
        -gid GID 找出属组指定用户GID所有文件

      • 根据文件的类型查找
        -type TYPE
        f 普通文件
        d 目录文件
        l 符合链接文件
        b 块设备文件
        c 字符设备文件
        p 管道文件
        s 套接字文件

      • 根据文件大小查找
        -size +。- unit
        常用单位:k,M,G
        根据时间戳查找
        以“天”为单位
        -atime 访问时间
        -mtime 修改时间
        -ctime 改变时间
        以分钟为单位
        -amin
        -mmin
        -cmin

      • 组合测试
        与:-a,默认组合
        或:-o
        非:-not,!
        支持glob风格的通配符 *,?,[],[^]

    • 处理动作:对符合查找条件的文件做出的操作,例如删除等操作,默认为输出至标准输出
      -print 输出至标准输出,默认动作
      -ls 类似于对查找到的文件执行ls -l 命令,输出文件的详细信息
      -delete 删除查找到的文件
      -fls 把查找到的所有文件的长格式信息保存至指定的文件中
      -ok command {} ; 对查找到的每个文件有command表示的命令,每次操作需要用户确认
      -exec comomand {} ; 对查找到的每个文件有command表示的命令,不需要用户确认
      注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令,但是有些命令不能接受过长的参数,为了解决这个问题。用如下命令
      find | xargs command
    • 常用示例:
    1、查找/var 目录下属主为root,且属组为mail的所有文件或目录
    find /var -user root -a -group mail -ls
    
    2、查找/usr目录下不属于root,bin或hadoop的所有文件或目录,用两种方法
    find /usr  !   \( -user root -o -user bin -o -user hadoop \)  -ls
    find /usr  !    -user root -a -user bin -a -user hadoop   -ls
    
    3、查找/etc/目录下最近一周内其内容修改过的,且属主不是root用户也不是hadoop用户出的文件或目录
    find /etc  -mtime -7 -a ! -user root -a !-user hadoop -ls
    
    4、查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
     find / -nouser -a -nogroup  -atime -7  -exec ls -l {} \;
    
    5、查找/etc目录下大于1M且类型为普通文件的所有文件
    find / -size +1M -type f -exec ls -l {} \;
    
    6、查找/etc目录下所有用户都没有写权限的文件
    find /etc ! -perm /222 -type f -exec ls -l {} \;
    
    7、查找/etc目录至少有一类用户没有执行权限的文件
    find /etc ! -perm -111 -type f -exec ls -l {} \;
    
    8、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件
    find /etc  -perm  -113 -type f -exec ls -l {} \;
    

    相关文章

      网友评论

          本文标题:Linux基础之grep,find

          本文链接:https://www.haomeiwen.com/subject/bxwzkqtx.html