标签:查找文件 命令 文件的 code which 习惯 文档 sysconf 选项
find是搜索文件的命令,后面可以接参数,-type d是目录名,-type f是文件名,-type l是软连接文件。linux中还有其他的搜索命令,比如which,他是子PATH变量中搜索命令的绝对路径的命令,还有就是whereis和locate,但是搜索不全,它是在一个库中搜索文件,但是这个库要更新,如果不更新,文件是搜索不到的。所以这个命令不常用。find可以通过名字搜索,比如我们要搜索sshd_config这个文件,但是我们不知道路径,那么我们就可以这样搜索
find /etc/ -name "sshd_config"
/etc/ssh/sshd_config
这样我们就可以得到这个文件的绝对路径了。
我们也可以模糊索索,比如我们记不清楚文件的全名了,但是只记住前面几个字符,那么我们就可以进行模糊搜索
[root@localhost ~]# find /etc/ -name "sshd*"
/etc/ssh/sshd_config
/etc/systemd/system/multi-user.target.wants/sshd.service
/etc/sysconfig/sshd
/etc/pam.d/sshd
这样他就把所有名字带有sshd的文件名或者目录全部列出来了。
除了上面我们讲到的参数,还有其他的常用参数,比如atime、ctime、mtime。
其中atime是最近访问时间。
mtime是最近更改时间,这里面是更改内容的时间,。
ctime是最近改动时间,这里面是更改权限的时间,如果更改内容,所以ctime肯定会变。
如果我们要查询一下一天以内更改过的文件,我们可以这样做
[root@localhost ~]# find -type f -mtime -1 其中-1为一天以内,如果是+1,则是一天以上。
./.bash_history
./12.txt
./cp/1.log
./a.out
其中这些文件就是一天以内更改过的文件。
我们也可以在后面加多个判断条件
比如[root@localhost ~]# find -type f -mtime -1 -name “.conf”,这是并且的意思。
我么也可以改成或者的意思,只要我们在后面加参数-o,o表示or的意思。
find /etc/ -type f -o -ctime +1 -o -name ".conf",这是或者的意思。
find也可以用inode号查找文件,后面加参数-inum就可以实现
[root@localhost ~]# find / -inum 33583036
/root/1.txt
/root/11.txt
从这里我们可以看出,这两个文件公用一个inode号,他们就互为硬链接文件。
find也可以按照小时来查找文件,在条件后面接参数-mmin
[root@localhost ~]# find / -type f -mmin -60
/cp/1.txt~
得出的结果就是在1小时内所改动的文件名。
如果我想得出的结果直接以ll查询的格式列出呢,那么我们就要在时间后面接选项-exec ll {} \;
[root@localhost ~]# find /root/ -type f -mmin -60 -exec ls -l {} \;
-rwxrwxrwx. 1 root root 137 1月 12 23:48 /root/12.txt
-rw-r--r--. 1 root root 423 1月 13 00:02 /root/cp/1.txt
其中{}表示你列取出来的文件,后面要加一个;,还要加一个\来转义一下。
我们也可以给文件加扩展名或者改名
先查询源文件
[root@localhost ~]# find /root/ -type f -mmin -100 -exec ls -l {} \;
-rwxr--r--. 2 root root 575 1月 14 21:26 /root/11.txt
-rwxr--r--. 2 root root 575 1月 14 21:26 /root/456.txt
然后输入命令
[root@localhost ~]# find /root/ -type f -mmin -100 -exec mv {} {}.bak \;
最后查询一下
[root@localhost ~]# find /root/ -type f -mmin -100 -exec ls -l {} \;
-rwxr--r--. 2 root root 575 1月 14 21:26 /root/11.txt.bak
-rwxr--r--. 2 root root 575 1月 14 21:26 /root/456.txt.bak
这样我们就发现每个文件名后面的扩展名就增加了bak这个扩展名。
还可以通过文件的大小来搜索文件,后面加参数size,比如我们要搜索大于10k的文件
[root@localhost ~]# find /root/ -type f -size +10k -exec ls -lh {} \;
-rw-------. 1 root root 14K 1月 13 22:49 /root/.bash_history
-rw-r--r--. 1 root root 12K 1月 7 22:09 /root/111/12_txt.swp
这样就可以了,我们也可以将后面的单位改为M,这里的M一定要是大写的,如果写小写会报错
[root@localhost ~]# find /root/ -type f -size +10m -exec ls -lh {} \;
find: 无效的 -size 类型“m”。
总结一下,find常用的参数有-type(条件)、-mtime(修改时间)、-name(按姓名查找)、size(按大小查找)、-o(或者)、-mmin(按分钟查找)、
-exec(用于调用并执行指令的命令)
常用快捷键:ctrl+l定位到首行
ctrl+d退出
ctrl+c终止命令
ctrl+u把前面的字符全部删除
ctrl+e把光标挪到最后
ctrl+a把光标挪到最前头
我们在使用linux中可以现,/root/2.txt、/root/111/12.txt、/root/12.txt、/root/cp/1.log、/root/cp/1.txt中有的是.txt,有的是.log。这说明linux中是有后缀名的,但是在linux中,这个后缀名并不代表这个文件的格式,比如说命令ls,我们也可以把它拷贝成.txt,那我们能用记事本打开它吗?后者说我们touch一个后缀名是doc的文件,那我们就能在windows中打开它吗?答案是不可以。所以zailinux中后缀名并不能代表这个文件的类型,我们可以自定义文件名,只是我们习惯把普通的文本文档的后缀名写成txt、log。有的文件后面还跟着gz,这是压缩衣文件,但是我们也可以把文件的后缀名写成gz,那我们能说这就是一个压缩文件吗?只不过我们习惯把相同类型的文件定义成相同的后缀名,方面我们去去分辨,这仅仅十个小约定而已。
标签:查找文件 命令 文件的 code which 习惯 文档 sysconf 选项
原文地址:http://blog.51cto.com/13067688/2068349