linux命令使用详解网赌十大信誉的平台,Linux查找命令详解

Linux文件查找命令使用详解,linux命令使用详解

这节我们来学习Linux文件目录的操作命令,对文件或目录进行查找的命令

Linux下主要有以下五个查找命令:

find命令

Linux
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法

# find . -name "*.c"

将目前目录其其下子目录中所有一般文件列出

locate passwd

附加说明

locate与find 不同: find 是去硬盘找,locate
只在/var/lib/slocate资料库中找。

locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/slocate/slocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库
,命令为:

locate -u 

find 指定目录下查找文件
find(选项)(参数)

find

slocate命令

Linux slocate命令查找文件或目录。

slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。

语法

slocate [-u][--help][--version][-d <目录>][查找的文件]

参数

选项 说明
-d<目录>或–database=<目录> 指定数据库所在的目录;
-u 更新slocate数据库;
–help 显示帮助;
–version 显示版本信息。

实例

使用指令”slocate”显示文件名中含有关键字”fdisk”的文件路径信息,输入如下命令:

$ slocate fdisk #显示文件名中含有fdisk关键字的文件的路径信息 

执行以上命令后,指令执行的输出信息如下:

$ slocate fdisk #显示文件名中含有fdisk 关键字的文件的路径信息  
/root/cfdisk        #搜索到的文件路径列表  
/root/fdisk    
/usr/include/grub/ieee1275/ofdisk.h  
/usr/share/doc/util-Linux/README.cfdisk  
/usr/share/doc/util-Linux/README.fdisk.gz   

find命令可以用来在特定目录下查找文件,默认是需要加上查找的路径的,如果不加路径,则find命令会在当前目录查找子目录和文件

locate

which命令

Linux which命令用于查找文件。

which指令会在环境变量$PATH设置的目录里查找符合条件的文件。

语法

which [文件...]

参数

选项 说明
-n<文件名长度> 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p<文件名长度> 与-n参数相同,但此处的<文件名长度>包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息。

实例

使用指令”which”查看指令”bash”的绝对路径,输入如下命令:

$ which bash

上面的指令执行后,输出信息如下所示:

/bin/bash                   #bash可执行程序的绝对路径 

然后把查找的文件或目录显示出来

grep

whereis命令

Linux whereis命令用于查找文件。

该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。

该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。

语法

whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]

参数

选项 说明
-b:只查找二进制文件;  
-B<目录> 只在设置的目录下查找二进制文件;
-f 不显示文件名前的路径名称;
-m 只查找说明文件;
-M<目录> 只在设置的目录下查找说明文件;
-s 只查找原始代码文件;
-S<目录> 只在设置的目录下查找原始代码文件;
-u 查找不包含指定类型的文件。

实例

使用指令”whereis”查看指令”bash”的位置,输入如下命令:

$ whereis bash 

上面的指令执行后,输出信息如下所示:

bash:/bin/bash/etc/bash.bashrc/usr/share/man/man1/bash.1.gz 

注意:以上输出信息从左至右分别为查询的程序名、bash路径、bash的man
手册页路径。

如果用户需要单独查询二进制文件或帮助文件,可使用如下命令:

$ whereis -b bash 
$ whereis -m bash 

输出信息如下:

$ whereis -b bash               #显示bash 命令的二进制程序  
bash: /bin/bash /etc/bash.bashrc /usr/share/bash    # bash命令的二进制程序的地址  
$ whereis -m bash               #显示bash 命令的帮助文件  
bash: /usr/share/man/man1/bash.1.gz  #bash命令的帮助文件地址  

find命令 Linux find命令 用来在指定目录下查找文件
。任何位于参数之前的字符串都将被视为欲…

他的选项如下

which

amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-daystart:从本日开始计算时间;
-depth:从指定目录下最深层的子目录开始查找;
-expty:寻找文件大小为0
Byte的文件,或目录下没有任何子目录或文件的空目录;
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-false:将find指令的回传值皆设为False;
-fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
-follow:排除符号连接;
-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-help或——help:在线帮助;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum<inode编号>:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount:此参数的效果和指定“-xdev”相同;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;
-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-prune:不寻找字符串作为寻找文件或目录的范本样式;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true:将find指令的回传值皆设为True;
-typ<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-version或——version:显示版本信息;
-xdev:将范围局限在先行的文件系统中;
-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。

whereis

仅供参考或是查找

find

我们后面来实战这个命令

