Linux常用命令之文件查找which、find、locate命令讲解
在之前的课程中,我们介绍了Linux系统的常用文件处理命令和权限管理命令,今天我们继续来学习Linux操作系统的其他处理命令。
1、文件搜索命令 which
命令解释
- 命令名称:
which
- 命令所在路径:
/usr/bin/which
- 执行权限:所有用户
- 命令功能:显示系统命令所在目录
- 语法:
which [命令名称]
使用举例
比如我们想要查找 ls
命令所在目录:
$ which ls
注意:
which
命令只能用于查找命令所在路径,不能查找普通文件,比如想用该命令查找名为ffile1的文件,执行which file1
之后是会提示no file
:
相关命令
与 which
命令功能类似的命令 whereis
,使用方法和which
一样,比如查找 chmod
命令所在位置:
$ whereis chmod
2、文件搜索命令 find
命令解释
- 命令名称:
find
- 命令所在路径:
/usr/bin/find
- 执行权限:所有用户
- 命令功能:在指定目录下查找任何文件或目录
- 语法:
find [搜索路径] [参数] [查找关键字]
其实这条命令有点类似于在我们windows系统里面查找文件,只不过在Linux里面是用命令行来查找而已。find
命令中,参数有几十种,我们介绍常用的几种。
使用举例
一、根据文件名来查找:比如我想在/etc
目录查找名为dnf
的文件
$ find /etc -name dnf
大家可以看到,为我找出了2个名为dnf
的文件。这里提醒一下大家,这里查找是全匹配查找,并不是模糊查找,意思是这里只会为我查找名称全名为dnf
的文件,而不是查找名称包含dnf
的文件。
但是在有些情况下,我们确实需要进行模糊查找,比如忘记了文件的全名,可能只记得文件名是dnf
开头,那么我们可以用一个通配符 *
来进行查找:
$ find /etc -name dnf*
大家可以看到,为我查找出来了5个以dnf
开头的文件,其中包含了全名是dnf
的文件,因此我们可以清楚 *
号是匹配任意字符。
还有一种情况,比如我清晰的记得文件是dnf
开头的,文件全名有8个字符,后面5个字符不记得了。在这种情况下,我们可以用 ?
来进行辅助查找,一个?
匹配一个字符:
$ find /etc -name dnf?????
我们可以看到,为我查找出了2个文件名为dnf
开头,全名是8个字符的文件。
注意:使用
find
查找文件,占用系统的资源越少越好,因此我们在查找的时候,定位路径越精确越好,查找的关键字越全越好。而且最好不要在系统根目录下面查找,这样会全盘扫描,会消耗系统的大量资源。
二、根据文件大小来查找: -size
这里文件大小一般都是以block数据库块来计算的,一个数据块=512字节,因此1KB=2个数据块。比如我们要查找文件大小为1M的文件:
$ find /etc -size +2048
大家注意,在数字2048
前面我用了一个+
号,表示文件大于1M。如果是小于1M,我们可以用-
号:
$ find /etc -size -2048
- 根据文件的所有者查找:
-user
比如我要查找所有者为系统用户chuan
的用户的文件:
$ find /etc -user chuan
三、根据时间来查找
这个属性有点复杂,可以按照天来查找,也可以按照分支来查找:
天:
ctime
,atime
,mtime
分钟:
cmin
,amin
,mmin
c-change:
表示文件的属性被修改,包含所有者、所属组、权限a-access
:表示被访问、浏览过m-modify
:表示文件的内容被修改过
这里还有个要注意的,就和我们在使用-size
属性一样,有-+
的辅助, -
表示之内,+
超过。比如我们查找2分钟内被修改过的文件:
$ find /etc -mmin -2
四、根据文件类型来查找:-type
常用的类型有二进制文件 f
,软链接文件 l
,目录 d
。比如我们要查找类型为f
的文件:
$ find /etc -type f
如果我们想要在/home
路径查找名称为 up
开头的目录,该如何查找呢?这里我们就要用到Linux查找的连接符:
- -a and 逻辑与连接
- -o or 逻辑或链接
那么我们的命令可以写成:
$ find /home -name up* -a -type d
五、连接执行符:-exec
在上一个说到根据文件类型来查找的时候,我们有用到查找连接符 -a
和 -o
,这里再介绍一个相对复杂一点的连接符 -exec
。意思是:在执行命令查找完之后,再接着对执行结果进行操作。
比如我们查找 /var/log
目录下面文件名为 dnf
开头的文件,并列出这些文件的属性:
$ find /var/log -name dnf* -exec ls -l {} \;
大家肯定很疑惑这条命令中 {} \;
是什么意思,其实这个是固定格式,大家记住就行了。{}
表示 find
查询的结果
3、locate
命令使用详解
- 命令名称:
locate
- 指令英文原义:
list files in databases
- 命令所在路径:
/usr/bin/find
- 执行权限:所有用户
- 命令功能:寻找文件或目录
- 语法:
locate [查找关键字]
该命令在unix系统里面不提供,只有Linux系统才有
使用举例
比如要查找 service
的文件:
$ locate service
执行这条命令,大家会发现查找速度非常快,比 find
命令查找文件快多了。那有些同学就会说,我就用 locate
命令查找文件,干嘛还要 find
命令呢?
为解答这个问题,我们先创建一个新的文件,比如我在 test
目录新建一个 file3
的文件,然后再执行命令 $ locate file3
,发现并没有查找结果,但是这个文件缺失是存在的。
这是为什么呢?因为执行 locate
命令查找,是通过Linux文件数据库去查找,并不是扫描磁盘,因此查找速度会要比 find
查找快很多。而我刚新建的文件,并没有同步到Linux的文件数据库里面去,因此通过 locate
是查找不到的。那么我们如何把新建的文件同步到Linux文件数据库呢?有两种方式:
- 等待Linux系统自动执行任务
- 手动执行同步命令
所以接下来我们来讲解Linux的另外一个命令:updatedb
4、updatedb
命令使用详解
- 命令名称:
updatedb
- 指令英文原义:
update the slocate database
- 命令所在路径:
/usr/bin/updatedb
- 执行权限:所有用户
- 命令功能:建立系统目录文件的数据库
- 语法:
updatedb
$ updatedb
5、grep
命令使用详解
- 命令名称:
grep
- 命令所在路径:
/bin/grep
- 执行权限:所有用户
- 命令功能:在文件中搜索字符串匹配的行并输出
- 语法:
grep [指定字符] [源文件]
注意:这个命令并不是搜索文件,而是在文件中搜索匹配的字符串,并输出这一行。但是
grep
的作用不仅仅如此,后面教程中我们会继续介绍该命令的使用。
使用举例
比如我要查找 /etc/services
文件里面的 tftp
相关的,如果我们直接用之前学习的命令比如 cat
、vim
、more
等命令,发现文件内容太长,太难找了,这种情况下我们执行:
$ grep tftp service
以上4种命令就是我们日常中使用最多的文件搜索相关的命令以及使用方法。
Linux常用命令之文件查找which、find、locate命令讲解的更多相关文章
- Linux输入输出重定向和文件查找值grep命令
Linux输入输出重定向和文件查找值grep命令 一.文件描述符Linux 的shell命令,可以通过文件描述符来引用一些文件,通常使用到的文件描述符为0,1,2.Linux系统实际上有12个文件描述 ...
- [转帖]linux下的find文件查找命令与grep文件内容查找命令
linux下的find文件查找命令与grep文件内容查找命令 https://www.cnblogs.com/shileima/p/8431393.html 在使用linux时,经常需要进行文件查找. ...
- Linux学习总结(十五)文件查找 which whereis locate find
which命令 用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录.which指令会在环境变量$PATH设置的目录里查找符合条件的文件.也就是说,使用which命令,就 ...
- linux文件查找-find和locate
一.find 使用语法:find [查找目录] [查找规则] [查找完后执行的action] find是根据具体目录进行搜索 1.查找目录 如果不指定查找目录,默认在当前目录下进行查找 如果需要 ...
- Linux中3个文件查找相关命令详解
源于:https://mp.weixin.qq.com/s/VPs-IXY6RoxbltHIxtIbng which命令 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令 ...
- linux下的find文件查找命令与grep文件内容查找命令
在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访 ...
- 嵌入式开发之命令行---linux下的find文件查找命令与grep文件内容查找命令
在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访 ...
- Linux上的文件查找工具之locate与find
前言 Linux上提供了两款工具用于查找文件,一款是locate,另一款是find. locate的特点是根据已生成的数据库查找,速度较快,但是查找的是快照数据,不准确. 因此在日常使用中,为了准确性 ...
- 【Linux相识相知】文件查找(locate/find)
在用linux操作系统的时候,当我们忘记之前某个文件存储的位置,但是知道其文件名或者模糊的知道其文件名,我们都可以通过文件查找工具来查找,linux提供两种常用的查找工具,locate和find,在日 ...
随机推荐
- Spring Boot 2.3.0正式发布:优雅停机、配置文件位置通配符新特性一览
当大潮退去,才知道谁在裸泳..关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis. ...
- centos7.6静默安装oracle 11G RAC
环境介绍, esxi6.0 ,VMware vSphere Client6.0 linux 版本Centos7.6(最小化安装) Oracle 版本 oracle 11g 11.2.0.4 虚拟化环境 ...
- STL源码剖析:算法
启 算法,问题之解法也 算法好坏的衡量标准:时间和空间,单位是对数.一次.二次.三次等 算法中处理的数据,输入方式都是左闭又开,类型就迭代器, 如:[first, last) STL中提供了很多算法, ...
- 浅谈Python中的深浅拷贝的区别
深.浅拷贝总结 深拷贝 拷贝可变数据类型,如列表容器: a = [1, 2, [3, 4]] b = copy.deepcopy(a) a 与 b 所指的列表容器的空间地址不一致,即 id(a) != ...
- java代码之美(17) ---Java8 LocalDateTime
Java8 LocalDateTime 在java8之前我们在处理时间的时候都是用的Date,但它其实有很明显的缺点. 1.我们也会对日期做一些操作,比如加几天.加几分,当月的最后一天等等.有些计算实 ...
- 如何查看预收录在arXiv上论文的LaTeX源文件并编译
arXiv 是一个收集物理学.数学.计算机科学与生物学论文预印本的网站. 对于理科生来说,经常需要在上面搜索下载一些论文,正常情况下,一般人下载的只是 pdf 文件,其实可以在 arXiv 上下载编译 ...
- 基于.Net Core的Redis实现查询附近的地理信息
1.使用的Redis客户端为:ServiceStack.Redis 2.Redis 中的 GEORedis是我们最为熟悉的K-V数据库,它常被拿来作为高性能的缓存数据库来使用,大部分项目都会用到它.从 ...
- 深入理解JVM(③)Java的锁优化
前言 从JDK5到JDK6HotSpot虚拟机开发团队花费了大量的资源实现了各种锁优化技术,如适应性自旋(Adaptive Spinning).锁消除(Lock Elimination).锁膨胀(Lo ...
- hostapd阅读(openwrt)-4
接下来,咱们来看看hostapd的源码目录之hostapd,今天我们先分析整体功能,然后从main.c开始注释 hostapd下代码主要作用有:配置解析,环境初始化,控制接口建立,AP接口管理模块. ...
- lua判断字符串包含另一个字符串
lua判断字符串包含另一个字符串 --string.find("元字符串","模式字符串") 如下: print(string.find("CCBWe ...