l13.Linux文件类型及查找命令实践(一)

707 阅读16分钟

“ 本文正在参加「金石计划 . 瓜分6万现金大奖」 ”

8.1 Linux文件属性概述

在Linux系统中,文件或目录的属性主要包括:索引节点(Inode)、文件类型、权限属性、链接数、所归属的用户和用户组、最近修改时间等内容。

执行ls -lhi命令可以显示/data目录下内容的常见属性信息,示例如下:

[root@centos7 ~]# ll -hi /data
total 12K
33914857 -rw-r--r--. 1 root root 22 Oct  9 18:17 neteagle2.txt
34464384 -rw-r--r--. 1 root root 22 Oct  9 18:16 neteagle.txt
33915543 -rw-r--r--. 1 root root 37 Oct  9 18:34 test.txt

有关文件属性的详细解释如图8-1所示。

t8-1.png

图8-1 文件属性每一列的含义

图8-1中各列的具体含义说明如下。

第一列:Inode索引节点编号(相当于人的身份证、家庭住址,全国唯一);系统读取文件时首先通过文件名找到Inode号码,然后才能读取到文件内容。

第二列和第三列:文件类型及权限。这一列共包含11个字符,其中第一个字符为文件类型,随后的9个字符为文件的对应权限,最后一个字符点号“.”是与SELinux有关的一个标识。

第四列:硬链接个数(详情请参看ln命令的讲解)。相当于超市的多个入口,可以从不同的文件入口进入文件,还可以互为备份(消防通道)。

第五列:文件或目录所属的用户(属主)。在Linux系统里,文件和程序的存在必须要有用户和组满足相应的存在需求。

第六列:文件或目录所属的组(属组) (家庭)。

第七列:文件或目录的大小。

第八列:文件或目录的修改时间,默认为月、日、时、分。

第九列:实际的文件名或目录名。需要注意的是,文件名不算文件的属性。

接下来的几章,将为大家重点讲解这些文件属性的含义,以及与之相关的重要的Linux基础知识,本章先介绍Linux文件类型。

8.2 Linux文件类型及文件扩展名

8.2.1 文件类型与扩展名介绍

我们都知道,Windows系统是通过扩展名来区分不同文件类型的,如果扩展名错误,或者没有扩展名,则会导致文件无法直接打开(如图8-2所示)。

b8-2.png

图8-2 Windows下面修改扩展名后系统的提示

表8-1为Windows系统下常见文件的扩展名及代表的意义。

表8-1 Windows下常见文件的扩展名及意义

b8-1.png

Linux系统不同于Windows系统,Linux系统不会根据扩展名来区分文件类型,而是通过为文件设定属性的特殊方式来区分文件类型的。但是Linux系统中也会包含各种带有扩展名的文件,这些文件可能来自于Windows及其他系统,也有部分来自Linux系统本身,但这些文件的扩展名,并不代表文件的类型,这些扩展名只是为了让用户更容易区分文件类型,更易读而已,并且即使出现扩展名错误,文件也是可以正常使用的。

表8-2给出了Linux系统下常见文件的扩展名及其代表的意义。

表8-2 Linux下常见文件的扩展名及意义

b8-2.png

在Linux系统中,对于通过应用程序或命令创建的文件,如file.txt、file.tar.gz等,虽然这些文件的扩展名不同,而且要使用不同的程序或命令来打开,但它们都是常规文件(也称为普通文件)。

Linux中文件结尾附带的后缀文件扩展名(如.txt、.tar、.gz),除了让曾经习惯Windows的用户感觉更易读之外,对于Linux系统来说,大多数没有特别实际的意义,通常也只是为了易读而已,但在Windows系统中,扩展名就是用来实实在在地表示文件类型格式的。

8.2.2 Linux中得文件类型

在Linux系统中,可以说一切(包括目录、普通文件、设备文件等)皆为文件。文件类型包含了普通文件、目录、字符设备文件、块设备文件、符号/软链接文件等,表8-3列出了Linux下常见的文件类型及说明。

表8-3 Linux下常见的文件类型及说明

b8-3.png

要想查看文件类型,可执行ls -l或ls -al命令来实现,执行后的输出信息如下:

[root@centos7 ~]# ls -l
total 48
-rw-------. 1 root root 1712 Oct  1 14:49 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 Oct  9 18:57 a.txt
-rw-r--r--. 1 root root   30 Oct  9 18:57 b.txt
-rw-r--r--. 1 root root  115 Oct  9 15:18 exportfs_usage.sh
-rw-r--r--. 1 root root   12 Oct  8 21:37 hello.txt
-rw-r--r--. 1 root root  135 Oct  9 15:30 menu.sh
-rw-r--r--. 1 root root   20 Oct  9 18:29 neteagle2.txt
-rw-r--r--. 1 root root   20 Oct  9 19:18 neteagle.txt
-rw-r--r--. 1 root root  674 Oct  9 15:11 opt_sysctl.sh
drwxr-xr-x. 3 root root   36 Oct  6 18:54 test
-rw-r--r--. 1 root root   20 Oct  9 17:09 test1.txt
-rw-r--r--. 1 root root   35 Oct  9 17:14 test2.txt
-rw-r--r--. 1 root root   21 Oct  9 14:23 test3.txt
-rw-r--r--. 1 root root   94 Oct  9 16:44 test.txt

上述结果中的第一列(比如-rw-r--r--)对应的第一个字符就是描述文件类型的,比如下面结果中就有"-"、d等类型的文件。第2~10个字符(比如rw-r--r--)是用来描述文件权限的(有关权限问题后面会有详细介绍)。

提示: Linux初学者在学习时需要抓住重点,建议大家先掌握d、“-”、l这三种类型。

以下是find命令中与-type参数对应的可选文件类型信息。

  -type c
              File is of type c:
​
              b      block (buffered) special
​
              c      character (unbuffered) special
​
              d      directory
​
              p      named pipe (FIFO)
​
              f      regular file
​
              l      symbolic link; this is never true if  the  -L
                     option  or  the  -follow option is in effect,
                     unless the symbolic link is broken.   If  you
                     want  to search for symbolic links when -L is
                     in effect, use -xtype.
​
              s      socket
​
              D      door (Solaris)

8.2.3 Linux文件类型详细介绍

8.2.3.1 普通文件(regular file)

执行echo命令生成一个普通文件neteagle.txt,然后执行ls -l neteagle.txt查看其属性:

[root@centos7 ~]# echo "I am netealge" >neteagle.txt
[root@centos7 ~]# ll neteagle.txt 
-rw-r--r--. 1 root root 14 Oct 10 14:29 neteagle.txt

通过ls -l命令来查看neteagle.txt文件的属性时,可以看到第一列的内容为-rw-r--r--,这里的第一个符号是“-”(英文字符减号),在Linux中,以这样的字符开头的文件就表示普通文件。

这些文件一般是用相关的应用程序或系统命令创建而成的,比如touch、cp、echo、cat、>、>>等工具命令。若是将Windows里各种扩展名的文件拿到Linux系统下查看,你会发现它们的文件类型都是普通文件,示例代码如下:

[root@centos7 ~]# mkdir neteagle
[root@centos7 ~]# cd neteagle/
[root@centos7 ~/neteagle]# touch neteagle.jpg arp.zip test.doc neteagle.ppt
[root@centos7 ~/neteagle]# ll neteagle.jpg arp.zip test.doc neteagle.ppt
-rw-r--r--. 1 root root 0 Oct 10 14:39 arp.zip
-rw-r--r--. 1 root root 0 Oct 10 14:39 neteagle.jpg
-rw-r--r--. 1 root root 0 Oct 10 14:39 neteagle.ppt
-rw-r--r--. 1 root root 0 Oct 10 14:39 test.doc

从上面的测试可以看出,Windows下doc、ppt、zip、jpg等格式的文档在Linux下都属于普通文件。Linux下各种服务的配置文件(如/etc/services、/etc/hosts等)也都是纯文本文件。

普通文件(regular file)的第一个特征就是其属性开头为"-",按照文件内容,又大略可以分为如下三种。

1)(纯)文本文件(ASCII):此类文件的文件内容可以直接读取到数据,例如,字母、数字、特殊符号等。可以用cat命令读文件,比如Linux系统里的配置文件几乎都是这种类型。

