Linux搜索文件或目录
which命令
查看“可执行文件”的位置:
which + [选项] + 指令名
注意事项:which只能搜索命令,是通过PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件。
whereis命令
查看文件的位置:
whereis +[选项]+ 指令名
- whereis命令用来查找二进制程序、源代码文件和帮助文件在文件系统中的位置。
- -b:只查找二进制文件;
- -m:只查找帮助文件;
- -s:只查找源文件;
whereis可以查找出系统目录下面的用户自定义文件,但是查不出root目录下的文件,因为root目录是用户自定义目录,不属于系统目录。
locate
配合数据库查找文件或目录:
locate +[选项]+ 文件或目录名
locate不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db,这个数据库中含有本地所有文件信息,Linux系统自动创建这个数据库,并且每周自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb
命令;手动更新数据库。
注意事项:locate只能搜索文件,文件名是包含匹配;
prunepaths:PRUNEPATHS的值,多字符串、排除的路径;/etc/updatedb.conf
find命令
find搜索文件并执行指定操作:
find + 查询目录(即搜索范围) + [选项1] + 查询参数 + [选项2] +[执行操作]
- 选项1 -name:查询文件名;
- 选项2 -print:将匹配结果输出到标准输出设备;
- 选项2 -exec:搜索到文件后执行后续命令,常见格式为:
-exec command {} \;
即:将前面一个命令的结果交给command命令来处理;{}指的是前面找到的信息。
注:尽量避免搜索范围过大,例如 find / -name lilaoshi.file
例如:查找出root含有aaa名字的文件,并输出到屏幕上的同时,在每一个文件的前面和后面加一句话:i have 文件名字 this file!
find /root -name "*aaa*" -exec echo i hane {} this file!\;
根据文件更改的时间查找
- -atime +n/-n:访问或执行时间大于/小于n天的文件;
- -ctime +n/-n:写入、更改inode属性(例如更改所有者、权限或链接)时间大于/小于n天的文件;
- -mtime +n/-n:写入时间大于/小于n天的文件;
find按文件类型查找
- -type filetype:通过文件类型查找;
文件类型filetype包含了f:普通文档、b:块设备文档、c:字符设备文档、d:目录、l:符号链接文档、s:串接口等
在当前目录下的子目录dir00及其子目录下查找txt后缀文件;
find ./ -path '*dir00*' -name *.txt
式中的[path...]部分表示以此目录为根目录进行搜索;
find命令的格式:
find [-path...] -options [-print -exec -ok]
-path:要查找的目录路径
- ~:表示$HOME目录;
- .:表示当前目录;
- /:表示根目录;
-print:表示将结果输出到标准输出;
-exec:对匹配的文件执行该参数所给出的shell命令。形式为command {} ;注意{}
与\;
之间有空格;
-ok:与-exec作用相同,区别在于,在执行命令之前,都会给出提示,让用户确认是否执行;
options常用的有下选项:
- -name:按照名字查找;
- -perm:安装权限查找;
- -prune:不在当前指定的目录下查找;
- -user:按文件属主来查找;
- -group:按属组来查找;
- -nogroup:查找无有效所属组的文件;
- -nouser:查找无有效属主的文件;
- -type:按照文件类型查找;
文件的三个时间属性
- Access time:atime、是在读取文件或者执行文件时更改的,即最后一次访问(仅仅是访问,没有修动)文件的时间;
- Modified time:mtime、是在写入文件时随文件内容的更改而更改的,即最后一次修改文件的时间。
- Create time:ctime、是在写入文件、更改所有者、权限或链接设置是随inode的内容更改而更改的,即最后一次对文件属性改变的时间。
- inode:就是索引节点,它用来存放档案及目录的基本信息、包含时间信息、文档名、属主以及属组等。可以用
df -i来查看各个分区的inode数量
;
获得一个文件的atime、mtime以及ctime的方式:stat 命令
Linux之find命令详解
查找文件:find ./ -type f
查找目录:find ./ -type d
查找名字为test的文件或目录:find ./ -name test
查找名字符合正则表达式的文件,注意前面的‘.*’(查找到的文件带有目录)
find ./ -regex .*so.*\.gz
查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,没有选项-print是文件列表前一行不会显示目录名称)
find ./ -type d -print -exec ls {} \;
查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,执行命令前需要确认)
find ./ -type d -print -ok ls {} \;
查找目录并列出目录下的文件(将找到的目录添加到ls命令后一次执行,参数过长时会分多次执行)
find ./ -type d -exec ls {} +
查找文件名匹配*.c的文件:find ./ -name \*.c
打印test文件名后,打印test文件的内容
find ./ -name test -print -exec cat {} \;
不打印test文件名,只打印test文件的内容
find ./ -name test -exec cat {} \;
查找文件更新日时在距现在时刻二天以内的文件:
find ./ -mtime -2
查找文件更新日时在距现在时刻二天以上的文件:
find ./ -mtime +2
查找文件更新日时在距现在时刻一天以上二天以内的文件:
find ./ -mtime 2
查找文件更新日时在距现在时刻二分以内的文件:
find ./ -mmin -2
查找文件更新日时在距现在时刻二分以上的文件:
find ./ -mmin +2
查找文件更新日时在距现在时刻一分以上二分以内的文件:
find ./ -mmin 2
查找文件更新时间比文件abc的内容更新时间新的文件:
find ./ -newer abc
查找文件访问时间比文件abc的内容更新时间新的文件:
find ./ -anewer abc
查找空文件或空目录:
find ./ -empty
查找空文件并删除:
find ./ -empty -type f -print -delete
查找权限为644的文件或目录(需完全符合)
find ./ -perm 644
查找用户/组权限为读写,其他用户权限为读(其他权限不限)的文件或目录
find ./ -perm -644
查找用户有写权限或者组用户有写权限的文件或目录
find ./ -perm /220 find ./ -perm /u+w,g+w find ./ -perm /u=w,g=w
查找所有者权限有读权限的目录或文件
find ./ -perm -u=r
查找用户组权限有读权限的目录或文件
find ./ -perm -g=r
查找其它用户权限有读权限的目录或文件
find ./ -perm -o=r
查找所有者为lzj的文件或目录
find ./ -user lzj
查找组名为gname的文件或目录
find ./ -group gname
查找文件的用户ID不存在的文件
find ./ -nouser
查找文件的组ID不存在的文件
find ./ -nogroup
查找有执行权限但没有可读权限的文件
find ./ -executable \! -readable
查找文件size小于10个字节的文件或目录
find ./ -size -10c
查找文件size等于10个字节的文件或目录
find ./ -size 10c
查找文件size大于10个字节的文件或目录
find ./ -size +10c
查找文件size小于10k的文件或目录
find ./ -size -10k
查找文件size小于10M的文件或目录
find ./ -size -10M
查找文件size小于10G的文件或目录
find ./ -size -10G