Linux文件搜索命令
文件搜索命令:locate
locate 文件名
- 在后台数据库中按文件名搜索,搜索速度很快(比find命令要快得多)
- locate命令所搜索的后台数据库的位置:/var/bin/mlocate
- 支持模糊搜索
这里要说明一下:locate的数据库是每天更新一次,所以新创建的文件是无法搜索到的,但是可以通过updatedb命令来更新数据库,更新后即可查找到。
请仔细阅读以下命令和结果:
[root@localhost ~]# ls
anaconda-ks.cfg
[root@localhost ~]# locate anaconda-k
/root/anaconda-ks.cfg
[root@localhost ~]# touch abcccc.txt wwbcccctt.txt
[root@localhost ~]# ls
abcccc.txt anaconda-ks.cfg wwbcccctt.txt
[root@localhost ~]# locate bcccc
[root@localhost ~]# updatedb
[root@localhost ~]# locate bcccc
/root/abcccc.txt
/root/wwbcccctt.txt
[root@localhost ~]#
此外,locate 需要符合一个配置文件的筛选规则,该文件为:
/etc/updatedb.conf
我们看一下文件的内容(通过命令 vi [文件名] 查看)
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"
其中,PRUNEFS
、PRUNENAMES
、PRUNEPATHS
分别列出了三种不同类别的文件,在第一行中的PRUNE_BIND_MOUNTS
如果是yes,那么符合这些条件的文件将不会被搜索,如果是no,那么即可以搜索得到。
默认为yes,所以当你想搜索 tmp/ 目录下的文件时,是无法搜索到的。
命令搜索命令:whereis、which
whereis
whereis 命令名
选项:
- -b : 只查找可执行文件(即只查找命令执行文件所在位置)
- -m : 只查找帮助文件
whereis 只能搜索系统的命令,它搜索命令文件所在的路径和帮助文档的位置
[root@localhost ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@localhost ~]# whereis -b ls
ls: /usr/bin/ls
[root@localhost ~]# whereis -m ls
ls: /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@localhost ~]#
which
which 命令名
which 搜索命令所在位置和文件别名
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@localhost ~]# which pwd
/usr/bin/pwd
通过命令我们得知,ls
是ls --color=auto
的别名,这里第一行显示命令的别名,第二行显示文件所在位置。如果文件没有别名,则不显示别名,只显示路径。比如pwd。
PATH环境变量
whereis 和 which 命令都是在这个环境变量的路径下寻找的,我们可以想一下,为什么执行 ls 可以输出结果?而不用写 ls 的绝对路径?因为 ls 这个命令已经在环境变量的路径中配置,只要在环境变量下,就可以直接输入命令。
我们来看一下PATH变量的路径:
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
我们在 Linux命令基本格式及目录处理命令 有讲过:
- /bin 命令保存目录(普通用户权限)
- /sbin 命令保存目录(root权限)
这些路径就是命令所在的路径,也都保存在PATH环境变量中。
文件搜索命令:find
find [搜索范围][搜索条件][文件名]
搜索条件:
- -name : 按名字搜索
- -iname : 按名字搜索,但不区分大小写
- -user : 按所有者搜索
- -nouser : 查找没有所以者的文件
- -mtime : 按时间查找(查找在某时间范围内被修改内容的文件)后面跟时间(天为单位)
- -atime : 按时间查找(查找在某时间范围内被访问的文件)后面跟时间(天为单位)
- -ctime : 按时间查找(查找在某时间范围内被改变属性的文件)后面跟时间(天为单位)
- -size : 按照文件大小搜索,后面跟文件大小,必须给出单位,比如k、M,G
- -inum : 按照文件节点查找,后面跟着节点
注意:
- find命令是遍历搜索,会把搜索范围内的文件遍历搜索一遍,尽量要指定范围,不要全局遍历,否则很耗费资源
- find命令是全文搜索,可以使用通配符来进行匹配搜索
- * : 匹配任意内容
- [] : 匹配任意中括号内的一个字符
- ? : 匹配任意一个字符
-name
[root@localhost ~]# ls
anaconda-ks.cfg folder_a www.bat www.bbcc www.txt
[root@localhost ~]# find /root -name www.txt
/root/www.txt
[root@localhost ~]# find /root -name www.*
find: 路径必须在表达式之前: www.bbcc
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
[root@localhost ~]# find /root -name "www.*"
/root/www.txt
/root/www.bbcc
/root/www.bat
使用通配符的时候,注意要用双引号括起来,否则会出现上述提示的错误。
-iname
[root@localhost ~]# ls
anaconda-ks.cfg folder_a www.txt WwW.txt WWW.txt
[root@localhost ~]# find /root -iname www.txt
/root/www.txt
/root/WWW.txt
/root/WwW.txt
-user
[root@localhost ~]# ll
总用量 4
-rw-------. 1 root root 2752 Nov 10 02:51 anaconda-ks.cfg
drwxr-xr-x. 2 root root 20 Dec 6 00:20 folder_a
-rw-r--r--. 1 root root 0 Dec 6 00:11 www.txt
-rw-r--r--. 1 root root 0 Dec 6 14:54 WwW.txt
-rw-r--r--. 1 root root 0 Dec 6 14:53 WWW.txt
[root@localhost ~]# find /root -user root
/root
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/anaconda-ks.cfg
/root/.cache
/root/.cache/abrt
/root/.cache/abrt/lastnotification
/root/.config
/root/.config/abrt
/root/.bash_history
/root/folder_a
/root/folder_a/bbc.txt
/root/www.txt
/root/WWW.txt
/root/WwW.txt
[root@localhost ~]#
-nouser
[root@localhost ~]# find /root -nouser
[root@localhost ~]# find /sys -nouser
[root@localhost ~]#
一般都是有所有者,所以搜索结果为空
-mtime、-atime、-ctime
[root@localhost ~]# find /root -mtime -10
/root
/root/.cache/abrt
/root/.cache/abrt/lastnotification
/root/folder_a
/root/folder_a/bbc.txt
/root/www.txt
/root/WWW.txt
/root/WwW.txt
[root@localhost ~]# find /root -mtime +10
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/anaconda-ks.cfg
/root/.cache
/root/.config
/root/.config/abrt
/root/.bash_history
这里:
- -10:表示在十天之内修改的
- 10:表示过去的第十天修改的
- +10:表示十天之前修改的
-size
[root@localhost ~]# ls
anaconda-ks.cfg folder_a www.txt WwW.txt WWW.txt
[root@localhost ~]# find /root -size -5k
/root
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/anaconda-ks.cfg
/root/.cache
/root/.cache/abrt
/root/.cache/abrt/lastnotification
/root/.config
/root/.config/abrt
/root/.bash_history
/root/folder_a
/root/folder_a/bbc.txt
/root/WWW.txt
/root/WwW.txt
/root/www.txt
符合条件的隐藏文件都被搜索出来。
还可以搜索一个范围:
[root@localhost ~]# find /root -size +2k -a -size -5k
/root
/root/anaconda-ks.cfg
-a表示and,上面的命令表示在 2k 到 5k 之间的文件都搜索出来,与
-o表示or,或
此外还可以用:
-exec [命令] {} ;
来对搜索出来的结果进行命令操作:
[root@localhost ~]# find /etc -size +20k -a -size -50k -exec ls -lh {} \;
-rw-r--r--. 1 root root 26K Jan 15 2015 /etc/sysconfig/network-scripts/network-functions-ipv6
-rw-r--r--. 1 root root 24K Mar 5 2015 /etc/selinux/targeted/modules/active/modules/apache.pp
-rw-r--r--. 1 root root 28K Mar 5 2015 /etc/selinux/targeted/modules/active/modules/init.pp
-rw-r--r--. 1 root root 33K Mar 5 2015 /etc/selinux/targeted/modules/active/modules/staff.pp
-rw-r--r--. 1 root root 44K Mar 5 2015 /etc/selinux/targeted/modules/active/modules/sysadm.pp
-rw-r--r--. 1 root root 29K Mar 5 2015 /etc/selinux/targeted/modules/active/modules/unprivuser.pp
-rw-r--r--. 1 root root 26K Mar 5 2015 /etc/selinux/targeted/modules/active/modules/virt.pp
-rw-r--r--. 1 root root 21K Mar 5 2015 /etc/selinux/targeted/modules/active/modules/xguest.pp
-rw-r--r--. 1 root root 28K Mar 5 2015 /etc/selinux/targeted/modules/active/modules/xserver.pp
-rw-r--r--. 1 root root 25K Jun 9 2014 /etc/dnsmasq.conf
-rw-r--r--. 1 root root 49K Mar 5 2015 /etc/brltty/fr-abrege.ctb
-rw-r--r--. 1 root root 37K Mar 5 2015 /etc/brltty/de-kurzschrift.ctb
-rw-r--r--. 1 root root 21K Mar 5 2015 /etc/brltty/en-nabcc.ttb
-rw-r--r--. 1 root root 39K Mar 5 2015 /etc/brltty/en-us-g2.ctb
-rw-r--r--. 1 root root 22K Mar 5 2015 /etc/brltty.conf
-rw-r--r--. 1 root root 21K Jun 9 2014 /etc/postfix/access
-rw-r--r--. 1 root root 22K Jun 9 2014 /etc/postfix/header_checks
-rw-r--r--. 1 root root 27K Jun 9 2014 /etc/postfix/main.cf
[root@localhost ~]#
-inum
[root@localhost ~]# ls
anaconda-ks.cfg folder_a www.txt WwW.txt WWW.txt
[root@localhost ~]# ls -i
71259104 anaconda-ks.cfg 4164211 folder_a 71274406 www.txt 71274405 WwW.txt 71274385 WWW.txt
[root@localhost ~]# find -inum 71274406
./www.txt
[root@localhost ~]#
在文件中搜索字符串的命令:grep
grep [选项] 字符串 文件名
在文件中搜索符合条件的字符串
选项:
- -v : 反选,排除制定的字符串
- -i : 忽略大小写
[root@localhost ~]# vi hello.txt
Hello World!
I love you!
~
-- INSERT --
[root@localhost ~]# grep World hello.txt
Hello World!
[root@localhost ~]# grep love hello.txt
I love you!
Linux文件搜索命令的更多相关文章
- Linux系列教程(六)——Linux文件搜索命令
前一篇博客我们讲解了Linux链接命令和权限管理命令, 通过 ln -s 链接名 表示创建软链接,不加-s表示创建硬链接:还有三个更改权限的命令,chmod命令可以更改文件或目录权限,chown命令 ...
- Linux 文件搜索命令:find、which、whereis 和 locate
Linux 提供了许多用于文件搜索的命令,这些命令都很强大,但是也有一些不同之处,这里分别介绍一下. 一.find 命令 find 是最常见和最强大的一个文件搜索命令.使用 find 命令可以在指定目 ...
- Linux —— 文件搜索命令
文件搜索命令(配置文件/etc/updatedb.conf) locate 文件名 搜索速度非常快 在后台数据库中按照文件名搜索 updatedb 更新数据库 只可以按照文件名搜索 whereis 命 ...
- linux 文件搜索命令find、-name、-iname、通配符*?、-size、-user、-group、-amin、-cmin、-mmin、-a、-o、-exec/-ok、-inum
尽可能规划好目录结构,少用文件搜索操作,因为它会占用大量的系统资源 find /bin/find find [搜索范围] [匹配条件] find /etc -name initfind /etc -n ...
- Linux文件搜索命令find
命令find可以根据文件的不同属性在指定的范围内搜索文件,例如: 根据文件名进行查找,在目录/etc下搜索文件名为init( -iname 可以实现不区分大小写进行查找)的文件,实现精准查找,只查找文 ...
- 【find】linux文件搜索命令find/locate
参考链接:https://mp.weixin.qq.com/s/y8LeZ0-9D56TWsD-ivPaHQ 一.按文件名称查找 按照文件名称查找是 find 最常见的用法,需要注意的是,搜索的文件名 ...
- Linux——文件搜索命令简单笔记
一: 命令名称:which 命令所在路径:/usr/bin/which 执行权限:所有用户 功能描述:显示系统命令所在目录 范例:$ which ls 还有一个whereeis ls 命令 二: 命令 ...
- linux 文件搜索命令locate及updatedb
windows 搜索工具Everything是根据NTFS日志来搜索的,所以速度特别快 locate 类似于windows的Everything,搜索速度比较快 如果没有locate命令,可安装 yu ...
- Linux文件搜索命令locate、which、grep详解
命令locate详解 命令locate,其基本功能是在文件资料库中可以快速的搜索系统文件,占用系统资源很少,例如:locate my.cnf 还可以使用locate -i [文件名],不区分大小写进行 ...
随机推荐
- 构造函数this和base的区别
构造函数this和base的区别: this:调用的是本身,不能调用父类和子类的 base:调用父类的,不能调用本身的,但别人继承,可以调用 从中也可以得出另外个结果构造函数的运行过程 先从基类开始构 ...
- CSS实现单行、多行文本溢出显示省略号(…)
如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览. 实现方法: overflow: hidden; te ...
- 一个DNS统计,RCFs,工具站点
RCFs http://www.statdns.com/rfc/ DNS resources A collection of DNS related resources DNS Servers Nam ...
- WCF 依赖注入-- Attribute
最近,工作之余学习WCF(Windows Communication Fundation)时,感觉自己还有好多的东西需要学习呀⊙﹏⊙b汗,于是想记录下自己学习WCF的心得,以鼓励自己再接再厉,同时希望 ...
- DevExpress 为TextEdit设置水印文字
设置水印代码: //设置水印值public static void SetWatermark(this TextEdit textEdit, string watermark) { textEdit. ...
- iis部署文件支持svg
今测试的一个asp网站代码,在本地一切正常,可是上传到服务器上之后就发现一些图标不显示了.图片在文件路径存在,但是访问不了,经查询.svg的图片想要在iis(iis7支持)上能正常打开,还需要做一下映 ...
- was not declared in this scope
“was not declared in this scope”是一个错误信息,在编译的时候会遇到.其含义为标识符在其出现的地方是未被定义的. 出现该错误的时候,会同时把未定义的变量名显示出来.比如如 ...
- c#制作一个屏幕保护程序
代码已上传github 实现思路:纯黑窗体去边框,加入标签. 使用Timmer让windows 10标签运动.限制标签的行为. 代码: int deltX = 10; int deltY ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数016,xld,xld轮廓
<zw版·Halcon-delphi系列原创教程> Halcon分类函数016,xld,xld轮廓 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“ ...
- Material Design Lite,简洁惊艳的前端工具箱 之 交互组件。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, 博客地址为http://www.cnblogs.com/jasonnode/ . 网站上有对应 ...