文档章节

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

zimingforever
 zimingforever
发布于 2015/08/03 20:03
字数 2073
阅读 19
收藏 1

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



© 著作权归作者所有

zimingforever
粉丝 143
博文 266
码字总数 315040
作品 0
杭州
程序员
私信 提问
每天一个linux命令目录

开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每天一个linux命令。学习的主要参考资料为: 1.《鸟哥的linux私房菜》 2.http://codingstandards.iteye.com/blog/786653...

长平狐
2013/06/17
174
0
怎样理解和识别 Linux 中的文件类型

众所周知,在 Linux 中一切皆为文件,包括硬盘和显卡等。在 Linux 中导航时,大部分的文件都是普通文件和目录文件。但是也有其他的类型,对应于 5 类不同的作用。因此,理解 Linux 中的文件类...

作者: Magesh Maruthamuthu
04/12
0
0
你值得了解的 10 个有趣的 Linux 命令行小技巧

我非常喜欢使用命令,因为它们比 GUI(图形用户界面)应用程序对 Linux 系统提供更多的控制,因此,我一直在寻找一些有趣的方法让 Linux 的操作变得简单好玩,主要是基于终端操作。 当我们发...

两味真火
2017/01/16
4.8K
10
16个桌面Linux用户必须要知道的Shell命令

有些人仍然会有这中愚蠢的想法,他们认为使用Linux就必须使用Linux shell命令。胡说!你可以不懂得任何Linux命令,比如说ps,grep,ls等,但是你仍然可以使用很多现代的Linux桌面发行版。 Li...

王振威
2012/05/06
0
28
每个 Linux 新手都应该知道的 10 个命令

通过这 10 个基础命令开始掌握 Linux 命令行。 你可能认为你是 Linux 新手,但实际上并不是。全球互联网用户有 3.74 亿,他们都以某种方式使用 Linux,因为 Linux 服务器占据了互联网的 90%。...

作者: Sam Bocetta
2018/05/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

从濒临解散到浴火重生,OceanBase 这十年经历了什么?

阿里妹导读:谈及国产自研数据库,就不得不提 OceanBase。与很多人想象不同的是,OceanBase 并非衔着金钥匙出生的宠儿。相反,它曾无人看好、困难重重,整个团队甚至数度濒临解散。 从危在旦...

阿里云云栖社区
18分钟前
1
0
比特币第三方API大全

在开发比特币应用时,除了使用自己搭建的节点,也可以利用第三方提供的比特币api,来获取市场行情、进行交易支付、查询账户余额等。这些第三方api不一定遵循标准的比特币rpc接口规范,但往往...

汇智网教程
29分钟前
1
0
Dozer:Dozer异常java.lang.ClassCastException

这个问题是个很难发现的问题,因为代码本身没有错误,但就是无法找到报错原因 现记录下这个报错 java.lang.ClassCastException:com.XXX.ObjectA cannot be cast to com.XXX.ObjectA 代码中并...

琴兽
今天
2
0
Feign Retryer的默认重试策略测试

1、Feign配置 @Configurationpublic class FeignConfig { @Value("${coupon_service.url:http://localhost:8081}") private String couponServiceUrl; @Bean publ......

moon888
今天
2
0
关于不同域名下的session共享问题

如果登录,首页,分类,列表,产品都在不同的二级域名下,主域名不变,一定要保证里面的版本问题,不能为了更新而更新,这样哪个下面的session都访问不了。

dragon_tech
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部