Linux命令之type,whatis,whereis,which,locate,find

第一个:type--查询一个命令的类型

-查询一个命令为内部或者外部命令的命令;

-linux的众多命令中,有内部命令和外部命令,这时可以用type命令来查询一个命令到底是属于内部命令还是属于外部命令;

-内部命令和外部命令的区分方法:在系统中有存储位置的为外部命令,没有存储位置的为内部命令,因为内部命令和shell是一块的,因此查不到位置;

-其实type命令主要是辅助来查看一个命令的帮助文档的,如果用help获取帮助,那么内部命令的获取方式为“help 命令”,如果为外部命令则为“命令 --help”。

[[email protected] ~]# type mkdir       //mkdir的存储位置在/bin/目录下,那么mkdir就是外部命令

mkdir is /bin/mkdir

[[email protected] ~]# type passwd       //passwd也是外部命令

passwd is /usr/bin/passwd

[[email protected] ~]# type cd      //cd和help两个命令则为内部命令,因为他们没有存储位置,和shell一块

cd is a shell builtin

[[email protected] ~]# type help

help is a shell builtin

[[email protected] ~]# type mkdir passwd        //后面可以跟多个选项同时查询命令的位置

mkdir is /bin/mkdir

passwd is /usr/bin/passwd

第二个:whatis--查询命令的man入口

个人认为whatis命令和type命令一样,也是一个辅助的命令,辅助man这个帮助命令的;

后面的选项为一个命令,查询该命令用man命令查询时间的入口。

[[email protected] ~]# whatis passwd  //可以看到passwd这个命令man入口有1,和5,那么可以用“man 5//passwd”或者“man 1 passwd”来获取相应的passwd命令的帮助文档;

passwd               (1)  - update user‘s authentication tokens

passwd               (5)  - password file

passwd              (rpm) - The passwd utility for setting/changing passwords using PAM

passwd [sslpasswd]   (1ssl)  - compute password hashes

[[email protected] ~]# whatis mkdir

mkdir                (1)  - make directories

mkdir                (1p)  - make directories

mkdir                (2)  - create a directory

mkdir                (3p)  - make a directory

第三个:whereis--查找程序/手册/源文件

whereis也是辅助命令,查询linux系统中命令的位置以及被查询命令帮助文档的位置;

[roo[email protected] zhangsp]# whereis pwd mkdir passwd ls    //查看pwd,mkdir,passwd,ls这四个外                                               //部命令在linux系统中存在的位置,以及该命令帮助文档的位置;

pwd: /bin/pwd /usr/share/man/man1p/pwd.1p.gz /usr/share/man/man1/pwd.1.gz

mkdir: /bin/mkdir /usr/share/man/man1p/mkdir.1p.gz /usr/share/man/man1/mkdir.1.gz        /usr/share/man/man3p/mkdir.3p.gz /usr/share/man/man2/mkdir.2.gz

passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz      /usr/share/man/man1/passwd.1.gz

ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz

第四个:which--查找可执行文件(外部命令、脚本)在linux系统中的存储位置

which命令搜索的位置为$PATH;

root用户和普通用户的$PATH可以用“echo $PATH”命令查看:

例:下面可以看到,因为cd为内部命令,所以不能在$PATH所存在的路径中找到,其他的都有位置

[[email protected] zhangsp]# which cd ls mkdir pwd

alias ls=‘ls --color=tty‘

/bin/ls

/usr/bin/which: no cd in        (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

/bin/mkdir

/bin/pwd

第五个:locate--在数据库中进行模糊查询(包括linux中的文件和文档)

由于实在索引中搜索的,所以速度很快,但也有缺点,当不更新索引库的时候,可能会出现错误!

1)使用updatedb建立/更新locate索引库(使用命令uadatedb命令来更新索引库)

[[email protected] ~]# updatedb

2)使用locate查找包含指定关键字的文件/目录

[[email protected] ~]# locate inittab    //可以查到linux系统中所有包含inittab字符的文件或者目录

/etc/inittab

/usr/share/man/man5/inittab.5.gz

/usr/share/terminfo/a/ansi+inittabs

/usr/share/vim/vim70/syntax/inittab.vim

[[email protected] ~]# locate mkdir

/bin/mkdir

/usr/bin/gnomevfs-mkdir

/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/auto/POSIX/mkdir.al

/usr/share/man/man1/mkdir.1.gz

/usr/share/man/man1p/mkdir.1p.gz

/usr/share/man/man2/mkdir.2.gz

/usr/share/man/man2/mkdirat.2.gz

/usr/share/man/man3p/mkdir.3p.gz

3)删除/新增加的文件对象,需要更新索引库以后才能体现效果

