正式班D15

2020.10.26星期一  正式班D15

9.6 文件查找命令find

9.6.1 基本命令

  • find [path] [-option] [expression]

9.6.2 基本用法

  • 基础

    # 按文件名 -name
    [root@ccc ~]# find /etc -name 'ifcfg-ens33'
    /etc/sysconfig/network-scripts/ifcfg-ens33  # 查找ifcfg-ens33
    [root@ccc ~]# find /etc -name 'ifcfg-*'
    /etc/sysconfig/network-scripts/ifcfg-lo
    /etc/sysconfig/network-scripts/ifcfg-ens33
    /etc/sysconfig/network-scripts/ifcfg-ENS33  # 查找以ifcfg开头的文件
    [root@ccc ~]# find /etc/ -iname 'ifcfg-ens33'
    /etc/sysconfig/network-scripts/ifcfg-ens33
    /etc/sysconfig/network-scripts/ifcfg-ENS33  # i不区分大小写
    
    # 按文件大小 -size
    [root@ccc ~]# 
    [root@ccc ~]# find /etc -size +5M  # 大于5M的文件
    /etc/udev/hwdb.bin
    [root@ccc ~]# find /etc -size 3M  # 等于3M的文件
    [root@ccc ~]# find /etc -size -1k  # 小于1k的文件
    /etc/crypttab
    /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
    /etc/environment
    /etc/exports
    /etc/motd
    /etc/sysconfig/network-scripts/ifcfg-ENS33
    [root@ccc ~]# find /etc -size +3M -ls  # -ls找到的处理动作
        70 8188 -r--r--r--   1 root     root      8384358 10月 16 12:32 /etc/udev/hwdb.bin
    8809555 3816 -rw-------   1 root     root      3905267 4月  1  2020 /etc/selinux/targeted/active/policy.kern
    13347359 3816 -rw-r--r--   1 root     root      3905267 4月  1  2020 /etc/selinux/targeted/policy/policy.31
    
    # 指定查找的目录深度 -maxdepth levels
    [root@ccc ~]# find / -maxdepth 5 -a -name 'ifcfg-ens33'
    /etc/sysconfig/network-scripts/ifcfg-ens33
    /test/ifcfg-ens33  # -a并且,-o或者,不加-a默认就是-a
    
    # 按时间找 -atime -mtime -ctime
    [root@ccc ~]# find . -mtime +15  # 修改时间超过15天
    ./.bash_logout
    ./.bash_profile
    ./.bashrc
    ./.cshrc
    ./.tcshrc
    ./Python-2.7.18.tgz
    ./1.jpg
    [root@ccc ~]# find . -mtime 1  # 修改时间等于1天
    [root@ccc ~]# find . -mtime -3  # 修改时间3天以内
    .
    ./.bash_history
    ./t.txt
    ./f.txt
    ./1.py
    ./.viminfo
    ./a.txt
    
    # 按文件属主、属组找 -user -group
    [root@ccc ~]# find /home -user lili  # 属主是lili的文件
    /home/lili
    /home/lili/.bash_logout
    [root@ccc ~]# find /home -group lili  # 数组是lili的文件
    /home/lili
    /home/lili/.bash_logout
    [root@ccc ~]# find /home -user lili -a -group lili  # 属主lili且数组lili的文件
    /home/lili
    /home/lili/.bash_logout
    [root@ccc ~]# find /home -user lili -group lili  # 同上-a
    /home/lili
    /home/lili/.bash_logout
    [root@ccc ~]# find /home -user lili -o -group lili  # 属主lili或数组lili的文件
    /home/lili
    /home/lili/.bash_logout
    
    [root@ccc ~]# su - lili  # 切换到lili用户
    [lili@ccc ~]$ touch 111.txt  # 创建111.txt
    [lili@ccc ~]$ exit
    登出
    [root@ccc ~]# ll /home/lili/111.txt 
    -rw-rw-r-- 1 lili lili 0 10月 26 14:34 /home/lili/111.txt
    [root@ccc ~]# vim /etc/group
    [root@ccc ~]# find /home -nogroup -ls # 用户还存在,在/etc/group删除了记录
    8494233    0 drwx------   2 lili     1000           98 10月 26 14:34 /home/lili
    8494238    4 -rw-r--r--   1 lili     1000           18 4月  1  2020 /home/lili/.bash_logout
    8494239    4 -rw-r--r--   1 lili     1000          193 4月  1  2020 /home/lili/.bash_profile
    8493577    4 -rw-r--r--   1 lili     1000          231 4月  1  2020 /home/lili/.bashrc
    8493579    0 -rw-rw-r--   1 lili     1000            0 10月 26 14:34 /home/lili/111.txt
    8493580    4 -rw-------   1 lili     1000           19 10月 26 14:34 /home/lili/.bash_history
    
    [root@ccc ~]# find /home -nouser -ls
    8494233    0 drwx------   2 1000     1000           98 10月 26 14:34 /home/lili
    8494238    4 -rw-r--r--   1 1000     1000           18 4月  1  2020 /home/lili/.bash_logout
    8494239    4 -rw-r--r--   1 1000     1000          193 4月  1  2020 /home/lili/.bash_profile
    8493577    4 -rw-r--r--   1 1000     1000          231 4月  1  2020 /home/lili/.bashrc
    8493579    0 -rw-rw-r--   1 1000     1000            0 10月 26 14:34 /home/lili/111.txt
    8493580    4 -rw-------   1 1000     1000           19 10月 26 14:34 /home/lili/.bash_history
    
    [root@ccc ~]# find /home -nouser -ls -o -nogroup -ls
    8494233    0 drwx------   2 1000     1000           98 10月 26 14:34 /home/lili
    8494238    4 -rw-r--r--   1 1000     1000           18 4月  1  2020 /home/lili/.bash_logout
    8494239    4 -rw-r--r--   1 1000     1000          193 4月  1  2020 /home/lili/.bash_profile
    8493577    4 -rw-r--r--   1 1000     1000          231 4月  1  2020 /home/lili/.bashrc
    8493579    0 -rw-rw-r--   1 1000     1000            0 10月 26 14:34 /home/lili/111.txt
    8493580    4 -rw-------   1 1000     1000           19 10月 26 14:34 /home/lili/.bash_history
    
    # 按文件类型 -type
    [root@ccc ~]# find /dev -type f  # f普通
    [root@ccc ~]# find /dev -type d  # d目录
    [root@ccc ~]# find /dev -type l  # l链接
    [root@ccc ~]# find /dev -type b  # b块设备
    [root@ccc ~]# find /dev -type c  # c字符设备
    [root@ccc ~]# find /dev -type s  # s套接字
    [root@ccc ~]# find /dev -type p  # p管道文件
    
    # 根据inode号查找 -inum n
    [root@ccc ~]# find / -inum 1811
    
    # 按文件权限 -perm
    [root@ccc ~]# find . -perm 644 -ls
    
    
  • 后续处理

    -print
    -ls
    -delete
    -exec
    -ok
    
    # -exec非交互
    [root@ccc ~]# find /etc/ -name "ifcfg-*" -exec cp -rvf {} /tmp \;
    "/etc/sysconfig/network-scripts/ifcfg-lo" -> "/tmp/ifcfg-lo"
    "/etc/sysconfig/network-scripts/ifcfg-ens33" -> "/tmp/ifcfg-ens33"
    "/etc/sysconfig/network-scripts/ifcfg-ENS33" -> "/tmp/ifcfg-ENS33"
    # -ok交互
    [root@ccc ~]# find /etc/ -name "ifcfg-*" -ok cp -rvf {} /tmp \;
    < cp ... /etc/sysconfig/network-scripts/ifcfg-lo > ? y
    "/etc/sysconfig/network-scripts/ifcfg-lo" -> "/tmp/ifcfg-lo"
    < cp ... /etc/sysconfig/network-scripts/ifcfg-ens33 > ? y
    "/etc/sysconfig/network-scripts/ifcfg-ens33" -> "/tmp/ifcfg-ens33"
    < cp ... /etc/sysconfig/network-scripts/ifcfg-ENS33 > ? y
    "/etc/sysconfig/network-scripts/ifcfg-ENS33" -> "/tmp/ifcfg-ENS33"
    
    # 删除的一种用法
    [root@ccc ~]# find /etc/ -name "ifcfg-*" -exec rm -rf {} \;
    [root@ccc ~]# find /etc/ -name "ifcfg-*" -delete
    
  • 拓展:find用管道必须结合xargs

    [root@ccc ~]# find . -name 'cjx*.txt' |xargs rm -rf  # 删除的另一种方式
    
    [root@ccc ~]# find /etc/ -name 'ifcfg-ens33' |xargs -I {} cp -rf {} /var/tmp/
    [root@ccc ~]# ll /var/tmp/
    总用量 1
    -rw-r--r-- 1 root root 262 10月 26 15:07 ifcfg-ens33
    
    [root@ccc ~]# find /test -name 'ifcfg-ens33' | xargs -I {} mv {} /ttt
    
    

