正式班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>目标文件