在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,这个命令用来特别频繁,需要熟练掌握。