9.7 文件的上传与下载

9.7.1 下载

  • wget命令

    # 将远程包下载到本地,-O指定下载到哪里,也可省略-O 本地路径
    wget -O 本地路径 远程包链接地址
    [root@ccc ~]# wget -O ./2.jpg http://pic17.nipic.com/20111115/8754739_105205490111_2.jpg
    
    # 如果wget下载提示无法建立SSL连接,需加上选项--no-check-certificates
    [root@ccc ~]# wget --no-check-certificate -O ./2.jpg http://pic17.nipic.com/20111115/8754739_105205490111_2.jpg
    
    
  • curl命令

    # curl命令是一个利用URL规则在命令行下工作的文件传输工具
    # 支持文件的上传和下载,是综合传输工具,按传统称curl为下载工具
    # wget会将下载的内容直接打印在屏幕上
    
    [root@ccc ~]# curl -O ./3 https://tiyu.baidu.com/match/S10/tab/赛程
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
    Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: 
    
    # 如果遇到下载提示无法建立SSL连接,使用-k选项或者--insecure
    [root@ccc ~]# curl -k -O ./3 https://tiyu.baidu.com/match/S10/tab/赛程
    
  • sz命令

    # 系统默认没有sz命令,需下载yum install -y lrzsz
    # 将服务器上选定的文件下载/发送到本机
    [root@ccc ~]# sz 1.jpg
    

