Linux学习笔记-文件搜索命令
搜索会占用大量资源,不建议使用搜索。
服务器规划要做好,各种数据软件存储位置都规划好,方便查找,而不用搜索
1.7.1.find
find [搜索范围] [匹配条件]
文件搜索
1.7.1.1.文件名精确搜索
-name 根据文件名搜索,精确搜索,只有文件名相等才能搜索出来
[root@localhost cn]# find /etc -name init
/etc/sysconfig/init
/etc/selinux/targeted/active/modules/100/init
[root@localhost cn]#
1.7.1.2.星号通配符
以上精确搜索,很多名字不易记全,因此需要模糊搜索
通配符:星号* 匹配任意多个任意字符
查找所有以init开头的文件
[root@localhost cn]# find /etc -name init*
/etc/sysconfig/network-scripts/init.ipv6-global
/etc/sysconfig/init
/etc/init.d
/etc/rc.d/init.d
/etc/inittab
/etc/selinux/targeted/active/modules/100/init
/etc/selinux/targeted/contexts/initrc_context
[root@localhost cn]#
1.7.1.3.问号通配符
通配符?,匹配单个任意字符
以init开头,并且后面有3个字符
[root@localhost cn]# find /etc -name init???
/etc/inittab
[root@localhost cn]#
1.7.1.4.不区分大小写
-iname
[root@localhost cn]# find /etc -iname init???
/etc/inittab
[root@localhost cn]#
1.7.1.5.文件大小查找
-size 根据文件大小查找
size的单位是块
100MB是多少?
1个数据块=512字节=0.5KB
100MB=102400KB=204800块
1KB=2块
+n大于 -n小于 =n等于
查找大于100MB的文件
[root@localhost cn]# find / -size +204800
/proc/kcore
find: ‘/proc/1503/task/1503/fd/6’: No such file or directory
find: ‘/proc/1503/task/1503/fdinfo/6’: No such file or directory
find: ‘/proc/1503/fd/6’: No such file or directory
find: ‘/proc/1503/fdinfo/6’: No such file or directory
/usr/lib/locale/locale-archive
1.7.1.6.根据所有者查找
-user 根据所有者查找
[root@localhost cn]# find ./ -user root
./
./yum.log
./test
./test/log.log
./test1
./test2.log
./test3
[root@localhost cn]#
1.7.1.7.时间属性查找
-amin 访问时间access
-cmin 文件属性change
-mmin 文件内容modify
find /etc –cmin 5
5分钟内被修改过属性的文件和目录
1.7.1.8.复合条件and or
-a 表示and 两个条件都满足
大于50MB,并且小于100MB的文件
find /etc –size +102400 –a –size 204800
-o 表示 or 两个条件满足任意一个即可
1.7.1.9.文件类型
-type 根据文件类型查找
f 文件 d 目录 l 软链接文件
[root@localhost cn]# find ./ -type d
./
./test
./test1
./test3
[root@localhost cn]# find ./ -type f
./yum.log
./test/log.log
./test2.log
[root@localhost cn]#
1.7.1.10.对搜索结果执行命令再处理
-exec 命令 {} \;
{}表示前面查找的结果
\转义
;表示结束
好像查找结果不正确?
[root@localhost cn]# find /tmp/cn -iname 'test*' -exec ls -l {} \;
total 0
-rw-r--r--. 1 root root 0 Apr 24 20:44 log.log
total 0
-rw-r--r--. 1 root root 0 Apr 24 21:10 /tmp/cn/test2.log
total 0
[root@localhost cn]#
-ok 命令 {} \;
这个会确认提示
好像查找结果不正确?
[root@localhost cn]# find /tmp/cn -iname 'test*' -ok ls -l {} \;
< ls ... /tmp/cn/test > ? y
total 0
-rw-r--r--. 1 root root 0 Apr 24 20:44 log.log
< ls ... /tmp/cn/test1 > ? y
total 0
< ls ... /tmp/cn/test2.log > ? y
-rw-r--r--. 1 root root 0 Apr 24 21:10 /tmp/cn/test2.log
< ls ... /tmp/cn/test3 > ? y
total 0
[root@localhost cn]#
多文件查找时,参数需要加单引号:
[root@localhost cn]# find /tmp/cn -iname test*
find: paths must precede expression: test1
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
[root@localhost cn]# find /tmp/cn -iname 'test*'
/tmp/cn/test
/tmp/cn/test1
/tmp/cn/test2.log
/tmp/cn/test3
[root@localhost cn]#
1.7.1.11.i节点查找
-inum 根据i节点查找
[root@localhost cn]# ls -i
5598 test 16777673 test1 201 test2.log 33575346 test3 5597 yum.log
[root@localhost cn]# ls -il
total 4
5598 drwxrwxrwx. 2 root root 21 Apr 24 20:44 test
16777673 drwxr-xr-x. 2 root root 6 Apr 24 21:10 test1
201 -rw-r--r--. 1 root root 0 Apr 24 21:10 test2.log
33575346 drwxr-xr--. 2 root root 6 Apr 24 21:17 test3
5597 -rw-rwx--x. 1 root root 27 Apr 23 21:58 yum.log
[root@localhost cn]# find . -inum 201
./test2.log
[root@localhost cn]# find . -inum 201 -exec ls -l {} \;
-rw-r--r--. 1 root root 0 Apr 24 21:10 ./test2.log
[root@localhost cn]#
1.8.其他文件搜索命令
1.8.1.locate
安装mlocate
locate命令在安装mlocate中,所以需要安装mlocate
[root@localhost ~]# locate init
-bash: locate: command not found
[root@localhost ~]# yum list mlocate
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.cn99.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
Available Packages
mlocate.x86_64 0.26-6.el7 base
[root@localhost ~]# yun install mlocate
-bash: yun: command not found
[root@localhost ~]# yum install mlocate
Loaded plugins: fastestmirror
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
省略……………………………………………………….
Complete!
[root@localhost ~]# locate init
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
安装完成后,命令还是搜索不到内容,是因为资料库需要更新:
[root@localhost ~]# updatedb
[root@localhost ~]# locate init
/boot/initramfs-0-rescue-ee8e847af1004327a6a44a0a5a957248.img
/boot/initramfs-3.10.0-693.el7.x86_64.img
/boot/initrd-plymouth.img
/dev/initctl
locate搜索速度很快,他是在文件资料库中查找文件,所以速度很快。
语法:locate 文件名
locate自己维护的资料库:/var/lib/mlocate/mlocate.db
系统中所有的文件都会定期更新到这个文件资料库中。
存在的问题,新建的文件还未收录到资料库中的时间,是搜索不出来的。
更新文件资料库的命令:
updatedb
-i 不区分大小
locate –i init
[root@localhost opt]# locate china
/opt/china.log
[root@localhost opt]# locate -i china
/opt/China.log
/opt/china.log
[root@localhost opt]#
1.8.2.which
命令所在路径:/usr/bin/which
搜索命令所在目录及别名信息
[root@localhost opt]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@localhost opt]# which locate
/usr/bin/locate
[root@localhost opt]#
查找命令别名
rm是rm –i的别名
当我们删除文件的时候一般会有提示,是因为-i起作用。
-i prompt before every removal
[root@localhost opt]# which rm
alias rm='rm -i'
/usr/bin/rm
1.8.3.whereis
查找命令所在的目录及帮助文档路径,类似which
红色部分为文档路径
[root@localhost opt]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz
1.8.4.grep
在文件内容中搜索字串匹配的行并输出
-i 不区分大小写
-v 排除指定字符串
语法:grep –iv [指定字串] [文件]
[root@localhost opt]# grep to /etc/inittab
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
不区分大小写
[root@localhost opt]# grep -i to /etc/inittab
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# To set a default target, run:
[root@localhost opt]#
查找文件中的配置信息,去掉注释,以#开头的行都是注释,都去掉
[root@localhost etc]# grep -v ^# yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
[root@localhost etc]#