文件是一些数据的集合,这些数据一般是文本或机器操作码。文件驻留在物理设备上,如硬盘和CD-ROM等。
目录是文件系统中的一个单元,目录中可以存放文件和目录。文件和目录以层次结构的方式进行管理。要访问设备上的文件,必须把它的文件系统与指定的目录联系起来,这就是前面所介绍的安装文件系统。
文件系统是操作系统用来存储和管理文件的方法,在Linux中每个分区都是一个文件系统,都有自己的目录层次结构。Linux将这些分属不同分区并且相互独立的文件系统,按一定的方式组织成一个总的目录层次结构,下面通过一系列实例介绍与文件和目录管理相关的命令。
4.2.1 查看目录与文件内容认识Linux目录结构,“/”根目录下的子目录见表4-11:
表4-11,/”根目录下的子目录目录
说明
/bin
是binary的缩写,这个目录下主要存放用户经常使用的命令
/boot
这个目录主要存放着系统的内核以及启动时所需要的文件,比如Linux内核文件vmlinuz和核心解压缩所需的RAM Disk文件initrd都在这里,如果安装了grub,这里还会有grub目录
/dev
是device的缩写,这个目录下存放设备文件,比如/dev/hda代表第一块IDE硬盘。正常情况下,每种设备有一个独立的子目录,其中存放这些设备的内容
/etc
这个目录下主要存放系统管理所需的配置文件和子目录
/home
用户主目录,用户的个人数据存放在主目录中,比如有个用户ztg,他的主目录就是/home/ztg
/lib
这个目录下主要存放系统最基本的函数库,几乎所有的应用程序都要用到这些函数库
/lost found
这个目录平时是空的,当系统不正常关机后,这里保存一些文件的片段
/media
用途同mnt,比如挂载U盘等
/misc
存放不好归类的东西
/mnt
可以将别的文件系统临时挂载到这里,比如挂载Windows硬盘分区
/net
这个目录下主要存和网络相关的文件
/opt
这个目录用来安装可选的应用程序
/proc
是一个虚拟的目录,由系统运行时产生,是系统内存的映射,可以通过直接访问这个目录来获取系统信息。注意:这个目录的内容不在硬盘上而是在内存里
/root?
超级用户(也叫系统管理员或根用户)的主目录
/sbin
s就是Super User的意思,这个目录下主要存放系统管理员使用的管理程序,其他的还有/usr/sbin、/usr/local/sbin
/selinux
全称是Security Enhanced Linux,使用selinux的Linux,其安全级别可以达到B1级
/srv
存放一些服务启动之后需要服务的文件
/sys
系统的核心文件,这个目录是2.6内核的一个很大的变化,该目录下安装了2.6内核中新出现的一个系统文件Sysfs,Sysfs文件系统集成了下面三种文件系统信息:针对进程信息的proc文件系统、针对设备的devfs文件系统、针对伪终端的devpts文件系统
/tmp
存放临时文件,需要经常清理,这是除了/usr/local目录以外一般用户可以使用的一个目录,启动时系统并不自动删除这里的文件,所以需要经常清理这里的无用文件
/usr
是很重要、很庞大的目录,包含系统的主要程序、用户自行安装的程序、图形界面需要的文件、共享的目录与文件、命令程序文件、程序库、手册和其他文件等,这些文件一般不需要修改
/var
包含系统执行过程中的经常变化的文件,例如打印机、邮件、新闻等假脱机目录、日志文件、格式化后的手册页以及一些应用程序的数据文件等等。建议单独的放在一个分区
 注意:
