JobPlus知识库 IT 软件开发 文章
Linux常用定位/显示命令

Linux查找/定位功能的相关命令:

常用命令简要中文说明程序所在目录
more分页显示一个文件或任何输出结果,按q键停止显示/bin
less与more命令类似,不同的是less命令除了可以按空格键向下显示文件外,还可以利用上下键来卷动文件,即支持反向查询/usr/bin
cat显示整个文件的内容没有翻页功能,因此常和more命令搭配使用/bin
whereis在特定目录中查找符合条件的文件/usr/bin
find适合复杂查询条件的文件查找/usr/bin
slocate查找文档或目录/usr/bin
locate通过文件名搜索文件的工具/usr/bin
grep寻找某字串内容工具/bin
env查看环境设置/usr/bin
which在环境变量$PATH设置的目录里查找符合条件的文件/bin
apropos在whatis资料库中搜寻特定字串/usr/bin

more [文件名]
more命令的主要作用是把输出结果以分页的形式显示在屏幕上,一页停止一次,例如用ls命令去找一个x字母开头的文件时,如果ls x*仍列出太多文件(超过一屏),就可以配合管道符号和more命令:ls x* | more来分页显示输出到终端。more命令会一屏停止一下,按空白键才会继续显示下一屏的内容。more就犹如DOS的DIR命令/P选项。

也可以用more命令分页显示文章的内容,例如

more /etc/XF86Configcat /etc/XF86Config | more

但是因为more先天缺陷,如果您看完了这页,想要回头看上一页是不行的,必须从第一页重来,即不支持向上翻页。这也是more命令很少被使用的原因,因此通常使用less命令代替more命令或直接用文本编辑器查看。

less [文件名]
分页显示一个文件并且可以反向查询

less命令的取名很有意思,故意与more命令打对台,你叫”更多”,我就叫”更少”,就好像你叫黑人牙膏我就叫白人牙膏一样。事实这些字面上是没有意义的。less命令改进的最主要一点,就是相对于more命令来说,less命令支持反向查看功能(按PgUp键)。

type
type命令其实不能算查找命令,它是用来区分某个命令的类型是由shell自带的(内部命令),还是由shell外部的独立二进制文件(或shell等脚本程序)。如果是外部命令,那么当type命令使用-p参数时,输出就会显示该命令的路径,相当于which命令。

type命令的使用实例:

1 2 3 4 5 6# 系统会提示,cd是shell的自带命令(build-in)type cd# 系统会提示,grep是一个外部命令,并显示该命令的路径type grep# 加上-p参数后,就相当于which命令type -p grep

whatis keyword …
在whatis数据库中搜寻指定关键字指令。whatis数据库包含了所有系统指令的简单描述 , 而whatis指令会在此资料库中搜寻符合keyword的指令 , 并把结果显示于standard output(标准输出)。whatis数据库是用makewhatis这个指令建立的 。另外,whatis命令与apropos命令类似,都是基于whatis数据库查找关键字。

whereis 命令/程序名
whereis是一个小巧好用的文件寻找工具,它专门用来寻找可执行的程序、原始程序和使用手册。

1 2 3 4 5 6 7 8 9 10 11 12语法 :whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...] 补充说明:whereis指令会在特定目录中查找符合条件的文件。这些文件的烈性应属于原始代码,二进制文件,或是帮助文件。 参  数:  -b  只查找二进制文件。  -B<目录>  只在设置的目录下查找二进制文件。  -f  不显示文件名前的路径名称。  -m  只查找说明文件。  -M<目录>  只在设置的目录下查找说明文件。  -s  只查找源代码文件。  -S<目录>  只在设置的目录下查找原始代码文件。  -u  查找不包含指定类型的文件。 如果省略参数,则返回所有信息。

比如不知道fdisk命令的存储在哪里,就可以用whereis fdisk命令查找。
如果确定需要查找的是程序,但用whereis又找不到的话,那就表示系统没有安装该程序,如whereis goic。即whereis只能用于命令/程序名的搜索,而不能搜索普通文件。

