关于文件查找,能想到的locate ,find ,whereis,which
which 命令,可以查找到该命令的绝对路径。
[root@master shell]# which service
/sbin/service
PATH:环境变量
关于PATH 的理解,因为linux执行的是文件,而PATH设置的路径则是kernel 直接可以执行的文件目录集合,
不需要输入绝对路径,只输入CMD就可以执行,which cmd名,可以查看此命令的绝对路径,/etc/profile 修改后可以改变系统环境变量,
source /etc/profile 则会使改变立即生效
[root@redhat ~]# whereis [-bmsu] 文件或者目录名称
参数说 明:
-b : 只找二进制文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件
例如:
[root@redhat ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
将和passwd文件相关的文件都查找出来
locate 一般在系统刚安装完成后,第一次使用locate时,暂时无法使用,需要进行updatedb
locate 文件/目录名 是它的使用方法。
locate passwd
因为locate是基于数据库的操作,所以它的查询结果会很快,数据库理论上是每天更新一次,而我们在当日新加入的内容,可能
就找不到,需要手动更新db操作,就可以了。
find 是查找当中我们用到的最多的,因为它能使用的参数以及选项比较灵活
需要介绍的几个选项 mtime = modified time 文件内容修改时间,ctime = change time文件属性修改时间,atime=access time 访问时间
find 指定搜索的路径 选项 文件名
这里的选项可以有 -type ,-mtime,-ctime,-atime,-size(大小)
例如:find / -type f -mtime -3 -name *.log 查找根目录下(也就是整个磁盘中)3天之前修改的,文件名包含.log的文件
一般情况下,我们查找在不知道具体路径的情况下,我们会以搜索路径设定为/
find /var -size +100k -name *.log 查找在/var 下 大于100k的log文件。
这里-size 可以跟的单位包括 [cwbkMG]
其他还能经常使用的参数:
-newer file :把比file还要新的文件列出来
名称查找参数:
-gid n :寻找群组ID为n的文件
-group name :寻找群组名称为name的文件
-uid n :寻找拥有者ID为n的文件
-user name :寻找用户者名称为name的文件
-name file :寻找文件名为file的文件(可以使用通配符)
另外-exec COMMAND,后可以接别的选项。
配合管道命令进行 一些操作
比如 删除修改30天以上的 文件
find / -mtime + 30 | xargs rm -f
或者 将某个目录下的文件都重命名
find / -name 。。|xargs -i mv {} {}.bak
关于xargs
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如:
find /sbin -perm +700 |ls -l 这个命令是错误的
find /sbin -perm +700 |xargs ls -l 这样才是正确的
xargs 可以读入 stdin 的资料,并且以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments 。 因为是以空白字元作为分隔,
所以,如果有一些档名或者是其他意义的名词内含有空白字元的时候, xargs 可能就会误判了~
原文:http://www.cnblogs.com/we14578/p/5231967.html