一、Linux文件种类与扩展名
1,文件种类:
任何设备在Linux下面都是文件,不仅如此,连数据沟通的接口也有专属的文件在负责~所以,你会了解到,Linux的文件种类真的很多,使用“ls -l”观察到第一栏那十个字符中,第一个字符为文件的类型。除了常见 的一般文件(-)与目录文件(d)之外,还有如下种类的文件。
- 正规文件(regular file): 就是一般我们在进行存取的类型的文件,在由ls -al所显示出 来的属性方面,第一个字符为[-],例如[-rwxrwxrwx]。另外,依照文件的内容,又大略可以分为:
- 纯文本文件(ASCII):这是Linux系统中最多的一种文件类型啰,称为纯文本文件是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。几乎只要我们 可以用来做为设置的文件都属于这一种文件类型。举例来说,你可以下达“cat ~/.bashrc”就可以看到该文件的内容。(cat是将一个文件内容读出来的指令)
- 二进制档(binary):我们的系统其实仅认识且可以执行二进制文件(binary file),你 的Linux当中的可可执行文件(scripts,文字体批处理文件不算)就是这种格式的啦~ 举例来说,刚刚下达的指令cat就是一个binary file。
- 数据格式文件(data):有些程序在运行的过程当中会读取某些特定格式的文件, 那些特定格式的文件可以被称为数据文件(data file)。举例来说,我们的Linux在 使用者登陆时,都会将登录的数据记录在/var/log/wtmp那个文件内,该文件是一个 data file,他能够通过last这个指令读出来!但是使用cat时,会读出乱码~因为他是属于一种特殊格式的文件。瞭乎?
- 目录(directory): 就是目录啰~第一个属性为[d],例如[drwxrwxrwx]。
- 链接文件(link): 就是类似Windows系统下面的捷径啦!第一个属性为[l](英文L的 小写),例如[lrwxrwxrwx];
- 设备与设备文件(device):与系统周边及储存等相关的一些文件,通常都集中在/dev 这个目录之下!通常又分为两种:
- 区块(block)设备文件:就是一些储存数据,以提供系统随机存取的周边设备,举例来说,硬盘与软盘等就是啦!你可以随机的在硬盘的不同区块读写,这种设备就 是区块设备啰!你可以自行查一下/dev/sda看看,会发现第一个属性为[b]喔!
- 字符(character)设备文件:亦即是一些序列埠的周边设备,例如键盘、鼠标等 等!这些设备的特色就是“一次性读取”的,不能够截断输出。举例来说,你不可能 让鼠标“跳到”另一个画面,而是“连续性滑动”到另一个地方啊!第一个属性为[c]。
- 数据接口文件(sockets): 既然被称为数据接口文件,想当然尔,这种类型的文件通 常被用在网络上的数据承接了。我们可以启动一个程序来监听用户端的要求,而用户端 就可以通过这个socket来进行数据的沟通了。第一个属性为[s],最常在/run或/tmp这些 个目录中看到这种文件类型了。
- 数据输送档(FIFO, pipe):FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。FIFO是first-in-first-out的缩写。第一个属性为 [p]。
2,Linux文件扩展名:
- *.sh:脚本或批处理文件(scripts),因为批处理文件为使用shell写成的,所以扩展名就编成.sh啰;
- Z, .tar, .tar.gz, .zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名啰!
- .html, .php:网页相关文件,分别代表HTML语法与PHP语法的网页文件啰!.html的 文件可使用网页浏览器来直接打开,至于.php的文件,则可以通过client端的浏览器来 server端浏览,以得到运算后的网页结果呢!
3,Linux文件名长度限制:
一般而言,单一文件或目录的最大容许文件名为255Bytes,以一个ASCII英文占用一个Bytes来 说,则大约可达255个字符长度。若是以每个中文字占用2Bytes来说,最大文件名就 是大约在128个中文字之内!
4,Linux文件名称的限制:
由于Linux在命令行下的一些指令操作关系,一般来说,你在设置Linux下面的文件名称时, 最好可以避免一些特殊字符比较好!例如下面这些:
? > < ; & ! [ ] | ' " ` ( ) { }
因为这些符号在命令行下,是有特殊意义的!另外,文件名称的开头为小数点“.”时,代表这 个文件为“隐藏文件”喔!同时,由于指令下达当中,常常会使用到 -option之类的选项,所以你最好也避免将文件文件名的开头以-或+来命名啊!
二、目录相关操作的命令
1,变换目录命令cd (全称change directory)
//常用实例:
[dmtsai@study ~]$ su - # 先切换身份成为 root 看看!
[root@study ~]# cd [相对路径或绝对路径]
# 最重要的就是目录的绝对路径与相对路径,还有一些特殊目录的符号啰!
[root@study ~]# cd ~dmtsai
# 代表去到 dmtsai 这个使用者的主文件夹,亦即 /home/dmtsai
[root@study dmtsai]# cd ~
# 表示回到自己的主文件夹,亦即是 /root 这个目录
[root@study ~]# cd
#没有加上任何路径,也还是代表回到自己主文件夹的意思喔!
[root@study ~]# cd ..
#表示去到目前的上层目录,亦即是 /root 的上层目录的意思;
[root@study /]# cd
# 表示回到刚刚的那个目录,也就是 /root 啰~
[root@study ~]# cd /var/spool/mail
# 这个就是绝对路径的写法!直接指定要去的完整路径名称!
[root@study mail]# cd ../postfix
#这个是相对路径的写法,我们由/var/spool/mail 去到/var/spool/postfix 就这样写!
//特殊目录的使用介绍:
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表“目前使用者身份”所在的主文件夹
~account 代表 account 这个使用者的主文件夹(account是个帐号名称)
2,pwd (显示目前所在的目录)(全称是Print Working Directory)
[root@study ~]# pwd [-P]
选项与参数:
-P :显示出确实的路径,而非使用链接(link)路径。
范例:单纯显示出目前的工作目录:
[root@study ~]# pwd
/root <== 显示出目录啦~
3,mkdir (创建新目录)(全称make directory)
[root@study ~]# mkdir [-mp] 目录名称
选项与参数:
-m :设置文件的权限喔!直接设置,不需要看默认权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上层目录)递回创建起来!
范例:请到/tmp下面尝试创建数个新目录看看:
[root@study ~]# cd /tmp
[root@study tmp]# mkdir test <==创建一名为test的新目录 [root@study tmp]# mkdir test1/test2/test3/test4
mkdir:cannot create directory ‘test1/test2/test3/test4’:No such file or directory
#话说,系统告诉我们,没可能创建这个目录啊!就是没有目录才要创建的!见鬼嘛?
[root@study tmp]# mkdir -p test1/test2/test3/test4
#原来是要建test4上层没先建test3之故!加了这个-p的选项,可以自行帮你创建多层目录!
范例:创建权限为rwx--x--x的目录
[root@study tmp]# mkdir -m 711 test2
[root@study tmp]# ls -ld test*
drwxr-xr-x. 2 root root 6 Jun 4 19:03 test
drwxr-xr-x. 3 root root 18 Jun 4 19:04 test1
drwx--x--x. 2 root root 6 Jun 4 19:05 test2
#仔细看上面的权限部分,如果没有加上 -m 来强制设置属性,系统会使用默认属性。
#那么你的默认属性为何?这要通过上述介绍的[umask]来查看喔。
4,rmdir (删除“空”的目录)
[root@study ~]# rmdir [-p] 目录名称
选项与参数:
-p :连同“上层”“空的”目录也一起删除
范例:将于mkdir范例中创建的目录(/tmp下面)删除掉!
[root@study tmp]# ls -ld test* <==看看有多少目录存在?
drwxr-xr-x. 2 root root 6 Jun 4 19:03 test
drwxr-xr-x. 3 root root 18 Jun 4 19:04 test1
drwx--x--x. 2 root root 6 Jun 4 19:05 test2
[root@study tmp]# rmdir test <==可直接删除掉,没问题
[root@study tmp]# rmdir test1 <==因为尚有内容,所以无法删除!
rmdir: failed to remove ‘test1’: Directory not empty
[root@study tmp]# rmdir -p test1/test2/test3/test4
[root@study tmp]# ls -ld test* <==您看看,下面的输出中test与test1不见了!
drwx--x--x. 2 root root 6 Jun 4 19:05 test2
#瞧!利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除~
# 不过要注意的是,这个 rmdir 仅能“删除空的目录”喔!
rmdir的使用条件,使用rmdir时目录需要一层一层的删除才行!而且被删除的目录里面必定不能存在其他的目录或文件!这也是所谓的空的目录(empty directory)的意思。如果要将所有目录下的东西都杀掉,就需要使用rm了,请看下面:
5,rm(移除文件或目录)(全称remove)
[root@study ~]# rm [-fir] 文件或目录
选项与参数:
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!
范例一:将 bashrc 删除掉!
[root@study ~]# cd /tmp
[root@study tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y
# 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的文件名!
范例二:通过万用字符*的帮忙,将/tmp下面开头为bashrc的文件名通通删除:
[root@study tmp]# rm -i bashrc*
# 注意那个星号,代表的是 0到无穷多个任意字符喔!很好用的东西!
范例三:将所创建的/tmp/etc/这个目录删除掉!
[root@study tmp]# rmdir /tmp/etc
rmdir: failed to remove '/tmp/etc': Directory not empty <== 删不掉啊!因为这不是空的目录!
[root@study tmp]# rm -r /tmp/etc
rm: descend into directory `/tmp/etc'? y
rm: remove regular file `/tmp/etc/fstab'? y
rm: remove regular empty file `/tmp/etc/crypttab'? ^C <== 按下 [crtl]+c 中断 .....(中间省略)..... # 因为身份是 root ,默认已经加入了 -i 的选项,所以你要一直按 y 才会删除! # 如果不想要继续按 y ,可以按下“ [ctrl]-c ”来结束 rm 的工作。 # 这是一种保护的动作,如果确定要删除掉此目录而不要询问,可以这样做:
[root@study tmp]#
m -r /tmp/etc
# 在指令前加上反斜线,可以忽略掉 alias 的指定选项喔!至于 alias 我们在bash再谈!
# 拜托!这个范例很可怕!你不要删错了!删除 /etc 系统是会挂掉的!
范例四:删除一个带有 - 开头的文件
[root@study tmp]# touch ./-aaa- <==[touch](../Text/index.html#touch)这个指令可以创建空文件!
[root@study tmp]# ls -l
-rw-r--r--. 1 root root 0 Jun 11 19:22 -aaa- <==文件大小为0,所以是空文件
[root@study tmp]# rm -aaa-
rm: invalid option -- 'a' <== 因为 "-" 是选项嘛!所以系统误判了!
Try 'rm ./-aaa-' to remove the file `-aaa-'. <== 新的 bash有给建议的
Try 'rm --help' for more information.
[root@study tmp]# rm ./-aaa-
6,ls (文件与目录的检视)
[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称..
[root@study ~]# ls [--color={never,auto,always}] 文件名或目录名称..
[root@study ~]# ls [--full-time] 文件名或目录名称..
选项与参数:
-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-A :全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录
-d :仅列出目录本身,而不是列出目录内的文件数据(常用)
-f :直接列出结果,而不进行排序 (ls 默认会以文件名排序!)
-F :根据文件、目录等信息,给予附加数据结构,例如:
*:代表可可执行文件;/:代表目录; =:代表socket文件;|:代表FIFO文件;
-h :将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 号码,inode 的意义下一章将会介绍;
-l :长数据串行出,包含文件的属性与权限等等数据;(常用)
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
-r :将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
-S :以文件大小大小排序,而不是用文件名排序;
-t :依时间排序,而不是用文件名。
--color=never :不要依据文件特性给予颜色显示;
--color=always :显示颜色
--color=auto :让系统自行依据设置来判断是否给予颜色
--full-time :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime)而非内容变更时间 (modification time)
7,cp(复制文件或者目录)
[root@study ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination) [root@study ~]# cp [options] source1 source2 source3 .... directory
选项与参数:
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式链接(hard link)的链接文件创建,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递回持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即“捷径”文件;
-u :destination比source 旧才更新destination,或 destination 不存在的情况下才复制。
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。 最后需要注意的,如果来源文件有两个以上,则最后一个目的文件一定要是“目录”才行!
8,mv(移动文件与目录,或更名)
[root@study ~]# mv [-fiu] source destination
[root@study ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新 (update)
范例一:复制一文件,创建一目录,将文件移动到目录中
[root@study ~]# cd /tmp
[root@study tmp]# cp ~/.bashrc bashrc
[root@study tmp]# mkdir mvtest
[root@study tmp]# mv bashrc mvtest
# 将某个文件移动到某个目录去,就是这样做!
范例二:将刚刚的目录名称更名为 mvtest2
[root@study tmp]# mv mvtest mvtest2 <== 这样就更名了!简单~ # 其实在 Linux下面还有个有趣的指令,名称为 rename,该指令专职进行多个文件名的同时更名,并非针对单一文件名变更,与mv不同。请man rename。
范例三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中
[root@study tmp]# cp ~/.bashrc bashrc1
[root@study tmp]# cp ~/.bashrc bashrc2
[root@study tmp]# mv bashrc1 bashrc2 mvtest2
# 注意到这边,如果有多个来源文件或目录,则最后一个目标文件一定是“目录!”
# 意思是说,将所有的数据移动到该目录的意思!
三、文件内容查阅相关命令
- cat由第一行开始显示文件内容
- tac从最后一行开始显示,可以看出tac是cat的倒着写!
- nl显示的时候,顺道输出行号!
- more一页一页的显示文件内容
- less与more类似,但是比more更好的是,他可以往前翻页!
- head只看头几行
- tail只看尾巴几行
- od以二进制的方式读取文件内容!
1、直接查阅一个文件内容可以使用cat/tac/nl这几个指令
- cat
[root@study ~]# cat [-AbEnTv]
选项与参数:
-A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字符 $ 显示出来;
-n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符
范例一:检阅 /etc/issue 这个文件的内容
[root@study ~]# cat /etc/issue
S
Kernel
on an m
范例二:承上题,如果还要加印行号呢?
[root@study ~]# cat -n /etc/issue
1 S
2 Kernel
on an m
3
# 所以这个文件有三行!看到了吧!可以印出行号呢!这对于大文件要找某个特定的行时,有点用处! # 如果不想要编排空白行的行号,可以使用“cat -b /etc/issue”,自己测试看看:
范例三:将 /etc/man_db.conf 的内容完整的显示出来(包含特殊字符)
[root@study ~]# cat -A /etc/man_db.conf
# $
....(中间省略)....
MANPATH_MAP^I/bin^I^I^I/usr/share/man$
MANPATH_MAP^I/usr/bin^I^I/usr/share/man$
MANPATH_MAP^I/sbin^I^I^I/usr/share/man$
MANPATH_MAP^I/usr/sbin^I^I/usr/share/man$
.....(下面省略).....
- tac(反向显示)
[root@study ~]# tac /etc/issue
Kernel
on an m
S
# 嘿嘿!与刚刚上面的范例一比较,是由最后一行先显示喔!
- nl(添加行号打印)
[root@study ~]# nl [-bnw] 文件
选项与参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己字段的最右方显示,且不加 0 ;
-n rz :行号在自己字段的最右方显示,且加 0 ;
-w :行号字段的占用的字符数。
2、可翻页检视(more/less)
前面提到的nl与cat与tac等等,都是一次性的将数据一口气显示到屏幕上面,然而more与less让我们可以一页一页的观察,才不会前面的数据看不到。
- more(一页一页翻动)
空白键 (space):代表向下翻一页;
Enter :代表向下翻“一行”;
/字串 :代表在这个显示的内容当中,向下搜寻“字串”这个关键字;
:f :立刻显示出文件名以及目前显示的行数;
q :代表立刻离开 more ,不再显示该文件内容。
b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
- less(一页一页翻动)
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻“字串”的功能;
?字串 :向上搜寻“字串”的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
g :前进到这个数据的第一行去;
G :前进到这个数据的最后一行去 (注意大小写);
q :离开 less 这个程序;
3、数据撷取
- head(取出前面几行)
[root@study ~]# head [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思
[root@study ~]# head /etc/man_db.conf
# 默认的情况中,显示前面十行!若要显示前 20 行,就得要这样:
[root@study ~]# head -n 20 /etc/man_db.conf
范例:如果后面100行的数据都不打印,只打印/etc/man_db.conf的前面几行,该如何是好?
[root@study ~]# head -n -100 /etc/man_db.conf
- tail(取出后面几行)
[root@study ~]# tail [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的文件名,要等到按下[ctrl]-c才会结束tail的侦测
[root@study ~]# tail /etc/man_db.conf
# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@study ~]# tail -n 20 /etc/man_db.conf
范例一:如果不知道/etc/man_db.conf有几行,却只想列出100行以后的数据时?
[root@study ~]# tail -n +100 /etc/man_db.conf
范例二:持续侦测/var/log/messages的内容
[root@study ~]# tail -f /var/log/messages
<==要等到输入[crtl]-c之后才会离开tail这个指令的侦测!
4、非纯文本文件:od
5、修改文件时间或创建新文件:touch
我们在ls这个指令的介绍时,有稍微提到每个文件在linux下面都会记录许多的时间参数,其 实是有三个主要的变动时间,那么三个时间的意义是什么呢?
- modification time(mtime):当该文件的“内容数据”变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!
- status time(ctime):当该文件的“状态(status)”改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间啊。
- access time(atime):当“该文件的内容被取用”时,就会更新这个读取时间 (access)。举例来说,我们使用cat去读取/etc/man_db.conf,就会更新该文件的 atime了。
这是个挺有趣的现象,举例来说,我们来看一看你自己的/etc/man_db.conf这个文件的时间吧
[root@study ~]# touch [-acdmt] 文件
选项与参数:
-a :仅修订 access time;
-c :仅修改文件的时间,若该文件不存在则不创建新文件;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
touch命令的作用总结为:
- 创建一个空的文件;
- 将某个文件日期修订为目前(mtime与atime)
6、观察文件类型:file
如果你想要知道某个文件的基本数据,例如是属于ASCII或者是data文件,或者是binary ,且其中有没有使用到动态函数库(share library)等等的信息,就可以利用file这个指令来检阅喔!举例来说:
通过这个指令,我们可以简单的先判断这个文件的格式为何喔!包括未来你也可以用来判断 使用tar包裹时,该tarball文件是使用哪一种压缩功能哩!
4、指令与文件的搜寻
1、指令文件名的搜寻
我们知道在终端机模式当中,连续输入两次[tab]按键就能够知道使用者有多少指令可以下达。那你知不知道这些指令的完整文件名放在哪里?举例来说,ls这个常用的指令放在哪里 呢?就通过which或type来找寻吧!
- which(寻找“可执行文件”)
[root@study ~]# which [-a] command
选项或参数:
-a :将所有由PATH目录中可以找到的指令均列出,而不止第一个被找到的指令名称
范例一:搜寻 ifconfig 这个指令的完整文件名
[root@study ~]# which ifconfig
/sbin/ifconfig
范例二:用which去找出which的文件名为何?
[root@study ~]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tild' /bin/alias
/usr/bin/which
#竟然会有两个which,其中一个是alias这玩意儿呢!那是啥?
#那就是所谓的“命令别名”,意思是输入which会等于后面接的那串指令啦!
范例三:请找出 history 这个指令的完整文件名
[root@study ~]# which history
/usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/sbin:/bin: /usr/sbin:/usr/bin:/root/bin)
[root@study ~]# history --help
-bash: history: --: invalid option history: usage: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg
#瞎密?怎么可能没有history,我明明就能够用root执行history的啊!
这个指令是根据“PATH”这个环境变量所规范的路径,去搜寻“可执行文件”的文件名~所以, 重点是找出“可执行文件”而已!且which后面接的是“完整文件名”喔!若加上-a选项,则可以列出所有的可以找到的同名可执行文件,而非仅显示第一个而已!
最后一个范例最有趣,怎么history这个常用的指令竟然找不到啊!为什么呢?这是因为 history是“bash内置的指令”啦!但是which默认是找PATH内所规范的目录,所以当然一定 找不到的啊(有bash就有history!)!那怎办?没关系!我们可以通过type这个指令喔!
2、文件文件名的搜寻(whereis/locate/find)
- whereis(由一些特定的目录中寻找文件文件名)
whereis主要是针对/bin/sbin下面的可执行文件,以及/usr/share/man下面的man page文 件,跟几个比较特定的目录来处理而已。所以速度当然快的多!不过,就有某些文件是你找不到的啦!想要知道whereis到底查了多少目录?可以使用whereis -l来确认一下即可!
- locate/updatedb
你会发现使用locate来寻找数据的时候 特别的快,这是因为locate寻找的数据是由“已创建的数据库 /var/lib/mlocate/”里面的数据所 搜寻到的,所以不用直接在去硬盘当中存取数据,呵呵!当然是很快速啰!
但是:数据库的创建默认是在每天执行 一次(每个distribution都不同,CentOS7.x是每天更新数据库一次!),所以当你新创建 起来的文件,却还在数据库更新之前搜寻该文件,那么locate会告诉你“找不到!”呵呵!因 为必须要更新数据库呀!
那能否手动更新数据库哪?当然可以啊!更新locate数据库的方法非常简单,直接输入“ updatedb”就可以了!updatedb指令会去读取/etc/updatedb.conf这个配置文件的设置,然 后再去硬盘里面进行搜寻文件名的动作,最后就更新整个数据库文件啰!因为updatedb会去搜寻硬盘,所以当你执行updatedb时,可能会等待数分钟的时间喔!
updatedb:根据/etc/updatedb.conf的设置去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate内的数据库文件;
locate:依据/var/lib/mlocate内的数据库记载,找出使用者输入的关键字文件名。
- find