,/”根目录下的子目录根据不同的Linux发行版会有所区别;普通用户最好将自己的文件存放在/home/user_name目录及其子目录下;大多数工具和应用程序安装在/bin、/sbin、/usr/bin、/usr/sbin、/usr/X11/bin、/usr/local/bin等;在不清楚的情况下,不要修改“/”根目录下的内容。
1.ls(list)命令语法:ls [选项] [目录或文件]
功能:对于每个目录,该命令将列出其中的所有子目录与文件。对于每个文件,ls将输出文件名及其他信息。默认情况下,输出条目按字母顺序排序。若未给出目录名或是文件名时,就显示当前目录的信息。这是用户最常用的一个命令之一,因为用户需要不时地查看某个目录的内容。使用ls命令时会有几种不同的颜色,其中蓝色表示是目录,绿色表示是可执行文件,红色表示是压缩文件,浅蓝色表示是链接文件,加粗的黑色表示符号链接,灰色表示是其他格式文件。ls命令中各选项及其功能见表4-12。
图4-18中,第2条命令的输出结果,每行列出的信息依次是:文件类型与权限,链接数,文件属主,文件属组,文件大小,建立或最近修改的时间,名字。
对于符号链接文件,显示的文件名之后有“→”和引用文件路径名。
对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。
目录中的总块数显示在长格式列表的开头,其中包含间接块。
用ls - l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是表4-13所列类型之一。
表4-13 文件类型字母
-
b
c
d
l
p
文件类型
普通文件
块设备文件
字符设备文件
目录
符号链接
命名管道
后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限,各权限见表4-14。
后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读(r)、写(w)和执行权限(x)。对于目录,表示进入权限。s表示当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组 ID)。t表示设置标志位(留在内存,不被换出)。如果该文件是目录,那么在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件,那么在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。接着显示的是文件大小、生成时间、文件或命令名称。
表4-14 访问权限字母
r
w
x
权限
读
写
执行,对于目录,表示进入权限
第2步:如图4-19所示,执行带通配符*的ls命令(第2条命令)列出root目录下所有以i开头的目录与文件;执行带选项-a的ls 命令(第3条命令)列出root目录下的所有子目录与文件,包括隐藏文件。其中“.”表示当前目录,“..”表示上一级目录,他们是两个特殊的目录。
2.file命令语法:file [选项] [文件名]
功能:通过探测文件内容判断文件类型,使用权限是所有用户。使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件,还是Shell Script文件,或者是其他的什么格式。file能识别的文件类型有目录、Shell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。需要说明的是,file命令不能探测包括图形、音频、视频等多媒体文件类型。file命令中各选项及其功能见表4-15。
3.more命令语法:more [选项] [文件名]
功能:一页一页的显示,方便用户逐页阅读,而最基本的指令就是按空白键(space)显示下一页。按【B】键就会显示上一页。按【H】键,查看帮助信息。而且还有查找字串的功能,“/字符串”查旬字符串所在处。按【Q】键,跳出more状态。more命令的各选项及其功能见表4-16。
4,less命令
语法:less [选项] [文件名]
功能:less的作用与more十分相似,也可以用来浏览文本文件的内容,less改进了more 不能回头看的问题,可以简单的使用【PageUp】键向上翻。来浏览已经看过的部分,同时因为less并未在一开始就读入整个文件,因此在遇上大型文件的开启时,会比一般的文本编辑器速度快。less命令的各选项及其功能见表4-17。
5.cat(concatenate)命令语法:cat [选项] 文件1 文件2……
功能:把文件串连接后传到基本输出(显示器或重定向到另一个文件),cat命令的各选项及其功能见表4-18。
 注意:
