在Linux当中查找文件的命令但多,但个人觉得最重要的搜索文件的命令是find,这个命令使用非常频繁,需要熟练掌握


文章目录

  • 前言
  • find 使用详解
  • 1.介绍
  • 2.语法详解
  • 3. find 选项示例(option)
  • 4、可选项
  • 总结
  • 友情链接



前言


在Linux当中查找文件的命令但多,但个人觉得最重要的搜索文件的命令是find,这个命令使用非常频繁,需要熟练掌握


find 使用详解

1.介绍

在Linux当中查找文件的命令但多,但个人觉得最重要的搜索文件的命令是find,这个命令用来特别频繁,需要熟练掌握

2.语法详解

1. 语法概览

find path -option [-print] [-exec -ok command] {} \;

2. path
path: 所查找的目录路径。例如用.来表示当前目录,…上级目录,/开头就是绝对路径等。

3.-option

选项

用途

-name filename

#查找名为filename的文件

-perm

#按执行权限来查找

-user username

#按文件属主来查找

-group groupname

#按组来查找

-mtime -n +n

#按文件更改时间来查找文件,-n指n天以内,+n指n天以前

-atime -n +n

#按文件访问时间来查GIN: 0px"> 找文件,-n指n天以内,+n指n天以前

-ctime -n +n

#按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-nogroup

#查无有效属组的文件,即文件的属组在/etc/groups中不存在

-nouser

#查无有效属主的文件,即文件的属主在/etc/passwd中不存

-newer f1 !f2

#查更改时间比f1新但比f2旧的文件

-type b/d/c/p/l/f

#查是块设备、目录、字符设备、管道、符号链接、普通文件

-size n[c]

#查长度为n块[或n字节]的文件

-depth

#使查找在进入子目录前先行查找完本目录

-fstype

#查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到

-mount

#查文件时不跨越文件系统mount点

-follow

#如果遇到符号链接文件,就跟踪链接所指的文件

-cpio

#查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到

-prune

#忽略某个目录

4. [-print]
这个选项可以不用指定,默认就是输出到屏幕。

5. [-exec -ok command] {} ;
这也是可选项,使用exec或ok来执行shell命令,查找出的文件作为输入。
exec: 表示要执行command命令
ok:也是运行command命令,只是在执行之前会先提示是否需要执行
{}: 大包括表示的就是查找出的文件
; 表示执行

选项

用途

exec

执行 command命令

ok

执行command前,需要提示是否执行

{}

代表查找出的所有文件

\;

执行

3. find 选项示例(option)

find命令最重要的就是查找需要的文件,可以通过特定选项来选择需要找的文件。

1. 按文件名查找

[root@prometheus ~]# find / -name err
/root/err

2. 按文件权限查找
Linux文件权限可以参照权限这一章节的具体知识(读写执行)。

[root@prometheus zaishu]# chmod 444 test
[root@prometheus zaishu]# ls -l
total 12
-rw-r--r-- 1 root root 52 Nov  4 20:25 abc.txt
-rw-r--r-- 1 root root 20 Nov  4 20:29 append.txt
-r--r--r-- 1 root root 70 Nov  4 20:21 test
[root@prometheus zaishu]# find . -perm 444 
./test

查找包含sgid权限的文件

[root@zaishu zaishu]# find / -perm /g+s 
...
/usr/bin/wall
...
[root@zaishu zaishu]# ll /usr/bin/wall 
-r-xr-sr-x. 1 root tty 15344 Jun 10  2014 /usr/bin/wall

3. 按用户属主查找

[root@prometheus zaishu]# useradd mysql
[root@prometheus zaishu]# chown mysql append.txt
[root@prometheus zaishu]# find . -user mysql 
./append.txt

4. 按文件时间查找
find path -mtime|atime|ctime +n(-n);
这个选项用的非常频繁,在服务器当中经常需要清理归档文件,用这个选项来查找出时间较久远的文件进行删除。
文件的时间属性有三个包括 mtime atime ctime 分别代表 文件据修改时间 文件访问时间 文件状态修改时间 文件改变时间 这三个时间可参照 时间属性讲解 -n指n天以内
+n指n天以前

查找2天内修改过数据的文本

[root@zaishu log]# find . -mtime -2
.
./lastlog
./wtmp
./audit/audit.log
./vmware-vmsvc-root.log
./cron
./messages
./vmware-network.log
./secure

[root@zaishu log]# stat lastlog 
  File: ‘lastlog’
  Size: 292876    	Blocks: 40         IO Block: 4096   regular file
Device: 803h/2051d	Inode: 33858129    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-11-11 13:56:27.138009098 +0800
Modify: 2021-11-11 13:56:27.396009100 +0800
Change: 2021-11-11 13:56:27.396009100 +0800
 Birth: -

5. 查找文件类型为目录

[root@zaishu SQLAdvisor-master]# find . -type d
.
./client
./cmake
./cmake/build_configurations
./cmake/os
./dbug
./dbug/CMakeFiles
./dbug/CMakeFiles/dbug.dir
./doc
./doc/img
./extra
./extra/CMakeFiles
./extra/CMakeFiles/CMakeRelink.dir
./extra/CMakeFiles/GenError.dir
./extra/CMakeFiles/comp_err.dir
./extra/CMakeFiles/perror.dir
./extra/yassl
./extra/yassl/CMakeFiles
./extra/yassl/CMakeFiles/yassl.dir
./extra/yassl/CMakeFiles/yassl.dir/__
./extra/yassl/CMakeFiles/yassl.dir/__/__
./extra/yassl/CMakeFiles/yassl.dir/__/__/client
./extra/yassl/CMakeFiles/yassl.dir/src
./extra/yassl/certs
...

4、可选项

1. 最简单的find
find语法:find path
当执行find时,不输入-option [-print] [-exec -ok command] {} ; 时。 find path表示的是列出目录下所有文件,也包含子目录下的文件。

[root@prometheus zaishu]# find .
.
./test
./abc.txt
./append.txt

2.使用[-print]
查找根目录下名字为err的文件
通常的写法

[root@prometheus ~]# find / -name err
/root/err

上面的写法其实等同与带上了[-print],将结果输出到屏幕

[root@prometheus ~]# find / -name err -print
/root/err

3. -exec command {} ;

将查找出的文件,作为后面命令输入。 将查找出的文件用ls -l 详细查看

[root@prometheus zaishu]# find . -type f -exec ls -l {} \;
-rw-r--r-- 1 root root 70 Nov  4 20:21 ./test
-rw-r--r-- 1 root root 52 Nov  4 20:25 ./abc.txt
-rw-r--r-- 1 root root 20 Nov  4 20:29 ./append.txt

4. -ok command {} ;
将查找出的文件,作为后面命令输入;不过在命令之前,需要先提示是否执行。

[root@zaishu zaishu]# find . -type f -ok rm -rf {} \;
< rm ... ./test > ? y
< rm ... ./test2 > ? y
< rm ... ./test3 > ? y

5. 执行命令可以用xargs 代替
xargs可参照这条命令的单独讲解,它是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。

[root@zaishu zaishu]# ls
test1  test2  test3
[root@zaishu zaishu]# find . -type f | xargs rm 
[root@zaishu zaishu]# ls

5. 删除7天前的数据

find /home/ -type f -mtime +7 -exec rm -f {} ;


总结

在Linux当中查找文件的命令但多,但个人觉得最重要的搜索文件的命令是find,这个命令用来特别频繁,需要熟练掌握。