Linux 文件查询
查看文件类型:file
如果你想要知道某个文件的基本数据,例如是属于ASCII或者是data文件,或者是binary,且其中有没有使用到动态函数库等等的信息,可以用file查看
which (寻找“执行文件”)
whereis (寻找特定文件)
whereis是如何实先的呢,Linux系统会将系统内的所有文件都记录在一个数据库文件里面,而当使用whereis或者是locate时,都会以此数据库文件
的内容为准,因为,有会你会发现使用这两个执行文件时,会找到已删除的文件,也切也找不到最新的刚才创建的文件。因为这两个命令是由数据库
当中的结果去查找文件的所在。
locate
locate寻找的数据是由已创建的数据库/var/lib/mlocate/里面的数据所查询到的,所以不用直接在硬盘中访问数据,是很快速。
那么有什么限制呢?就是因为它是经由数据库来查找的,而数据库的创建默认是每天执行一次,所以当你创建文件后查询该文件,那么locate
会告诉你找不到。因为必须要更新数据库。那能否手动更新数据库吗?当然可以,更新locate数据库的方法非常简单,直接输入“updatedb”就可以了
updatedb命令会去读取/etc/updatedb.conf这个配置文件的设置,然后去硬盘里面进行查找文件名的操作,最后就更新整个数据库文件了。因为updatedb
会去查找硬盘,所以当你执行updatedb时,可能会等待数分钟时间。
find
关于参数-n,如图所示
+4 代表大于等于5天前的文件名
-4 代表小于等于4天内的文件名
4 则是代表4-5那一天的文件名
如果将系统里面某个账号删除了,但是账号已经在系统内创建了很多文件时,就可能发生无主孤魂的文件存在。此时可以用-nouser来找出该类型文件。
-perm这个参数,他的重点在找出特殊权限的文件。SUID与SGID都可以设置在二进制程序上,假设想要将/bin 、/sbin这两个目录下只要有SUID或者
SGID的文件就列出来,你可以这样做:
因为SUID是4分,SGID是2分,总共6分,因此可用+6000来处理这个权限。find后面可以接多个目录进行查找,另外find本来就会查找子目录。
范例把的例子以图解来说明,如图
{}代表的是“由find找到的内容”,如夯土,find的结果会被放置到{}位置中。
-exec一直到“\;”是关键字,代表find额外命令的开始(-exec)到结束(\;),在这中间就是find命令内的额外命令。在上例中就是“ls -l{}”
因为“;”在bash环境下有特殊意义,因此利用反斜杠来转义。
如果要找的文件是具有特殊属性的,例如SUID、文件所有者、文件大小等,那么利用locate是没有办法找到。用find就很重要啦。
find还可以利用通配符来找文件名。比如想找/etc下面文件名包含httpd的文件: