Linux学习-2-搜索命令

一:locate命令

在后台数据库中按文件名搜索,搜索速度更快

使用方式:locate 【文件名】

注意:locate搜索命令是去系统的数据库进行搜索,数据库位置在 /var/lib/mlocate;因为该数据库的更新是默认一天已更新,所以要想搜索当天刚创建的文件,需要手动更新数据库 ;命令:updatedb

locate命令是根据/etc/updatedb.conf这个配置文件进行搜索的:

  1. PRUNE_BIND_MOUNTS = “yes” 表示开启搜索限制;
  2. PRUNEFS = 表示搜索时,不搜索的文件系统;
  3. PRUNENAMES = 表示搜索时,不搜索的文件类型;
  4. PRUNEPATHS = 表示搜索时,不搜索的路径。

查看该文件:

PRUNE_BIND_MOUNTS = “yes”
PRUNEFS = “9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs”
PRUNENAMES = “.git .hg .svn”
PRUNEPATHS = “/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp”

可以看到,locate命令是不会去查找/tmp目录下的文件,如果我们在/tmp下新建一个文件,再执行updatedb 操作,用locate命令还是查找不到所创建的文件,原因就是因为该配置文件过滤掉了。

注意:which和whereis命令同样根据该配置文件进行搜索

二:命令搜索命令

顾名思义,就是用来搜索linux命令所在的位置
1:whereis 命令

搜索命令所在路径及帮助文档所在位置。
例如:whereis ls

选项:
-b:只查找可执行文件所在路径
-m:只查找命令的帮助文件所在路径

2:which 命令

搜索命令所在路径及别名。
例如:which cat

区别:

  1. whereis能够查找到命令的帮助文档(以.gz结尾的文件),而which不行
  2. which命令可以查看命令的别名,如:which ls 是ls –color=auto的别名

如下:

[root@VM_89_251_centos etc]# which ls
alias ls=’ls –color=auto’
/usr/bin/ls
[root@VM_89_251_centos etc]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

3:PATH环境变量

其实我们所敲的系统命令都应该敲命令的绝对路径,如ls命令应该敲/bin/ls。但是由于配置了环境变量,当我们敲命令如ls的时候,首先会去环境变量中找,找到了就会执行,没找到就会报错找不到命令。

查看环境变量所在的位置:

[root@VM_89_251_centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/soft/devo/java/jdk1.8.0_131/bin:/opt/soft/devo/hadoop/hadoop-2.6.1/bin:/root/bin

3:find命令

find命令是一个很强大的命令,可以带很多参数根据不同的需求进行查询

命令为 find [搜索范围] [搜索条件]

例如 :在root下查找文件名为durant的文件; find /root -name durant

注意:要尽量避免扩大搜索范围,也就是尽量不要用find /

find是在系统当中搜索符合条件的文件名,需要文件名完全匹配。使用通配符后可以进行模糊查询。

Linux中的通配符

1: * 匹配任意内容
2: ? 匹配任意一个字符
#: [] 匹配任意一个中括号内的字符
如:

[root@VM_89_251_centos ~]# find /root -name jcy
/root/jcy
[root@VM_89_251_centos ~]# find /root -name ‘jcy*’
/root/jcya
/root/jcy
/root/jcy/aa/jcy.txt
[root@VM_89_251_centos ~]# find /root -name ‘jcy[ab]’
/root/jcya
/root/jcyb

为了更好的进行匹配,请用单引号将查找内容引起来

find /root-user root:按照所有者搜索。这里表示按root用户搜索其所拥有的文件。

find /root-nouser:查找没有所有者的文件。

注:没有所有者的文件一般都是垃圾文件,我们可以手动把它们删除。除了下面两种情况,第一种,由系统内核产生的文件,如/proc和/sys目录下的文件,文件可能没有所有者;
第二种,外来接入的U盘、光盘等,此外里面的文件如果由Windows产生则不存在所有者。(Windows系统不是没有文件所有者这个概念,而是它忽略了这个概念。)

find /var/log/ -mtime +10:查找10天前修改的文件。

选项:
-atime:文件访问时间

-ctime:改变文件属性

mtime:修改文件内容

参数,如:

-10:10天内修改的文件

10:10天当天修改的文件

+10:10天前修改的文件

find .-size 25k:查找文件大小为25KB的文件。这里查找的是当前目录下。

参数,如:

-25k:小于25KB的文件

25:等于25KB的文件

+25k:大于25KB的文件

注:可以搜索以MB为单位的文件,如find . -size 2M。

注意:此处查找文件大小时,k为小写,M为大写

find . inum 234567:查找i节点为234567的文件。(通过ls -i [文件名]可以查看文件的i节点)

find /etc-size +20k -a -size -50k:查找/etc/目录下,大于20KB并且小于50KB的文件。

选项:

-a(and):逻辑与,两个条件都要满足

-o(or):逻辑或,两个条件满足一个即可

find查询后跟操作

-exec [操作命令] {} \;
例如:

[root@VM_89_251_centos ~]# ls
aa ab anaconda-ks.cfg
[root@VM_89_251_centos ~]# find /root -name aa -exec rm -rf {} \;
[root@VM_89_251_centos ~]# ls
ab anaconda-ks.cfg
[root@VM_89_251_centos ~]#

注意 {}和 \ 之间要有空格,否则会报错missing -exec

四:字符串命令grep

按照条件搜索内容,并将该行内容显示

用法:grep [选项] 字符串文件名:在文件当中匹配符合条件的字符串。

选项:

-i 忽略大小写

-v 排除指定字符串

[root@VM_89_251_centos ~]# ls
ab anaconda-ks.cfg
[root@VM_89_251_centos ~]# grep “dd” ab
dddddddddddd
[root@VM_89_251_centos ~]# grep “ss” ab
sssssssssssssss
[root@VM_89_251_centos ~]# grep “dd” -v ab
qqqqqqqqqqqqqqqq
sssssssssssssss
fffffffffffffffff

[root@VM_89_251_centos ~]#

五:find命令与grep命令的区别

find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配。
grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式是包含匹配。

  1. 完全匹配:完全满足要求才会返回结果
  2. 包含匹配:不管如果,只要内容包含查询条件就会返回
阅读更多
版权声明: https://blog.csdn.net/weixin_38956287/article/details/79954160
文章标签: linux 查询命令
个人分类: Linux
上一篇Java学习-多线程-1-线程的创建及同步代码块
下一篇Java学习-多线程-2-定时器Timer与线程之间的通信
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