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