linux命令-which&whereis&locate&find命令

linux下查找文件的命令有which,whereis,locate和find,这几个命令的别刻意总结如下

which  查看可执行文件的位置。
whereis 查看文件的位置。 
locate   配合数据库查看文件位置。
find   实际搜寻硬盘查询文件名称。

which命令可以在path中找到某条命令,并查看该命令的具体具体位置。

which的几个参数有-n 用来指定文件名长度,该文件名长度必须大于或等于所有文件中最长的文件名

-p 与-n参数相同,但是此处包含了路径

-V 显示版本信息

例子1

 which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
        /usr/bin/which

参考文档:

http://www.cnblogs.com/peida/archive/2012/11/08/2759805.html

whereis命令主要用来查找相关命令的位置,对比which来说它查找返回速度更快,因为它会去找linux系统的一个文件中,但是缺点是这个文件可能不是实时的。会有一段时间的滞后。

whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。whereis 程序还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。

$whereis -m cd
cd: /usr/share/man/mann/cd.n.gz /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz

whereis -s 是用来查找文件,-m 是用来查找帮助文档。

http://www.cnblogs.com/peida/archive/2012/11/09/2761928.html

locate也是用来查找命令的,locate也是查找数据库文件的,所以速度很快

$locate pwd
/bin/pwd
/etc/.pwd.lock
/home/tops/lib/perl5/5.8.9/pwd.pl
/home/tops/lib/python2.7/lib-dynload/spwd.so
/home/tops/lib/python2.7/test/test_pwd.py
/home/tops/lib/python2.7/test/test_pwd.pyc
/home/tops/lib/python2.7/test/test_pwd.pyo

http://www.cnblogs.com/peida/archive/2012/11/12/2765750.html

find命令

find命令是一个非常重要的命令,使用方法为 find path -option [-print,-exec -ok]

适用的选项有

-name   按照文件名查找文件。
-perm   按照文件权限来查找文件。
-prune  使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user   按照文件属主来查找文件。
-group  按照文件所属的组来查找文件。
-mtime -n +n  按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-nogroup  查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser   查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2  查找更改时间比文件file1新但比文件file2旧的文件。
-type  查找某一类型的文件,诸如: b - 块设备文件。 d - 目录。 c - 字符设备文件。p - 管道文件。l - 符号链接文件。f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
另外,下面三个的区别:
-amin n   查找系统中最后N分钟访问的文件
-atime n  查找系统中最后n*24小时访问的文件
-cmin n   查找系统中最后N分钟被改变文件状态的文件
-ctime n  查找系统中最后n*24小时被改变文件状态的文件
-mmin n   查找系统中最后N分钟被改变文件数据的文件
-mtime n  查找系统中最后n*24小时被改变文件数据的文件

例子1 查找最近2天改过的文件

$find . -atime -2
.
./.bash_profile
./.gnome2
./.ssh
./.bashrc
./.bash_history

例子2  根据关键字查找

$find . -name  "*.log"
./icc-gc-log.log
./icc.log
./tomcat-gc-log.log
./icc_9797.log

例子3 根据权限查找

$find . -perm 644
./icc_9797.log.2014-05-09
./icc-gc-log.log
./icc_9797.log.2014-05-27
./icc_9797.log.2014-06-25

例子4 查找文件夹类型

$find . -type d

例子5 根据文件大小查找

find . -size +1000c

例子6 可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略

find test/ -path test/test1 -prune -o -print

表示只查找test下的所有文件,并且不查找test1文件夹下内容

其中-o 表示或的关系,表示如果-path 为真则跳过,否则-print

find test/ \( -path test/test1 -o -path test/test2 \) -prune -o -print

表示不查找test1和test2文件夹下的文件,圆括号表示表达式的结合。  \ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。  


例子7 表示找到被删除用户的文件

find /home/ -nouser -print


例子8表示找不属于任何用户组的文件

find /home -nogroup

例子9 找到比test1文件夹新但是没有文件夹4新的文件

find test/ -newer test/test1 ! -newer test/test4

例子10是 depth的用法,指定搜索顺序,从文件树的最子层目录查起 

$find test
test
test/test1
test/test1/test2
test/test2
test/test2/test3
test/test4
test/test4/test5
test/test4/test5/test6

$find test -depth
test/test1/test2
test/test1
test/test2/test3
test/test2
test/test4/test5/test6
test/test4/test5
test/test4
test

find后面可以加exec参数,表示执行完find命令后再执行对应的操作,-exec  参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{}   花括号代表前面find查找出来的文件名。

例子1 查找test下所有文件夹并用ls命令展示出来。

find test/ -d -exec ls -al {} \;

find后面可以加args参数,find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。  在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高; 而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

例子1 查找test下素有文件并用ls命令打印处理

$find test/  | xargs ls -al

例子2 -i表示对应的参数,{}是占位符

find test/   |xargs -i ls {}

例子3 find后执行xargs提示xargs: argument line too long解决方法:-l1是一次处理一个;-t是处理之前打印出命令

find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f

例子4 -p参数需要你确认是否执行后续的操作

find test1/   |xargs -p -i ls {}

参考文档:

http://www.cnblogs.com/peida/archive/2012/11/13/2767374.html

http://www.cnblogs.com/peida/archive/2012/11/14/2769248.html

http://www.cnblogs.com/peida/archive/2012/11/15/2770888.html

http://www.cnblogs.com/peida/archive/2012/11/16/2773289.html



你可能感兴趣的:(linux命令-which&whereis&locate&find命令)