3、文件系统与目录树
在dos-windows体系中,每个磁盘或硬盘分区有独立的根目录,并且用唯一的驱动器标识符表示,如A:,C:等。
而Linux的文件系统则不一样,它采用了一种虚拟文件系统技术,使不同的磁盘和分区组合成一个整体。单个磁盘或硬盘分区构成单独的文件系统(可以是fat、NTFS等等格式的),有其各自的目录树结构。但是,在操作系统能够使用这些文件系统之前,必须通过称为“挂装”的操作将单独的文件系统附加到虚拟文件系统的某一个子目录上——也就是说这个子目录就是实际文件系统的根,通过访问这个子目录来访问该分区或磁盘。如此操作,最终可使所有的文件系统结合成一个无缝的统一整体,组织到一个大的树型目录结构中。该目录树的顶部是一个单独的根目录,名为root,用/表示。根目录下是一些标准的子目录和文件。
在文件系统模型中,仍然体现了linux的设计哲学,即将不同的文件系统组合成一个有机的整体,进而为用户提供一致的文件系统结构。
对大多数Linux发行版本而言,文件系统的目录树布局遵循FSSTND标准,这有利于编写或移植软件,同时也有利于进行系统治理和维护。
完整的目录树可划分为小的部分,这些小部分又可以单独的存放在自己的磁盘或者分区上。这样相对稳定的部分和经常变化的部分可以单独放在不同的分区里,从而方便了备份和系统治理。目录树的主要部分有root(/)、/usr、/var、/home等等。下面是一个典型的linux目录结构如下:
/ 根目录
/bin 存放必要的命令
/boot 存放内核以及启动所需的文件等
/dev 存放设备文件
/etc 存放系统的配置文件
/home 用户文件的主目录,用户数据存放在其主目录中
/lib 存放必要的运行库
/mnt 存放临时的映射文件系统,我们常把软驱和光驱挂装在这里的floppy和cdrom子目录下。
/proc 存放存储进程和系统信息
/root 超级用户的主目录
/sbin 存放系统治理程序
/tmp 存放临时文件的目录
/usr 包含了一般不需要修改的应用程序,命令程序文件、程序库、手册和其它文档。
/var 包含系统产生的经常变化的文件,例如打印机、邮件、新闻等假脱机目录、日志文件、格式化后的手册页以及一些应用程序的数据文件等等。建议单独的放在一个分区。
典型的/usr目录如下:
/X11R6 存放X window系统
/bin 存放增加的用户程序
/dict 存放字典
/doc 存放追加的文档
/etc 存放设置文件
/games 存放游戏和教学文件
/include 存放C开发工具的头文件
/info 存放GNU信息文件
/lib 存放库文件
/local 存放本地产生的增加的应用程序
/man 存放在线帮助文件
/sbin 存放增加的治理程序
/share 存放结构独立的数据
/src 存放程序的源代码
由于/usr中的文件不和特定的计算机相关,也不会在通常使用中修改,因此可以通过网络共享这个目录(文件系统),这样,当治理员安装了新的软件之后,所有共享这一文件系统的计算机均可以使用新的软件。
4、目录操作和文件操作
在介绍文件的操作之前,我们先了解一下文件的类型。目录树包括以下文件类型:
a、普通文件:包括文档文件、数据文件、程序、shell脚本等我们常接触到的文件。
b、目录文件:目录文件包含着一个该目录下的文件和本身以及上一级的链表。这是由操作系统维护的文件。它至少包括两个记录,一个是它自身(“.”),一个是它的上一级目录(“..”)。注重,根目录的上一级目录还是它自身。
c、设备文件:和所有UNIX一样,linux把所有设备都作为一个文件来处理,包括IO设备。
d、进程通信文件:即所谓的先进先出文件,主要是为进程间通信用的。
我们一般登入系统后,当前的工作目录都是自己的主目录,想看看主目录里有什么东东?你可以使用ls命令试试。
输出就如同dir /w一样^_^。要查看隐含文件使用命令行:
ls -a
可以看见多了不少以点(“.”)开头的隐藏文件。假如还想进一步查看文件的具体信息,那就查看长格式的输出吧,使用
ls -l
当然,我们完全可以组合使用多参数,有两种方法:
ls -a -l 或者 ls -al
都可以得到该目录下所有文件的具体列表,比dos下dir的输出还具体——只不过文件的名却在右边。假如文件太多,一屏显示不下怎么办呢?ls命令并没有提供dir的/p开关的功能,不过按照UNIX系统设计的积木原则,我们可以用命令的组合获得我们需要的任何功能。象这次我们可以使用输出重定向,使用通道,对于下面这个命令,你应该不会觉得别扭吧?
la -l more
这和dos下的管道一模一样嘛:),还不只这个,连改变当前目录的cd命令,也是和dos中的用法一样,看来dos还是没有完全抛弃UNIX的影响。
cd命令的用法和dos中相似,不同的是cd和后边的目录(包括代表上一级目录的..)之间必须有空格隔开。多出几次错误信息你就会记得这一点了,呵呵。记住:
cd.. ------wrong
cd .. or cd / ------right
查看当前的路径的命令是pwd,如前所说的,它是bash的内部命令,cd也是。它存在价值在于你不用时刻面对着一个可能非常长的路径,当然你觉得有必要,也可以通过对bash的适当配置使得它的提示符类似于dos模式。
建立和删除的目录命令也很轻易从字面上理解,建立目录使用mkdir,删除空目录用rmdir。注重,你建立目录、删除目录的操作,都需要相应的权限。
要想做到dos下的deltree的功能,需要使用文件的删除命令rm的递归删除参数-r或-R。这个命令的基本格式是
rm [-option] filename
例如要删除/tmp/newtemp所有文件和子目录,可以使用如下命令:
rm -r /tmp/newtemp
这样的话,系统会一个一个文件问你是否需要删除,假如你可以确信这个目录下的所有东西都没有保留的价值的话,你可以加上一个-f的参数,表示强制删除,不再询问,如:
rm -rf /tmp/newtemp (还记得我们使用多个参数的两种方法么?)
注重,在linux中没有类似undelete的命令,不要随意使用带-f、-r、-R参数的rm命令哦:)
文件的拷贝使用cp命令,使用的格式如下:
cp [-option] soursefile targetfile
注重,和dos中的copy不同的是:
soursefile和targetfile不能相同;
cp需要使用递归选项-r来完成带文件的目录的拷贝;
cp可以使用-u开关来保留文档的最新版本。当使用-u选项时,假如目标文件存在且最后修改时间比源文件晚,则不覆盖。
我们常用的还有重命名操作命令,或者说移动文件命令,mv,格式如下:
mv [-option] source target
mv有个非常有用的选项 -b,表示给被覆盖的文件产生一个备份。
cat命令用于把所给的文件以所给顺序在标准输出上输出。格式如下:
cat [-ption] [file]
假如没有设置参数file,则把从标准输入中读入的文件从标准输出上输出。假如file以一个减号来代替,则cat仍然从标准输入上读入数据。例如:
cat - file1 - file2
这个命令表示先从标准输入读入数据,直到输入结束字符Ctrl+d,接下来从文件file1中输入,接着又从键盘输入直到输入结束字符,把这些结构都输出到file2文件中。实际上做了个在file1前后均加了一段文字然后存成了file2文件的操作。
用这个命令还可以把多个文件连接在一起。例如:
cat *.txt outall.txt
表示把所有的txt后缀的文件按照字母顺序连接起来,然后再写到outall.txt文件里。
假如[file]选项是二进制文件,而又不是把它输出到一个文件而是标准输出的话,由于终端可能要对不可打印字符进行处理,可能会出现乱码。可以使用-v选项来解决这个问题。这个选项把不可打印字符(从ASCII码的000到037的字符)用^和ASCII码从100到137的字符组合来表示。
还有三个用来显示文件的命令,它们分别是head、tail、more。
head [-option] [file] 是用来显示文件的前面一部分的。可以使用-num选项来显示前num行,也可以使用选项-c num使head输出前num个字节。其它的使用和cat相似。
tail [-option] [file] 是和head对应的显示文件后一部分的命令。选项和head命令一样。
more命令就是前面我们曾经借助它进行分页显示的命令,它也可以直接用来分页显示文本文档。命令格式和前面几个命令一样。在显示完一页后,more会提示用户输入:假如输入空格键或是f,则显示下一页;假如输出n加空格键,则用来显示后面的n 行;回车键用来显示下一行。
这几个命令都是网络治理比较常用的查看日志文件的工具,可以用man命令获得它们更具体的帮助。
还有几个显示二进制文件的命令,例如od、mn和strings,你也可以通过man获得帮助。