如:在当前目录下创建aaa目录和bb.txt文件,将bb.txt复制到aaa目录中,然后使用locate查询时没有结果

的,这时更新一下数据库索引,在此查询可以查询到两个bb.txt文件存在的位置。

[[email protected] ~]# ls

anaconda-ks.cfg  Desktop  install.log  install.log.syslog

[[email protected] ~]# touch bb.txt

[[email protected] ~]# cp bb.txt aaa/

[[email protected] ~]# ls aaa/

bb.txt

[[email protected] ~]# locate bb.txt //虽然bb.txt存在,在没有更新数据库的时间,查询bb.txt是没有结果的

[[email protected] ~]# updatedb

[[email protected] ~]# locate bb.txt    //更新之后再次查询可以查询到结果

/root/bb.txt

/root/aaa/bb.txt

[[email protected] ~]#

第六个:find--精确多条件查找文件或者目录(一般用于特殊文件的搜索)

1)使用 -type 按类型查找

这里的类型指的是普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等。块设备指的是成块读        取数据的设备(如硬盘、内存等),而字符设备指的是按单个字符读取数据的设备(如键盘、鼠标等)。

如:

--1

[[email protected] ~]# find /boot/ -type l  //查询/boot目录下的符号链接文件,如果不指定目录,则默认为当前目录         /boot/grub/menu.lst

[[email protected] ~]# ll -h /boot/grub/menu.lst

lrwxrwxrwx 1 root root 11 02-10 21:03 /boot/grub/menu.lst -> ./grub.conf

--2

[[email protected] ~]# find /boot/ -type d    //查询/boot目录下有哪些目录,还有其本身

/boot/

/boot/lost+found

/boot/grub

[[email protected] ~]# ll -F /boot/

总计 6333

-rw-r--r-- 1 root root   67857 2012-11-29 config-2.6.18-348.el5

drwxr-xr-x 2 root root    1024 02-10 21:03 grub/

-rw------- 1 root root 2837626 02-10 21:54 initrd-2.6.18-348.el5.img

drwx------ 2 root root   12288 02-11 04:45 lost+found/

-rw-r--r-- 1 root root  118626 2012-11-29 symvers-2.6.18-348.el5.gz

-rw-r--r-- 1 root root 1282424 2012-11-29 System.map-2.6.18-348.el5

-rw-r--r-- 1 root root 2125660 2012-11-29 vmlinuz-2.6.18-348.el5

[[email protected] ~]#

2)使用 -name 按名称查找

[[email protected] ~]# find /boot -name ‘*grub*‘    //查找/boot目录下名称包含“grub”的对象

/boot/grub

/boot/grub/grub.conf

3)组合多个条件进行查找

--可使用-a同时匹配多个条件(都必须满足), -a可省略,例如可只列出/boot目录下名称包含“grub”的普通文                        件

[[email protected] ~]# find /boot/ -name ‘*grub*‘ -a -type f

/boot/grub/grub.conf

[[email protected] ~]# find /boot/ -name ‘*grub*‘ -type f

/boot/grub/grub.conf

--可使用-o同时匹配多个条件(只需满足其中任何一个),-o 不可省略,例如查找/boot目录下名称以vmlinuz开                        头和名称为menu.lst的对象

[[email protected] ~]# find /boot -name "vmlinuz*" -o -name "menu.lst"

/boot/vmlinuz-2.6.18-348.el5

/boot/grub/menu.lst

注:在写通配符的时候,用单引号和双引号效果相同

4)使用 -size 按大小查找,可指定容量单位k(小写)、M、G

--通过“-size +大小”指定是否超过指定的容量。例如在/boot目录下查找容量超过2MB的文件

[[email protected] ~]# find /boot -size +2M

/boot/initrd-2.6.18-348.el5.img

/boot/vmlinuz-2.6.18-348.el5

[[email protected] ~]# ll -h /boot/initrd-2.6.18-348.el5.img /boot/vmlinuz-2.6.18-348.el5

-rw------- 1 root root 2.8M 02-10 21:54 /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

--通过“-size -大小”指定是否小于指定的容量,例如在/boot/grub目录下查找容量小于2KB的普通文件

[[email protected] ~]# find /boot/grub/ -size -2k -type f

/boot/grub/device.map

/boot/grub/grub.conf

/boot/grub/stage1

[[email protected] ~]# ll -h /boot/grub/device.map /boot/grub/grub.conf /boot/grub/stage1

-rw-r--r-- 1 root root  63 02-10 21:03 /boot/grub/device.map

-rw------- 1 root root 598 02-10 21:03 /boot/grub/grub.conf

-rw-r--r-- 1 root root 512 02-10 21:03 /boot/grub/stage1

5)使用 -exec 指定可执行语句对查找结果进行处理

