欢迎,来自IP地址为:35.171.164.77 的朋友
Linux 系统查找文件十分方便,本教程将着重研究如何使用命令行工具来查找文件。对于喜欢使用桌面环境的用户,当然可以通过查找工具来查找文件,这里不做赘述。
Linux 系统查找文件,主要使用两条命令:find 和 locate,我们将逐条进行讲解。
首先讲解 find 命令
find 命令的语法和基本示例
find 命令的基本语法格式为:
find [OPTIONS] [PATH] [EXPRESSION]
- OPTIONS:是用于控制 find 命令执行的参数
- PATH:是 find 命令执行搜索时扫描的路径,例如 /etc/ 则会搜索 /etc 目录及期子目录
- EXPRESSION:是用于指定搜索条件的表达示,可以是字符串,也可以是其它内容
find 命令最基本的使用示例如下:
# find -iname "example.txt"
命令执行后,会显示当前目录下所有名称为”example.txt”的文件信息(路径和文件名),即所谓的按文件名搜索。”-iname”参数用于指定按文件名搜索,而”-name”也表示按名称搜索,区别在于”-name”是大小写敏感的,而”-iname”是大小写不敏感的,即示例使用”-name”参数时只能搜索出名称为”example.txt”的文件,不能搜索出类似”eXample.txt”、”EXAMPLE.TXT”的文件,而使用”-iname”参数则可以搜索出。
如果需要搜索出不包含表达式的文件名,则可以增加”-not”参数,例如:
# find -not -iname "example.txt"
这时,搜索会显示所有文件名不为”example.txt”的文件信息。
根据文件类型查找文件
如果想根据文件类型来筛选文件,则可以使用”-type”参数来完成。
find 命令用于指定文件类型的表达工值如下:
- f :指普通文件
- d :指目录
- b :指块设备
- l :指链接文件
- c :指字符设备
例如,我们如果想要搜索出”/var”目录下所有的符号链接文件,则可以使用如下命令:
# find /var -type l
组合条件搜索
我们可以将多个条件组合起来,用于更加精确的搜索。例如,我们想查找所有名称包含”example”的符号链接文件,则可以采用如下方式:
# find /var -type l -iname "*example*"
默认情况下,多个条件的组合方式是逻辑与,即所有条件均成立时的结果。当然,我们可以增加”-or”条件用于指定多个条件为逻辑或关系,例如:
# find -type -d -or -iname "example"
此时,会输出所有目录和名称为”example”的文件,如果没有”-or”,则会输出名称为”example”的目录。
根据大小查找文件
find 命令另一个非常有用的参数为”-size”,可以使用它来根据大小筛选文件。
文件大小的筛选参数,可以为如下值:
- k :KiB,1024 bytes
- M :MiB,1024*1024 bytes
- G :GiB,1024*1024*1024 bytes
- b :512-bytes 块
- c :1 byte
- w :2 bytes
例如,想要查找所有超过 1GB 大小的文件,可以使用如下方式:
# find /home -size +1G
对于小于 1GB 和等于 1GB 大小文件的查找,则采用如下方式:
# find /home -size -1G # find /home -size 1G
根据时间查找
find 命令可以根据文件创建时间进行查找,支持如下参数:
- -atime:根据文件最后的读写时间(Access time)
- -mtime:根据文件最后的修改时间(Modification Time)
- -ctime:根据文件 inode 元数据最后的变更时间(Change Time)
默认情况下,这些选项使用的参数是天。 例如,要查找 /var 目录中最近 2 天内修改过的文件,可以使用以下命令:
# find /var -mtime 2
与大小选项类似,您可以使用加号和减号操作数。 例如,要查找不到 2 天前修改的文件,您可以使用:
# find /var -mtime -2
要查找超过 2 天前修改的文件,您可以使用:
# find /var -mtime +2
您也可以使用分钟而不是天。 为此,您需要使用“-mmin”选项。 例如,要查找 /var 目录中最近 5 分钟内修改过的所有文件,您可以使用:
# find /var -mmin 5
根据 inode 查找
Linux 系统所有数据皆文件的特性,就可以根据文件 inode 来查找它:
# find -inum 123456
示例中的 123456 即为想要查找文件的 inode 号。
find 命令执行文件操作
如果要对 find 命令找到的文件运行(执行)命令,可以使用“-execute”选项,如下所示:
# find [CRITERIA] -exec [COMMAND] {} \;
在这种情况下,[CRITERIA] 就是您在 find 命令中使用的任何内容,如我们在前面的示例中所示。[COMMAND] 是您要对 find 命令找到的文件执行的命令。 确保包含 {}(这是 find 命令结果的占位符)和”\;”(这标志着命令的结束)。
例如我们想修改当前目录下”example.txt”文件的权限,可以使用如下命令形式实现:
# find -name "example.txt" -exec chmod 744 {} \;
find 命令一些常用参数
- -maxdepth:设置 find 命令将在其中查找文件的目录的最大级别。如果有多个子目录,则可以限制为 2 层子目录
- -delete:删除 find 命令找到的文件,您可以在 find 命令末尾添加“-delete”,它将删除找到的所有文件
- -O3:将优化级别设置为3,这将使搜索速度最快。 默认级别为”-O1″
- -user 和 -group:用于根据所有权过滤文件
- -empty:查找空文件
- -read:查找可读文件
使用 locate 命令查找文件
locate 命令可能不可用,因为它需要安装”mlocate”软件包,根据自己 Linux 系统,自行安装即可。
locate 命令根据其数据库运行。数据库每天更新一次。 事实上,locate 使用数据库,这使得它比 find 命令更快。 要更新数据库,只需运行以下命令:
# updatedb
locate 命令的语法非常简单,格式如下所示:
# locate term
其中”term”即为想要查找文件的文件名,例如:
# locate -i term
加入”-i”参数用于指示在查找时忽略大小写敏感。
要统计文件数量而不是使用 locate 命令查找文件,可以使用以下命令:
# locate -c example
这将输出名为”example”的文件的数量。
注意,在使用 locate 命令之前更新数据库非常重要,因为如果在更新数据库后添加或删除了任何文件,则会影响您使用 locate 命令的搜索结果。
以上就是关于如何使用 find 和 locate 命令在 Linux 中查找文件的全部内容,希望喜欢。