作者:jicanmeng
时间:2016年06月06日
命令格式如下:
type [-tpa] name
-t
: 当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:
file
: 表示为外部指令;alias
: 表示该指令为命令别名所设定的名称;builtin
: 表示该指令为 bash 内建的指令;-p
: 如果后面接的 name 为外部指令时,才会显示完整档名;
-a
: 将所有含 name 的指令都列出来,包含 alias
不加任何选项与参数时,type 会显示出 name 是外部指令还是 bash 内建指令。
示例如下:
[jicanmeng@andy tmp]$ type -t cd
builtin
[jicanmeng@andy tmp]$ type -t ifconfig
file
[jicanmeng@andy tmp]$ type -t ls
alias
[jicanmeng@andy tmp]$ type cd
cd is a shell builtin
[jicanmeng@andy tmp]$ type ifconfig
ifconfig is /sbin/ifconfig
[jicanmeng@andy tmp]$ type ls
ls is aliased to `ls --color=auto'
[jicanmeng@andy tmp]$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
[jicanmeng@andy tmp]$
这个指令是根据‘PATH’这个环境变数所规范的路径,去搜寻‘执行档’的档名。命令格式如下:
which name
示例如下:
[jicanmeng@andy tmp]$ which ifconfig
/sbin/ifconfig
[jicanmeng@andy tmp]$
除了搜索二进制的可执行文件,还能搜索manual文档。命令格式如下:
whereis [-bm] name
-b
: 只找 binary 格式的档案;-m
: 只找在说明档 manual 路径下的档案;示例如下:
[jicanmeng@andy tmp]$ whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
[jicanmeng@andy tmp]$ whereis -b ifconfig
ifconfig: /sbin/ifconfig
[jicanmeng@andy tmp]$ whereis -m ifconfig
ifconfig: /usr/share/man/man8/ifconfig.8.gz
[jicanmeng@andy tmp]$
which,whereis命令在搜索的时候,指定的是完整的文件名。locate可以只指定部分文件名。命令格式如下:
locate [-ir] name
-i
: 忽略大小写的差异;-r
: 后面可接正规表示法的显示方式;示例如下:
[jicanmeng@andy tmp]$ locate ifconfig
/sbin/ifconfig
/usr/sbin/pifconfig
/usr/share/man/de/man8/ifconfig.8.gz
/usr/share/man/fr/man8/ifconfig.8.gz
/usr/share/man/man8/ifconfig.8.gz
/usr/share/man/man8/pifconfig.8.gz
/usr/share/man/pt/man8/ifconfig.8.gz
[jicanmeng@andy tmp]$
通常 find 不很常用的!因为速度慢之外, 也很操硬碟!通常我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦! 为什么呢?因为 whereis 与 locate 是利用资料库来搜寻资料,所以相当的快速,而且并没有实际的搜寻硬碟, 比较省时间啦!
虽然如此,我们也需要好好学习一下find的用法。因为它实在是太强大了。命令格式如下:
find [PATH] [option] [action]
示例如下:
# 将更改内容还未超过24小时的文件列出:
[jicanmeng@andy tmp]$ find / -mtime 0
...
# 将/etc目录下比/etc/passwd文件还要新的文件列出:
[jicanmeng@andy tmp]$ find /etc -newer /etc/passwd
...
[jicanmeng@andy tmp]$
第一个例子需要详细说一说。为什么指定为0呢? 我们先看一看man find
对于这个参数是怎么说的:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
-atime n
File was last accessed n*24 hours ago. When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago.
-mtime n
File’s data was last modified n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretation of file modification times.
可以看出来,计算时间其实就是计算从最后一次修改到现在经过的小时数除以24,对于商取整数。如果修改文件还未超过24小时,商自然就为0了。其实-mtime后面指定的参数就是商的大小了。-mtime +4
表示商大于4;-mtime -4
表示商小于4;-mtime 4
表示商等于4。可以用下图表示:
当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
示例如下:
[root@andy tmp]# find / -perm +7000 -exec ls -l {} \;
-r-s--x--x. 1 root root 11728 May 16 2014 /usr/lib/virtualbox/VBoxVolInfo
-r-s--x--x. 1 root root 32624 May 16 2014 /usr/lib/virtualbox/VBoxNetNAT
-r-s--x--x. 1 root root 32624 May 16 2014 /usr/lib/virtualbox/VBoxNetDHCP
-r-s--x--x. 1 root root 32624 May 16 2014 /usr/lib/virtualbox/VBoxSDL
-r-s--x--x. 1 root root 15752 May 16 2014 /usr/lib/virtualbox/VBoxNetAdpCtl
-r-s--x--x. 1 root root 32624 May 16 2014 /usr/lib/virtualbox/VirtualBox
-r-s--x--x. 1 root root 32624 May 16 2014 /usr/lib/virtualbox/VBoxHeadless
-rws--x--x. 1 root root 20184 Nov 22 2013 /usr/bin/chfn
-rwsr-xr-x. 1 root root 71480 Dec 8 2011 /usr/bin/gpasswd
-rwxr-sr-x. 1 root nobody 125000 Nov 23 2013 /usr/bin/ssh-agent
---s--x---. 1 root stapusr 170784 Nov 22 2013 /usr/bin/staprun
...
[root@andy tmp]#
该范例中特殊的地方有 {} 以及 \; 还有 -exec 这个关键字,这些东西的意义为: