在windows下有一个搜索工具,可以让我们很快的找到一个文件,这是很有用的。然而在linux下搜索功能更加强大。
‘which’ 用来查找可执行文件的绝对路径。
在前面已经用到该命令,需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件。这个命令用的也是蛮多的,有时候我们不知道某个命令的绝对路径,which 一下很容易就知道了。
‘-b’ : 只找binary 文件
‘-m’ : 只找在说明文件manual路径下的文件
‘-s’ : 只找source来源文件
‘-u’ : 没有说明档的文件
后边直接跟文件名。如果你的linux没有这个命令,请安装软件包 ‘mlocate’, 这个软件包在你的系统安装盘里,后缀名是RPM,随后介绍的find命令会告诉你如何查找这个包。如果你装的CentOS你可以使用这个命令来安装 yum install -y mlocate 前提是你的CentOS能连网。至于yum这个命令如何使用,到后续章节你自然会明白。如果你刚装上这个命令,初次使用会报错。
[root@localhost ~] # locate passwd
locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory
这是因为系统还没有生成那个文件列表库。你可以使用 updatedb 命令立即生成(更新)这个库。如果你的服务器上正跑着重要的业务,那么你最好不要去运行这个命令,因为一旦运行,服务器的压力会变大。这个数据库默认情况下每周更新一次。所以你用locate命令去搜索一个文件,正好是在两次更新时间段内,那你肯定是得不到结果的。你可以到/etc/updated.conf 去配置这个数据库生成(更新)的规则。’locate’所搜索到的文件列表,不管是目录名还是文件名,只要包含我们要搜索的关键词,都会列出来,所以’locate’不适合精准搜索,这个命令阿铭使用的也并不多,你只要明白有这么一个工具即可,用到时再去深究其用法吧。
‘find’ 这个搜索工具是用的最多的一个,所以请你务必要熟悉它。
语法 : find [路径] [参数] 下面介绍几个阿铭经常用的参数
‘-atime +n/-n’ : 访问或执行时间大于/小于n天的文件
‘-ctime +n/-n’ : 写入、更改inode属性(例如更改所有者、权限或者链接)时间大于/小于n天的文件
‘-mtime +n/-n’ : 写入时间大于/小于n天的文件
/tmp/.ICE-unix
/tmp/.bash_history
看到这里,你对这三个time是不是有些晕了,那就先给你介绍一下这三个time属性。
文件的 Access time也就是 ‘atime’ 是在读取文件或者执行文件时更改的。文件的 Modified time也就是 ‘mtime’ 是在写入文件时随文件内容的更改而更改的。文件的 Change time也就是 ‘ctime’ 是在写入文件、更改所有者、权限或链接设置时随inode的内容更改而更改的。 因此,更改文件的内容即会更改mtime和ctime,但是文件的ctime可能会在 mtime 未发生任何变化时更改,例如,更改了文件的权限,但是文件内容没有变化。 如何获得一个文件的atime mtime 以及ctime ?
‘stat’ 命令可用来列出文件的 atime、ctime 和 mtime。
[root@localhost ~]# stat test/test2
File: 'test/test2'
Size: 0 Blocks: 0 IO Block: 4096 普通空文件
Device: 803h/2051d Inode: 261657 Links: 1
Access: (0744/-rwxr--r--) Uid: ( 500/ user1) Gid: ( 500/testgroup)
Access: 2013-05-10 09:00:36.092000531 +0800
Modify: 2013-05-10 09:00:36.092000531 +0800
Change: 2013-05-10 09:30:58.788996594 +0800
atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息。总之, 這三個 time stamp 都放在 inode 中。若 mtime, atime 修改inode 就一定會改, 既然 inode 改了, 那 ctime 也就跟着要改了。
继续’find’常用选项:
‘-name filename’ 直接查找该文件名的文件,这个选项使用很多。
./test2
‘-type filetype’ 通过文件类型查找。文件类型在前面部分已经简单介绍过,相信你已经大体上了解了。filetype 包含了 f, b, c, d, l, s 等。
[root@localhost ~]# find /tmp/ -type d
/tmp/
/tmp/.ICE-unix
/tmp/test
[root@localhost ~]# find /tmp/ -type f
/tmp/yum.log
/tmp/.bash_history
/tmp/ip.txt
‘which’ 用来查找可执行文件的绝对路径。
在前面已经用到该命令,需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件。这个命令用的也是蛮多的,有时候我们不知道某个命令的绝对路径,which 一下很容易就知道了。
‘whereis’ 通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件。
语法: whereis [-bmsu] [文件名称]
‘-b’ : 只找binary 文件
‘-m’ : 只找在说明文件manual路径下的文件
‘-s’ : 只找source来源文件
‘-u’ : 没有说明档的文件
说明:whereis 几乎很少用到,如果你感兴趣请深入研究。
后边直接跟文件名。如果你的linux没有这个命令,请安装软件包 ‘mlocate’, 这个软件包在你的系统安装盘里,后缀名是RPM,随后介绍的find命令会告诉你如何查找这个包。如果你装的CentOS你可以使用这个命令来安装 yum install -y mlocate 前提是你的CentOS能连网。至于yum这个命令如何使用,到后续章节你自然会明白。如果你刚装上这个命令,初次使用会报错。
[root@localhost ~] # locate passwd
locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory
这是因为系统还没有生成那个文件列表库。你可以使用 updatedb 命令立即生成(更新)这个库。如果你的服务器上正跑着重要的业务,那么你最好不要去运行这个命令,因为一旦运行,服务器的压力会变大。这个数据库默认情况下每周更新一次。所以你用locate命令去搜索一个文件,正好是在两次更新时间段内,那你肯定是得不到结果的。你可以到/etc/updated.conf 去配置这个数据库生成(更新)的规则。’locate’所搜索到的文件列表,不管是目录名还是文件名,只要包含我们要搜索的关键词,都会列出来,所以’locate’不适合精准搜索,这个命令阿铭使用的也并不多,你只要明白有这么一个工具即可,用到时再去深究其用法吧。
‘find’ 这个搜索工具是用的最多的一个,所以请你务必要熟悉它。
语法 : find [路径] [参数] 下面介绍几个阿铭经常用的参数
‘-atime +n/-n’ : 访问或执行时间大于/小于n天的文件
‘-ctime +n/-n’ : 写入、更改inode属性(例如更改所有者、权限或者链接)时间大于/小于n天的文件
‘-mtime +n/-n’ : 写入时间大于/小于n天的文件
[root@localhost ~]# find /tmp/ -mtime -1
/tmp//tmp/.ICE-unix
/tmp/test
[root@localhost ~]# find /tmp/ -atime +1
/tmp/yum.log/tmp/.bash_history
看到这里,你对这三个time是不是有些晕了,那就先给你介绍一下这三个time属性。
文件的 Access time也就是 ‘atime’ 是在读取文件或者执行文件时更改的。文件的 Modified time也就是 ‘mtime’ 是在写入文件时随文件内容的更改而更改的。文件的 Change time也就是 ‘ctime’ 是在写入文件、更改所有者、权限或链接设置时随inode的内容更改而更改的。 因此,更改文件的内容即会更改mtime和ctime,但是文件的ctime可能会在 mtime 未发生任何变化时更改,例如,更改了文件的权限,但是文件内容没有变化。 如何获得一个文件的atime mtime 以及ctime ?
‘stat’ 命令可用来列出文件的 atime、ctime 和 mtime。
[root@localhost ~]# stat test/test2
File: 'test/test2'
Size: 0 Blocks: 0 IO Block: 4096 普通空文件
Device: 803h/2051d Inode: 261657 Links: 1
Access: (0744/-rwxr--r--) Uid: ( 500/ user1) Gid: ( 500/testgroup)
Access: 2013-05-10 09:00:36.092000531 +0800
Modify: 2013-05-10 09:00:36.092000531 +0800
Change: 2013-05-10 09:30:58.788996594 +0800
atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息。总之, 這三個 time stamp 都放在 inode 中。若 mtime, atime 修改inode 就一定會改, 既然 inode 改了, 那 ctime 也就跟着要改了。
继续’find’常用选项:
‘-name filename’ 直接查找该文件名的文件,这个选项使用很多。
[root@localhost ~]# find . -name test2
./test/test2./test2
‘-type filetype’ 通过文件类型查找。文件类型在前面部分已经简单介绍过,相信你已经大体上了解了。filetype 包含了 f, b, c, d, l, s 等。
[root@localhost ~]# find /tmp/ -type d
/tmp/
/tmp/.ICE-unix
/tmp/test
[root@localhost ~]# find /tmp/ -type f
/tmp/yum.log
/tmp/.bash_history
/tmp/ip.txt