1 2whereis which# output:which: /bin/which /usr/bin/which /usr/share/man/man1/which.1.gz

where命令
与whereis类似,但它不会搜索命令/程序的帮助文件。

1 2 3 4 5where which# output:  which: shell built-in command  /usr/bin/which  /bin/which

which
which命令和whatis/whereis命令很相似。

1 2 3 4 5 6 7 8 9语法:which [文件...] 说明:which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。        也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。而whereis列出所        有二进制命令和源代码包。 参  数:  -n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名  -p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径  -w  指定输出时栏位的宽度  -V  显示版本信息

which命令只在$PATH环境变量所设置的查找路径中查找命令。比如:

1 2 3 4# which只在$PATH路径中查找并只列出第一个(即被执行的那个位置上的命令副本)which fdisk # /sbin/fdisk# whereis会查出所有的whereis fdisk # fdisk: /sbin/fdisk /usr/share/man/man8/fdisk.8.gz

find
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。它的参数选项非常丰富,这也导致了它很难使用,但相信当你了解它,它就会成为你最得力的助手。

find的使用格式如下:

find <指定目录> <指定条件> <指定动作>     - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。     - <指定条件>: 所要搜索的文件的特征。     - <指定动作>: 对搜索结果进行特定的处理。 如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

使用范例如下:

搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件find . -name 'my*'搜索根目录/(含子目录,以下同)中,所有文件名以my*开头的文件并打印find / -name my* -print搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息find . -name 'my*' -ls搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录find . -type f -mmin -10

-print选项是打印输出到终端。它还有其它更复杂的应用。例如:

1 2 3 4 5 6 7 8 9 10 11 12 13 14# 根据时间查找:从/usr目录中找出最近3天之内存取过的文件find /usr -atime 3 –print# 根据时间查找:从/usr目录中找出最近5天之内修改过的文件find /usr -ctime 5 –print  # 从/doc目录中找出属主是jacky的并且文件名以j开头的所有文件find /doc -user jacky -name 'j*' –print  # 从/doc目录中找出文件名以ja开头或者ma开头的文件find /doc \( -name 'ja*' -o- -name 'ma*' \) –print  # 删除/doc目录中凡是文件名结尾为bak的文件。# -exec 选项是执行的意思,rm 是删除命令,{ } 表示文件名,“\;”是规定的命令结尾find /doc -name '*bak' -exec rm {} \;

如果只知道某个文件的大小,修改日期等特征也可以使用”find”命令查找出来,这和WINDOWS系统中的”搜索”功能是基本相同的。例如,用户可以按名称、类型及大小搜索文件和文件夹。用户甚至可以搜索包含特定文本的文件。如果用户正使用 Active Directory,这时还可以搜索带有特定名称或位置的打印机。

例如有一个Linux文件大小为1,500bytes,那么我们可是使用如下命令来查询find / -size 1500c,字符c表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式来解决。例如我们输入find/-size+10000000c这个命令,则标明我们指定系统在根目录中查找出大于10000000字节的文件并显示出来。命令中的+是表示要求系统只列出大于指定大小的文件,而使用”-”则表示要求系统列出小于指定大小的文件。下面的列表就是在Linux使用不同 “find”命令后系统所要作出的查找动作,从中我们很容易看出在Linux中使用find命令的方式是很多的,find命令查找文件只要灵活应用,丝毫不比在WINDOWS中查找能力差。

1 2 3 4 5 6 7 8find / -amin -10 # 查找在系统中最后10分钟访问的文件 find / -atime -2 # 查找在系统中最后48小时访问的文件 find / -empty # 查找在系统中为空的文件或者文件夹 find / -group cat # 查找在系统中属于groupcat的文件 find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件 find / -mtime -1 #查找在系统中最后24小时里修改过的文件 find / -nouser #查找在系统中属于作废用户的文件 find / -user fred #查找在系统中属于FRED这个用户的文件

下面的列表就是对find命令所可以指定文件的特征进行查找的部分条件。在这里并没有列举所有的查找条件,参考有关Linux有关书籍可以知道所有find命令的查找函数。

