2015.11.07_07_03_Linux文件查找详解
2015-11-07 23:53
344 查看
grep,egrep,fgrep是查找文本的,是查找字符串的。
它能在文件中查找文本。
而文件查找则需要别的工具:
但是因为它的非实时性及模糊性,这个命令用的并不多。
而且find支持众多的查找标准,比如根据文件名查找,根据文件权限查找、根据文件类型查找,还能根据正则表达式匹配文件名。
命令格式:
例如:在当前目录下运行find,则会把当前目录下的文件,包括隐藏文件全部列出来。
查找路径
查找路径比较简单,而查找标准则很复杂。
查找规则
查找标准也叫匹配规则:
-name ‘filename’ : 对文件名做精确查找。查找文件名为指定名称的文件,必须要求文件名完全匹配,且区分大小写。
如:
[root@redhat5u5 ~]# find /etc -name ‘passwd’
/etc/uucp/passwd
/etc/passwd
/etc/pam.d/passwd
当然它也支持通配符:
*: 任意长度的任意字符,包括0个字符。
?: 匹配1个字符。
[]: 匹配中括号中的任意一个字符
-iname ‘filename’: 文件名匹配时不区分大小写。
-regex PATTERN : 基于正则表达式进行文件名匹配。
-user username : 根据文件是属于哪个user来查找
-group groupname: 根据属组查找
-uid UID : 根据UID查找
-gid GID: 根据GID查找
-nouser : 查找没有属主的文件
-nogroup:查找没有属组的文件
-type 根据文件类型查找
f: 普通文件
d: 目录
c: 字符设备
b: 块设备
l: 链接文件
p: 管道设备
s: 套接字设备
如:find -type d
-size 指定文件大小查找
查找的时候,-size后面跟着文件大小的数字和单位,M表示兆,G表示GB,小写的k表示kB,不跟单位的话,则表示字节。如:-size xxM
还可以添加[+|-]在数字的前面,表示大于还是小于指定的指定的大小。如:-size +xxM
而在find命令后面,添加-ls 会列出查找到的文件的详细信息。
find /etc -size 10k -ls
2941988 16 -rw-r–r– 1 root root 9260 Feb 12 2009 /etc/htdig/htdig.conf
2940747 16 -rw-r–r– 1 root root 9828 Mar 12 2010 /etc/pki/tls/openssl.cnf
2941394 16 -rw-r–r– 1 root root 9260 Oct 7 2006 /etc/pam_pkcs11/pam_pkcs11.conf
2940636 16 -rwxr-xr-x 1 root root 9966 Nov 19 2009 /etc/rc.d/init.d/cpuspeed
2942773 16 -rw-r–r– 1 root root 9832 Oct 19 2006 /etc/gconf/schemas/gconf-editor.schemas
2941254 16 -rw-r–r– 1 root root 9733 Jan 23 2010 /etc/samba/smb.conf
2942452 16 -rw-r–r– 1 root root 9685 Jan 7 2010 /etc/xdg/autostart/puplet.desktop
以上条件,还可以进行组合
如果给定了2个条件,而没有给定组合方式,默认是
组合参数要放在2个条件之间:
把2个非 再与起来的操作:find /tmp
组合这些条件,也可以使用括号:
括号要使用反斜杠进行转义。
根据文件的时间戳查找:
-mtime:修改时间
-ctime: 改变时间
-atime: 访问时间
这3个参数后面跟数字,表示天。而且可以使用[+|-]在天数之前。如果不使用+-,则表示离今天刚好5天,
与此对应的,还有表示分钟的一组参数:
-mmin
-cmin
-amin
-perm MODE : 根据权限查找,精确匹配mode,每一位都要匹配上,权限共有9位。
还有+mode,-mode,/mode。+mode和/mode表示一个意思。
find ./ -perm 644
find ./ -perm -001 : 查找其他用户有执行权限的文件
-ls: 类似ls -l的形式显示每一个匹配到的文件
-ok COMMAND \; COMMAND表示要执行的命令,并且必须要以
如果需要引用这个文件的话,则使用{}表示占位符:-ok COMMOND {} \;
-exec COMMAND {} \; 同上,区别是,-ok 的每一个命令,都需要用户确认。
它能在文件中查找文本。
而文件查找则需要别的工具:
locate和
find
locate: 在全系统查找文件,非实时,因为它的查找是根据
全系统文件数据库完成的。linux系统只要在运行,它每天都会运行一个计划任务,该任务会把系统中所有的文件名保存到一个数据库中。而locate就是在该数据库中查找文件,并且是模糊查找,只需要文件的全路径名中包括要找的文件名,就算匹配。该数据库,也可以通过执行命令手动生成:
updatedb。它会收集系统中所有文件的信息。因为它是直接在数据库中查找,所以它的速度快。
但是因为它的非实时性及模糊性,这个命令用的并不多。
find: 实时、精确、遍历指定目录中所有文件完成查找,速度慢。
而且find支持众多的查找标准,比如根据文件名查找,根据文件权限查找、根据文件类型查找,还能根据正则表达式匹配文件名。
命令格式:
find查找路径 查找标准 查找到以后的处理运作
查找路径:可以省略,省略则表示当前目录。
查找标准:默认为指定路径下的所有文件。
处理运行:默认为显示文件的路径
例如:在当前目录下运行find,则会把当前目录下的文件,包括隐藏文件全部列出来。
查找路径
查找路径比较简单,而查找标准则很复杂。
查找规则
查找标准也叫匹配规则:
-name ‘filename’ : 对文件名做精确查找。查找文件名为指定名称的文件,必须要求文件名完全匹配,且区分大小写。
如:
[root@redhat5u5 ~]# find /etc -name ‘passwd’
/etc/uucp/passwd
/etc/passwd
/etc/pam.d/passwd
当然它也支持通配符:
*: 任意长度的任意字符,包括0个字符。
?: 匹配1个字符。
[]: 匹配中括号中的任意一个字符
-iname ‘filename’: 文件名匹配时不区分大小写。
-regex PATTERN : 基于正则表达式进行文件名匹配。
-user username : 根据文件是属于哪个user来查找
-group groupname: 根据属组查找
-uid UID : 根据UID查找
-gid GID: 根据GID查找
-nouser : 查找没有属主的文件
-nogroup:查找没有属组的文件
-type 根据文件类型查找
f: 普通文件
d: 目录
c: 字符设备
b: 块设备
l: 链接文件
p: 管道设备
s: 套接字设备
如:find -type d
-size 指定文件大小查找
查找的时候,-size后面跟着文件大小的数字和单位,M表示兆,G表示GB,小写的k表示kB,不跟单位的话,则表示字节。如:-size xxM
还可以添加[+|-]在数字的前面,表示大于还是小于指定的指定的大小。如:-size +xxM
find /etc -size 1M这个命令会找到很多不是1M大小的文件。这是因为,零点几M的文件,会被当做1M的文件。比如找10M的文件,那么9点几M的文件,会被当做10M的。
而在find命令后面,添加-ls 会列出查找到的文件的详细信息。
find /etc -size 10k -ls
2941988 16 -rw-r–r– 1 root root 9260 Feb 12 2009 /etc/htdig/htdig.conf
2940747 16 -rw-r–r– 1 root root 9828 Mar 12 2010 /etc/pki/tls/openssl.cnf
2941394 16 -rw-r–r– 1 root root 9260 Oct 7 2006 /etc/pam_pkcs11/pam_pkcs11.conf
2940636 16 -rwxr-xr-x 1 root root 9966 Nov 19 2009 /etc/rc.d/init.d/cpuspeed
2942773 16 -rw-r–r– 1 root root 9832 Oct 19 2006 /etc/gconf/schemas/gconf-editor.schemas
2941254 16 -rw-r–r– 1 root root 9733 Jan 23 2010 /etc/samba/smb.conf
2942452 16 -rw-r–r– 1 root root 9685 Jan 7 2010 /etc/xdg/autostart/puplet.desktop
以上条件,还可以进行组合
-a与
-o或
-not非
如果给定了2个条件,而没有给定组合方式,默认是
与逻辑。
组合参数要放在2个条件之间:
find /etc -nouser -o -type d
-not要放在条件之前,比如非目录的:
find /etc -not -type d
把2个非 再与起来的操作:find /tmp
-not -type d-a
-not -type s
组合这些条件,也可以使用括号:
find /tmp -not \(-user user1 -o -user user2\)
括号要使用反斜杠进行转义。
根据文件的时间戳查找:
-mtime:修改时间
-ctime: 改变时间
-atime: 访问时间
这3个参数后面跟数字,表示天。而且可以使用[+|-]在天数之前。如果不使用+-,则表示离今天刚好5天,
+号表示5天之前,也就是离现在至少5天了,大于5天,
-号表示5天以内,少于5天。
与此对应的,还有表示分钟的一组参数:
-mmin
-cmin
-amin
-perm MODE : 根据权限查找,精确匹配mode,每一位都要匹配上,权限共有9位。
还有+mode,-mode,/mode。+mode和/mode表示一个意思。
find ./ -perm 644
/mode:只要有一位匹配就好,任意一位满足条件。
find ./ -perm /644
-mode:每一位都必须匹配,文件权限能完全包含此MODE时才能显示。
find ./ -perm -001 : 查找其他用户有执行权限的文件
动作
-print : 默认是显示出来-ls: 类似ls -l的形式显示每一个匹配到的文件
-ok COMMAND \; COMMAND表示要执行的命令,并且必须要以
\;结尾,否则被认为语法错误。
如果需要引用这个文件的话,则使用{}表示占位符:-ok COMMOND {} \;
-exec COMMAND {} \; 同上,区别是,-ok 的每一个命令,都需要用户确认。
find ./ -perm -004 -exec chmod o-w {} \;
find ./ -name "*.sh" -a -perm -111 -exec chmode o-x {} \;
相关文章推荐
- linux新内核的freeze框架以及意义
- Linux目录树详解(转)
- Linux C学习笔记
- Linux(centOS)上的mysql 1130连接错误
- linux下用户账户切换
- VMware中的Linux系统下的硬盘扩容:ubuntu 重新挂载/usr
- LINUX下压缩某个文件夹(文件夹打包)
- Linux命令之 文件归档管理
- 每个程序员都应该知道的8个Linux命令
- Linux内核原理-进程入门
- Ubuntu硬盘安装
- linux 后台任务以及查看查看文件夹大小命令
- Linux系统中查看服务器型号
- OpenStack CentOS7 virt-manager Windows Server 2012R2镜像
- linux语句
- #include后尖括号和双引号的区别
- Linux的分段和分页机制
- Linux上安装ArcGIS for Server超详细教程——以Redhat6.5上安装ArcGIS for Server 10.3.1为例
- Linux中的进程关系详解
- GDB 使用入门