9.7.2 上传

  • rz

    # 系统默认没有rz命令,需下载yum install lrzsz -y
    # 运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器
    [root@ccc ~]# rz  # 如果文件已经存在,则上传失败,可以用-E选项解决
    [root@ccc ~]# rz -E  # -E如果目标文件名已存在,则重命名传入文件。新文件名多一个点或一个数字(0..999)
    

9.8 输出与重定向

9.8.1 基本概念

  • 几种情况

    # 输出即把相关对象通过输入设备(显示器等)显示出来
    # 输出分为正确输出和错误输出
    # 一般情况下输出设备为显示器
    # 标准输入设备为键盘
    
    0  # 标准输出
    1  # 标准正确输出
    2  # 标准错误输出
    

9.8.2 输出重定向

  • > # 覆盖

  • >> # 追加

    # 正常输出是把内容输出到显示器上
    # 输出重定向是把内容输出到文件中
    
    # 标准输出重定向(1可以省略)
    命令>文件  # 以覆盖的形式把命令的正确输出输出到指定的文件或设备当中
    命令>>文件  # 以追加的方式把命令的正确输出输出到指定的文件或设备中
    
    # 标准错误输出重定向
    错误命令 2>文件  # 以覆盖的形式把命令的错误输出输出到指定的文件或设备中
    错误命令 2>文件  # 以追加的方式把命令的错误输出输出到指定的文件或设备中
    
    # 例子
    ifconfig>test.log  # 把ifconfig执行显示的正确内容写入test.log当前界面不再显示执行结果
    # 错误输出重定向>与>>后面不能加空格
    
    # 正确输出与错误输出同时保存
    命令>文件 2>&1  # 以覆盖的方式把正确输出和错误输出都保存到同一个文件夹中
    命令>>文件 2 >&1  # 以追加的方式把正确输出和错误输出都保存到同一个文件中
    命令 &>文件  # 以覆盖的方式把正确输出和错误输出打偶把存到同一个文件中
    命令 &>>文件  # 以追加的方式把正确输出和错误输出都保存到同一个文件夹中
    命令>>文件1 2>>文件2  # 把正确的输出追加到文件1中,把错误的输出追加到文件2中
    
    # 注意
    命令 >>file.log 2>&1  与  命令 &>>file.log  # 命令作用相同
    命令 >>file.log 2>>file2.log  # 正确日志和错误日志分开保存
    ls &>/dev/null  # 系统常见用法,正确输出或错误输出都不要(null理解为黑洞或垃圾站)
    
    

9.8.3 输入重定向

  • cat >目标文件<内容来源(源文件地址):也可以写成cat<内容来源>目标文件(将源文件内容写至目标文件)
  • cat >目标文件<<EOF(键盘输入,最后以EOF结尾)将键盘输入内容写入目标文件,也可以写成cat<<EOF>目标文件
posted @ 2020-10-26 21:16  drrug  阅读(140)  评论(0编辑  收藏  举报