使用实验楼Linux环境开发,部分内容有所参考,link:https://www.shiyanlou.com/
概述:
find: 在目录中搜索文件,它的使用权限是所有用户
命令格式: find [路径] [参数] [文件名]
grep: 在指定文件中搜索特定的内容,并将含有这些内容的行标准输出
命令格式:grep [参数] [文件名]
find 在平时使用中,一般要灵活搭配 ”|“,即管道,看如下命令:
这个命令是统计 /home/shiyanlou 下的普通文件个数。
其中用到了 find 命令的 -type 参数,即查找某一类型的文件,f 指的是普通文件。
grep 在平时使用中,要注意理解正则表达式。关于正则表达式,可以看看这篇文章: https://blog.csdn.net/gexiaobaohelloworld/article/details/9147365
1. find 命令:
文件类型 | 描述 |
b | 块设备文件 |
c | 字符设备文件 |
d | 目录 |
f | 普通文件 |
l | 符号链接 |
根据文件权限查找文件,使用-perm 选项。所有者使用-user 选项
ex:
查找 /home 下权限为 777 的普通文件。
查找 /home 下所有者为 root 的普通文件
操作符 | 描述 |
-and | 测试两边的条件都为真,可以简写为-a |
-not | 后面的测试条件为假,可以简写为 ! |
-or | 测试条件为两边之一,可以简写为-o |
() | 多个测试条件下,控制优先级 |
查找 /home 下 所有者不是 root 并且权限为 777 的普通文件。其中 是转义字符
查找当前目录下文件名为 "*.txt"的文件,并显示其详细信息。
-exec 是 find 命令对找到的文件执行的动作,这个动作就是对找到的文件执行命令,上面的命令就是 ls -l {}。在这里说明一下{}和;,{}其实它就是一个占位符,在 find 命令的执行过程中会不断地替换成当前找到的文件,相当于”ls -l 找到的文件”。而;是-exec 的命令结束标记,因为规定-exec 后面的命令必须以;结束,但;在 shell 中有特殊含义,必须要转义,所以写成;。
默认下,-exec 后面只能使用单个命令,如果想要多个命令,可以将多个命令写入脚本文件中,然后在-exec 中使用这个脚本。
ex:现在主目录下有如下文件,要把所有以 .sh 结尾的拷贝到 dir2 中
编写如下命令:
2. grep命令:
ex:将/etc/passwd 文件中没有出现 root 和 nologin 的行取出来:
ex:统计 /home 中普通文件的个数、目录的个数、链接文件的个数。
部分正则表达式在 grep 中的应用请看:https://www.cnblogs.com/xiaouisme/archive/2012/11/09/2762543.html
3.综合示例:
编写一个脚本名称为backup.sh,将第二个位置参数及其以后各参数所指定目录中的以.c和.sh结尾的,且文件大小不为0的文件复制到第一个位置参数所指定的目录中。
test 命令用法: http://man.linuxde.net/test