在处理语句中,以 {} 代替查找结果、最后以 \; 表示处理结束(注意与前面的执行语句之间隔一个空格)。

--上述find查找/boot目录下大于2MB文件操作,可直接用 -exec接上ls命令来列出详细属性

[[email protected] ~]#  find /boot -size +2M -exec ls -lh {} \;

-rw------- 1 root root 2.8M 02-10 21:54 /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

--在/boot/grub目录下查找容量小于2KB的普通文件也可以直接用-exec街上ls命令列出详细属性

[[email protected] ~]# find /boot/grub/ -size -2k -type f -exec ls -lh {} \;

-rw-r--r-- 1 root root 63 02-10 21:03 /boot/grub/device.map

-rw------- 1 root root 598 02-10 21:03 /boot/grub/grub.conf

-rw-r--r-- 1 root root 512 02-10 21:03 /boot/grub/stage1

6)使用 -mtime 按是否在指定日期内修改过进行查找

find -name "file?.*" -mtime +30    //在当前目录下查找30天之前(-mtime +30)修改过的文件

find -name "file?.*" -mtime -30    //在当前目录下查找30天之内(-mtime +30)修改过的文件

find -name "file?.*" -mtime 30    //在当前目录下查询第30天(-mtime 30)修改过的文件

关于+30:为>31;-30为<29;30为=30(30-31)

扩展

7)使用 -user 、-group查找属于指定用户、组的文档

--查询根目录下属于zhangsp用户的目录

[[email protected] ~]# find / -user zhangsp -type d    //查询根目录下属于zhangsp用户的目录

/home/zhangsp

/home/zhangsp/.mozilla

/home/zhangsp/.mozilla/plugins

...

--在/dev/目录下查找属于打印组lp的设备,并用ls列出其详细属性

[[email protected] ~]# find /dev/ -group lp -exec ls -lh {} \;

crw-rw---- 1 root lp 6, 0 02-12 12:36 /dev/lp0

crw-rw---- 1 root lp 99, 3 02-12 12:35 /dev/parport3

crw-rw---- 1 root lp 99, 2 02-12 12:35 /dev/parport2

crw-rw---- 1 root lp 99, 1 02-12 12:35 /dev/parport1

crw-rw---- 1 root lp 99, 0 02-12 12:35 /dev/parport0

[[email protected] ~]#

8)使用 -perm 查找指定权限的文档

在/etc/init.d/目录下查找以auto开头,权限正好是755的文档

[[email protected] ~]# find /etc/init.d/ -name ‘auto*‘ -perm 0755

/etc/init.d/autofs

[[email protected] ~]# find /etc/init.d/ -name ‘auto*‘ -perm 0755 -exec ls -lh {} \;

-rwxr-xr-x 1 root root 3.9K 2012-11-12 /etc/init.d/autofs

备注:touch命令--可以修改已经存在的文件的修改日期,也可以创建一个空文件并制定其日期  (参数-t)

在find的第六个没有进行测试,可以借助于touch来进行测试;

过程:

[[email protected] test]# date    //当前日期为2014年2月12日

2014年 02月 12日 星期三 22:22:57 CST

[[email protected] test]# touch -t 1308121030 file1.doc      //创建日期为13年8月12日10点30分的文件file.doc

[[email protected] test]# touch -t 02101020 file2.doc       //不写年份标示当前年份

[[email protected] test]# touch -t 1109291122 file3.doc     //创建file3.doc文件的日期为11年9月29日11点22分

[[email protected] test]# ll -h file*    //用ll可以查看文件的日期

-rw-r--r-- 1 root root 0 2013-08-12 file1.doc

-rw-r--r-- 1 root root 0 02-10 10:20 file2.doc

-rw-r--r-- 1 root root 0 2011-09-29 file3.doc

[[email protected] test]# ls

file1.doc  file2.doc  file3.doc

[[email protected] test]# find /home/test/ -name ‘file*‘ -mtime +40

/home/test/file1.doc

/home/test/file3.doc

[[email protected] test]# find /home/test/ -name ‘file*‘ -mtime +40 -exec ls -lh {} \;

//显示40之前修改的文件,可以看到有两个形式上开起来日期比较老的文件

-rw-r--r-- 1 root root 0 2013-08-12 /home/test/file1.doc

-rw-r--r-- 1 root root 0 2011-09-29 /home/test/file3.doc

[[email protected] test]# find /home/test/ -name ‘file*‘ -mtime -40 -exec ls -lh {} \;

//显示/home/test/目录下最近40天修改的文件

-rw-r--r-- 1 root root 0 02-10 10:20 /home/test/file2.doc

   总结:

type,whatis,which,whereis都是针对命令的:

type,whatis一般用来查看该命令是否为内外部命令的;

which搜索的路径为该用户的环境变量,而whereis则在命令相关目录和命令帮助的相关目录                搜索;

locate和find是针对文件:

locate在索引中搜索,速度快,但是需要更新数据库;

find在linux文件系统中搜索,慢,但是全;

。。。学了那么久,有的东西学了忘,忘了学,之后还会忘,好记性不如烂笔头,做一次笔记一个小时,写一篇博客需要两个小时,全当加深记忆了!

以前总是以为一个命令后面只能跟一个选项,后来自己也用过好多选项,如:type pwd whatis passwd这条命令,明明知道type后面可以跟很多选项,还是习惯type pwd,type whatis。。。分开来用,以后得改了,有利于提高效率!

Linux命令之type,whatis,whereis,which,locate,find

时间: 2024-11-06 07:32:53

Linux命令之type,whatis,whereis,which,locate,find的相关文章

linux命令之which,whatis,whereis,tty

which 1.说明:shows the full path of (shell) commands;Which takes one or more arguments意思是该命令用于显示命令所在包括shell命令的绝对路径,并且该命令至少需要一个参数 默认在/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin这些路径搜索即$PATH,可以通过设置该环境变量改变搜索路径 2.使用 3.NOTE:使用简单,选项不做介绍,可以man

linux命令中which、whereis、locate有什么区别?

1.find find是最常用和最强大的查找命令.它能做到实时查找,精确查找,但速度慢. find的使用格式如下: #find [指定目录] [指定条件] [指定动作] 指定目录:是指所要搜索的目录和其子目录.如果不指定,则默认为当前目录. 指定条件:是指所要搜索的文件的特点. 指定动作:是指对搜索的结果如何处理. 常见选项: -name 根据文件名称查找(严格区分大小写,如果文件名中间有空格,则必须把文件名用双引号引起来) -iname 根据文件名查找(不区分大小写) -regex "PATT

Linux中文件的查找whereis、locate、find

Linux文件的查找:whereis.locate.find 相对来说,find查找的速度比较慢:因为whereis与locate是利用数据库来查找数据,所以相对比较快,而且并没有实际查询硬盘,比较节省时间. whereis(寻找特定文件)  whereis [-bmsu] 文件或目录名 -b:只找二进制格式的文件 -m:只找在说明文件manual路径下的文件 -s:只找source源文件 -u:查找不在上述三个选项当中的其他特殊文件 locate      locate [-ir] keywo

每天一个Linux命令(17)--whereis命令

whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返所有信息. 和find相比,whereis查找的速度非常快,这是因为Linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,它们是直接从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找文件,因而效率自然会很高. 另外,该数据库文件并不是实时更新的,默认情况下是一星期更新一次,因此,

每天一个Linux命令(17)whereis命令

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息.     (1)用法:   用法:    whereis  [-bmsu]   [BMS 目录名 -f ]    文件名     (2)功能:     功能:    用来定位指令的二进制程序.源代码文件和man手册页等相关文件的路径.     (3)选项参数:       1) -b:                         只查找二

linux命令学习系列12-locate,whereis,which命令

先复习一下上节内容: 1. 默认权限和umask 2. 查看文件类型file命令 3. 查找文件find命令 作业:在/tmp目录下创建test.txt文件,查看文件的默认权限,用find命令找出刚才创建的文件,用file命令查看刚才创建的文件类型 touch /tmp/test.txt find / -name test.txt file /tmp/test.txt 本节来说一下另外几个查找的命令: 1. locate 命令 locate命令与find命令不同,需要依赖于一个数据库文件,即lo

Linux命令之type

1:linux命令可以分为很多类,其中常见得类型: (1):builtin --内置命令 (2):alias --命令别名 (3):file --外部命令 具体有哪些内置命令以及内置命令各个用法: [[email protected] ~]# man type 2:type -t:显示builtin,alias,file,其中之一 -a:显示path中包含的路径显示出来

Linux命令详解-whatis

描述一个命令执行什么功能. 1.命令格式: whatis [ -M PathName ] Command ... 2.命令功能: 描述一个命令执行什么功能. 3.命令参数: ????-M PathName 指定一个可替代的搜索路径.搜索路径由 PathName 参数指定,并且是一个 whatis 命令期望在其中找到标准手册子目录的以冒号分隔的目录列表. 4.使用实例: ?

Linux文件查找命令详解-which whereis find locate

原创BLog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents which命令 首先查看man which的说明 which - shows the full path of (shell) commands. 在$PATH目录下查找命令的绝对路径,PATH配置不同,查找的结果也不同 查看系统的PATH [[email protected] testForCsdn]# echo $PATH /usr/kerberos/sbin:/u