热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux下搜索命令之type,whatis,whereis,which,locate,find

linux下搜索命令之type,whatis,whereis,which,locate,find---搜索第一

linux下搜索命令之type,whatis,whereis,which,locate,find

                                                       ---搜索

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

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

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

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

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

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

   mkdir is /bin/mkdir

   [root@localhost ~]# type passwd       //passwd也是外部命令

   passwd is /usr/bin/passwd        

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

   cd is a shell builtin

   [root@localhost ~]# type help

   help is a shell builtin

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

   mkdir is /bin/mkdir

   passwd is /usr/bin/passwd


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

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

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

   [root@localhost ~]# 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

   [root@localhost ~]# whatis mkdir

   mkdir                (1)  - make directories

   mkdir                (1p)  - make directories

   mkdir                (2)  - create a directory

   mkdir                (3p)  - make a directory


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

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

   [root@localhost 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”命令查看:

wKioL1L7bY7hRxT1AADfPoaLa8o933.jpg

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

[root@localhost 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命令来更新索引库)

   [root@localhost ~]# updatedb

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

    [root@localhost ~]# 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

   [root@localhost ~]# 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文件存在的位置。

   [root@localhost ~]# ls

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

   [root@localhost ~]# touch bb.txt

   [root@localhost ~]# cp bb.txt aaa/

   [root@localhost ~]# ls aaa/

   bb.txt

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

   [root@localhost ~]# updatedb    

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

   /root/bb.txt

   /root/aaa/bb.txt

   [root@localhost ~]#


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

   1)使用 -type 按类型查找


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

   如:

   --1

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

   [root@localhost ~]# ll -h /boot/grub/menu.lst

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

   --2

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

   /boot/

   /boot/lost+found

   /boot/grub

   [root@localhost ~]# 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

   [root@localhost ~]#


2)使用 -name 按名称查找

[root@localhost ~]# find /boot -name '*grub*'    //查找/boot目录下名称包含“grub”的对象

/boot/grub

/boot/grub/grub.conf


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

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

[root@localhost ~]# find /boot/ -name '*grub*' -a -type f

/boot/grub/grub.conf

[root@localhost ~]# find /boot/ -name '*grub*' -type f

/boot/grub/grub.conf

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

[root@localhost ~]# 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的文件

[root@localhost ~]# find /boot -size +2M

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

/boot/vmlinuz-2.6.18-348.el5

[root@localhost ~]# 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的普通文件

[root@localhost ~]# find /boot/grub/ -size -2k -type f

/boot/grub/device.map

/boot/grub/grub.conf

/boot/grub/stage1

[root@localhost ~]# 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命令来列出详细属性

[root@localhost ~]#  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命令列出详细属性

[root@localhost ~]# 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)修改过的文件

关于&#43;30&#xff1a;为>31;-30为<29;30为&#61;30&#xff08;30-31&#xff09;


扩展

7&#xff09;使用 -user -group查找属于指定用户、组的文档

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

[root&#64;localhost ~]# find / -user zhangsp -type d    //查询根目录下属于zhangsp用户的目录

   /home/zhangsp

   /home/zhangsp/.mozilla

   /home/zhangsp/.mozilla/plugins

   ...


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

[root&#64;localhost ~]# 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

   [root&#64;localhost ~]#


8&#xff09;使用 -perm 查找指定权限的文档

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

   [root&#64;localhost ~]# find /etc/init.d/ -name &#39;auto*&#39; -perm 0755

   /etc/init.d/autofs

   [root&#64;localhost ~]# find /etc/init.d/ -name &#39;auto*&#39; -perm 0755 -exec ls -lh {} \;

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


备注&#xff1a;touch命令--可以修改已经存在的文件的修改日期&#xff0c;也可以创建一个空文件并制定其日期  &#xff08;参数-t&#xff09;

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

   过程&#xff1a;

   [root&#64;localhost test]# date    //当前日期为2014年2月12日

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

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

   [root&#64;localhost test]# touch -t 02101020 file2.doc       //不写年份标示当前年份

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

   [root&#64;localhost 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

   [root&#64;localhost test]# ls

   file1.doc  file2.doc  file3.doc

   [root&#64;localhost test]# find /home/test/ -name &#39;file*&#39; -mtime &#43;40

   /home/test/file1.doc

   /home/test/file3.doc

   [root&#64;localhost test]# find /home/test/ -name &#39;file*&#39; -mtime &#43;40 -exec ls -lh {} \;

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

   -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

   [root&#64;localhost test]# find /home/test/ -name &#39;file*&#39; -mtime -40 -exec ls -lh {} \;

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

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



   总结&#xff1a;

       type&#xff0c;whatis&#xff0c;which&#xff0c;whereis都是针对命令的&#xff1a;

       type&#xff0c;whatis一般用来查看该命令是否为内外部命令的&#xff1b;

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


       locate和find是针对文件&#xff1a;

       locate在索引中搜索&#xff0c;速度快&#xff0c;但是需要更新数据库&#xff1b;

       find在linux文件系统中搜索&#xff0c;慢&#xff0c;但是全&#xff1b;


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

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



本文转自 murongqingqqq  51CTO博客&#xff0c;原文链接:http://blog.51cto.com/murongqingqqq/1358592


   



推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • BashShell作为Linux的指定合作伙伴我们已经再熟悉不过了,使用Bash可以快速编写简单的脚本方便我们的日常比如善用vim,awk和sed三剑客,也可以创建十分复杂的逻辑, ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 安装oracle软件1创建用户组、用户和目录bjdb节点下:[rootnode1]#groupadd-g200oinstall[rootnode1]#groupad ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • Linux系统高级网络配置:链路聚合
    链路聚合网卡的链路聚合就是将多块网卡连接起来,当一块网卡损坏,网络依旧可以正常运行,可以有效的防止因为网卡损坏带来的损失,同 ... [详细]
  • 涉及的知识点-ViewGroup的测量与布局-View的测量与布局-滑动冲突的处理-VelocityTracker滑动速率跟踪-Scroller实现弹性滑动-屏幕宽高的获取等实现步 ... [详细]
  • Linux配置IP地址大全
    IP地址配置方法一:编辑配置文件#编辑网卡参数[roottest~]#vimetcsysconfignetwork-scriptsifcfg-ens331TYPEE ... [详细]
  • mac os php mysql_Mac OS下配置PHP+MySql环境
    由于最近需要布置mantis用来进行bug追踪,在此记录其过程。由于PHPapache环境在MacOS上是自带的,所以不需要另处下安装包, ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了Mongodb副本集+分片集群搭建相关的知识,希望对你有一定的参考价值。环境需求: ... [详细]
  • linux clickhouse安装在指定目录_Centos8服务器指定目录安装配置Nginx
    1.安装前准备(1)检查是否安装过nginx(如果没有安装过可以无视)find-namenginx搜索nginx文件及其文件夹rm-rf【nginx配置地址文件及其文件夹】手动删除 ... [详细]
author-avatar
屁儿最爱李佑晨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有