1 2 3 4 5 6 7 8 9-amin n 查找系统中最后N分钟访问的文件 -atime n 查找系统中最后n*24小时访问的文件 -cmin n 查找系统中最后N分钟被改变状态的文件 -ctime n 查找系统中最后n*24小时被改变状态的文件 -empty 查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹 -false 查找系统中总是错误的文件 -fstype type 查找系统中存在于指定文件系统的文件,例如:ext2 . -gid n 查找系统中文件数字组 ID 为 n的文件 -group gname 查找系统中文件属于gnam文件组,并且指定组和ID的文件

find命令的控制选项说明:
find命令也提供给用户一些特有的选项来控制查找***作。下表就是我们总结出的最基本,最常用的find命令的控制选项及其用法。 选项及用途描述:

1 2 3 4 5 6 7 8-daystart 测试系统从今天开始24小时以内的文件,用法类似-amin -depth 使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容 -follow 遵循通配符链接方式查找; 另外,也可忽略通配符链接方式查询 -help 显示命令摘要 -maxdepth levels 在某个层次的目录中按照递减方法查找 -mount 不在文件系统目录中查找, 用法类似 -xdev. -noleaf 禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中进行最优化查找 -version 打印版本数字

使用-follow选项后,find命令则遵循通配符链接方式进行查找,除非你指定这个选项, 否则一般情况下find命令将忽略通配符链接方式进行文件查找。

-maxdepth选项的作用就是限制find命令在目录中按照递减方式查找文件的时候搜索文件超过某个级别或者搜索过多的目录,这样导致查找速度变慢,查找花费的时间过多。例如,我们要在当前(.)目录及其子目录中查找一个名叫fred的文件,而不会深入到3级子目录中查找,就可以使用命令:

find.-maxdepth 2 -namefred

如果fred文件在./sub1/fred目录中,那么这个命令就会直接定位这个文件,查找很容易成功。如果这个文件在./sub1/sub2/fred目录中,那么这个命令就无法查找到。因为前面已经给find命令在目录中最大的查询目录级别为2,只能查找2层目录下的文件。这样做的目的就是为了让find命令更加精确的定位文件,如果你已经知道了某个文件大概所在的文件目录级数,那么加入-maxdepth n就很快的能在指定目录中查找成功。

find混合条件查找方式
find命令可以使用混合查找的方法,例如我们想在/tmp目录中查找大于100000000字节并且在48小时内修改的某个文件,我们可以使用-and来把两个查找选项链接起来组合成一个混合的查找方式:

find /tmp -size +10000000c -and -mtime +2

学习过计算机语言的朋友都知道,在计算机语言里,使用and ,or 分别表示”与”和”或”的关系。在Linux系统的查找命令中一样通用。 还有这样的例子, find / -user fred-or-usergeorge,可以解释为在/tmp目录中查找属于fred或者george这两个用户的文件。在find命令中还可以使用”非”的关系来查找文件,如果要在/tmp目录中查找所有不属于panda的文件,使用find /tmp ! -user panda命令就可以解决了。

find查找并显示文件
如果想知道查找到的文件的详细信息和属性,如果采取先查找文件,再使用ls命令来查看文件信息是相当繁琐的,可以把这两个命令结合起来使用:

1 2 3find/-name"httpd.conf"-ls # 系统在查找到httpd.conf文件后立即在屏幕上显示httpd.conf文件信息 12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf

下面是一些常用的查找文件并显示文件信息的参数和使用方法 :

1 2 3 4 5 6 7-exec command; 查找并执行命令 -fprint file 打印文件完整文件名 -fprint0 file 打印文件完整文件名包括空的文件 -fprintf file format 打印文件格式 -ok command; 给用户命令执行***作,根据用户的Y 确认输入执行 -printf format 打印文件格式 -ls 打印同种文件格式的文件.

locate 文件名
locate命令是通过文件名搜索文件的工具,它的用法也比较简单。