cat命令还有对文件的追加与合并功能,在4.2.5节对这些功能进行介绍。
6.head命令语法:head [选项] [文件名]
功能:显示文件的前几行。该命令的各选项及其功能见表4-19。
7,tail命令语法:tail [选项] [文件名]
功能:显示文件的后几行。该命令的各选项及其功能见表4-19。
实例4-9 使用cat、head和tail命令
4.2.2 文件与目录的创建、复制、删除、转移及重命名
1.mkdir命令语法:mkdir [选项] [dir-name]
功能:该命令创建由dir-name命名的目录。要求创建目录的用户在当前目录中(dir-name的父目录中)具有写权限,并且dir-name不能是当前目录中已有的目录或 文件名称。命令中各选项及其功能见表4-20。
表4-20 mkdir命令的各选项及其功能选项
功能
-m
对新建目录设置存取权限,也可以用chmod命令设置,例如:#mkdir -m 700 dir1
-p
可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
实例4-10 使用mkdir命令创建目录
2.rmdir命令语法:rmdir [选项] [dir-name]
功能:删除空目录,dir-name表示目录名。该命令从一个目录中删除一个或多个子目录项。需要特别注意的是,一个目录被删除之前必须是空的。#rm -r dir-name命令可代替rmdir,但是有危险性。删除某个目录时也必须具有对父目录的写权限。rmdir命令选项及其功能见表4-21。
表4-21 rmdir命令选项及其功能选项
功能
- p
递归删除目录dir-name,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应 的信息
实例4-11 使用rmdir命令删除目录
3.cd命令语法:cd [dir-name]
功能:改变工作目录。该命令将当前目录改变至dir-name所指定的目录。若没有指定dir-name,则回到用户的主目录。为了改变到指定目录,用户必须拥有对指定目录的执行和读权限。
4.mv命令语法:mv [选项] [源文件或目录] [目标文件或目录]
功能:该命令可以为文件或目录改名或将文件由一个目录移入另一个目录中。视mv命令中第2个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第2个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第2个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先复制,再将原有文件删除,而链至该文件的链接也将丢失。如果所给目标文件(不是目录)已存在,此时该文件的内容将被新文件覆盖。为防止用户用mv命令破坏另一个文件,使用mv命令移动文件时,最好使用i选项。命令中各选项及其功能见表4-22。
5.rm命令语法:rm [选项] [文件或目录]
功能:用户可以用rm命令删除不需要的文件。该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是断开了链接,原文件保持不变。如果没有使用-r选项,则rm不会删除目录。使用rm命令要小心。因为一旦文件被删除,它是不能被恢复的。了防止这种情况的发生,可以使用i选项来逐个确认要删除的文件。如果用户输入y,文件将被删除。如果输入任何其他东西,文件则不会删除。该命令的各选项及其功能见表4-23。
6.cp命令语法:cp [选项] [源文件或目录] [目标文件或目录]
功能:该命令的功能是将给出的文件或目录复制到另一文件或目录中,功能十分强大。需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令复制文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令复制文件时,最好使用i选项。该命令的各选项及其功能见表4-24。
4.2.3 文件内容统计命令
1.wc(word characters)命令语法:wc [选项] [文件名]
功能:统计文件中的文件行数、字数和字符数。该命令的各选项及其功能见表4-25。
表4-25 wc命令的各选项及其功能选项
功能
选项
功能
-c
统计文件的字符数
-w
统计文件的字数
-l
统计文件的行数
4.2.4 搜索命令
1.whereis命令语法:whereis [文件名]
功能:用来查找可执行程序、源程序和使用手册。该命令的各选项及其功能见表4-26。
表4-26 whereis命令的各选项及其功能选项
功能
选项
功能
-b
只查找二进制文件
-M
只在设置的目录下查找说明文件
-B
只在设置的目录下查找二进制文件
-s
只查找源代码文件
-f
不显示文件名前的路径名称
-S
只在设置的目录下查找源代码文件
-m
只查找说明文件
-u
查找不包含指定类型的文件
2.find 命令语法:find [起始目录] [查找条件] [操作] 或 find [path] [options] [expression]
功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。该命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足查找条件的文件并对之采取相关的操作。
3.locate 命令语法:[选项] [文件名]
功能:locate 也是一个查找文件的工具,locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作程序(crontab)来建立。当建立好这个数据库后,就可以方便地来查找所需文件了。locate 让用户可以很快速的查找文件系统内是否有指定的文件。其方法是先建立一个包括系统内所有文件名称及路径的资料库,之后当查找时就只需查询这个资料库,而不必实际深入文件系统之中了。在一般的发行版之中,资料库的建立都被放在 contab 中自动执行。一般用户在使用时只要用# locate [文件名]的形式就可以了。该命令的各选项及其功能见表4-29。
4.grep(Global Regular Expression Print)命令语法:grep [选项] [查找模式] [文件名1,文件名2,……]
功能:逐行搜索所指定的文件或标准输入,并显示匹配模式的每一行。grep命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式;grep命令有一组选项,利用这些选项可以改变其输出方式。例如,可以在搜索到的文本行上加入行号,或者只输出文本行的行号,或者输出所有与搜索模式不匹配的文本行,或只简单地输出已搜索到指定模式的文件名,并且可以指定在查找模式时忽略大小写。grep命令的各选项及其功能见表4-30。
表4-30 grep命令的各选项及其功能选项
功能
-b
在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量
-c
只显示匹配行的数量
-e expression
指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项
-E
每个模式作为一个扩展的正则表达式对待
-f expfile
从expfile文件中获取要搜索的模式,一个模式占一行
-F
每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式
-h
在查找多个文件时,指示grep不要将文件名加入到输出之前
-i
比较时不区分大小写,只适用于单字符
-l
查询多文件时只输出包含匹匹配串的文件名,当在某文件中多次出现匹配串时,不重复显示此文件名
-n
显示匹配行及行号(文件首行行号为1)
-s
不显示不存在或无匹配串的错误信息
-v
只显示不包含匹配串的行,找出模式失配的行
-x
只显示整行严格匹配的行
grep命令的查找模式中正则表达式的主要参数及其功能见表4-31。
表4-31 正则表达式的主要参数及其功能参数
功能
\
忽略正则表达式中特殊字符的原有含义
^
匹配行的开始,如:“^grep”匹配所有以grep开头的行
$
匹配行的结束,如:“grep$”匹配所有以grep结尾的行
\<
从匹配正则表达式的行开始,锚定单词的开始,如:“\<grep”匹配包含以grep开头的单词的行
\>
到匹配正则表达式的行结束,锚定单词的结束,如:“grep\>”匹配包含以grep结尾的单词的行
[ ]
字符范围,如:“[Gg]ood”匹配Good和good,如:“[e-g]ood”匹配eood、food和good
[^]
匹配一个不在指定范围内的字符,如:“[^a-fh-z]rep”匹配不包含a-f和h-z字母开头,紧跟grep的行
.
任意单个字符
*
匹配零个或多个字符
\b
单词锁定符,如:“\bgood\b”只匹配good
x\{m\}
重复字符x,m次,如:“x\{6\}”匹配包含6个x的行
x\{m,\}
重复字符x,至少m次,如:“x\{6,\}”匹配至少有6个x的行
x\{m,n\}
重复字符x,至少m次,不多于n次,如:“x\{6,10\}”匹配6-10个x的行
\w
匹配字母和数字字符,也就是[A-Za-z0-9],如:“G\w*d”匹配以G后跟零个或多个字母或数字字符,然后是d
\W
\w的反置形式,匹配一个或多个非字母和数字字符,如点号句号等
实例4-17 使用grep命令
例1:# grep '#' httpd.conf 搜索httpd.conf文件中包含#的行。
例2:# grep -v '#' httpd.conf 搜索httpd.conf文件中不包含#的行。
例3:# ls -l | grep '^d' 通过管道过滤ls -l输出的内容,只显示以d开头的行,也就是只显示当前目录中的目录(查询子目录)。
例4:# grep 'exam' f* 搜索当前目录中所有以f开头的文件中包含exam的行。
例5:# grep 'exam' f1 f2 f3 搜索当前目录中在f1、f2、f3文件中匹配exam的行。
例6:# grep '[a-c]\{3\}' f1 搜索当前目录中在f1文件中所有包含aaa、bbb或ccc字符串的行。
例7:# grep -n '\*' f1 搜索当前目录中在f1文件中含有*字符的行,并显示行号。
4.2.5 文件的追加、合并、比较与排序
1.cat(concatenate,连锁)命令语法:cat [选项] 文件1 文件2……
功能:把文件串连接后传到基本输出(显示器或重定向到另一个文件),cat命令还有对文件的追加与合并功能,cat命令的各选项及其功能见表4-32。
表4-32 cat命令的各选项及其功能选项
功能
-n,--number
由1开始对所有输出的行编号
-b,--number-nonblank
和-n相似,但是不对空白行编号
-s,--squeeze-blank
当遇到有连续两行以上的空白行时就替换为一个空白行
实例4-18 使用cat命令合并文件、向文件追加内容
2.echo命令语法:echo [-ne] [字符串或环境变量] 或 echo [--help][--version]
功能:在显示器上显示一段文字,一般起到一个提示的作用。
其中选项-n表示输出文字后不换行;字符串可以加引号,也可以不加引号。用echo命令输出加引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。
如果使用选项-e,那么字符串中出现表4-33中的字符时,将特别加以处理,而不会将他们作为一般的文字进行输出。
表4-33 特殊字符及其功能字符
功能
字符
功能
\a
发出警告声
\r
光标移至行首,但不换行
\b
删除前一个字符
\t
插入tab
\c
最后不加上换行符号
\v
与\f相同
\f
换行但光标仍旧停留在原来的位置
\\
插入\字符
\n
换行且光标移至行首
\nnn
插入nnn(八进制)所代表的ASCII字符
3.diff(difference)命令语法:diff [选项] file1 file2
功能:比较文件的差异,显示两文件的不同之处,diff以逐行的方式,比较文本文件的异同。若指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录,比如命令“diff /home/ztg exam.txt”把/home/ztg目录中名为exam.txt的文件与当前目录中的exam.txt文件进行比较。如果用“-”表示file1或fiie2,则表示标准输入。该命令的各选项及其功能见表4-34。
实例4-20 使用diff命令
diff命令的简单举例如图4-23所示。文件exam1.txt、exam2.txt和exam3.txt的内容如图4-34、4-35所示。