find命令在某个目录下查找。

首先我们根据文件名名称或正则表达式匹配文件
列出当前目录下所有的子目录下所有文件和文件夹

一般使用格式:

find .

find <-option>

在/home目录下查找以.txt结尾的文件名

-pathname:所要查找的目录及其所有子目录(默认递归查找)。默认为当前目录。

find /home -name “*.txt”

-option:指定参数。

同上,但忽略大小写

-filetype:想要查找的文件类型。

find /home -iname “*.txt”

-action:对查找结果进行的处理。

当前目录及子目录下查找所有以.txt和.pdf结尾的文件

常用参数

find . \( -name “*.txt” -o -name “*.pdf” \)
 

 
find . -name “*.txt” -o -name “*.pdf”

-name: 按照文件名查找文件。

匹配文件路径或者文件

-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。

find /usr/ -path “*local*”

-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

基于正则表达式匹配文件路径

-ctime n:查找系统中最后n*24小时被改变文件状态的文件。

find . -regex “.*\(\.txt\|\.pdf\)$”

-atime n:查找系统中最后n*24小时访问的文件

同上,但忽略大小写

-type: 查找某一类型的文件,如:

find . -iregex “.*\(\.txt\|\.pdf\)$”

-b : 块设备文件。

当然我们还可以使用否认参数
找出/home下不是以.txt结尾的文件

-c : 字符设备文件。

find /home 网赌十大信誉的平台,! -name “*.txt”

-d : 目录。

我们还可以根据文件类型来深度查找文件

-f : 普通文件。

类型有以下几种

-l : 符号链接文件。

f 普通文件
l 符号连接
d 目录
c 字符设备
b 块设备
s 套接字
p Fifo
命令如下

-p : 管道文件。

find . -type 类型参数

例子:

我们还可以基于目录深度搜索
向下最大深度限制为3

find . -name a* -ls

find . -maxdepth 3 -type f

功能

搜索出深度距离当前目录至少2个子目录的所有文件

在当前目录中查找所有以a开头的文件,并显示它们的详细信息。

find . -mindepth 2 -type f

输出

当然还有其他各种类型的选项,我在这就不一一解释了

slot@slot-ubt:~/test$ find . -name a* -ls   397656      4 -rw-rw-r–  
2 slot     slot           13 12月  3 16:21 ./aa

有兴趣的话可以去尝试一下

locate

locate 查找文件或目录
locate/slocate(选项)(参数)

locate命令在系统的全局范围内查找。

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

一般使用格式:

可以通过手动更新数据库来解决这个问题

locate <-option>

updatedb

-option:指定参数。

locate命令的选项如下

-filetype:想要查找的文件类型。

-d<目录>或–database=<目录>:指定数据库所在的目录;
-u:更新slocate数据库;
–help:显示帮助;
–version:显示版本信息。

常用参数:

通过几个例子熟悉命令

-d:指定要查找的数据库路径

搜索etc目录下所有以sh开头的文件:

-h: 显示辅助讯息

locate /etc/sh

-i:忽略大小写

搜索用户主目录下,所有以m开头的文件,并且忽略大小写:

-q:安静模式,不会显示任何错误讯息。

locate -i ~/m

-n:至多显示 n个输出。

whereis  定位路径
whereis(选项)(参数)

-r: 使用正规运算式 做寻找的条件。

whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径

-o: 指定资料库存的名称。

选项如下

-V: 显示程式的版本讯息

-b:只查找二进制文件;
-B<目录>:只在设置的目录下查找二进制文件;
-f:不显示文件名前的路径名称;
-m:只查找说明文件;
-M<目录>:只在设置的目录下查找说明文件;
-s:只查找原始代码文件;
-S<目录>只在设置的目录下查找原始代码文件;
-u:查找不包含指定类型的文件。

例子:

和find命令相比,whereis查找的速度非常快,这是因为linux系统会将
系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通
过遍历硬盘来查找,效率自然会很高

slot@slot-ubt:~/test$ locate hello.txt

下面我们来实战这个命令

/usr/share/doc/syslinux-common/asciidoc/hello.txt

[root@localhost ~]# whereis tomcat
tomcat:
 
[root@localhost ~]# whereis svn
svn: /usr/bin/svn /usr/local/svn /usr/share/man/man1/svn.1.gz

注意:

开始的时候我们查找tomcat,因为我没有安装,所以在这里并没有显示

