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”命令查看:
例:下面可以看到,因为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的更多相关文章
- linux命令中which、whereis、locate有什么区别?
1.find find是最常用和最强大的查找命令.它能做到实时查找,精确查找,但速度慢. find的使用格式如下: #find [指定目录] [指定条件] [指定动作] 指定目录:是指所要搜索的目录和 ...
- Linux 命令中 which、whereis、locate 命令的用法
which 命令 which 命令的作用是,在 PATH 变量指定的路径中搜索可执行文件的所在位置.它一般用来确认系统中是否安装了指定的软件. (1)命令格式 which 可执行文件名称 wherei ...
- 大量示例彻底搞懂Linux查找,which,whereis,locate,find
前言 Linux常用命令中,有些命令可以帮助我们查找二进制文件,帮助手册或源文件的位置,也有的命令可以帮助我们查找磁盘上的任意文件,今天我们就来看看这些命令如何使用. which which命令会在P ...
- Linux命令之type - 显示命令的类型
用途说明 type命令用来显示指定命令的类型.一个命令的类型可以是如下之一 alias 别名 keyword 关键字,Shell保留字 function 函数,Shell函数 builtin 内建命令 ...
- 每天一个Linux命令(17)--whereis命令
whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返所有信息. 和find相比,whereis查找的速度非 ...
- 每天一个Linux命令(17)whereis命令
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. (1)用法: 用法: w ...
- cento命令之which、whereis、locate、find
[which] 查看可执行文件的位置 语法: [root@localhost ~]# which 可执行文件名称 例如: [root@localhost ~]# which passwd /usr/b ...
- Linux命令之type
1:linux命令可以分为很多类,其中常见得类型: (1):builtin --内置命令 (2):alias --命令别名 (3):file --外部命令 具体有哪些内置命令以及内置命令各个用法: [ ...
- Linux命令详解-whatis
描述一个命令执行什么功能. 1.命令格式: whatis [ -M PathName ] Command ... 2.命令功能: 描述一个命令执行什么功能. 3.命令参数: -M PathNa ...
随机推荐
- SSH & 文件传输 & 远程桌面管理
SSH Windows Linux MacOS Android IOS https://www.ssh.com http:/ ...
- 【Effective C++ 读书笔记】条款02: 尽量以 const, enum, inline 替换 #define
条款02: 尽量以 const, enum, inline 替换 #define 这个条款或许可以改为“宁可以编译器替换预处理器”. 编译过程: .c文件--预处理-->.i文件--编译--&g ...
- Python函数及参数
## 函数 - 函数是代码的一种组织形式,一般一个函数完成一个特定功能 - 函数需要先定义后使用 - 函数的定义 def func_name(参数): func_body ... return fun ...
- 学习python第十五天,面向对象
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集 ...
- Android 中的一些特殊目录与文件
用作命令的二进制文件位于/system/bin/与/system/xbin/下 应用数据位于/data/data/, 原始安装文件位于/data/app/(Play商店中非免费应用位于/data/ap ...
- TensorFlow验证码识别
本节我们来用 TensorFlow 来实现一个深度学习模型,用来实现验证码识别的过程,这里我们识别的验证码是图形验证码,首先我们会用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 验 ...
- SSM框架的简单搭建
转:https://blog.csdn.net/zhshulin/article/details/37956105 Spring+SpringMVC+MyBatis spring : 4. ...
- 使用 Ajax
Ajax( Asynchronous JavaScript and XML) 在 Ajax 中 Asynchronous 是指异步, 代表 客户端(Client 通常是指浏览器) 可以向服务器(Ser ...
- 16.2,docker网络
Docker 允许通过外部访问容器或容器互联的方式来提供网络服务. 端口映射允许外部访问容器 --link 容器互联 容器桥接网络 .通过--link容器通信,给test2添加一个hosts解析记 ...
- 以+scheduledTimerWithTimeInterval...的方式触发的timer,在滑动页面上的列表时,timer会暂定回调,为什么?如何解决?
这里强调一点:在主线程中以+scheduledTimerWithTimeInterval...的方式触发的timer默认是运行在NSDefaultRunLoopMode模式下的,当滑动页面上的列表时, ...