注意:grep、egrep、fgrep命令都文本查找,是查找文件里的内容。
文件查找用locate命令、find命令。
1、locate命令
是全系统内进行查找,是根据数据库进行的。这个数据库是系统每天晚上自动创建的。
特点:
非实时,模糊匹配,查找是根据全系统文件数据库进行,速度快。
当前对文件的操作,不会在数据库中,所以有些文件用locate搜索不到,但是可用命令手动更新数据库后,再用locate命令查找即可实现实时查找。
updatedb命令:手动更新数据库。
2、find命令:
特点:
实时查找,精确,支持众多查找标准,通过遍历制定中的目录的所有文件完成查找,速度较慢。
find命令格式:
find 查找路径 查找标准 查找到以后的处理动作
(1)查找路径:可省了,默认为当前目录;
(2)查找标准:默认为指定路径下的所有文件;
(3)处理动作:默认为显示;
匹配标准:
1、 -name ‘FILENAME':对文件名精确匹配,默认严格区分大小写;
支持文件名通配;
-iname FILENAME':文件名匹配时不区分大小写;
2、 -regex PATTERN:基于正则表达式进行文件名匹配,要同--regextype TYPE指定正则式类型;
3、 -user USERNAEM:根据属主查找文件;
-group GROUPNAME:根据属组查找文件;
4、 -uid UID:根据uid查找文件,删除用户后可使用;
-gid GID:根据gid查找文件;
5、 -nouser:查找没有属主的文件;
-nogroup:查找没有属组的文件;
6、 -type CHART(指定文件类型):
f:普通文件;
d:目录文件;
c:字符设备文件;
b:块设备文件;
l:符号(软)链接文件;
p:管道设备;
s:套接字文件;
7、 -size [+|-]#unite(指定文件大小,单位默认为字节)
#unit:精确大小#unit,单位可为K,M,G;
+#unit:大于#unit;
-#unit:小于#unit;
8、组合条件查找:默认为与逻辑;
-a:与
-o:或
-not:非,例如:-not -type d为非目录类型文件;
注意摩根定律:
-not A -a -not B = -not(A -o B)
-not A -o -not B = -not(A -a B)
9、根据文件时间戳查找:
以天为单位:
-atime [+|-]#:访问时间;
-mtime [+|-]#:修改时间;
-ctime [+|-]#:改变时间;
#:此刻时间到之前的24小时的一天之内;
+#:#天之前;
-#:#天之内;
以分钟为单位
-amin [+|-]#:访问时间;
-mmin [+|-]#:修改时间;
-cmin [+|-]#:改变时间;
10、 根据权限查找文件
-perm [+|-]MODE(MODE用八进制数字表示)
MODE:表示ugo每一位权限精确匹配;
/MODE:表示ugo有一位权限符号就匹配(或关系);
-MODE:表示ugo的权限位只有完全包含就匹配(与关系);
(3)执行动作:默认为-print:显示;
-ls:类似ls -l的形式显示每一个文件的详细信息;
-ok COMMAND {} \;交互执行命令,大括号为引用匹配到的文件;
-exec COMMAND {} \;:不交互执行命令;
例如:注意语法格式 {} \;
find ./ -perm -006 -exec chomod o-w {} \;
解释:找权限完全包含other用户拥有读、写权限的文件后,other设为没有写权限;
find ./ -type d -ok chmod +x {} \;
解释:找类型为目录的文件后,把文件的属主、属组设为拥有执行权限,执行命令前让用户确认;
find ./ -perm -020 -exec mv {} {}.new \;
解释:找文件权限完全包含为属组有写权限的文件后,重命名为原名后加.new;