locate是从数据库中读取数据,而不是从文件系统中读取。从数据库中读取时是读取updatedb命令返回的结果:

而svn我安装了,所以找到了很多相关的文件

网赌十大信誉的平台 1

当然我们可以只将二进制文件显示出来

而updatedb命令默认是一天(24小时)才自动运行一次,这就意味着如果是最新创建的文件,使用locate命令可能查找不到。

[root@localhost ~]# whereis -b svn
svn: /usr/bin/svn /usr/local/svn
 
[root@localhost ~]# whereis -m svn
svn: /usr/share/man/man1/svn.1.gz
 
[root@localhost ~]# whereis -s svn
svn:

解决方法:

其他选项还是不一一进行演示了,Linux本就是要实战才能真正学会

在使用locate命令前,先手动运行updatedb命令(需要root权限):

which 查找命令的绝对路径

sudo updatedb

which(选项)(参数)

例子:

which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令

首先新建一个名为haha.ha的文件,然后用locate命令查找该文件,发现查找不到结果:

选项如下所示

slot@slot-ubt:~/test$ touch haha.ha

-n<文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名;
-p<文件名长度>:与-n参数相同,但此处的<文件名长度>包含了文件的路径;
-w:指定输出时栏位的宽度;
-V:显示版本信息。

slot@slot-ubt:~/test$

下面通过几个例子熟悉这个命令

slot@slot-ubt:~/test$ locate haha.ha

[root@localhost ~]# which pwd
/bin/pwd
 
[root@localhost ~]#  which adduser
/usr/sbin/adduser

slot@slot-ubt:~/test$

本文永久更新链接地址

使用updatedb命令更新后再查找,可以找到:

网赌十大信誉的平台 2

slot@slot-ubt:~/test$ sudo updatedb

[sudo] password for slot:

slot@slot-ubt:~/test$

slot@slot-ubt:~/test$ locate haha.ha

/home/slot/test/haha.ha

slot@slot-ubt:~/test$

grep

和find及locate命令不同的是,grep命令是在指定文件中搜索特定的内容,然后将包含有这些匹配内容的行输出到标准输出。如果不指定文件名,则从标准输入读取内容。grep命令经常和find等命令结合使用,其中grep常充当“过滤器”的角色。

常用参数:

-c: 只输出匹配行的行数。

-h: 查询多文件时不显示文件名。

-I: 不区分大小写(只适用于单字符)。

-n: 显示匹配的行和行号。

-s: 不显示 不存在或无匹配文本 的错误信息。

-v: 反向匹配,即显示不包含匹配文本的所有行。

-R: 递归查询,即连同子目录中的文件一起查询。

例子:在目录~/test下递归查找包含字符串”hello”的所有文件,并显示匹配行的行号

slot@slot-ubt:~/test$ grep -Rn “hello” ~/test /home/slot/test/aa:1:hello
world!/home/slot/test/cc:1:hello world!/home/slot/test/bb:1:hello world!

注意,这里文件bb是文件aa的符号链接:

slot@slot-ubt:~/test$ ls -l

total 8-rw-rw-r– 2 slot slot 13 12月  3 16:21 aa

lrwxrwxrwx 1 slot slot  2 12月  3 16:04 bb -> aa

-rw-rw-r– 2 slot slot 13 12月  3 16:21 cc

如果用-r参数则不显示符号链接:

slot@slot-ubt:~/test$ grep -rn “hello” ~/test/home/slot/test/aa:1:hello
world!/home/slot/test/cc:1:helloworld!

which

which命令将在PATH变量指定的路径中
查找某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

例如,查看当前环境下使用的是哪个bash:

slot@slot-ubt:~/test$ which bash

/bin/bash

whereis

whereis命令用来定位二进制文件(参数-b)、源代码文件(参数-s)和帮助手册文件(即man文件,参数-m)。如果省略参数,则返回所有信息。

例子:

slot@slot-ubt:~/test$ whereis bash

bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

slot@slot-ubt:~/test$

slot@slot-ubt:~/test$ whereis -b bash

bash: /bin/bash /etc/bash.bashrc

slot@slot-ubt:~/test$

slot@slot-ubt:~/test$ whereis -s bash

bash:

slot@slot-ubt:~/test$

slot@slot-ubt:~/test$ whereis -m bash

bash: /usr/share/man/man1/bash.1.gz

slot@slot-ubt:~/test$

更多嵌入式专业知识可访问:http://www.embedu.org/Column/

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注