第03周作业(答题)

  1. 定义一个对所有用户都生效的命令别名,例如:lftps='lfpt 172.168.0.1/pub'
  • 答:可以有两种设置方式:
    • 按照配置文件的功能分类的设置方式(传统方式),可以修改/etc/bashrc文件,在其末尾添加如下命令:
      alias lftps='lftp 172.168.0.1/pub'
      
    • 按照配置文件注释中建议的方式(针对新系统,主要是防止在系统更新的过程中被新的默认配置覆盖),可以root用户身份在/etc/profile.d/下新建一脚本文件lftps.sh,编辑其内容为:
      #!/bin/bash
      
      alias lftps='lftp 172.168.0.1/pub'
      
  1. 显示/etc/passwd文件中不以/bin/bash结尾的行
  • 答:执行以下命令
    [root@localhost ~]# grep -v "/bin/bash$" /etc/passwd
    
  1. 找出/etc/passwd文件中,包含二位数字或者三位数字的行
  • 答:有两种方式,得出的结果不一定相同,可依需要选用
    # 方式 1:此种方式不会过滤出形如“myuser123”的单词所在的行
    [root@localhost ~]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
    
    # 方式 2:此种方法可以过滤出形如“myuser123”的单词所在的行
    [root@localhost ~]# grep "[^[0-9]]*[0-9]\{2,3\}[^[0-9]]*" /etc/passwd
    
  1. 显示/proc/meminfo文件中以大写或小写S头的行;用三种方式实现
  • 答:
    # 方式 1:
    [root@localhost ~]# grep "^[Ss]" /proc/meminfo
    
    # 方式 2:
    [root@localhost ~]# grep -i "^[s]" /proc/meminfo
    
    # 方式 3:
    [root@localhost ~]# grep -E "^(S|s)" /proc/meminfo
    
  1. 使用echo输出一个绝对路径,使用egrep取出路径名,类似执行dirname /etc/passwd的结果
  • 答:
    # 方法 1:此种方法可以正确处理/PATH/TO/FILE形式的路径,
    #         也可以正确得到/FILE或/PATH形式路径的路径名“/”,
    #         但是不能处理/PATH/TO/FILE/形式的路径
    [root@localhost ~]# echo /etc/yum/pluginconf.d/langpacks.conf | egrep -o "^.*[/]" 
    /etc/yum/pluginconf.d/
    [root@localhost ~]# 
    
    # 方法 2:此种方法可以正确处理/PATH/TO/FILE形式及/PATH/TO/FILE/形式的路径
    #         但不能正确处理/FILE、/PATH、/FILE/、/PATH/形式的路径,得到的结果为空字符串
    [root@localhost ~]# echo /etc/yum/pluginconf.d/langpacks.conf | egrep -o "^.*[^/]" | egrep -o "^.*[/]" | egrep -o "^.*[^/]"
    /etc/yum/pluginconf.d
    [root@localhost ~]# 
    
  1. 指出ifconfig中的IP地址,要求结果只显示IP地址
  • 答:
    # 说明:过滤出所有的主机地址,包括组播地址
    [root@localhost ~]# ifconfig | egrep -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.(\<([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.){2}\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>"
    192.169.43.83
    127.0.0.1
    [root@localhost ~]# 
    
  1. VIM定制自动缩进4个字符
  • 答:编辑/etc/vimrc(全局)或~/.vimrc(个人),加入以下设置或将已有设置修改为如下值:
    set autoindent
    set smartindent
    set cindent
    set tabstop=4
    set softtabstop=4
    set shiftwidth=4
    
  1. 编写脚本,实现自动添加三个用户,并计算这三个用户的UID之和
  • 答:

    #!/bin/bash
    #
    # 方法 1:通过查询/etc/passwd文件得到新加用户的UID
    #
    
    useradd user1
    useradd user2
    useradd user3
    
    let UID1=$(grep "user1" /etc/passwd | cut -d":" -f3)
    let UID2=$(grep "user2" /etc/passwd | cut -d":" -f3)
    let UID3=$(grep "user3" /etc/passwd | cut -d":" -f3)
    
    let UIDSUM=$[$UID1 + $UID2 + $UID3]
    
    echo $UIDSUM
    
    #!/bin/bash
    #
    # 方法 2:通过id命令得到新加用户的UID
    #
    
    useradd user1
    useradd user2
    useradd user3
    
    let UID1=$(id -u user1)
    let UID2=$(id -u user2)
    let UID3=$(id -u user3)
    
    let UIDSUM=$[$UID1 + $UID2 + $UID3]
    
    echo $UIDSUM
    
  1. find用法及常用用法的实例演示
  • 答:find命令可在指定路径下以文件名称、从属关系、文件类型、文件大小、时间戳、权限等信息做为条件查找文件或目录,其命令格式为:
    [root@localhost ~]# find [OPTION...] [起始路径] [查找条件] [处理动作]
    
    • 格式说明:
      • 起始路径:指定具体的搜索目标起始路径,默认为当前目录
      • 查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等进行查找,由“选项”和“测试”组成,默认为查找所有文件
      • 处理动作:指定对符合条件的文件做出的操作
    • 常见用法示例:
      • 查找动作:
        • 根据文件名查找:
          # 示例 1:直接指定文件名进行查找,本例在/etc目录及其子目录下查找所有名称为“profile”的文件或目录
          [root@localhost ~]# find /etc -name profile
          /etc/lvm/profile
          /etc/profile
          [root@localhost ~]# 
          
          # 示例 2:通过glob风格的通配符进行查找,本倒在/etc目录及其子目录下查找所有名称以“x”开头,后跟任意个有效字符的文件或目录
          [root@localhost ~]# find /etc -name x*
          /etc/X11/xorg.conf.d
          /etc/xdg
          /etc/xinetd.d
          /etc/selinux/targeted/contexts/users/xguest_u
          /etc/selinux/targeted/contexts/x_contexts
          /etc/selinux/targeted/active/modules/100/xen
          /etc/selinux/targeted/active/modules/100/xguest
          /etc/selinux/targeted/active/modules/100/xserver
          /etc/vmware-tools/vgauth/schemas/xenc-schema.xsd
          /etc/vmware-tools/vgauth/schemas/xml.xsd
          /etc/vmware-tools/vgauth/schemas/xmldsig-core-schema.xsd
          [root@localhost ~]#
          
          # 示例 3:通过glob风格的通配符进行查找,本例在/etc目录及其子目录下查找所有名称以“X”开头,后跟任意个有效字符的文件或目录
          [root@localhost ~]# find /etc -name X*
          /etc/X11
          /etc/vmware-tools/vgauth/schemas/XMLSchema-hasFacetAndProperty.xsd
          /etc/vmware-tools/vgauth/schemas/XMLSchema-instance.xsd
          /etc/vmware-tools/vgauth/schemas/XMLSchema.dtd
          /etc/vmware-tools/vgauth/schemas/XMLSchema.xsd
          [root@localhost ~]# 
          
          # 示例 4:通过glob风格的通配符进行查找,本例在/etc目录及其子目录下查找所有名称以“X”或“x”开头,后跟任意个有效字符的文件或目录
          [root@localhost ~]# find /etc -name [Xx]*
          /etc/X11
          /etc/X11/xorg.conf.d
          /etc/xdg
          /etc/xinetd.d
          /etc/selinux/targeted/contexts/users/xguest_u
          /etc/selinux/targeted/contexts/x_contexts
          /etc/selinux/targeted/active/modules/100/xen
          /etc/selinux/targeted/active/modules/100/xguest
          /etc/selinux/targeted/active/modules/100/xserver
          /etc/vmware-tools/vgauth/schemas/XMLSchema-hasFacetAndProperty.xsd
          /etc/vmware-tools/vgauth/schemas/XMLSchema-instance.xsd
          /etc/vmware-tools/vgauth/schemas/XMLSchema.dtd
          /etc/vmware-tools/vgauth/schemas/XMLSchema.xsd
          /etc/vmware-tools/vgauth/schemas/xenc-schema.xsd
          /etc/vmware-tools/vgauth/schemas/xml.xsd
          /etc/vmware-tools/vgauth/schemas/xmldsig-core-schema.xsd
          [root@localhost ~]# 
          
          # 示例 5:通过glob风格的通配符进行查找,本例在/etc目录及其子目录下查找所有名称以“x”(忽略大小写)开头,后跟任意个有效字符的文件或目录
          [root@localhost ~]# find /etc -iname x*
          /etc/X11
          /etc/X11/xorg.conf.d
          /etc/xdg
          /etc/xinetd.d
          /etc/selinux/targeted/contexts/users/xguest_u
          /etc/selinux/targeted/contexts/x_contexts
          /etc/selinux/targeted/active/modules/100/xen
          /etc/selinux/targeted/active/modules/100/xguest
          /etc/selinux/targeted/active/modules/100/xserver
          /etc/vmware-tools/vgauth/schemas/XMLSchema-hasFacetAndProperty.xsd
          /etc/vmware-tools/vgauth/schemas/XMLSchema-instance.xsd
          /etc/vmware-tools/vgauth/schemas/XMLSchema.dtd
          /etc/vmware-tools/vgauth/schemas/XMLSchema.xsd
          /etc/vmware-tools/vgauth/schemas/xenc-schema.xsd
          /etc/vmware-tools/vgauth/schemas/xml.xsd
          /etc/vmware-tools/vgauth/schemas/xmldsig-core-schema.xsd
          [root@localhost ~]# 
          
          # 示例 6:基于正则表达式模式,在整个文件名(包括路径)中进行匹配,查找文件。本例中查找/etc目录及其子目录下,所有文件名(包括路径)中存在“yum”和“.d”两个字符串的文件或目录
          [root@localhost ~]# find /etc -regex ".*\<yum\>\..*\.\<d\>.*"
          /etc/yum.repos.d
          /etc/yum.repos.d/CentOS-Media.repo
          /etc/yum.repos.d/CentOS-163.repo
          [root@localhost ~]# 
          
          # 示例 7:基于正则表达式模式,在整个文件名(包括路径)中进行匹配,查找文件,查找过程中忽略大小写。本例中查找/etc目录及其子目录下,所有文件名(包括路径)中存在“yum”和“.d”两个字符串的文件或目录(忽略大小写)
          [root@localhost ~]# find /etc -iregex ".*\<yum\>\..*\.\<d\>.*"
          /etc/yum.repos.d
          /etc/yum.repos.d/CentOS-Media.repo
          /etc/yum.repos.d/CentOS-163.repo
          /etc/yum.repos.d/yum.test.D
          [root@localhost ~]# 
          
        • 根据文件从属关系查找:
          # 预设实验环境:/tmp目录下有如下文件,其中:test.myuser文件无属组(已被删除);test.user4文件无属主、属组(已被删除)
          [root@localhost ~]# ls -l /tmp
          total 0
          -rw-r--r--. 1 myuser  5017 0 Jul 11 15:51 test.myuser
          -rw-r--r--. 1 user1  mygrp 0 Jul 11 15:53 test.user1
          -rw-r--r--. 1 user2  mygrp 0 Jul 11 15:53 test.user2
          -rw-r--r--. 1 user3  mygrp 0 Jul 11 15:53 test.user3
          -rw-r--r--. 1   5004  5004 0 Jul 11 15:55 test.user4
          [root@localhost ~]# 
          
          # 示例 1:根据文件的属主进行查找,本例查找/tmp目录及其子目录下所有属主为“myuser”的文件
          [root@localhost ~]# find /tmp -user myuser
          /tmp/test.myuser
          [root@localhost ~]# 
          
          # 示例 2:根据文件的属组进行查找,本例查找/tmp目录及其子目录下所有属主为“mygrp”的文件
          [root@localhost ~]# find /tmp -group mygrp
          /tmp/test.user1
          /tmp/test.user2
          /tmp/test.user3
          [root@localhost ~]# 
          
          # 示例 3:根据文件属主的UID进行查找,本例在/tmp目录及其子目录下根据属主UID“5015”查找文件
          [root@localhost ~]# id -u myuser
          5015
          [root@localhost ~]# 
          [root@localhost ~]# find /tmp -uid 5015 
          /tmp/test.myuser
          [root@localhost ~]# 
          
          # 示例 4:根据文件属组的GID进行查找,本例在/tmp目录及其子目录下根据属组GID“5011”查找文件
          [root@localhost ~]# grep "^mygrp" /etc/group | cut -d":" -f3
          5011
          [root@localhost ~]# 
          [root@localhost ~]# find /tmp -gid 5011                      
          /tmp/test.user1
          /tmp/test.user2
          /tmp/test.user3
          [root@localhost ~]# 
          
          # 示例 5:查找没有属主的文件(属主已被删除),本例查找/tmp目录及其子目录下所有无属主(属主己删除)的文件
          [root@localhost ~]# find /tmp -nouser
          /tmp/test.user4
          [root@localhost ~]# 
          
          # 示例 6:查找没有属组的文件(属组已被删除),本例查找/tmp目录及其子目录下所有无属组(属组己删除)的文件
          [root@localhost ~]# find /tmp -nogroup
          /tmp/test.myuser
          /tmp/test.user4
          [root@localhost ~]# 
          
        • 根据文件类型查找:
          # 预设实验环境:在/tmp目录下有如下文件
          [root@localhost ~]# tree /tmp
          /tmp
          ├── test.dir
          │   ├── test.sub
          │   └── test.subdir
          │       └── test.sublink -> /tmp/test.dir/test.sub
          ├── test.link -> test.myuser
          └── test.myuser
          
          2 directories, 4 files
          [root@localhost ~]# 
          [root@localhost ~]# ls -l /tmp
          total 0
          drwxr-xr-x. 3 root   root 41 Jul 11 16:31 test.dir
          lrwxrwxrwx. 1 root   root 11 Jul 11 16:20 test.link -> test.myuser
          -rw-r--r--. 1 myuser 5017  0 Jul 11 15:51 test.myuser
          [root@localhost ~]# 
          [root@localhost ~]# ls -l /tmp/test.dir
          total 0
          -rw-r--r--. 1 root root  0 Jul 11 16:30 test.sub
          drwxr-xr-x. 2 root root 22 Jul 11 16:32 test.subdir
          [root@localhost ~]# 
          [root@localhost ~]# ls -l /tmp/test.dir/test.subdir
          total 0
          lrwxrwxrwx. 1 root root 22 Jul 11 16:41 test.sublink -> /tmp/test.dir/test.sub
          [root@localhost ~]# 
          
          # 示例 1:查找/tmp目录及其子目录下所有普通文件
          [root@localhost ~]# find /tmp -type f
          /tmp/test.myuser
          /tmp/test.dir/test.sub
          [root@localhost ~]# 
          
          # 示例 2:查找/tmp目录及其子目录下所有目录文件
          [root@localhost ~]# find /tmp -type d
          /tmp
          /tmp/test.dir
          /tmp/test.dir/test.subdir
          [root@localhost ~]# 
          
          # 示例 3:查找/tmp目录及其子目录下所有符号链接文件
          [root@localhost ~]# find /tmp -type l
          /tmp/test.dir/test.subdir/test.sublink
          /tmp/test.link
          [root@localhost ~]# 
          
          # 示例 4:查找/dev目录及其子目录下所有的块设备文件
          [root@localhost ~]# find /dev -type b
          /dev/dm-1
          /dev/dm-0
          /dev/sr0
          /dev/sda2
          /dev/sda1
          /dev/sda
          [root@localhost ~]# 
          
          # 示例 5:查找/dev目录及其子目录下所有的字符设备文件
          [root@localhost ~]# find /dev -type c
          /dev/vsock
          /dev/vcsa6
          /dev/vcs6
          ...
          /dev/null
          /dev/mem
          /dev/vga_arbiter
          [root@localhost ~]# 
          
          # 示例 6:查找/run目录及其子目录下所有的管道文件
          [root@localhost ~]# find /run -type p
          /run/dmeventd-client
          /run/dmeventd-server
          /run/systemd/inhibit/1.ref
          /run/systemd/sessions/1.ref
          /run/systemd/initctl/fifo
          [root@localhost ~]# 
          
          # 示例 7:查找/run目录及其子目录下所有的套接字文件
          [root@localhost ~]# find /run -type s
          /run/chrony/chronyd.sock
          /run/vmware/guestServicePipe
          /run/dbus/system_bus_socket
          /run/lvm/lvmetad.socket
          /run/lvm/lvmpolld.socket
          /run/udev/control
          /run/systemd/shutdownd
          /run/systemd/private
          /run/systemd/journal/socket
          /run/systemd/journal/stdout
          /run/systemd/cgroups-agent
          /run/systemd/notify
          [root@localhost ~]# 
          
        • 根据文件的大小查找:文件大小单位可为:b(块、512字节)、c(字节)、k(1024字节)、M(1024k)、G(1024M)等,如不指定则以块为单位
          # 预设实验环境:在/tmp/test目录下有如下文件
          [root@localhost ~]# ls -l /tmp/test
          total 32
          -rw-r--r--. 1 root root 1024 Jul 11 17:02 file1k
          -rw-r--r--. 1 root root 1000 Jul 11 17:14 file1KB
          -rw-r--r--. 1 root root 2048 Jul 11 17:03 file2k
          -rw-r--r--. 1 root root 2000 Jul 11 17:15 file2KB
          -rw-r--r--. 1 root root 3072 Jul 11 17:03 file3k
          -rw-r--r--. 1 root root 3000 Jul 11 17:15 file3KB
          -rw-r--r--. 1 root root  500 Jul 11 17:25 file500B
          -rw-r--r--. 1 root root  512 Jul 11 17:25 file512B
          [root@localhost ~]# 
          
          # 示例 1:查找大小为1b(块),即大于0、小于等于512字节的文件,字节为默认单位,可以省略
          [root@localhost ~]# find /tmp/test -size 1b
          /tmp/test
          /tmp/test/file512B
          /tmp/test/file500B
          [root@localhost ~]# 
          
          # 示例 2:查找大小为2b(块),即大于512、小于等于1024字节的文件,字节为默认单位,可以省略
          [root@localhost ~]# find /tmp/test/ -size 2
          /tmp/test/file1k
          /tmp/test/file1KB
          [root@localhost ~]# 
          
          # 示例 3:查找小于2b(小于等于512节字)的文件,字节为默认单位,可以省略
          [root@localhost ~]# find /tmp/test/ -size -2
          /tmp/test/
          /tmp/test/file512B
          /tmp/test/file500B
          [root@localhost ~]# 
          
          # 示例 4:查找小于3k(小于等于2048节字)的文件,此处的单位不可省略
          [root@localhost ~]# find /tmp/test/ -size -3k
          /tmp/test/
          /tmp/test/file1k
          /tmp/test/file2k
          /tmp/test/file1KB
          /tmp/test/file2KB
          /tmp/test/file512B
          /tmp/test/file500B
          [root@localhost ~]# 
          
          # 示例 5:查找大于1b(大于512字节)的文件,
          [root@localhost ~]# find /tmp/test/ -size +1
          /tmp/test/file1k
          /tmp/test/file2k
          /tmp/test/file3k
          /tmp/test/file1KB
          /tmp/test/file2KB
          /tmp/test/file3KB
          [root@localhost ~]# 
          
          # 示例 6:查找大小2k(大于2048字节)的文件
          [root@localhost ~]# find /tmp/test/ -size +2k
          /tmp/test/file3k
          /tmp/test/file3KB
          [root@localhost ~]# 
          
        • 根据时间戳查找:
          • 以“天”为单位查找
            # 预设实验环境:在/tmp/test目录下有如下文件
            [root@localhost ~]# ls
            20190703  20190707  20190711
            [root@localhost ~]# 
            # 各文件时间戳信息如下:
            [root@localhost ~]# stat --printf "Name:\t%n \nAccess:\t%x \nModify:\t%y \n\n" 20190703 20190707 20190711
            Name:   20190703 
            Access: 2019-07-03 12:00:00.000000000 +0800 
            Modify: 2019-07-03 12:00:00.000000000 +0800 
            
            Name:   20190707 
            Access: 2019-07-07 12:00:00.000000000 +0800 
            Modify: 2019-07-07 12:00:00.000000000 +0800 
            
            Name:   20190711 
            Access: 2019-07-11 12:00:00.000000000 +0800 
            Modify: 2019-07-11 12:00:00.000000000 +0800 
            
            [root@localhost ~]# 
            # 当前系统时间为:
            [root@localhost ~]# date
            Thu Jul 11 18:32:42 CST 2019
            [root@localhost ~]# 
            
            # 示例 1:以当前时间点为准,查找访问时间距现在0天(超过或等于0,不足24小时)的文件
            [root@localhost ~]# find /tmp/test -atime 0
            /tmp/test
            /tmp/test/20190711
            [root@localhost ~]# 
            
            # 示例 2:以当前时间点为准,查找访问时间距现在4天(超过或等于120小时,不足144小时)的文件
            [root@localhost ~]# find /tmp/test -atime 4
            /tmp/test/20190707
            [root@localhost ~]# 
            
            # 示例 3:以当前时间点为准,查找访问时间距现在多于0天(超过或等于24小时)的文件
            [root@localhost ~]# find /tmp/test -atime +0
            /tmp/test/20190707
            /tmp/test/20190703
            [root@localhost ~]# 
            
            # 示例 4:以当前时间点为准,查找访问时间距现在多于4天(超过或等于120小时)的文件
            [root@localhost ~]# find /tmp/test -atime +4
            /tmp/test/20190703
            [root@localhost ~]# 
            
            # 示例 5:以当前时间点为准,查找访问时间距现在不足1天(不足24小时)的文件
            [root@localhost ~]# find /tmp/test -atime -1
            /tmp/test
            /tmp/test/20190711
            [root@localhost ~]# 
            
            # 示例 6:以当前时间点为准,查找访问时间距现在不足5天(不足120小时)的文件
            [root@localhost ~]# find /tmp/test -atime -5
            /tmp/test
            /tmp/test/20190707
            /tmp/test/20190711
            [root@localhost ~]# 
            
            • 也可使用-mtime选项根据修改时间查找或使用-ctime选项根据改变时间查找,用法与根据访问时间查找类似,不重复举例
          • 以“分钟”为单位查找,可分别使用-amin、-mmin、-cmin选项进行按分钟为单位进行查找,具体方法与以“天”为单位查找类似,不重复举例
        • 根据权限查找:
          # 预设实验环境:在/tmp/test目录下有如下文件
          [root@localhost test]# ls -l
          total 0
          -rw-r-----. 1 root root 0 Jun 24 17:10 a
          -rw-rw-rw-. 1 root root 0 Jun 24 17:10 b
          -r--r-----. 1 root root 0 Jun 24 17:10 c
          -rwxrwxr-x. 1 root root 0 Jun 24 17:10 d
          -rwxrwxrwx. 1 root root 0 Jun 24 17:10 e
          -rw-r--r--. 1 root root 0 Jun 24 17:10 f
          -rw-r--r--. 1 root root 0 Jun 24 17:10 g
          [root@localhost test]# 
          
          • -perm MODE(精确匹配)
            # 示例 1:精确匹配,查找8进制形式权限为777的所有文件
            [root@localhost test]# find . -perm 777
            ./e
            [root@localhost test]# 
            
            # 示例 2:精确匹配,查找权限为rw-r--r--的所有文件
            [root@localhost test]# find . -perm u=rw,g=r,o=r
            ./f
            ./g
            [root@localhost test]# 
            
          • -perm /MODE:
            # 倒 1:任何一类用户拥有读或写权限,即符合要求
            [root@localhost test]# find . -perm /666
            .
            ./a
            ./b
            ./c
            ./d
            ./e
            ./f
            ./g
            [root@localhost test]# 
            
            # 例 2:任何一类用户拥有写权限即符合要求
            [root@localhost test]# find . -perm /222
            .
            ./a
            ./b
            ./d
            ./e
            ./f
            ./g
            [root@localhost test]# 
            
            # 例 3:任何一类用户拥有执行权限即符合要求
            [root@localhost test]# find .-perm /111
            .
            ./d
            ./e
            [root@localhost test]# 
            
            # 例 4:u或g有一个拥有写权限即符合要求
            [root@localhost test]# find . -perm /220  
            .
            ./a
            ./b
            ./d
            ./e
            ./f
            ./g
            [root@localhost test]# 
            
            # 例 5:g或o中有一个拥有写权限即符合要求
            [root@localhost test]# find . -perm /022 
            ./b
            ./d
            ./e
            [root@localhost test]# 
            
            # 例 6:u和g分别必须拥有写或执行权限才符合要求
            [root@localhost test]# find . -perm /33 
            .
            ./b
            ./d
            ./e
            [root@localhost test]# 
            
            # 例 7:u和g都必须拥有写权限才符合要求
            [root@localhost test]# find . -perm /22
            ./b
            ./d
            ./e
            [root@localhost test]# 
            
          • -perm -MODE:
            # 示例 1:查找u具有rw权限,其它权限任意的所有文件
            [root@localhost test]# find . -perm -u=rw
            .
            ./a
            ./b
            ./d
            ./e
            ./f
            ./g
            [root@localhost test]# 
            
            # 示例 2:查找g、o同时拥有写权限,其它权限不限的所有文件
            [root@localhost test]# find . -perm -g=w,o=w
            ./b
            ./e
            [root@localhost test]# 
            
            # 示例 3:以8进制权限表示形式,查找g、o同时拥有写权限,其它权限不限的所有文件
            [root@localhost test]# find . -perm -022
            ./b
            ./e
            [root@localhost test]# 
            
        • 条件组合:
          # 预设实验环境:在/tmp/test目录下有如下文件
          [root@localhost test]# ls -l
          total 0
          -rw-r-----. 1 root   root   0 Jul 15 09:33 a
          -rw-rw-rw-. 1 root   root   0 Jul 15 09:33 b
          -r--r-----. 1 root   root   0 Jul 15 09:33 c
          -rwxrwxr-x. 1 hadoop hadoop 0 Jul 15 09:33 d
          -rwxrwxrwx. 1 hadoop hadoop 0 Jul 15 09:33 e
          -rw-r--r--. 1 root   root   0 Jul 15 09:33 f
          -rw-r--r--. 1 root   root   0 Jul 15 09:33 g
          [root@localhost test]# 
          
          # 示例 1:与,查找g或o具有写权限,且属主为root的所有文件
          [root@localhost test]# find . -perm /g=w,o=w -a -user root
          ./b
          [root@localhost test]# 
          
          # 示例 2:或,查找所有o具有写权限,或属主为root的文件
          [root@localhost test]# find . -perm /o=w -o -user root 
          .
          ./a
          ./b
          ./c
          ./e
          ./f
          ./g
          [root@localhost test]# 
          
          # 示例 3:非,查找所有属主不为root的文件
          [root@localhost test]# find . -not -user root
          ./d
          ./e
          [root@localhost test]# 
          
          # 示例 4:非,查找所有属主不为root的文件
          [root@localhost test]# find . ! -user root
          ./d
          ./e
          [root@localhost test]# 
          
          # 示例 4:分组组合,查找所有属主为root且o具有写权限,或属主不为root的文件
          [root@localhost test]# find . \( -user root -a -perm /002 \) -o -not -user root 
          ./b
          ./d
          ./e
          [root@localhost test]# 
          
      • 处理动作
        # 示例 1:查找文件,并显示输出各文件的详细信息
        [root@localhost test]# find . -perm /011 -ls
        50332721    0 drwxr-xr-x   2 root     root           69 Jul 15 09:33 .
        50332725    0 -rwxrwxr-x   1 hadoop   hadoop          0 Jul 15 09:33 ./d
        50332726    0 -rwxrwxrwx   1 hadoop   hadoop          0 Jul 15 09:33 ./e
        [root@localhost test]# 
        
        # 示例 2:查找文件,查找条件中有“-o”,则“-ls”选项只会显示最后一个“-o”后面的条件匹配到的项
        [root@localhost test]# ls -l
        total 0
        -rw-r-----. 1 root   root   0 Jul 15 09:33 a
        -rw-rw-rw-. 1 root   root   0 Jul 15 09:33 b
        -r--r-----. 1 root   root   0 Jul 15 09:33 c
        -rwxrwxr-x. 1 hadoop hadoop 0 Jul 15 09:33 d
        -rwxrwxrwx. 1 hadoop hadoop 0 Jul 15 09:33 e
        -rw-r--r--. 1 root   root   0 Jul 15 09:33 f
        -rw-r--r--. 1 root   root   0 Jul 15 09:33 g
        [root@localhost test]# 
        [root@localhost test]# find . -type f -perm /011 -o -perm /022 -ls      
        50332723    0 -rw-rw-rw-   1 root     root            0 Jul 15 09:33 ./b
        [root@localhost test]# 
        # 如需显示所有所有查找到的项,则需使用“\(\)”包围所有的查找条件
        [root@localhost test]# find . \( -perm /011 -o -perm /022 \) -ls        
        50332721    0 drwxr-xr-x   2 root     root           69 Jul 15 09:33 .
        50332723    0 -rw-rw-rw-   1 root     root            0 Jul 15 09:33 ./b
        50332725    0 -rwxrwxr-x   1 hadoop   hadoop          0 Jul 15 09:33 ./d
        50332726    0 -rwxrwxrwx   1 hadoop   hadoop          0 Jul 15 09:33 ./e
        [root@localhost test]# 
        
        # 示例 3:查找当前目录及其子目录下所有“*.log”文件,并删除所有找到的文件
        [root@localhost test]# find . -type f -name "*.log" -delete
        [root@localhost test]# 
        
        # 示例 4:查找当前目录及其子目录下所有属主不为root的文件,并将找到的文件的长格式信息写入infos.txt文件
        [root@localhost test]# ls -l
        total 0
        -rw-r-----. 1 root   root   0 Jul 15 09:33 a
        -rw-rw-rw-. 1 root   root   0 Jul 15 09:33 b
        -r--r-----. 1 root   root   0 Jul 15 09:33 c
        -rwxrwxr-x. 1 hadoop hadoop 0 Jul 15 09:33 d
        -rwxrwxrwx. 1 hadoop hadoop 0 Jul 15 09:33 e
        -rw-r--r--. 1 root   root   0 Jul 15 09:33 f
        -rw-r--r--. 1 root   root   0 Jul 15 09:33 g
        [root@localhost test]# 
        [root@localhost test]# find . -not -user root -fls infos.txt
        [root@localhost test]# 
        [root@localhost test]# cat infos.txt 
        50332725    0 -rwxrwxr-x   1 hadoop   hadoop          0 Jul 15 09:33 ./d
        50332726    0 -rwxrwxrwx   1 hadoop   hadoop          0 Jul 15 09:33 ./e
        [root@localhost test]# 
        
        # 示例 5:查找当前目录及其子目录下所有属主不为root的文件,并将找到的文件删除,删除每一个文件之前都要求用户确认
        [root@localhost test]# ls -l
        total 0
        -rw-r-----. 1 root   root   0 Jul 15 09:33 a
        -rw-rw-rw-. 1 root   root   0 Jul 15 09:33 b
        -r--r-----. 1 root   root   0 Jul 15 09:33 c
        -rwxrwxr-x. 1 hadoop hadoop 0 Jul 15 09:33 d
        -rwxrwxrwx. 1 hadoop hadoop 0 Jul 15 09:33 e
        -rw-r--r--. 1 root   root   0 Jul 15 09:33 f
        -rw-r--r--. 1 root   root   0 Jul 15 09:33 g
        [root@localhost test]# 
        [root@localhost test]# find . -not -user root -ok rm -f {} \;         
        < rm ... ./d > ? y
        < rm ... ./e > ? y
        [root@localhost test]# 
        [root@localhost test]# ls -l
        total 0
        -rw-r-----. 1 root root 0 Jul 15 09:33 a
        -rw-rw-rw-. 1 root root 0 Jul 15 09:33 b
        -r--r-----. 1 root root 0 Jul 15 09:33 c
        -rw-r--r--. 1 root root 0 Jul 15 09:33 f
        -rw-r--r--. 1 root root 0 Jul 15 09:33 g
        [root@localhost test]# 
        
        # 示例 6:查找当前目录及其子目录下所有属主不为root的文件,并将找到的文件删除,删除文件之前不要求用户确认
        [root@localhost test]# ls -l
        total 0
        -rw-r-----. 1 root   root   0 Jul 15 09:33 a
        -rw-rw-rw-. 1 root   root   0 Jul 15 09:33 b
        -r--r-----. 1 root   root   0 Jul 15 09:33 c
        -rwxrwxr-x. 1 hadoop hadoop 0 Jul 15 09:33 d
        -rwxrwxrwx. 1 hadoop hadoop 0 Jul 15 09:33 e
        -rw-r--r--. 1 root   root   0 Jul 15 09:33 f
        -rw-r--r--. 1 root   root   0 Jul 15 09:33 g
        [root@localhost test]# 
        [root@localhost test]# find . -not -user root -exec rm -f {} \;
        [root@localhost test]# 
        [root@localhost test]# ls -l
        total 0
        -rw-r-----. 1 root root 0 Jul 15 09:33 a
        -rw-rw-rw-. 1 root root 0 Jul 15 09:33 b
        -r--r-----. 1 root root 0 Jul 15 09:33 c
        -rw-r--r--. 1 root root 0 Jul 15 09:33 f
        -rw-r--r--. 1 root root 0 Jul 15 09:33 g
        [root@localhost test]#
        
        # 示例 7:将find结果通过xargs命令传递给不支持通过管道传道参数的下级命令(如:ls命令),为防止文件全路径中存在空白字符或反斜线从而影响程序正常工作,使用-print0选项使find命令输出结果中使用空字符(null、\0)做为分界符
        [root@localhost test]# find /etc -name "*.repo" -print0 | xargs -0 ls -l  
        -rw-r--r--. 1 root root 1584 Jul  9 16:58 /etc/yum.repos.d/CentOS-163.repo
        -rw-r--r--. 1 root root  566 Jun 11 15:06 /etc/yum.repos.d/CentOS-Media.repo
        [root@localhost test]#