我们都听说过Linux下“一切皆文件”的说法吧,在这样一个系统下工作,我们不可避免的要查找一些的文件,这么多的文件我们如何进行查找呢?!这就是今天要解决的问题。
可以用来查找文件的指令:
which:在PATH变量指定的路径中搜索某一个命令的位置,并且返回第一个搜索结果。也就是这个命令只能搜索到某个命令是否存
在,并且执行的是哪一个位置的命令。
whereis:只能用于程序名、二进制文件(-b)、man说明文件(-m)、以及源代码文件的搜索(-s)。
locate:用于查找文件,搜索速度比find命令快,是由于执行该命令之前先建立一个数据库,当后面再需要查找时只去这个库里面查
找,而不会进行其他更深入的查找。
除了上述三个之外,我们还有一个功能非常强大的find命令,该命令可以在目录结构中搜索文件,并执行指定的操作,比如按文件
名、文件类型、文件权限等等搜索条件来进行查找。除此之外,即使系统中含有网络文件,只要具有权限,我们利用find命令也可以
执行。但find有一个极大的缺点:在搜索过程中可能会访问磁盘,导致搜索效率很低。
Find命令:
1.命令格式:find pathname -options [-print -exec -ok ...]
2.命令功能:实现在文件树中查找文件,并作出相应的处理。
3.命令参数:
pathname:find命令所查找的目录路径。~表示$HOME目录, .表示当前目录, /表示系统根目录
print:find命令将匹配的文件输出到标准输出
-exec:find命令对匹配的文件执行该参数所给出的shell命令。
-ok:与-exec作用相同。
4.-options常用的选项:(这些只是比较常用的)
-name:按照指定文件名来查找
-perm:按照文件权限查找
-user:按照文件所属主来查找
-group:按照文件所属组来查找
-nouser:查找无有效属主的文件,即该文件的属主在 /etc/passwd/ 中不存在
-nogroup:查找无有效属组的文件,即该文件的属组在 /etc/groups 中不存在
-type:按照类型查找文件
-size n[c]:查找长度为n字节(或块)大小的文件,带有c时表示文件长度以字节计。
一、使用实例:
1、按照指定文件名来查找:-name
find -name test.c :在当前目录下查找test.c文件
find ~ -name "*.txt" :在home目录下查找所有的.txt文件
find . -name "*.c" :在当前目录下查找所有的.c文件
2、按照文件的时间来查找(-atime,-mtime,-ctime)
find pathname -mtime -/+n:-n表示文件的修改时间在n天以内,+n表示修改时间在n天以前
find pathname -atime -/+n:按照文件的访问时间来查找
3、按照文件权限来进行查找:-perm
find pathname -perm 权限的八进制表示
4、根据文件的所属主/所属组来查找:
find pathname -user 属主
find pathname -group 属组
5、查找无有效属主或属组的文件:
find pathname -nouser
find pathname -nogroup
6、查找更改时间比file文件新的文件
find pathname -newer file
7、查找某一类型的文件:
find pathname -type 参数
参数:
b - 块设备文件
d - 目录
c - 字符设备文件
p - 管道文件
l - 符号链接文件
f - 普通文件
8、查找指定长度的文件(带有c时表示文件长度以字节计)
find pathname -size n:[c]
find pathname -size -n(c):查找比n(字节)小的文件
find pathname -size +n(c):查找比n(字节)大的文件
9、按照文件目录的深度进行递归查找
find pathname -depth
find pathname -mindepth n:搜索目录距离当前目录至少n个目录深度
find pathname -maxdepth n:搜索目录距离当前目录至多n个目录深度
10、-prune:忽略某个目录
如果在查找过程中希望某个目录忽略,那么可以用该命令之处要忽略的目录。但是当同时使用-depth时,-prune就会被find命令忽
略。比如当希望在test目录下查找文件,但不希望在test/test3目录下查找时,命令是:
find pathname "test/test3" -prune'
11、-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
12、-mount:在查找文件时不跨越文件系统mount点。也就是说在当前的文件系统中查找文件(不进入其他系统)。
例如:从当前目录开始查找位于本文件系统中文件名以“.txt”结尾的文件
13、-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
14、-cpio:对匹配的文件使用cpio命令,将这些文件备份呆磁带设备中。
二、使用exec或ok来执行shell命令
1、-exec:把想要的操作写在一个文件里。
命令形式:'command' { } \; (注意command、{}、\之间的空格,以及最后的分号)
2、-ok:与-exec作用相同,区别在于:在执行命令之前,系统都会给出提示,确定用户是否执行