您的位置:首页 > 其它

​文件检索相关命令总结

2014-08-02 22:50 615 查看
文件检索相关命令一、概览 1. which:用于查找可执行文件(外部命令、脚本)
2. whereis:查找程序、帮助手册、源文件的位置
3. locate:索引库模糊查找
4. whatis:在whatis数据库里查找完整的单词,相当于man –f。
5. find:精确多条件查找
二、细说实验环境如下显示,操作系统环境不同,命令执行后显示结果会略有出入,但是不影响命令的用法。
[user01@JDoer ~]$ uname–r                  //显示内核版本
2.6.18-348.el5
[user01@JDoer ~]$ cat/etc/redhat-release    //操作系统描述
Red Hat Enterprise Linux Server release 5.9(Tikanga)

1. which语法:which [-a] 命令选项或参数:-a:将所有PATH目录中可以找到的指令均列出,而不止第一个被找到的指令名称。功能说明: which可搜索的范围由环境变量PATH决定,通常情况下,管理员与普通用户的PATH变量是不同的,可分别以root用户、普通用户 user登入后执行echo $PATH 查看。 root用户的PATH变量:
[root@JDoer ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
普通用户的PATH变量:
[root@JDoer ~]# su - user01                            //临时切换登录为普通用户
[user01@JDoer ~]$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/user01/bin
使用which查找which命令的执行程序位置:
[root@JDoer ~]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias--show-dot --show-tilde'//别名
/usr/bin/which                                 //which命令的执行程序位置

从上述结果可以看到,which的输出结果包括了命令别名。这是因为Linux为了方便用户使用,设置了which别名以添加别名搜索所致。which默认只输出找到的第一个目标,若要列出所有目标,应添加选项 -a:
[root@JDoer ~]# which -a touch                       //确保不会出现在下面用的/usr/bin目录
/bin/touch
[root@JDoer ~]# cp /bin/touch/usr/bin/    //复制touch到另一个执行目录(必须在$PATH里)
[root@JDoer ~]# ls -lh /bin/touch/usr/bin/touch     //确认复制结果
-rwxr-xr-x 1 root root 42K 2012-03-14/bin/touch
-rwxr-xr-x 1 root root 42K 08-02 10:59/usr/bin/touch
[root@JDoer ~]# which touch                         //只查到第一个目标
/bin/touch
[root@JDoer ~]# which -a touch                      //查找所有目标
/bin/touch
/usr/bin/touch
由于内部命令是内建在/bin/bash解释器中的指令,并没有独立的可执行文件存在,所以尝试用which来搜索是找不到的。例如,用which找cd、help等内部命令时会提示找不到结果:
[root@JDoer ~]# which cd help
/usr/bin/which: no cd in(/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:
/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)
/usr/bin/which: no help in(/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:
/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

2.whereis
语法:whereis [-bmsu] 命令或目录选项与参数:-b :只找binary格式的文件-m :只找在说明文件manual路径下的档案-s :只找source来源档案-u :搜寻不再上述三个项目当中的其他特殊档案功能说明:Linux系统会将系统内的所有档案都记录在一个数据库里,而当使用whereis或者是locate时,都会以此数据库档案的内容为准,因此,有的时候你会发现使用这两个命令时,会找到已经被删除的文件,而且也找不到最新的刚刚建立的文件,这时只需更新数据库,然后再用这两个命令搜寻。使用不同的身份找出ifconfig的档案
[root@JDoer ~]# whereis ifconfig
ifconfig: /sbin/ifconfig/usr/share/man/man8/ifconfig.8.gz
[root@JDoer ~]# which ifconfig                               //root用户可以用which搜到
/sbin/ifconfig
[root@JDoer ~]# su - user01                                 //切换到普通用户user01的身份
[user01@JDoer ~]$ whereis ifconfig                          //普通用户与root找到的结果一样
ifconfig: /sbin/ifconfig/usr/share/man/man8/ifconfig.8.gz
[user01@JDoer ~]$ which ifconfig                            //但是普通用户用which却找不到
/usr/bin/which: no ifconfig in(/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/user01/bin)
用which一般使用找不到的ifconfig却可以让whereis找到,这是因为系统真的有ifconfig这个档案,但是使用者的PATH并没有加入/sbin,which只是基于PATH里目录的搜寻

3. locate语法:locate [选项] 关键字选项与参数:-i:忽略大小写-d:指定使用的数据库功能说明:搜索数据库而不是硬盘,所以搜索速度较快,默认的数据库/var/lib/mlocate/mlocate.db。有的系统默认每天更新一次数据库,也可以直接输入updatedb手动更新数据库。删除/新增加的文件,需要更新数据库以后才能体现效果:
[root@JDoer ~]# touch newfile                 //在当前目录下新建文件newfile
[root@JDoer ~]# locate newfile                //找不到新增加的文件
[root@JDoer ~]# updatedb                      //更新数据库
[root@JDoer ~]# locate newfile                //新增加的文件可以找到
/root/newfile

4.whatis
语法:whatis 关键字
功能说明:功能相当于man –f,对关键字的不同形式进行简短的描述。 查找的内容必须完全匹配关键字的才会输出。 whatis 数据库文件是用/usr/sbin/makewhatis 命令建立的。
用whatis查找passwd
[root@JDoer ~]# whatis passwd
passwd               (1)  - update user's authentication tokens
passwd               (5)  - password file
passwd              (rpm) - The passwd utility forsetting/changing passwords using PAM
passwd [sslpasswd]   (1ssl) - compute password hashes
左边部分是指令或文档及该指令所代表的意义
中间的数字或是“rpm”等表示该指令所代表的意义,数字是man手册页的入口
右边部分是对这个指令或文档的简短说明。
中间数字的用法:
[root@JDoer ~]# man 1 passwd   //这里是用man(1)的文件数据来显示passwd的帮助信息
[root@JDoer ~]# man 5 passwd   //这里是用man(5)的文件数据来显示passwd的帮助信息


5.find
语法:find [路径] [条件]
功能说明:find指令用于查找符合条件的文件。[-H][-L][-P]除外的任何位于参数之前的字符串都将被视为欲查找的目录。参数超级多
1)使用-type按类型查找
这里的类型指的是普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)、链接(l)等。块设备指的是成块读取数据的设备(如硬盘、内存等),而字符设备指的是按单个字符读取数据的设备(如键盘、鼠标等)。
查找/boot目录下的符号连接文件:
[root@JDoer ~]# find /boot -type l
/boot/grub/menu.lst
[root@JDoer ~]# ls -lh /boot/grub/menu.lst
lrwxrwxrwx 1 root root 11 2013-07-10/boot/grub/menu.lst -> ./grub.conf
查找/boot目录下的文件夹
[root@JDoer ~]# find /boot -type d
/boot
/boot/grub
/boot/lost+found
2)使用-name按名称查找
查找/boot目录下名称包含”grub”的对象
[root@JDoer ~]# find /boot -name *grub*
/boot/grub
/boot/grub/grub.conf
3)组合多个条件查找
可使用-a同时匹配多个条件(都必须满足),-a可省略,例如可只列出/boot目录下名称包含”grub”的目录:
[root@JDoer ~]# find /boot -name *grub* -a-type d
/boot/grub
可使用-o同时匹配多个条件(只需满足其中任何一个),-o不可省略。例如查找/boot目录下名称包含”grub”或者是目录的对象。
[root@JDoer ~]# find /boot -name *grub* -o-type d
/boot
/boot/grub
/boot/grub/grub.conf
/boot/lost+found
4)使用-size按大小查找,可指定容量单位c(小写,表示byte)k(小写)、M(大写)、G(大写)
通过“-size +大小”指定是否超过指定的容量。例如在/boot目录下查找容量超过2MB的文件:
[root@JDoer ~]# find /boot -size +2M
/boot/initrd-2.6.18-348.el5.img
/boot/vmlinuz-2.6.18-348.el5
通过“-size -大小”指定是否小于指定的容量,例如在/boot/grub目录下查找容量小于2KB的普通文件:
[root@JDoer ~]# find /boot -size -2k
/boot
/boot/grub
/boot/grub/stage1
/boot/grub/device.map
/boot/grub/menu.lst
/boot/grub/grub.conf
/boot/.vmlinuz-2.6.18-348.el5.hmac
5)使用-mtime按是否在指定日期内修改过进行查找
-mtimen
n n为数字,意义在n天之前的“一天之内”被更改过的文件
+n 列出在n天之前(不含n天本身)被更改过的文件名
-n 列出在n天之内(含n天本身)被更改过的文件名