2)二进制文件(binary):Linux中得常见命令就属于这种格式。例如,cat命令就是一个二进制文件。

3)数据格式文件(data):有些程序在运行的过程中会读取某些特定格式的文件,那些特定格式的文件即称为数据文件。例如Linux在用户登录时都会将登录的数据记录在/var/log/wtmp(last命令的数据库文件)文件内,该文件是一个数据文件,可通过last命令读取出来。但如果使用cat命令读取则会读出乱码。因为它属于一种特殊格式的文件。

若要删除普通文件,则可以使用rm命令来实现。

8.2.3.2 目录文件(directory)

可执行mkdir命令生成/data目录,然后执行ls -ld命令查看目录的属性,示例代码如下:

[root@centos7 ~/neteagle]# mkdir /data
[root@centos7 ~/neteagle]# ll -d /data /etc
drwxr-xr-x.  2 root root   63 Oct  9 18:34 /data
drwxr-xr-x. 79 root root 8192 Oct 10 13:44 /etc

从上面的输出可以看到,第一列内容为drwxr-xr-x.,这种开头带有d字符的文件就表示目录,可以认为目录在Linux中是一种特殊的文件。

可以通过mkdir命令或cp命令(带-r或带-a参数)来创建目录,cp命令可以将一个目录复制为另一个目录。删除目录可使用rm -r或rmdir(删空目录才可以)命令。

下面是ls -F命令的执行结果,它会在不同文件的结尾加上特殊表示,用以区分文件。可以看出,目录的结尾是/,其他文件的结尾,有的也加上了特殊符号。

[root@centos7 ~/neteagle]# mkdir xiaodong
[root@centos7 ~/neteagle]# ls -F
arp.zip  neteagle.jpg  neteagle.ppt  test.doc  xiaodong/

8.2.3.3 符号链接(symbolic link)文件

符号链接文件也称为软链接文件,它类似于Windows下的快捷方式,它本身并没有内容,而是指向了其他实体文件。示例代码如下:

[root@centos7 ~]# cat neteagle.txt 
I am netealge
[root@centos7 ~]# ln -s neteagle.txt netealge_link.txt  #ln -s为谁创建软链接(源文件) 软链接名(名字不能事先存在)
[root@centos7 ~]# ll neteagle.txt netealge_link.txt
-rw-r--r--. 1 root root 14 Oct 10 14:29 neteagle.txt
lrwxrwxrwx. 1 root root 12 Oct 10 14:58 netealge_link.txt -> neteagle.txt
[root@centos7 ~]# cat  netealge_link.txt
I am netealge

从上面的输出可以看到,当我们查看文件的属性时,会看到有类似lrwxrwxrwx.的内容,注意第一个字符是l,这类文件类型即表示软链接文件。

软链接文件可以通过ln命令进行创建,具体命令为"ln -s 源文件名 新文件名 ",如果不使用-s参数,则表示创建硬链接文件,硬链接文件不适用于目录。

有关链接文件的知识,后文会进一步详细详解。

8.2.3.4 字符(character)/块(block)设备文件

若想查看/dev目录下特定文件的属性,则会看到类似如下的内容:

[root@centos7 ~]# ll /dev/tty /dev/sda1
brw-rw----. 1 root disk 8, 1 Oct 10 13:43 /dev/sda1
crw-rw-rw-. 1 root tty  5, 0 Oct 10 13:43 /dev/tty

其中,/dev/tty文件的第一列属性是crw-rw-rw-.,前面的第一个字符是c,其表示字符设备文件。对于字符设备,一般典型的文件就是串行端口的接口设备,如猫等串口设备。

而/dev/sda文件的第一列属性是brw-rw----.,前面第一个字符是b,其表示块设备,块设备就是存储数据供系统及程序访问的接口设备,如硬盘、光驱等都均属于块设备。

块设备和字符设备文件都是比较特殊的文件,一般都是实体设备接入到计算机后的设备,但是也可以使用mknod命令来模拟创建,并用rm命令来删除。在实际工作中,创建上述设备文件一般不需要通过命令来实现。下面创建特殊文件的知识了解一下即可。