locate命令其实是”find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有所有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动(cronjob)更新一次updatedb索引数据库,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

如果新安装了软件或者存储了新文件,也要先运行updatedb命令,以生成最新索引库,然后用locate搜索才能反映真实的结果。

1 2 3 4 5 6 7 8 9 10# 首先运行updatedb建立或更新索引数据库updatedb# 要找vsftpd.conf文件都位于哪个位置;locate my.so# 搜索etc目录下所有以sh开头的文件locate /etc/sh# 搜索用户主目录下,所有以m开头的文件locate ~/m# 搜索用户主目录下,所有以m开头的文件,并且忽略大小写locate -i ~/m

slocate(secure locate)
slocate本身具备一个数据库,里面存放了系统中文档和目录的相关信息。slocate命令使用该数据库查找文档或目录。

1 2 3 4 5 6语法:slocate [-u][--help][--version][-d <目录>][查找的文档] 参  数:  -d<目录>或--database=<目录>  指定数据库所在的目录  -u  更新slocate数据库  --help  显示帮助  --version  显示版本信息

apropos keyword …
apropos会搜寻whatis资料库中符合keyword的描述 , 并把结果显示于standard output(终端) 。

grep [-选项] [字串] [文件名]
寻找包含某字串内容的文件的工具。例如,我们想在一个目录的200个文件里面,找出哪一个文件提到”lucky”这个词语:grep lucky *。其他常用的选项还有:

1 2 3-n 同时列出该词语出现在文章的第几行。 -c 计算一下该字串出现的次数。 -i 比对的时候,不计较大小写的不同。

下面是借助于grep命令写的查找文件内容的工具grep_for:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31#!/bin/bash if [ -z "$1" ]then    echo 'Usage: grep_for CONTENT_PATTERN FILENAME_FILTER_PATTERN [OPTION_FOR_GREP]'    exit 1fi content=$1  if [ -z "$2" ]then    shiftelse    flag=`echo $2 | sed 's/^\(.\).*$/\1/'`    if [ "$flag" == "-" ]    then        shift    else        filter=$2        shift        shift    fifi if [ -z "$filter" ]then    find -print0 | grep -zv '\.svn' | xargs -0 grep --color $content $@else    find -print0 | grep -zv '\.svn' | grep -z $filter | xargs -0 grep --color $content $@fi

将该脚本移动到相应的目录就可以使用了,例如:

cd /usr/local/binsudo mv ~/workspace/grep_for .sudo chmod 755 grep_for  #usagegrep_for ruby

env查看环境设置
env命令用于设置系统的环境变量,如终端的类型(bash、sh、zsh等)、默认浏览器、用户主目录(Home Directory)等。最常用的就是查询PATH环境变量值了。PATH环境变量控制了在哪些目录中查找在终端输入命令,默认的命令查找顺序是:

1 2 3 4 5 6/usr/bin /sbin /usr/sbin /usr/local/bin /usr/X11R6/bin /root/bin

你可以在~/.bashrc或~/.profile(当前用户)或/etc/profile(全局)目录中重新设置PATH变量,添加自定义查找路径:

1 2 3export ANDROID=~/mobile-dev/android/toolsexport PATH=/usr/local/git/bin:/usr/local/git/libexec/git-core:$ANDROID:$ANT_HOME/bin:$PATHexport MANPATH=/usr/local/git/manual:$MANPATH

也可以使用env命令重新设置PATH变量,如果想在查找命令的路径上增加/usr/local/myshell目录,而把/root/bin去掉:

1env PATH=/usr/bin;/usr/sbin;/usr/local/bin;/usr/local/shell

<script src="http://w.sharethis.com/button/sharethis.js#publisher=1ebe271a-29f6-4637-aa8c-e3066e1c4ce5&amp;type=wordpress&amp;headerTitle=Share%20This%20Article" type="text/javascript"></script>


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏支持
170人赞 举报
分享到
用户评价(0)

暂无评价,你也可以发布评价哦:)

扫码APP

扫描使用APP

扫码使用

扫描使用小程序