深度解析Linux查找文件极查询高级命令详解 - 学习笔记2012-2-6
前言
Linux控制台情况下,想要查询到想要的文件详细大家都会使用简单的命令去寻找(例如:find)
可是问题来了?我如果想准确查找某个文件??
例如要寻求这样一个文件:名称含有 ”ass” 字符,且是可执行文件,以及是在2天前由bajie这个用户创建的。
亲、这样你如果执意去用 find 命令估计要手酸了……
涉及命令如下
1、which
2、whereis
3、locate
4、find
which命令详解
释义:which 指令会在环境变量$PATH设置的目录里查找符合条件的文件
首先要确认查找的文件路径在 该用户的 $PATH 环境变量内(每个用户的 $PATH 变量时不同的)。
首先如何查看用户 $PATH 环境变量呢?
Linux终端下输入 echo $PATH 系统会在终端输出当前用户$PATH变量内容。
例如笔者的 $PATH 如下:
案例1:(查询 passwd 文件因为 passwd 路径在$PATH内 )
[root@localhost root]# which -a passwd
/usr/bin/passwd
这里的 参数 -a 意思是查找所有符合条件的文件并输出,而非直输出第一个(重要)
案例2:(查询不在 $PATH 内的文件发生如下错误)
[root@localhost root]# which mydata
/usr/bin/which: no mydata in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)
关于which还有如下参数:
-n<文件名长度> 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p<文件名长度> 与-n参数相同,但此处的<文件名长度>包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息
再啰嗦一句:一定确定要查找的文件在该用户 $PATH 环境变量不了内!!错了别找我。。。阿门~~
whereis明显详解
释义:在系统数据库中存在文件结构查找文件
注:系统数据库每天更新一次 (根据Linux发行版本不同可能有所区别)
优点:数据库查找速度方面肯定比 find 物理硬盘查找的速度快N倍!
缺点:无法查询数据库中不存在 或 物理硬盘新建(未超过一天),数据库不存在的文件。
该命令日常使用相对较为频繁
参 数:
-b 只查找二进制文件。
-B<目录> 只在设置的目录下查找二进制文件。
-f 不显示文件名前的路径名称。
-m 只查找说明文件。
-M<目录> 只在设置的目录下查找说明文件。
-s 只查找原始代码文件。
-S<目录> 只在设置的目录下查找原始代码文件。
-u 查找不包含指定类型的文件。
案例1:
[root@localhost root]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /etc/passwd.lock /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
[root@localhost root]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd /etc/passwd.lock
可以看到第一个无 -b 命令查找到5个文件,第二个命令只查找到3个 (-b为只查找二进制文件)
速度明显比find快。。。亲、自己去体验吧。。
locate命令详解
释义:查找文件(数据库内查找)
参数:
-i :忽略查找文件名的大小写
-r :后面可接正则表达式的显示方式
用法很简单,直接 locate 文件的部分名称 即可。
问题来了:刚才我创建了3个文件,我只记得2个,还有一个是wukong开头的其他的忘了。。。
怎么办?? whereis ? ?那你肯定找不到。。。为什么??你懂得。
怎么办??运行命令 updatedb(更新系统数据库)
再使用whereis 哦了~~
updatedb 命令详解:
该命令运行后 命令回去读取 /etc/updatedb.conf 配置文件,然后去硬盘里进行查找文件操作,最后更新整个数据库文件(/var/lib/mlocate 内的数据库文件)。
因为updatedb回去硬盘上查找文件,速度可能会等几分钟。。。
find命令详解
注:该命令由于效率问题不常用 (以上命令查不到情况下,可使用 find 直接查找硬盘文件)
特点:直接查找硬盘 准确 (ps:该函数查不到,那你就绝望吧。。)
用法:find [PATH] [option] [action]
参数:
1、时间有关参数:-atime -ctime -mtime 以下以 -mtime为例
-mtime n :n为数字,意义在n天之前的 “一天之内” 被更改过的文件;
-mtime +n :列出在n天之前(不含n天本身)被更改过的文件;
-mtime -n :列出在n天之内(不含n天)被更改过的文件;
-newer file :file为一个存在的文件,列出比file文件还要新的文件名。
案例1:
[root@localhost root]# find / -mtime 0
/
/lost+found
/boot
/boot/lost+found
/boot/grub
/boot/grub/grub.conf
/boot/grub/fat_stage1_5
/boot/grub/ffs_stage1_5
………………(太多了不列出来了...)
注意命令后面的 0 意思是文件修改时间不超过24小时 (从现在开始到24小时前),
3天前24小时内 命令为:find / -mtime 3 (具体释义详见下图)
案例2:[root@localhost root]# find /etc -newer /etc/passwd
--newer 命令对应分辨2个文件的新旧程度很重要
find 高级应用:
2、与用户和用户组有关的参数:
-uid n:n为用户账户的id 即 uid ,用户uid记录在 /etc/passwd文件内
-gid n:n为用户组的id即gid ,用户组gid记录在 /etc/group文件内
-user name:name为用户名,查找XX用户的文件
-group name:name为用户组名,查找属于XX用户组的文件
-nouser :寻找不属于当前系统用户的文件(僵尸文件。。。)
-nogroup :寻找不属于当前系统用户组的文件
案例1:find /etc -user bajie
查找 /etc目录下属于用户bajie的文件
案例2:find / -nouser
查找僵尸文件。。。。(并不可怕,也可能是编译文件产生的或网络下载的)
3、与文件权限及名称有关的参数:
--name filename:filename为文件名
--size [+-]SIZE:查找比SIZE还要大(+),或下(-)的文件,SIZE大小规格有:c:代表byte,k代表1024bytes. 要找50KB还要大的文件:"-size +50k"
(还有M G)不知道为什么我用不成功。。。
--type TYPE:查找符合类型的文件。 类型有:一般文件 f ,设备文件(b ,c) ,目录(d),连接文件(l),socket(s),FIFO(p)
--perm mode:查找文件权限刚回等于mode的文件
--perm -mode:查找文件权限必须 包含 mode权限的文件
需要查找 -rwxr--r--,即0774的文件,使用 --perm -0774
--perm +mode:查找文件权限符合 任意 mode权限的文件
需要查找 -rwsr-xr-x,即-perm +755 时,但有一个文件属性为 -rw-------也会被列出来,因为他有 -rw...的属性存在。
注:--perm可查询除 rwx 以外的隐藏权限文件,这里不探讨隐藏权限
今天就写到这了。。。明天探讨关于linux除rwx属性外的其他隐藏属性。
欢迎大家积极讨论。。小生倍受鼓舞,感表涕零。