创建一个字符设备(字符设备文件与此相同)的示例代码如下:

[root@centos7 ~/test]# mknod neteagle c 5 1
[root@centos7 ~/test]# ll neteagle
crw-r--r--. 1 root root 5, 1 Oct 10 15:19 neteagle

以下是相应的说明。

  • neteagle是创建的设备名字。
  • c表示创建的是字符设备,也可以使用b。
  • 5是该设备在major.ini中定义的标记。
  • 1是第一个子设备。

8.2.3.5 套接口(socket)文件

当启动数据库软件MySQL服务时,会产生一个mysql.sock文件。在这个文件的属性里,第一个字符是s,表示套接字文件。示例代码如下:

[root@centos7 ~]# ll /data/3306/mysql.sock
srwxrwxrwx 1 mysql mysql 0 03-18 09:36 /data/3306/mysql.sock
[root@centos7 ~]# ll /dev/log
srw-rw-rw-. 1 root root 0 Oct 10 13:43 /dev/log

.sock文件也是一类特殊的文件,这类文件通常在网络之间进行数据链接,例如,我们可以启动一个程序来监听客户端的请求,客户端可以通过套接字来进行数据通信。示例代码如下:

mysql -uroot -ppass -S /data/3306/mysql.sock

以上表示MySQL数据库客户端程序连接服务端的命令,并通过套接字文件与数据库服务器进行通信的示例。有关数据库链接的命令,等详解到数据库时再详细介绍,这里简单了解一下就行了。大家也可以使用man socket命令了解相关信息。

8.2.3.6 管道(pipe)文件

管道文件(FIFO)也是一个特殊的文件类型,主要用于解决多个程序同时访问一个文件所造成的错误,第一个字符为p。FIFO是First-In First-Out的缩写,此文件类型了解即可或者干脆略过,因为运维工作中极少涉及它。示例代码如下:

[root@centos7 ~]# ll /run/systemd/initctl/fifo
prw-------. 1 root root 0 Oct 10 13:43 /run/systemd/initctl/fifo
#提示:可以执行man fifo详细了解。

8.3 文件及目录查找命令

8.3.1 file:显示文件的类型

8.3.1.1 命令详解

【命令星级】 ★★★★☆

【功能说明】

file命令用于显示文件的类型。

【语法格式】

file [option] [file]
file [选项] [<文件或目录>]

【选项说明】

表8-4针对file命令的参数选项进行了说明。

表8-4 file命令的参数选项及说明

参数选项解释说明
-b输出信息使用精简格式,不输出文件名

8.3.1.2 使用范例

范例8-1: 通过file命令查看文件类型。

