linux 下查找文件的方法可以归类为4种(并不一定严格准确,仅作为参考):
- 通过find 命令去找
- 通过locate 命令去找
- 通过 grep 根据查找文件内容去找
- 通过特定程序的指定用法去找
1. 通过find 命令查找文件
find 命令用法很多,这里只说下常用的,其它的用到的时候可以man 一下子。
find 基本用法是:
find / -option params
查找当前目录下文件名为:.env 的文件:
find ./ -name .env
查找文件类型为管道的文件
find / -type p
这里说一下创建管道文件的命令是:mkfifo
查找大于200M 的文件:
find / -size +200M
在当前目录下查找大于100M 并且小于300M的文件:
find ./ -size +100M -size -300M
说明:如果想查找大于100k的文件,可以直接把M 替换成 k 即可 ,这里为了举例方便,很多时候都是在/目录下查找,但是在生产环境中慎用,这样做会产生很大的性能问题。
在当前目录下查找,2天以前修改的文件
find ./ -mtime +2
说明:stat fileName 查看文件时间戳,同理,查看文件创建时间 ctime ,文件访问时间 atime ,命令模式:find path m/a/c time +n -n ,+n是指n天以前, - n 是指n 天以内。
查找文件名中有index的python 文件(即*index*.py)
find / -name "*index*.py"
其它的一些用法可以参考这篇文章:
http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html
对find 命令来说,如果不想去man ,可以看下上面链接地址的文章,写的很详细很全。
2. 通过locate 命令去定位
locate 查找文件比find 要快,要简单的多 ,跟 find 比起来,少了很多参数,这里只说下查找的用法,其它一些用法请自行man。
查找php.ini
locate php.ini
如果你亲自尝试了一把,就会发现,locate 命令会很快,locate之所以如此之快,是因为它不会为搜索到的文件或目录名读取文件系统。它实际上是指一个数据库(由updatedb编写)来查找用户正在查找的内容,并根据该搜索生成其输出。这样虽然很快,但有一个问题就是刚刚创建的文件,不会被搜索到。如果想使刚创建的文件被
locate
命令搜索到 , 可以使用 sudoupdatedb
命令 更新数据库, 否则要等到第二天才能搜索到该文件 , 该后台数据库默认一天更新一次 ;
在etc/下查找以m开头的文件:
locate /etc/m
locate -S 可以查看数据库的信息
root@zhang-kubuntu-host:/etc# locate -S
数据库 /var/lib/mlocate/mlocate.db:
55,016 文件夹
460,277 文件
30,716,854 文件名中的字节数
12,146,130 字节用于存储数据库
root@zhang-kubuntu-host:/etc#
至于更多locate 的用法,可以移步到https://www.howtoforge.com/linux-locate-command/,或者自行man 。
3.grep 根据文件内容查找
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
在当前目录下查找文件中包含stdio 字符的文件:
grep stdio ./*
在/etc 目录下查找文件内容中有127.0.0.1 的内容:
grep 127.0.0.1 /etc/*
查找文件中内容有StdClass 并且New开头的文件
grep stdClass New*
说明:如果你试了该命令就会发现,使用该命令会提示一个***** 是一个目录的信息,这是因为grep命令只能在文件内搜索。
上面三种方法是比较重要的方法,尤其是find 和 grep 命令,grep 是linux 中一个非常重要的命令,这里只是简单的说了下grep 查找文件用法,还有其它一些可以参考这篇文章,这个老哥写的蛮全的,http://www.cnblogs.com/end/archive/2012/02/21/2360965.html 。
4.通过特定程序定位文件
这一种方法,用的比较少,但个人感觉速度很快,又很精准,它依赖于特定的应用程序。这里拿php 和 nginx 来举栗说明。
假定我们要修改php 和 nginx 的配置,但忘记了配置文件在哪里?怎么做呢?知道了locate 命令后能很快定位该配置文件路径。但还有其它方案,也能很快速的定位配置文件的路径。
$ php -i | grep php.ini
zhang@zhang-kubuntu-host:~$ php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/php/etc
Loaded Configuration File => /usr/local/php/etc/php.ini
然后再看下怎么定位nginx 的配置文件吧!
nginx -h
这条命令可能会让人失望,但它也显示了一些我们需要的信息。
可以看到prefix 和 filename ,这两项组合起来,就是nginx默认配置文件的目录。