我们经常需要知道文件在哪里,才能对该文件进行一些修改或者其他的操作。有些软件的配置文件名字都一样,只是放的地方不同,我们需要找出他们的完整文件名,才能对他们进行操作。
一,脚本文件名的查询:
which(寻找“执行文件”)
这个命令是根据PATH这个环境变量所规范的路径去查询“执行文件”的文件名。所以,他只是找出执行文件而已!which后面要接完整的文件名,如果加上-a,则可以列出所有的可以找到的同名执行文件。
命令参数:
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n参数相同,但此处的包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息
例子1:查找命令路径
例子2:用which查找which
会有两个 which ,其中一个是 alias 这就是所谓的【命令别名】,意思是输入 which 会等于后面接的那串命令。
例子3:用which查找cd
cd 这个常用的命令找不到。这是因为 cd 是 bash 内建的命令!但是 which 默认是找 PATH 内所规范的目录,所以找不到。
二,文件名的查找
现在我们来看看怎么查找文件。在linux下也有非常优秀的查找命令。比如whereis,
find,locate。find的查找速度比较慢,所以我们会先用whereis或者locate来检查,如果找不到,再用find查找。因为whereis和locate是利用数据库来查找数据的,所以相当快,而且并没有实际查询硬盘,比较节省时间。
whereis(寻找特定文件)
用法:whereis 【-bmsu】 文件或目录名
命令功能:
whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。whereis 程序还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。
命令参数:
-b 定位可执行文件。
-m 定位帮助文件。
-s 定位源代码文件。
-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-B 指定搜索可执行文件的路径。
-M 指定搜索帮助文件的路径。
-S 指定搜索源代码文件的路径。
locate
使用方法:locate 【-ir】 keyword
命令参数:
-i:忽略大小写的差异。
-r:后面可接正则表达式的显示方式。
locate的使用非常简单,后面直接跟“文件的部分名称”,即可查询。
locate和whereis是通过数据库来查询的,所以速度很快,但是也有限制,因为数据库默认每天刷新一次,如果你新建的文件是查不到的,你可以手动更新数据库,用“updatedb”即可。
现在我们来看看今天的重点find命令:
find [PATH] [option] [action]
参数1:与时间有关的参数:-atime , -ctime , -mtime
下面以-mtime说明。
-mtime n :列出在n天前的那一天被更改过的文件名。
-mtime +n :列出在n天之前(不含n天那一天)被更改过的文件名。
-mtime -n :列出在n天之内(含n天那一天)被更改过的文件名。
-newer file:file为已经存在的文件,列出比file还要新的文件。
参数2:与用户或用户组名有关的参数
-uid n :n为数字,这个是用户的账号ID,即UID。
-gid n :n为数字,这个是用户组的账号ID,即GID。
-user name:name为用户账号的名称。
-group name:name为用户组名。
-nouser :寻找文件的所有者不存在/etc/passwd的人。(如果你将系统里面某个账号删除了,但是该账号在系统中创建了很多文件,就会出现无主孤魂的文件了。此时你就可以用这个-nouser来找出该类型的文件。)
-nogroup :寻找文件的所有用户不存在/etc/group中的文件。
参数3:与文件权限及名称有关的参数:
-name filename:查找文件名为filename的文件。
-size [+-]SIZE:查找比SIZE还要大(+)或者小(-)的文件。
例如:找比50kb大的文件:
-type TYPE:查找文件类型为“TYPE”的文件。例如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-perm mode:查找文件权限“刚好等与mode”的文件。mode类似于chmod的属性值。
-perm -mode:查找文件权限“必须要全部包含mode的权限”的文件。比如我们要找
-rwxr--r--,即0744的为文件,使用-perm -0744,如果有一个文件权限为-rwxr-xr-x,即4755,也会被列出来。
-perm +mode:查找文件权限“包含任一mode的权限”的文件。道理同上。
例如:找出、bin目录下只要具有SUID和SGID的文件就列出来:
参数4:其他可经行的操作:
-exec command :command为其他命令,-exec后面可再接其他的命令来处理查到的结果。
find的特殊功能就是能够进行额外的动作(action)。
我们将上边的例子用图解方式解释一下:
该例子中特殊的地方有“{}”和“\;”,还有-exec关键字:
{}代表的是“由find找到的内容”,find找到的结果会被放到{}中;
-exec一直到“\;”是关键字,代表find额外命令的开始(-exec)到结束(\;),本例中“ls -l {} \;”就是;
之所以在;前面加个\,是因为在bash环境下“;”是有特殊含义的,所以用“\”来转义。
find还可以利用通配符来找寻文件名。
到这里find的一些基本操作就完了,今天的学习就到这了。