[root@centos7 ~]# file neteagle neteagle.txt netealge_link.txt
neteagle:          directory    #neteagle是目录。
neteagle.txt:      ASCII text   #neteagle.txt是ASCII文本。
netealge_link.txt: symbolic link to `neteagle.txt'
#netealge_link.txt指向neteagle.txt符号链接。

8.3.2 which:显示命令的全路径

8.3.2.1 命令详解

【命令星级】 ★★★★★

【功能说明】

which命令用于显示命令的全路径,我们常用这个命令查找命令在哪里,which命令查找的范围是PATH环境变量的路径。

【语法格式】

which [option] [programname]
which [选项] [命令名]

说明: which命令用于在PATH环境变量里查找指定的命令。

【选项说明】

表8-5针对which命令的参数选项进行了说明。

表8-5 which命令的参数选项及说明

参数选项解释说明(带※的为重点)
-a默认在PATH路径中由前往后查找命令,如果能够查找到、就停止匹配。使用-a选项将遍历所有的PATH路径,并输出所有匹配信息 ※

8.3.2.2 使用范例

范例8-2: 通过which命令查找指定命令全路径。

[root@centos7 ~]# echo $PATH    #先查看环境变量。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@centos7 ~]# type date #查看date是外部命令。
date is /usr/bin/date
[root@centos7 ~]# which date    #查看date命令路径。
/usr/bin/date
[root@centos7 ~]# type which    ##查看which是一个别名。
which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@centos7 ~]# which which   #查看which命令路径。
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
    /usr/bin/alias
    /usr/bin/which
​
[root@centos6 ~]$ type cd   #查看cd是内部命令。
cd is a shell builtin
[root@centos6 ~]$ which cd  #在Centos 6里,Bash内部命令是无法使用which。
/usr/bin/which: no cd in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
​
[root@centos7 ~]# type cd   #查看cd是内部命令。
cd is a shell builtin   
[root@centos7 ~]# which cd  #在CentOS 7里,可以使用which查看内部命令路径。
/usr/bin/cd
[root@centos7 ~]# ll -d /bin
lrwxrwxrwx. 1 root root 7 Oct  1 14:39 /bin -> usr/bin  #是因为/bin目录是/usr/bin的软链接。
[root@centos7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin     #PATH环境变量里有/usr/bin路径,所以在CentOS 7里,可以使用which查看内部命令路径。

范例8-3: 参数-a测试。

[root@centos7 ~]# which mysql   #该实验需要MySQL服务环境。
/usr/local/sbin/mysql
[root@centos7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 
[root@centos7 ~]# PATH=$PATH:/application/mysql/bin/    #添加路径到环境变量。
[root@centos7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/application/mysql/bin/
[root@centos7 ~]# which -a mysql    #所有包含mysql命令的路径都显示出来里。
/usr/local/sbin/mysql
/application/mysql/bin  #/application/mysql/bin路径是编译的mysql路径。

8.3.3 whereis:显示命令及其相关文件全路径

8.3.3.1 命令详解

【命令星级】 ★★★★☆

【功能说明】

whereis命令用于定位指定命令的可执行文件、源码文件及man帮助文件的路径。

【语法格式】

whereis [option] [filename]
whereis [选项] [文件名]

说明: whereis命令用于在PATH环境变量里查找指定的命令。

【选项说明】

表8-6针对whereis命令的参数选项进行了说明。

表8-6 whereis命令的参数选项及说明

参数选项解释说明
-b查找可执行文件
-m查找man帮助文件
-s查找源代码文件

8.3.3.2 使用范例

范例8-4: 通过whereis命令将相关的文件都查找出来。

[root@centos7 ~]# whereis svn
svn: /usr/bin/svn /usr/share/man/man1/svn.1.gz
[root@centos7 ~]# whereis -b svn    #只查找可执行文件。
svn: /usr/bin/svn
[root@centos7 ~]# whereis -m svn    #只查找man帮助文件。
svn: /usr/share/man/man1/svn.1.gz
[root@centos7 ~]# whereis -s svn    #只查找源代码文件。
svn:    #没有找到相应的文件。

提示: Linux工程师在工作中用得最多的还是查找命令所在的路径,因此which更常用。

8.3.4 locate:快速定位文件路径

8.3.4.1 命令详解

【命令星级】 ★★★★☆

【功能说明】

在Linux系统里有一个名为mlocate.db的数据库文件,这个文件包含系统文件的文件名及对应的路径信息。故而,locate命令查找文件时不用遍历磁盘,而是直接查找mlocate.db文件,这样可以快速给出结果。但这也会存在一个问题,如果是新添加的文件,那么mlocate.db文件就会没有记录,对此,在使用locate命令时可以先用updatedb命令更新一下mlocate.db数据库文件。当然,mlocate.db还会由系统自带的定时任务执行updatedb命令定期更新。

特别提示:该命令软件包在CentOS 7中默认未安装,如果需要使用此命令,则要提前安装和配置,具体命令如下:

[root@centos7 ~]# locate neteagle.txt 
-bash: locate: command not found    #默认没有安装locate命令。
[root@centos7 ~]# yum install -y mlocate    #安装命令对应的软件包。
[root@centos7 ~]# updatedb  #初始化命令查找的数据库。

【语法格式】

locate [option] [pattern]
locate [选项] [文件名]

说明: locate命令用于从数据库查找指定的命令。

【选项说明】

表8-7针对locate命令的参数选项进行了说明。

表8-7 locate命令的参数选项及说明

选项参数解释说明
-c不显示匹配的内容,只显示匹配到的行数
-i匹配时忽略大小写
-r支持基本正则表达式匹配
--regex支持扩展正则表达式匹配

8.3.4.2 使用范例

范例8-5: 通过locate命令查看数据库。

[root@centos7 ~]# ll -h /var/lib/mlocate/mlocate.db #locate查找的数据库文件。
-rw-r-----. 1 root slocate 2.0M Oct 10 19:03 /var/lib/mlocate/mlocate.db
[root@centos7 ~]# cat /etc/cron.daily/mlocate #系统自带的定时任务脚本。
#!/bin/sh
nodevs=$(awk '$1 == "nodev" && $2 != "rootfs" && $2 != "zfs" { print $2 }' < /proc/filesystems)
​
renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
[root@centos6 ~]# cat /etc/cron.daily/mlocate.cron  # 系统自带的定时任务脚本,CentOS 6的名称为mlocate.cron。
#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" && $2 != "zfs" { print $2 }')
renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"

范例8-6: 查找文件路径

[root@centos7 ~]# locate pwd    #直接跟想要查找的文件名,主要是包含pwd字符串的都能找出来。
/etc/.pwd.lock
/etc/latrace.d/headers/pwd.h
/usr/bin/pwd
/usr/bin/pwdx
/usr/include/pwd.h
/usr/lib/modules/3.10.0-1127.19.1.el7.x86_64/kernel/drivers/watchdog/hpwdt.ko.xz
/usr/lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/watchdog/hpwdt.ko.xz
/usr/lib/x86_64-redhat-linux6E/include/pwd.h
/usr/lib64/cracklib_dict.pwd
/usr/lib64/python2.7/lib-dynload/spwdmodule.so
/usr/sbin/unix_chkpwd
/usr/share/cracklib/cracklib-small.pwd
/usr/share/cracklib/pw_dict.pwd
/usr/share/man/man1/pwd.1.gz
/usr/share/man/man1/pwdx.1.gz
/usr/share/man/man8/unix_chkpwd.8.gz
/usr/share/nmap/nselib/unpwdb.lua
/usr/share/nmap/nselib/data/psexec/pwdump.lua
/usr/src/kernels/3.10.0-1127.19.1.el7.x86_64/include/config/hpwdt
/usr/src/kernels/3.10.0-1127.19.1.el7.x86_64/include/config/hpwdt/nmi
/usr/src/kernels/3.10.0-1127.19.1.el7.x86_64/include/config/hpwdt/nmi/decoding.h
/usr/src/kernels/3.10.0-957.el7.x86_64/include/config/hpwdt
/usr/src/kernels/3.10.0-957.el7.x86_64/include/config/hpwdt/nmi
/usr/src/kernels/3.10.0-957.el7.x86_64/include/config/hpwdt/nmi/decoding.h
[root@centos7 ~]# locate -c pwd #只显示匹配的行数。
24

范例8-7: 使用通配符查找文件路径。

[root@centos7 ~]# locate /etc/sh    #只要部分符合就输出。
/etc/shadow
/etc/shadow-
/etc/shells
[root@centos7 ~]# locate /etc/sh*   #还可以使用通配符。
/etc/shadow
/etc/shadow-
/etc/shells
[root@centos7 ~]# locate -c /etc/*sh*
24

8.3.5 updatedb:更新mlocate数据库

8.3.5.1 命令详解

【命令星级】 ★★★☆☆

【功能说明】

updatedb命令可以创建或更新locate命令使用的数据库。updatedb命令会被定时任务定期(每天)执行,此命令与locate在一个软件包里,在CentOS 7下需要单独安装,见locate命令的安装方法。

【语法格式】

updatedb [option]
updatedb [选项]

【选项说明】

表8-8针对updatedb命令的参数选项进行了说明。

表8-8 updatedb命令的参数选项及说明

参数选项解释说明
-U更新指定目录相关的数据库信息。默认是扫描整个系统,耗时较长,因此可以使用这个参数
-v显示命令的执行过程

8.3.5.2 使用范例

范例8-8: 查看数据库

[root@centos7 ~]# ll -h /var/lib/mlocate/mlocate.db #这就是要被更改的数据库文件。
-rw-r-----. 1 root slocate 2.0M Oct 10 19:03 /var/lib/mlocate/mlocate.db

范例8-9: 更新数据库。

[root@centos7 ~]# locate neteagle   #查看包含neteagle的文件。
/neteagle
/data/neteagle.txt
/data/neteagle2.txt
/home/neteagle
/home/neteagle1
/home/neteagle2
/home/neteagle/.bash_logout
/home/neteagle/.bash_profile
/home/neteagle/.bashrc
/home/neteagle1/.bash_logout
/home/neteagle1/.bash_profile
/home/neteagle1/.bashrc
/home/neteagle2/.bash_logout
/home/neteagle2/.bash_profile
/home/neteagle2/.bashrc
/neteagle/test
/root/neteagle
/root/neteagle.txt
/root/neteagle2.txt
/root/neteagle/arp.zip
/root/neteagle/neteagle.jpg
/root/neteagle/neteagle.ppt
/root/neteagle/test.doc
/root/neteagle/xiaodong
/root/test/neteagle
/var/spool/mail/neteagle
/var/spool/mail/neteagle1
/var/spool/mail/neteagle2
[root@centos7 ~]# touch neteagle20201010
[root@centos7 ~]# locate neteagle   #再次查看,发现新建的neteagle20201010文件没有显示。
/neteagle
/data/neteagle.txt
/data/neteagle2.txt
/home/neteagle
/home/neteagle1
/home/neteagle2
/home/neteagle/.bash_logout
/home/neteagle/.bash_profile
/home/neteagle/.bashrc
/home/neteagle1/.bash_logout
/home/neteagle1/.bash_profile
/home/neteagle1/.bashrc
/home/neteagle2/.bash_logout
/home/neteagle2/.bash_profile
/home/neteagle2/.bashrc
/neteagle/test
/root/neteagle
/root/neteagle.txt
/root/neteagle2.txt
/root/neteagle/arp.zip
/root/neteagle/neteagle.jpg
/root/neteagle/neteagle.ppt
/root/neteagle/test.doc
/root/neteagle/xiaodong
/root/test/neteagle
/var/spool/mail/neteagle
/var/spool/mail/neteagle1
/var/spool/mail/neteagle2
[root@centos7 ~]# updatedb -vU /root    #-v显示更新过程,-U指定更新路径。
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/anaconda-ks.cfg
/root/.bash_history
/root/.lesshst
/root/test
/root/hello.txt
/root/test.txt
/root/test1.txt
/root/test3.txt
/root/opt_sysctl.sh
/root/exportfs_usage.sh
/root/menu.sh
/root/test2.txt
/root/neteagle.txt
/root/.viminfo
/root/neteagle2.txt
/root/a.txt
/root/b.txt
/root/neteagle
/root/netealge_link.txt
/root/neteagle20201010
/root/neteagle/neteagle.jpg
/root/neteagle/arp.zip
/root/neteagle/test.doc
/root/neteagle/neteagle.ppt
/root/neteagle/xiaodong
/root/test/.file4.txt
/root/test/dir5
/root/test/neteagle
/root/test/dir5/sub1
/root/test/dir5/file1.txt
/root/test/dir5/file2.txt
/root/test/dir5/file6.txt
/root/test/dir5/dir2
/root/test/dir5/dir3
/root/test/dir5/dir2/dir1
/root/test/dir5/dir2/dir1/sub1
/root/test/dir5/dir2/dir1/sub1/test
/root/test/dir5/sub1/test
[root@centos7 ~]# locate neteagle   #再次查看发现neteagle20201010文件出现了。
/root/neteagle
/root/neteagle.txt
/root/neteagle2.txt
/root/neteagle20201010
/root/neteagle/arp.zip
/root/neteagle/neteagle.jpg
/root/neteagle/neteagle.ppt
/root/neteagle/test.doc
/root/neteagle/xiaodong
/root/test/neteagle
[root@centos7 ~]# ll -h /var/lib/mlocate/mlocate.db 
-rw-r-----. 1 root slocate 1.5K Oct 10 19:26 /var/lib/mlocate/mlocate.db    #时间变了。