将过去系统上面24小时内有更动过的内容的文件列出
[root@JDoer ~]# find / -mtime 0 //0代表目前的时间
6)使用 -exec 指定可执行语句对查找结果进行处理在处理语句中,以 {} 代替查找结果、最后以 \; 表示处理结束(注意与前面的执行语句之间隔一个空格)。例如,上述find查找/boot目录下大于2MB文件操作,可直接用 -exec接上ls命令来列出详细属性:
[root@JDoer ~]# find /boot -size +2M -execls -lh {} \;
-rw------- 1 root root 2.7M 2013-07-23/boot/initrd-2.6.18-348.el5.img
-rw-r--r-- 1 root root 2.1M 2012-11-29/boot/vmlinuz-2.6.18-348.el5
7)使用-user、-group查找属于指定用户、组的文档
在根目录下查找属于用户user01的文件夹:
[root@JDoer ~]# find / -user user01 -type d
/home/user01
/home/user01/.mozilla
/home/user01/.mozilla/extensions
/home/user01/.mozilla/plugins
8)使用-perm查找指定权限的文档(具体可参见man手册)
find . -perm 600      //当前目录只要有文档的属主的权限包含读写,都打印出来
find . -perm u+rw     //和find . -perm 600结果一样
find . -perm u=rw     //和find . -perm 600结果一样
find . -perm +600     //只要当前目录下文档属主的权限有读或写,都打印出来
find . -perm -600     //只要当前目录下文档属主的权限有读且写,都打印出来


三、总结2 搜寻指令的完整文件名可用which或type,这两个指令都是透过PATH变量来搜寻文件名;2 搜寻文档的完整路径可以使用whereis或locate到数据库档案去搜寻,而不实际搜寻文件系统;2 利用find可以加入许多选项来直接查询文件系统,以获得自己想要知道的文档。2 要查找指令在man手册页的入口,可以用whatis或者man –f 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  find locate