第一个: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”命令查看:

例:下面可以看到,因为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)修改过的文件

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

扩展

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

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

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

/home/zhangsp

/home/zhangsp/.mozilla

/home/zhangsp/.mozilla/plugins

...

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

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

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

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

[root@localhost ~]# find /etc/init.d/ -name 'auto*' -perm 0755

/etc/init.d/autofs

[root@localhost ~]# 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来进行测试;

过程:

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

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

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

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

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

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

file1.doc  file2.doc  file3.doc

[root@localhost test]# find /home/test/ -name 'file*' -mtime +40

/home/test/file1.doc

/home/test/file3.doc

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

[root@localhost 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的更多相关文章

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

    1.find find是最常用和最强大的查找命令.它能做到实时查找,精确查找,但速度慢. find的使用格式如下: #find [指定目录] [指定条件] [指定动作] 指定目录:是指所要搜索的目录和 ...

  2. Linux 命令中 which、whereis、locate 命令的用法

    which 命令 which 命令的作用是,在 PATH 变量指定的路径中搜索可执行文件的所在位置.它一般用来确认系统中是否安装了指定的软件. (1)命令格式 which 可执行文件名称 wherei ...

  3. 大量示例彻底搞懂Linux查找,which,whereis,locate,find

    前言 Linux常用命令中,有些命令可以帮助我们查找二进制文件,帮助手册或源文件的位置,也有的命令可以帮助我们查找磁盘上的任意文件,今天我们就来看看这些命令如何使用. which which命令会在P ...

  4. Linux命令之type - 显示命令的类型

    用途说明 type命令用来显示指定命令的类型.一个命令的类型可以是如下之一 alias 别名 keyword 关键字,Shell保留字 function 函数,Shell函数 builtin 内建命令 ...

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

    whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返所有信息. 和find相比,whereis查找的速度非 ...

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

    whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息.     (1)用法:   用法:    w ...

  7. cento命令之which、whereis、locate、find

    [which] 查看可执行文件的位置 语法: [root@localhost ~]# which 可执行文件名称 例如: [root@localhost ~]# which passwd /usr/b ...

  8. Linux命令之type

    1:linux命令可以分为很多类,其中常见得类型: (1):builtin --内置命令 (2):alias --命令别名 (3):file --外部命令 具体有哪些内置命令以及内置命令各个用法: [ ...

  9. Linux命令详解-whatis

    描述一个命令执行什么功能. 1.命令格式: whatis [ -M PathName ] Command ... 2.命令功能: 描述一个命令执行什么功能. 3.命令参数:     -M PathNa ...

随机推荐

  1. Python学习第一弹

    开发语言: 高级:Python.java.PHP  C#   GO  ruby   C++           ——>字节码   低级:C.汇编                          ...

  2. 【机器学习算法基础+实战系列】KNN算法

    k 近邻法(K-nearest neighbor)是一种基本的分类方法 基本思路: 给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例多数属于某个类别,就把输 ...

  3. POJ 1222 反转

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12469   Accepted: 7 ...

  4. 遗传算法 | Java版GA_TSP(我的第一个Java程序)

    嗯哼,第一次写博客,准确说是第一次通过文字的方式记录自己的工作,闲话少叙,技术汪的博客就该直奔技术主题(关于排版问题,会在不断写博客的过程中慢慢学习,先将就着用吧,重在技术嘛~~~). 遗传算法(Ge ...

  5. CodeForces 879D Teams Formation

    题意 将一个长度为\(n\)的数组重复\(m\)遍得到一个长度为\(n \times m\)的新序列,然后消掉新序列中连续\(k\)个相同的元素,不断重复这一过程,求最后剩下的序列的长度 分析 首先可 ...

  6. elasticsearch索引和映射

    目录 1. elasticsearch如何实现搜索 1.1 搜索实例 1.2 es中数据的类型 1.3 倒排索引 1.4 分析与分析器 1.4.1 什么是分析器 1.4.2 内置分析器种类 1.4.3 ...

  7. centos使用--ssh登陆

    1 安装openssh-server yum install openssh-server 2 登录 在配置好ssh后就可以只使用SSH密钥登录而不允许通过密码登录了,方法如下: 修改ssh配置: v ...

  8. 《Cracking the Coding Interview》——第17章:普通题——题目1

    2014-04-28 21:45 题目:就地交换两个数,不使用额外的变量. 解法:没说是整数,我姑且先当整数处理吧.就地交换可以用加法.乘法.异或完成,其中乘法和加法都存在溢出问题.三种方法都不能处理 ...

  9. Python 实现MD5加密

    from hashlib import md5 def encrypt_md5(s): # 创建md5对象 new_md5 = md5() # 这里必须用encode()函数对字符串进行编码,不然会报 ...

  10. winform小知识

    1.得到控制台或者winform程序在debug目录下生成的exe路径 建议使用:AppDomain.CurrentDomain.BaseDirectory或者Assembly.GetExecutin ...