图4-37 使用diff命令通常输出由下述形式的行组成:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
字母a、d和c分别表示附加、删除和修改操作。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行号(n3,n4)是针对file2的。
在上述形式的每一行的后面跟随受到影响的若干行,以“<”打头的行属于第1个文件,以“>”打头的行属于第2个文件。
4.cmp(compare)命令
语法:cmp [-l] [-s] file1 file2
功能:显示两文件不同之处的信息。该命令的各选项及其功能见表4-35。
表4-35 cmp命令的各选项及其功能选项
功能
-l
给出两文件不同的字节数
-s
不显示两文件的不同处,给出比较结果
4.2.6 文件的链接语法:ln [options] 源文件 [链接名]
功能:为文件建立在其他路径中的访问方法(链接)。该命令的各选项及其功能见表4-36。
链接有两种:硬链接和符号链接,默认情况下,ln命令产生硬链接。
1.硬链接(Hard Link)
硬连接是指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型,都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名可以指向同一个索引节点,一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效的路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”,因为指向同一个索引节点的连接有一个以上时,删除一个连接并不影响索引节点本身和其他的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放,文件才会被真正删除。
 注意:
不能够对目录创建硬链接;只有在同一文件系统中的文件之间才能创建硬链接。
2.符号链接(Symbolic Link)
与硬连接相对应,Linux系统中还存在另一种连接,称为符号链接(Symbilc Link),也称为软链接。软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号链接中,文件实际上是一个文本文件,其中包含有另一个文件的位置信息。符号链接可以是链接任意的文件或目录,可以链接不同文件系统的文件。在对符号链接文件进行读写操作时,系统会自动把该操作转换为对源文件的操作,但是删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。