Linux的文件权限与目录配置
来源:互联网 发布:淘宝拍摄培训 编辑:程序博客网 时间:2024/05/17 06:55
用户与用户组的区别• 文件拥有者初次接触Linux的人大概会很奇怪,Linux有这么多用户,还分什么用户组,有什么用呢?“用户与用户组”是相当健全而好用的安全防护措施。由于Linux是多用户、多任务的系统,因此可能常常会有多人同时使用主机工作,考虑到每个人的隐私权以及每个人喜好的工作环境,“文件拥有者”就相当重要了。例如,将电子邮件情书转存成文件之后,放在你自己的家目录,你总不希望被其他人看见吧?这个时候,就把该文件设置成“只有文件拥有者,就是我,才能查看与修改这个文件的内容”,那么,即使其他人知道你有这个相当“有趣”的文件,但由于该文件设置了适当的权限,所以其他人自然也就无法知道该文件的内容。• 用户组的概念那么,用户组呢?为何要设置文件还有所属的用户组?其实,用户组主要用于团队开发。举个例子来说,假如在主机上有两个团体,第一个团体名为testgroup,成员是test1、test2、test3,第二个团体名为treatgoup,成员为treat1、treat2、treat3,这两个团体互相竞争,又要交同一份报告,每组成员需要同时可以修改自己的团体内任何人建立的文件,且不能让非自己团体的其他人看到自己的文件内容。怎么办?在Linux中很简单。进行简单的文件权限设置,就能限制非自己团队(即是用户组)的其他人不能够查看内容。而且也可以让自己的团队成员可以修改我所建立的文件。同时,如果我自己还有私人隐密的文件,仍然可以设置成让自己的团队成员也看不到我的文件数据。很方便。另外,如果teacher账号是testgroup与treatgroup这两个用户组的老师,他想要同时观察两者的进度,因此需要两边的用户组都能进去观看,这个时候,可以设置teacher账号,“同时支持testgroup与treatgroup这两个用户组”,也就是说,每个人都可以有多个用户组的支持。这样说或许还不容易理解用户与用户组的关系。没关系,我们可以使用当前“家庭”的概念来进行解说。假设有一家人,家里只有三兄弟,分别是王大毛、王二毛与王三毛三个人,这个家庭是登记在王大毛名下。所以,“王大毛家有三个人,分别是王大毛、王二毛与王三毛”,而且这三个人都有自己的房间,并且共同拥有一个客厅。 由于王家三个人各自拥有自己的房间,所以,王二毛虽然可以进入王三毛的房间,但二毛不能翻三毛的抽屉。因为抽屉里可能有三毛自己私人的东西,例如情书、日记等等,这是“私人的空间”,所以当然不能让二毛随便动。 由于共同拥有客厅,所以王家三兄弟可以在客厅打开电视机,翻阅报纸,坐在沙发上面发呆等等。反正,只要是在客厅的东西,三兄弟都可以使用。因为大家都是一家人。这样说来应该知道。“王大毛家”就是所谓的“用户组”,三兄弟就是分别为三个“用户”,这三个用户是在同一个用户组里的。三个用户虽然在同一用户组内,但可以设置“权限”,让某些用户个人的信息不被用户组的所有人查询,以保有个人“私人的空间”。而设置用户组共享,则可让大家共同分享。• 其他人的概念那么,今天又有个人,叫做张小猪,他是张小猪家的人,与王家没有关系。这个时候,除非王家认识张小猪,然后开门让张小猪进来王家,否则张小猪永远没有办法进入王家,更不要说进到王三毛的房间。不过,如果张小猪通过关系认识了三毛,并且跟王三毛成为好朋友,那么张小猪就可以通过三毛进入王家。没错。那个张小猪就是所谓的“其他人,Others”。Linux文件权限Linux用户身份与用户组记录的文件在Linux系统中,默认情况下,所有系统账号与一般身份用户,还有root的相关信息,都记录在 /etc/passwd文件内。密码记录在 /etc/shadow文件中。此外,Linux所有的用户组名称都记录在 /etc/group内。这3个文件可以说是Linux系统里账号、密码、用户组信息的集中地。不要随便删除这三个文件。Linux文件属性要如何针对这些所谓的“用户”与“用户组”来设置该文件的权限呢?这个部分相当重要,尤其对于初学者来说,因为文件的权限与属性是学习Linux的一个相当重要的关卡,如果没有这部分的概念,那么将听不懂别人在讲什么。如果屏幕前面出现了“Permission deny”的时候,就表明“是权限设置错误”。既然要了解Linux的文件属性,那么有个重要的也是常用的命令就必须要先说。“ls”这个列出文件的命令。在以root的身份登入Linux之后,输入“ls -al”看看,会看到下面的内容:[root@linux ~]# ls -altotal 248drwxr-x--- 9 root root 4096 Jul 11 14:58 .drwxr-xr-x 24 root root 4096 Jul 9 17:25 ..-rw------- 1 root root 1491 Jun 25 08:53 anaconda-ks.cfg-rw------- 1 root root 13823 Jul 10 23:12 .bash_history-rw-r--r-- 1 root root 24 Dec 4 2004 .bash_logout-rw-r--r-- 1 root root 191 Dec 4 2004 .bash_profile-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc-rw-r--r-- 1 root root 100 Dec 4 2004 .cshrcdrwx------ 3 root root 4096 Jun 25 08:35 .ssh-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log-rw-r--r-- 1 root root 5976 Jun 25 08:53 install.log.syslog[ 1][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ][ 属性 ][连接][拥有者][用户组][文件容量][ 修改日期 ][ 文件名 ]ls是“list”的意思,与早期DOS的命令dir功能类似。参数“-al”则表示列出所有的文件(包含隐藏文件,就是文件名前面第一个字符为 . 的文件)。如上所示,在第一次以root身份登入Linux时,如果输入命令后,应该有上面的内容,先解释一下上面7个字段的意思,如图6-1所示。1. 第一列表示这个文件的属性:这个地方最需要注意。仔细看的话,应该可以发现这一列其实共有10个属性,如图6-3所示。更改文件权限第一个属性表示这个文件是“目录、文件或连接文件等等”:当为 [d] ,则是目录,例如上面列表的第11行。当为 [-] ,则是文件,例如上面列表的第5行。若是 [l] ,则表示为连接文件(link file)。若是 [b] ,则表示为设备文件里可供存储的接口设备。若是 [c] ,则表示为设备文件里的串行端口设备,例如键盘、鼠标。接下来的属性中,三个为一组,且均为“rwx”3个参数的组合。其中,[r] 表示可读(read)、[w] 表示可写(write)、[x] 表示可执行(excute):第一组为“拥有者的权限”,以第5行为例,该文件的拥有者可以读写,但不可执行。第二组为“同用户组的权限”。第三组为“其他非本用户组的权限”。范例:若有一个文件的属性为“-rwxr-xr--”,说明如下:[-][rwx][r-x][r--]1 234 567 8901:表示这个文件名为目录或文件(上面为文件)。234:拥有者的权限(上面为可读、可写、可执行)。567:同用户组用户权限(上面为可读可执行)。890:其他用户权限(上面为仅可读)。上面的属性情况表示一个文件、这个文件的拥有者可读、可写、可执行、但同用户组的人仅可读与执行,非同用户组的用户仅可读的意思。除此之外,需要特别注意的是x。若文件名为一个目录的时候,例如.ssh目录:drwx------ 3 root root 4096 Jun 25 08:35 .ssh可以看到这是一个目录,而且只有root可以读写与执行。但是,若为下面的样式时,请问非root的其他人是否可以进入该目录呢?drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh似乎是可以。因为有可读 [r] 存在。“错”。答案是非root账号的其他用户均不可进入 .ssh目录,为什么呢?因为x与目录的关系相当重要,如果在该目录下不能执行任何命令的话,那么自然也就无法进入了,因此,请特别注意,如果想要开放某个目录让一些人进来的话,请记住,开放该目录的x属性。至于目录的权限相关说明,我们会在下面继续介绍。另外,要更加小心的是,在Windows下面,一个文件是否具有执行的能力是通过“扩展名”来判断的,例如.exe、.bat、.com等等,但在Linux中,文件是否执行,则是通过是否具有x属性来决定的。所以,与文件名没有绝对的关系。这点要特别注意。稍后我们还会针对目录来稍作说明。1. 第2列表示连接占用的节点(i-node):这个与连接文件(link file)有关,我们在第8章会再介绍。如果是目录的话,那么就与该目录下还有多少目录有关。2. 第3列表示这个文件(或目录)的“拥有者”。3. 第4列表示拥有者的用户组。这里再次解释一下,在Linux中,ID(如root或test等账号均是所谓的ID)即是你的身份,而且还可以附属在一个或多个用户组之下,例如我们上面提到的,你有一个团体(即用户组)代号为testgroup,且这个群体里有三个人,其代号分别是test1、test2与test3,则这三个人为同一用户组,即testgroup。那么,如果以图中的文件属性(-rwxrwx---)来看,如果该文件属于test1所有,那么test2、test3也有读、写、执行的权力,因为他们都属于同一个用户组。而如果你不是属于test1、test2、test3的任何一个人,也不属于testgroup这个用户组时,那么将不具备读、写、执行这个文件的权限了。4. 第5列为这个文件的容量大小。5. 第6列为这个文件的创建日期或者是最近的修改日期,分别为月份、日期及时间。请特别注意,如果是以中文来安装Linux,那么默认的语系可能会被改为中文。而由于中文无法显示在命令行类型的终端上,所以这一列会成为乱码,这个时候,请修改一下 /etc/sysconfig/i18n文件,将里面的“LC_TIME”修改为:“LC_TIME=en”再存储离开,再登入一次,就可以得到英文字形显示的日期了。如何修改该文件呢?以root身份用vi修改。另外,也可以使用“LANG=en ls -al”之类的语法来显示。6. 第7列为这个文件的文件名,如果文件名之前多一个“.”,则表示这个文件为“隐藏文件”,例如第6行的“.bashrc_history”文件名即是隐藏文件,由于我们有下一个参数为ls -al,所以连隐藏文件都列出来,如果只输入ls,则文件名加“.”的文件就不会显示出来。更详细的ls用法,还记得怎么查询吗?使用man ls或info ls看基础用法。自我学习很重要,因为“师傅带进门,修行在个人”。自古只有天才学生,没有天才老师。这7个字段的意义是很重要的。务必清楚地知道各个字段表示的意义。尤其是第一个字段的10个权限,那是整个Linux文件权限的重点之一。下面我们来做几个简单的练习。假设test1、test2、test3同属于testgroup这个用户组:例题1:如果有下面的两个文件,请说明两个文件的拥有者与其相关的权限是什么?-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt -rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai答: 文件“test.txt”的拥有者为root,用户组为root。至于权限方面,则只有root这个账号可以存取此文件,其他人则仅能读此文件。 另一个文件“ping_tsai”的拥有者为test1,而用户组为testgroup。其中,test1可以针对此文件具有可读、可写、可执行的权力,而同用户组的test2、test3两个人与test1同样是testgroup的用户组账号,则仅可读、可执行,但不能写(即不能修改),至于非testgoup用户组的人则仅可以读,不能写,也不能执行。例题2:如果我的目录为下面的样式,请问testgroup用户组的成员与其他人(others)是否可以进入本目录?drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/答: 文件拥有者test1可以在本目录中进行任何工作。 testgroup用户组的账号,例如test2、test3也可以进入本目录进行工作,但不能在本目录下写入。 other的权限中虽然有r,但由于没有x的权限,因此others的用户,并不能进入此目录。更改所属用户组, chgrp我们已经知道文件权限对于系统的安全重要性了,也知道文件权限与用户与用户组的关系了,那么,如何修改文件的权限呢?我们可以修改多少文件权限呢?其实,一个文件的权限很多。我们先介绍几个简单的,例如:用户组、拥有者、各种身份的权限等等。• chgrp:改变文件所属用户组 。• chown:改变文件拥有者。• chmod:改变文件的属性、SUID等特性。更改9个属性, chmod改变文件的用户组很简单,直接用chgrp即可,这个命令就是change group(改变用户组)的缩写。这样就很好记了。不过,请记住,要改变成为的用户组名称,必须在 /etc/group里存在,否则就会显示错误。假设以root的身份登入FC4,那么,在你的家目录内有一个install.log文件,如何改变该文件的用户组呢?假设你已经知道在 /etc/group里已经存在一个名为users的用户组,但是,testing这个用户组名字就不存在 /etc/group中了,此时改变用户组成为users与testing,会有什么现象发生呢?[root@linux ~]# chgrp [-R] dirname/filename ...参数:-R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录都更新成为这个用户组。常常用在更改某一目录的情况。范例:[root@linux ~]# chgrp users install.log[root@linux ~]# ls -l-rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log[root@linux ~]# chgrp testing install.logchgrp: invalid group name `testing' <== 出现错误信息~找不到这个用户组名~发现了吗?文件的用户组被改成users了,但要改成testing的时候,就会发生错误。注意,出现错误信息,还是要查查错误信息的内容才好。更改文件拥有者, chown那么,如何改变一个文件的拥有者呢?很简单。既然改变用户组是change group,那么改变拥有者就是change owner(改变拥有者)。这就是chown这个命令的用途,要注意的是,用户必须是已经存在系统中的,也就是在 /etc/passwd这个文件中有记录的用户名称才可改变。chown的用途很多,还可以顺便直接修改用户组的名称。此外,如果要连目录下的所有子目录或文件同时更改文件拥有者的话,直接加上 -R的参数即可。我们来看看语法与范例:[root@linux ~]# chown [-R] 账号名称 文件或目录[root@linux ~]# chown [-R] 账号名称:用户组名称 文件或目录参数:-R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录都更新成为这个用户组。常常用在更改某一目录的情况。范例:[root@linux ~]# chown bin install.log[root@linux ~]# ls -l-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log[root@linux ~]# chown root:root install.log[root@linux ~]# ls -l-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log 我们知道如何改变文件的用户组与拥有者了,那么,什么时候要使用chown或chgrp呢?或许你会觉得奇怪吧?是的,确实有时候需要更改文件的拥有者的,最常见的例子就是在复制文件给其他人时,我们使用最简单的cp来说明好了:[root@linux ~]# cp 来源文件 目的文件 假设今天要将 .bashrc文件复制成为 .bashrc_test,且是要给bin这个人,你可以这样做:[root@linux ~]# cp .bashrc .bashrc_test[root@linux ~]# ls -al .bashrc*-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc-rw-r--r-- 1 root root 395 Jul 13 11:31 .bashrc_test怎么办?.bashrc_test还是属于root所有,如此一来,即使将文件拿给bin用户了,他仍然无法修改(看属性就知道了),所以就必须修改这个文件的拥有者与用户组。目录属性的意义文件属性的改变使用chmod命令,但是,属性的设置方法有两种,分别可以使用数字或者是符号。• 数字类型改变文件权限Linux文件的基本属性有9个,分别是owner/group/others组别的read/write/ excute属性,先复习一下刚刚上面提到的数据:-rwxrwxrwx 这9个属性是三个一组。其中,可以使用数字来表示各个属性,各属性的对照表如下:r:4w:2x:1 同一组(owner/group/others)的3个属性(r/w/x)是需要累加的,例如当属性为 [-rwxrwx---] 则是:owner = rwx = 4+2+1 = 7group = rwx = 4+2+1 = 7others= --- = 0+0+0 = 0 所以,等一下设置属性的更改时,该属性的数字就是770。更改属性的命令chmod的语法是这样的:[root@linux ~]# chmod [-R] xyz 文件或目录 参数:xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。-R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录都更新成为这个用户组。常常用在更改某一目录的情况。举例来说,如果要将 .bashrc这个文件所有的属性都打开,那么就发出命令:[root@linux ~]# ls -al .bashrc-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc[root@linux ~]# chmod 777 .bashrc[root@linux ~]# ls -al .bashrc-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc 看到了吗?属性改变了。由于一个文件有三组属性,所以可以发现上面777为三组,而由于我们将所有的属性都打开,所以数字都相加,即“r+w+x = 4+2+1 = 7”。如果要将属性变成“-rwxr-xr--”呢?那么就成为 [4+2+1][4+0+1][4+0+0]=754。所以需要发出命令chmod 754 filename。最常发生的一个问题就是,常常我们以vi编辑shell的文字文件后,其属性通常是 -rw-rw-rw-,也就是666属性,如果要将它变成可执行文件,并且不要让其他人修改此文件的话,那么就需要 -rwxr-xr-x这个755的属性,所以就要使用chmod 755 test.sh。另外,有些文件不希望被其他人看到,例如 -rwxr-----,那么就使用命令chmod 740 filename。例题3:将 .bashrc文件的属性改回原来的 -rw-r--r--。答:chmod 644 .bashrc• 符号类型改变文件权限还有一个改变属性的方法。从之前的介绍中可以发现,基本上就9个属性,分别是 (1)user (2)group (3)others三组。我们就可以通过u, g, o来表示三组的属性。此外,a表示all,即全部的三组。读写属性可以写成r, w, x。也就是可以使用下面的方式来看:chmodugoa+(加入)-(除去)=(设置)rwx文件或目录假如我们要“设置”一个文件的属性为“-rwxr-xr-x”,基本上就是: user (u):具有可读、可写、可执行的权限。 group与others (g/o):具有可读与执行的权限。所以就是:[root@linux ~]# chmod u=rwx,go=rx .bashrc # 注意。那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格。[root@linux ~]# ls -al .bashrc-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc请注意,r=rwx,og=rx这一段文字之间并没有空格隔开。那么,假如是“-rwxr-xr--”?可以使用“chmod u=rwx,g=rx,o=r filename”来设置。此外,如果不知道原先的文件属性,而只想要增加 .bashrc文件的每个人均可写入的权限,那么就可以使用:[root@linux ~]# ls -al .bashrc-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc[root@linux ~]# chmod a+w .bashrc[root@linux ~]# ls -al .bashrc-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc 而如果是要将属性去掉,而不更改其他属性呢?例如要去掉所有人的x属性,则:[root@linux ~]# chmod a-x .bashrc[root@linux ~]# ls -al .bashrc-rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc 知道 +, -, = 的不同点了吗?+ 与 - 的状态下,只要是没有指定到的项目,则该属性“不会变动”。例如,上面的例子中,由于仅以 - 去掉x,则其他两个保持当时的值不变。多多练习一下,你就会知道如何改变属性。这在某些情况下很好用。举例来说,你想要教一个人如何让一个程序可以拥有执行的权限,又不知道该文件原本的权限是什么,此时,利用chmod a+x filename,就可以让该程序拥有执行的权限了。很方便。Linux文件类型与扩展名前面介绍的属性几乎都是针对一般文件的特性,如果是针对目录,r, w, x对目录是什么意义呢?简单而言:• r(read contents in directory):表示具有读取目录结构清单的权限,所以当你具有读取 (r) 目录的权限时,就可以利用ls命令将该目录的内容列出来。• w(modify contents of directory):这个可写入的权限对目录来说是很有用的。因为它表示将具有更改该目录结构清单的权限,也就是下面这些权限: 建立新的文件与目录。 删除已经存在的文件与目录(不论该文件是属于谁的)。 将已存在的文件或目录进行重命名。 移动该目录内的文件、目录位置。所以,如果是一般身份用户,例如笔者的账号dmtsai,那么在 /home/dmtsai这个家目录内,无论是谁(包括root)建立的文件,无论该文件属于谁,无论该文件的属性是什么,dmtsai这个用户都“有权力将该文件删除”。• x(access directory):这个我们已经提过了,这个x与能否进入该目录有关(即能否使用cd命令切换到该目录)。我们来简单做个测试,下面可能会有很多你没有见过的命令,不要担心,先照着做,等到将来提到该命令时,自然就会了解了。[root@linux ~]# cd /tmp[root@linux tmp]# mkdir testing[root@linux tmp]# chmod 744 testing[root@linux tmp]# touch testing/testing[root@linux tmp]# chmod 600 testing/testing# 这个 mkdir是建立目录用的命令。是make directory的缩写。# 我们用root的身份在 /tmp下建立一个名为testing的目录,# 并且将该目录的权限变为744,该目录的拥有者为root。# 另外,touch可以用来建立一个没有内容的文件,因此,touch testing/testing# 可以建立一个空的 /tmp/testing/testing文件。[root@linux tmp]# ls -aldrwxr--r-- 2 root root 4096 Jul 14 01:05 testing# 仔细看一下,目录的权限是744,且所属用户组与用户均是root。# 接下来,我们将root的身份切换成为一般身份用户。# 笔者系统里有个dmtsai的一般身份用户账号,所以切换身份成为dmtsai [root@linux tmp]# su dmtsai# su的命令是用来“变换身份”的,我们将来会详细介绍。# 注意看,下面这一行中,发现用户变为dmtsai了,而且提示符变成 $ 了。# 也就是说,现在使用系统的人变成dmtsai了。那么dmtsai这个人对于 # /tmp/testing是属于others的权限,他可以对 /tmp/testing做什么?[dmtsai@linux tmp]$ ls -l testing <== 此时身份为dmtsaitotal 0?--------- ? ? ? ? ? testing# 可以查看里面的信息。因为dmtsai具有r的权限,不过,毕竟权限不够,# 很多数据竟然是问号(?)[dmtsai@linux tmp]$ cd testing <== 此时身份为dmtsaibash: cd: testing/: Permission denied# 发现了吗?即使我们具有r的权限,但是没有x,所以 # dmtsai无法进入 /tmp/testing。[dmtsai@linux tmp]$ exit[root@linux tmp]# chown dmtsai testing# 使用exit就可以离开su的功能了。我们将这个testing目录的拥有者设置为# dmtsai,此时dmtsai就成为owner了,这个用户又能干什么呢?[root@linux tmp]# su dmtsai[dmtsai@linux tmp]$ cd testing <== 此时身份为dmtsai[dmtsai@linux testing]$ ls -l <== 此时身份为dmtsai-rw------- 1 root root 0 Jul 14 01:13 testing# 再切换身份成为dmtsai,此时就能够进入testing了。查看一下内容。# 发现了testing文件存在。权限是只有root才能够存取~# 我们测试一下能否删除:[dmtsai@linux testing]$ rm testing <== 此时身份为dmtsairm: remove write-protected regular empty file `testing'? y# 竟然可以删除 通过上面简单的步骤,就可以清楚地知道,x在目录中与“能否进入该目录”有关,w则相当重要,因为它可以让用户删除、更新、新建文件或目录,是个很重要的参数。Linux目录配置标准FHS我们提过一个概念,就是任何设备在Linux中都是文件,不仅如此,连数据通信的接口也由专属文件负责。所以,你会了解到,Linux的文件种类很多。除了前面提到的 -, d即所谓的一般文件与目录文件之外,还有哪些种类的文件呢?文件种类在介绍属性时,提到了最前面的标志(d或 -)可以表示目录或文件,那就是不同的文件种类。Linux的文件种类主要有下面这几种:• 普通文件(regular file):就是一般我们存取的文件,由ls -al显示出来的属性中,第一个属性为 [-],例如 [-rwxrwxrwx]。另外,依照文件的内容,又大致可以分为: 纯文本文件(ASCII):这是Unix系统中最多的一种文件类型,之所以称为纯文本文件,是因为内容为我们可以直接读到的数据,例如数字、字母等等。设置文件几乎都属于这种文件类型。举例来说,使用命令“cat ~/.bashrc”就可以看到该文件的内容(cat是将文件内容读出来)。 二进制文件(binary):我们在GNU发展史中提过,系统其实仅认识且可以执行二进制文件(binary file)。Linux中的可执行文件(脚本,文本方式的批处理文件不算)就是这种格式的。举例来说,命令cat就是一个二进制文件。 数据格式的文件(data):有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件可以称为数据文件(data file)。举例来说,Linux在用户登入时,都会将登录数据记录在 /var/log/wtmp文件内,该文件是一个数据文件,它能通过last命令读出来。但使用cat时,会读出乱码。因为它是属于一种特殊格式的文件。• 目录(directory):就是目录,第一个属性为 [d],例如 [drwxrwxrwx]。• 连接文件(link):类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]。• 设备与设备文件(device):与系统外设及存储等相关的一些文件,通常都集中在 /dev目录。通常又分为两种: 块(block)设备文件:就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]。 字符(character)设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]。• 套接字(sockets):这类文件通常用在网络数据连接。我们可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型。• 管道(FIFO, pipe):FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]。那么,使用“ls -al”命令,就可以简单通过判断每一个文件的第一个属性来了解这个文件是何种类型。除了设备文件是系统中很重要的文件,最好不要随意修改之外(通常它也不会让你修改),另一个比较有趣的文件就是连接文件。如果常常将应用程序放到桌面,就应该知道在Windows下面有所谓的“快捷方式”。同样,可以将Linux 下的连接文件简单视为一个文件或目录的快捷方式。套接字与管道文件比较难理解,因为它们与进程(process)密切相关,到将来了解进程(第17章)之后,再回来查看吧。此外,也可以通过man fifo及man socket来查看系统说明。Linux文件扩展名基本上,Linux文件是没有“扩展名”的,我们知道,Linux文件能否执行,与它第一列的10个属性有关,与文件名一点关系也没有。这与Windows不同。在Windows中,能执行的文件扩展名通常是 .com、.exe、.bat等等,而在Linux中,只要属性中有x,例如 [-rwx-r-xr-x] 即表示这个文件可以执行。不过,可以执行与可执行成功是不一样的。举例来说,在root家目录下的install.log是一个纯文本文件,如果修改权限成为 -rwxrwxrwx后,这个文件能执行吗?当然不行。因为它的内容根本就没有可执行的数据。所以说,x表示这个文件具有可执行的能力,但能不能执行成功,当然就要看该文件的内容。虽然扩展名没有什么实际的帮助,不过,由于我们仍然希望可以通过扩展名来了解该文件是什么,所以,通常还是会以适当的扩展名来表示该文件是什么类型。下面有数种常用的扩展名:• *.sh:批处理文件(scripts,脚本),因为批处理文件使用shell写成,所以扩展名就编成 .sh。• *Z, *.tar, *.tar.gz, *.zip, *.tgz:经过打包的压缩文件。这是因为压缩软件分别为gunzip、tar等等的,根据不同的压缩软件而取其相关的扩展名。• *.html, *.php:网页相关文件,分别表示HTML语法与PHP语法的网页文件。.html的文件可使用网页浏览器来直接打开, .php的文件则可以通过客户端的浏览器来浏览服务器端,以得到运算后的网页结果。另外,还有程序语言如Perl的文件,其扩展名也可能取成 .pl。基本上,Linux上面的文件名只是让你了解该文件可能的用途而已,真正的执行与否仍然需要属性的规范。例如,虽然有一个文件为可执行文件,如有名的代理服务器软件squid,如果这个文件的属性被修改成无法执行,那么它就不能执行。在文件传送的过程中常发生这种问题。例如,你在网络上下载一个可执行文件,但是,偏偏在你的Linux系统中就是无法执行。那就是可能文件的属性被改变了。从网络上传送到你的Linux系统中,文件的属性确实是会被改变的。另外,在Linux中,每一个文件或目录的文件名最长可以到255个字符,加上完整路径时,最长可达4096个字符,是相当长的文件名。我们希望Linux的文件名可以一看就知道该文件的作用,所以文件名通常是很长,这对于用惯Windows而导致打字速度不快的人来说,真的是很困扰。不过,只能加强打字训练了。通过前一章的热键你也会知道,其实可以通过 [tab] 按键来确认文件名。这很好用。当然,如果已经读完了本书第3篇关于BASH的用法,那么你将会发现“变量真是相当好用”。看不懂,没关系,到第3篇谈到bash再说。Linux文件名的限制一般来说,在设置Linux下的文件名时,最好避免一些特殊字符。例如下面这些:* ? > < ; & ! [ ] | \ ' " ` ( ) { } 因为这些符号在命令行界面下是有特殊意义的。另外,文件名的开头为小数点“.”时,表示这个文件为“隐藏文件”。同时,由于命令中常常会使用 -option之类的参数,所以最好也避免将文件名的开头以 - 或 + 来命名。目录配置的内容6.3 Linux目录配置在了解了每个文件的相关种类与属性,以及如何更改文件属性的相关信息后,我们还需要知道,为什么每套Linux版本的设置文件、执行文件、每个目录内放置的内容,其实都差不多?原来是有一套标准。下面介绍这方面的内容。6.3.1 Linux目录配置标准FHS因为Linux的开发人员实在太多了,如果每个人都使用自己的目录配置方法,那么将可能会带来很多管理问题。你能想象,你进入一个企业之后,所接触到的Linux目录配置方法竟然跟你以前学的完全不同吗?很难想象。所以,后来就有所谓的文件系统层次标准(Filesystem Hierarchy Standard,FHS)出台。FHS(http://www.pathname.com/fhs/)实际上仅是规范在根目录(/)下面各个主要目录应该放什么样的文件。FHS定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc应该要放置设置文件,/bin与 /sbin则应该要放置可执行文件等等。第二层则是针对 /usr及 /var这两个目录的子目录来定义。例如 /var/log放置系统登录文件、/usr/share放置共享数据等等。由于FHS仅是定义出最上层(/)及子层(/usr, /var)的目录内容应该要放置的文件数据,因此,在其他子目录层级内,就可以随开发人员自行配置了。举例来说,FC4的网络设置数据放在 /etc/sysconfig/network-script/ 目录下,但SuSE Server 9则是将网络放在 /etc/sysconfig/network/ 目录下,目录名称是不同的。另外,在Linux中,所有的文件与目录都由根目录 / 开始。那是所有目录与文件的源头。然后再一个一个分支下来,有点像树状。因此,我们也称这种目录配置方式为:“目录树(directory tree)”。这个目录树主要特性有:• 目录树的起始点为根目录(/, root)。• 每一个目录不仅能使用本地端分区的文件系统,也可以使用网络上的文件系统。举例来说,可以利用网络文件系统(Network File System,NFS)服务器载入某特定目录等。• 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。此外,根据文件名写法的不同,也可将路径(path)定义为绝对路径(absolute)与相对路径(relative)。绝对路径为:由根目录(/)开始写起的文件名或目录名称,例如 /home/dmtsai/.bashrc;相对路径为相对于当前路径的文件名写法。例如 ./home/dmtsai或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法。必须要了解,相对路径是以“当前所在路径的相对位置”来表示的。举例来说,当前在 /home目录下,如果想要进入 /var/log目录时,怎么写呢?• cd /var/log(absolute)• cd ../var/log(relative)因为在 /home中,所以要回到上一层(../)之后,才能继续向 /var移动。特别注意这两个特殊的目录:• .:表示当前目录,也可以使用 ./ 来表示。• ..:表示上一层目录,也可以 ../ 来表示。. 与 .. 的目录概念很重要,你常常会看到cd .. 或 ./command之类的命令方式,就是表示上一层与当前所在目录的工作状态。此外,针对“文件名”与“完整文件名(由 / 开始写起的文件名)”的字符限制大小为:• 单一文件或目录的最大容许文件名为255个字符。• 包含完整路径名称及目录(/)的完整文件名为4096个字符。我们知道,/var/log/ 下面有个文件名为message,这个message文件的最大文件名可达255个字符。var与log这两个上层目录最长也分别可达255个字符。但总的来说, /var/log/messages这样完整的文件名最长则可达4096个字符。提示:root在Linux里面的意义很多。如果从“账号”的角度来看,root指“系统管理员”身份,如果以“目录”的角度来看,root指的是根目录,就是 / 。要特别注意。我们知道,FHS定义出两层目录内的规范,那么,如果到根目录查看目录数据,会显示什么呢?[root@linux ~]# ls -l /drwxr-xr-x 2 root root 4096 Jul 14 05:22 bindrwxr-xr-x 3 root root 4096 Jul 9 05:18 bootdrwxr-xr-x 9 root root 4880 Jul 11 00:45 devdrwxr-xr-x 6 root root 4096 Jun 29 01:06 disk1drwxr-xr-x 3 root root 4096 Jun 25 08:53 disk2drwxr-xr-x 83 root root 12288 Jul 14 05:23 etcdrwxr-xr-x 6 root root 4096 May 30 20:07 homedrwxr-xr-x 10 root root 4096 Jul 14 05:23 libdrwx------ 2 root root 16384 Jun 25 16:21 lost+founddrwxr-xr-x 3 root root 4096 Jun 25 19:34 mediadrwxr-xr-x 2 root root 4096 Apr 25 23:54 miscdrwxr-xr-x 2 root root 4096 May 23 12:28 mntdrwxr-xr-x 2 root root 4096 May 23 12:28 optdr-xr-xr-x 59 root root 0 Jul 10 01:25 procdrwx------ 9 root root 4096 Jul 13 11:31 rootdrwxr-xr-x 2 root root 4096 Jul 14 05:22 sbindrwxr-xr-x 2 root root 4096 Jun 25 08:23 selinuxdrwxr-xr-x 2 root root 4096 May 23 12:28 srvdrwxr-xr-x 10 root root 0 Jul 10 01:25 sysdrwxr-xr-x 10 root root 4096 Jun 25 20:24 systemdrwxrwxrwt 10 root root 4096 Jul 14 05:23 tmpdrwxr-xr-x 14 root root 4096 Jun 25 08:27 usrdrwxr-xr-x 24 root root 4096 Jun 25 20:16 var 从属性的角度来看,上面的文件名每个都是“目录名”,较为特殊的是root,由于root目录是管理员root的家目录,这个家目录很重要。所以一定要设置成较为严密的700 ( rwx------ ) 属性。如果以较为完整的树状目录来看,整个Linux的树状目录如图6-4所示。特殊目录请注意,每个目录都是依附在 / 根目录下面,所以,在安装的时候,一定要有一个 / 对应的分区才能安装的原因即在于此。这也就是我们俗称的“树状目录”。根据FHS定义出来的每个目录内应该放置的文件内容如表6-1所示。表6-1 目录内容目录应放置的文件内容/根目录root(/),一般建议在根目录下面只有目录,不要直接有文件。根目录是启动时系统第一个载入的分区,所以,所有启动过程会用到的文件应该都放在这个分区中。举例来说,/etc、/bin、/dev、/lib、/sbin这5个子目录都应该要与根目录连在一起,不可独立成为某个分区/bin, /usr/bin, /usr/local/bin除了 /bin之外,/usr/local/bin、/usr/bin也是放置“用户可执行的二进制文件的目录”。举例来说,ls、mv、rm、mkdir、rmdir、gzip、tar、cat、cp、mount等重要命令都放在这个目录中/boot这个目录的主要目的是放置Linux系统启动会用到的文件。启动会用到Linux的核心文件。这个目录下面的文件vmlinuz就是Linux的核心。非常重要。如果引导程序(loader)选择grub,那么这个目录内还有 /boot/grub子目录/dev在Linux系统上,任何设备都以文件类型存在于这个目录中。存取这个目录下面的某个文件,就等于存取某个设备。设备又分为字符设备(character device),例如键盘、鼠标等;以及块设备(block device),例如硬盘、光盘等等。在此目录下的文件会多出两个属性,分别是主设备号(major device number)与辅设备号(minor device number)。系统核心就是通过这两个号码来判断设备的。重要的文件有 /dev/null、/dev/tty[1-6]、/dev/ttyS*、/dev/lp*、/dev/hd*、/dev/sd* 等等/etc系统主要的设置文件几乎都放在这个目录内,例如人员的账号密码文件、各种服务的起始文件等等。一般来说,这个目录下的各文件属性是可以让一般用户查看的,但只有root有权修改。并且,在此目录下的文件几乎都是ASCII的纯文本文件。不过,FHS建议不要在这个目录中放置可执行文件。比较重要的文件有:/etc/inittab、/etc/init.d/、/etc/modprobe.conf、/etc/X11、/etc/fstab、/etc/sysconfig/ 等等。另外,其下重要的目录有:· /etc/init.d/:所有服务的默认启动脚本都放在这里,例如要启动或者关闭iptables的话:/etc/init.d/iptables start/etc/init.d/iptables stop· /etc/xinetd.d/:这就是所谓的超级守护程序(super daemon)管理的各项服务的设置文件目录。· /etc/X11:与X Window有关的各种设置文件都在这里,尤其是xorg.conf或XF86Config这两个X Server的设置文件/home这是系统默认的用户家目录(home directory)。在新增一般用户账号时,默认的用户家目录都会放到这里。比较重要的是,家目录有两种代号:~:表示当前这个用户的家目录,而~dmtsai:则表示dmtsai的家目录/lib, /usr/lib, /usr/local/lib系统会使用到的函数库的目录。程序在运行过程中,可能会调用一些额外的功能参数,这需要函数库的协助。这些函数库就放在此处。比较重要的是 /lib/modules目录内会放核心的相关模块/lost+found系统出现异常,产生错误时,会将一些遗失的片段放于此目录下,通常这个目录会自动出现在某个分区最顶层的目录下。例如在 /disk中加装硬盘,在这个目录下就会自动产生一个这样的目录: /disk/lost+found/mnt/media这是软盘与光盘的默认载入点;通常软盘挂在 /mnt/floppy下,而光盘挂在 /mnt/cdrom下,不过也不一定。随便找一个地方来载入也可以。另外,当前也规划出另一个 /media的目录。与 /mnt有点类似/opt这是给主机额外安装软件所放的目录。举例来说,FC4使用Fedora团体开发的软件,如果今天想要自行安装新的KDE桌面软件,可以将该软件安装在这个目录下。不过,以前的Linux系统中,我们还是习惯放在 /usr/local目录下/proc这个目录本身是一个“虚拟文件系统”。它放置的数据都在内存中,例如系统核心、形成信息、外部设备的状态及网络状态等等。因为这个目录下的数据都在内存中,所以本身不占任何硬盘空间。比较重要的文件有/proc/cpuinfo、/proc/dma、/proc/ interrupts、/proc/ioports、/proc/net/* 等等/root系统管理员(root)的家目录。之所以放在这里,是因为我们提过,系统第一个启动就载入的分区为 /,而我们希望 /root能够与 / 放在同一块分区上/sbin, /usr/sbin, /usr/local/sbin放一些系统管理员才会用到的执行命令,例如:fdisk、mke2fs、fsck、mkswap、mount等等。与 /bin不太一样的地方是,这几个目录是给root等系统管理用的。但本目录下的执行文件还是可以让一般用户用来“查看”而不能设置/srv一些服务启动之后,这些服务所需要取用的数据目录。举例来说,WWW服务器需要的网页数据就可以放在 /srv/www里/tmp这是让一般用户或者是正在执行的程序临时放置文件的地方。这个目录是任何人都能存取的,所以需要定期清理。当然,重要数据不可放在此目录/usr根据FHS规范的第二层内容,在 /usr目录下,包含系统的主要程序、图形界面所需要的文件、额外的函数库、本机自行安装的软件,以及共享的目录与文件等等。事实上,它有点像Windows操作系统中的“Program files”与“WinNT”这两个目录的结合。在此目录下的重要子目录有:· /usr/bin, /usr/sbin:一般身份用户与系统管理员可执行的文件放置目录。· /usr/include:c/c++ 等程序语言的文件头(header)与包含文件(include)放置处,当以tarball方式(*.tar.gz的方式安装软件)安装某些数据时,会使用到里头的许多包含文件。· /usr/lib:各应用软件的函数库文件放置目录。· /usr/local:本机自行安装的软件默认放置的目录。当前也适用于 /opt目录。在安装完Linux之后,基本上所有的配置都有了,但软件总是可以升级的,例如要升级代理服务,则通常软件默认的安装地方就是在 /usr/local(local是“当地”的意思),同时,安装完毕之后所得到的执行文件,为了与系统原执行文件有分别,升级后的执行文件通常放在 /usr/local/bin。建议将后来才安装的软件放在这里,便于管理· /usr/share:共享文件放置的目录,例如下面两个目录:n /usr/share/doc:放置一些系统帮助文件的地方,例如安装了grub,那么在该目录下面找一找,就可以查到lilo的帮助文件了。很方便。n /usr/share/man:manpage的文件文件目录。就是使用man的时候查询的路径。例如使用man ls命令时,就会查出 /usr/share/ man/man1/ls.1.gz帮助文件的内容。Ÿ /usr/src:Linux系统相关的程序代码放置目录,例如 /usr/ src/linux为核心源码。Ÿ /usr/X11R6:系统内的X Window System所需的执行文件几乎都放在这里/var这个目录也很重要,也是FHS规范的第二层目录内容。它主要放置系统执行过程中经常变化的文件。举例来说,例如缓存(cache)或者是随时更改的登录文件(log file)。此外,某些软件执行过程中会写入的数据库文件,例如MySQL数据库,也都写入这个目录中。很重要。它下面的重要目录有:· /var/cache:程序文件在运行过程当中的一些暂存盘。· /var/lib:程序执行的过程中,需要使用到的数据文件放置的目录。举例来说,locate数据库与MySQL及rpm等数据库系统,都写在这个目录内。· /var/log:登录文件放置的目录。很重要。例如 /var/log/ messages就是总管所有登录文件的文件。· /var/lock:某些设备具有一次性写入的特点,例如tab(磁带机),此时,为了避免被其他人干扰而破坏正在运行的操作,因此,会将该设备lock(锁)起来,以确定该设备只能被单一程序所用。· /var/run:某些程序或者是服务启动后,会将它们的PID放在这个目录下。· /var/spool:是一些队列数据存放的地方。举例来说,主机收到电子邮件后,就会放到 /var/spool/mail中,若信件暂时发不出去,就会放到 /var/spool/mqueue目录下,用户工作任务分配(cron)则是放在 /var/spool/cron中一般主机分区与目录的配置建议不可与root 分区分开的目录我们在安装FC4的章节里,提到分区的概念。在Linux的安装里,最重要的就是根目录 / 所在的分区了。我们也可以将其他的例如 /home放在不同的分区里。那么,是否有“一定”要放在root 分区内的目录呢?有,就是/etc/、/sbin/、/bin/、/dev/ 以及 /lib/ 这几个目录。为什么呢?因为Linux系统在启动时,一开始的核心加载,只会载入一个分区,那就是 /。但是,启动的时候,会用到很多命令与函数库,举例来说,要载入,就需要mount程序,而且我们也需要init程序,还需要用到很多设置文件,例如 /etc/inittab等等。而核心的模块则是放在 /lib里。当然,/dev是所有设备放置的目录,也需要在启动时使用。因此,这些目录都需要跟 / 绑在一起。这些内容先有概念即可,下面两章会介绍所谓的分区概念。建议最好独立成为单一分区的目录前面提到了最好不要跟 / 分区分离的目录。有些目录则是因为安全性与特殊功能,而希望能够独立一个分区。例如:/home、/usr、/var、/tmp等等。要知道,系统用户个人家目录在 /home里,这个目录也是可能使用最频繁的目录之一。此外,为了资源分配得较为平均,我们可能会希望针对每个人,限制其可以使用的最大硬盘配额(quota),在这个前提下,就必须将 /home独立出来,而且最好这个分区能够大一点,尤其是Linux是作为文件服务器(file server)的时候,这就更重要了。/usr则是一些程序安装的目录,也可以独立出来;还有 /var/目录,由于记录了相当多的常用数据,读取很频繁,所以是“很容易出问题的分区”。如果能够将它独立出来,那么当 /var/ 万一不小心毁损时,就不会影响到其他分区,最起码能有一定程度的安全性。特别重要的目录除了针对分区的概念来谈目录的重要性之外,有几个比较重要的目录也需要了解一下:• /etc:这个目录是系统设置文件放置位置的地方,包括系统上的账号与密码(/etc/passwd, /etc/shadow),还有启动时所要用到的各项设置值(/etc/sysconfig/*),还有各主要网络服务的设置文件,都在这个目录中。意思就是说,如果这个目录下面的文件被删除或者是死了,系统大概也就需要“花功夫”重建了。因此,一般笔者都会定期将这个目录的所有文件备份下来,反正这个目录的大小应该不会超过50MB才对,多多备份,有备无患。• /usr/local:虽然说当前已经将这个目录的重要性移动到 /opt了,但是笔者还是比较习惯将自己开发或自行额外安装的软件放在这个 /usr/local目录下。如果Linux系统是多人共享的话,那么,养成良好的操作习惯是有必要的。那么安装软件也要有好习惯,不要随意安装。统一放在 /usr/local或者是 /opt下面。• /var:上面提过一次,这里再次强调。这个目录是在管理系统运行过程中的重要中间暂存数据的,例如 /var/lib与 /var/run。此外,最终的数据例如邮件 /var/spool/mail也是放在这个目录中。另外,几乎所有服务的登录文件(可以记录谁、什么时候、由哪里登入主机、做了什么事等等信息)。都放在 /var/log这个目录,因此,这个目录也很重要。记得常常去检查 /var/log/messages这个文件是否有异常。Linux支持的文件系统我们知道了Linux的文件权限,也知道了各个文件内的数据是什么,下面再来说说目录与分区之间的关联。通常一般的大型主机都不会将所的数据放在一个磁盘中(就是只有一个“/”根目录),原因如下:• 安全性考虑:系统通常是在 /usr/ 中,个人数据则可能放在 /home中,启动数据则放在 /etc中。如果将所有数据放在一起,当系统不小心被黑客破坏,或者不小心自己删除了一个小文件,所有内容也都跟着不见了。这对我们普通用户或许无所谓,再安装一次就好了,但是对于一些大型企业可不行。因此将数据分别放于不同的磁盘中,会比较保险些。• 便利性:如果需要升级系统的话,是否需要重新格式化安装呢?有些数据例如 /home里面的数据为个人用户的数据,似乎与系统无关。所以,如果将这些数据分别放于不同的磁盘,则要升级或者进行一些系统更改时,将比较灵活。可以将系统做成这样的分区://boot/usr/home/var这是比较常见的磁盘分布情况,其中:/ 根目录可以分配约1 GB以内。/boot大概在50 MB就可以了,因为启动文件并不大。/var就至少需要1GB以上,因为mail、proxy默认的存储区都在这个目录中,除非要改变一些设置。/home与 /usr通常最大,因为所安装的数据都是在 /usr/中,而用户数据则放在 /home中,因此,通常人们都会建议将所剩下的磁盘空间平均分配给这两个目录。不过也不一定。/usr大概10G就很多了,其他的可以都给 /home,也可以保留一些剩余空间用于以后的安装与设置。什么是文件系统(filesystem)呢?当前的操作系统大多数是从硬盘读数据的,每个操作系统使用的硬盘在x86架构上的都一样,都是同样的硬盘。但是,每种操作系统都有其独特的读取文件的方法,也就是说,每种操作系统对硬盘读取的方法不同,就造就了不同的文件系统。举例来说,Windows 98默认的文件系统是FAT(或FAT16),Windows 2000有所谓的NTFS文件系统,Linux的正统文件系统则为ext2(Linux second extended file system, ext2fs,Linux第二扩展文件系统)。系统能不能读取某个文件系统,与“核心功能”有关。Linux核心必须能够认识某种文件系统,才能读取该文件系统的数据内容。也就是说,必须要将所要支持的文件系统编译到核心中,才能被支持。因此,可以发现,Windows与Linux安装在同一个硬盘的不同分区时,Windows将不能取用Linux的硬盘数据,原因何在?因为Windows的核心不认识Linux的文件系统。当前Fedora Core IV默认的文件系统为ext3(Third Extended File System,第三扩展文件系统),它是Ext2的升级版,主要是增加了日志(journaling)功能,但是,ext3还是向下支持ext2等。另外,如果需要将原有的Windows系统也挂在Linux中,那么Linux同时也支持MS-DOS、VFAT、FAT、BSD等文件系统。至于Window NT的NTFS文件系统,则不一定每个Linux版本都支持,例如FC4默认就没支持。怎么看出来的呢?Linux能够支持的文件系统与核心是否将其编译进去有关,所以可以到Linux系统的:/lib/modules/`uname -r`/kernel/fs 目录下面看一看,如果有想要的文件系统,那么这个核心就支持。很多Linux所需要的功能都可以在ext2上完成,不过ext2缺乏日志管理系统,如果发生问题时,修复过程会慢一些。最近发布的Linux版本大多已经默认采用ext3或reiserfs这种具有日志式管理的文件系统了。什么是日志式文件系统呢?或者,ext3与ext2有什么不同?ext3其实只是多做了一个日志式数据的记录。要将数据写入硬盘时,ext2是直接将数据写入,但ext3则会将这个“要开始写入”的信息写入日志式记录区,然后才开始写入数据。在数据写入完毕后,又将“完成写入动作”的信息写入日志式记录区,这有什么好处呢?最大的好处就是数据的完整性与“恢复力”。什么是“恢复力”呢?早期的ext2文件系统如果遇到断电,文件系统就要检查文件一致性。这个检查过程要将整个分区内的文件进行完整的比较,很慢,时间很久。如果是ext3,那么只要通过检查“日志记录区”就可以知道,断电时有哪些文件正在进行写入,只要检查这些地方即可。这样就能够节省很多文件检查的时间。所以我们要选择ext3。Red Hat公司首席核心开发人员Michael K. Johnson说:“为什么要从ext 2转换到ext3呢?有4个主要的理由:可利用性、数据完整性、速度及易于转换”。“可利用性”,他指出,这意味着从系统中止到快速重新复原,而不是持续让e2fsck执行长时间的修复。ext3的日志式条件可以避免数据毁损的可能。他也指出:“除了写入若干数据超过一次的情况,ext3往往会比ext2更快,因为ext3的日志使硬盘读取头的移动能更有效地进行”。然而,或许决定因素还是在Johnson先生的第4个理由中。“我们可以轻松地从ext2更改到ext3,获得强有力的日志式文件系统,而不需要重新做格式化”。这是正确的,为了体验ext3的好处,不需要去做长时间的、冗长乏味的且易于产生错误的备份工作及重新格式化的动作。这些信息可在Whitepaper: Red Hat's New Journaling File System: ext3(http:// www.redhat.com/support/wpapers/redhat/ext3/)查得。使用ext3或其他日志式文件系统是有好处的,最大的好处当然是错误问题的排除效率比较高。无论如何,只要先知道这些即可:ext2是Linux正规的文件系统,近年来的ext3等日志式文件系统有取代它的趋势。• Linux的VFS(Virtual Filesystem Switch):了解了文件系统之后,下面要提到,Linux的核心如何管理这些文件系统呢?其实,整个Linux系统都通过虚拟文件系统交换(Virtual Filesystem Switch)的核心功能去读取文件系统。也就是说,整个Linux认识的文件系统其实都是VFS在管理,用户并不需要知道每个分区上的文件系统是什么。VFS会主动帮我们做好读取操作。
0 0
- Linux 的文件权限与目录配置
- linux的文件权限与目录配置
- Linux的文件权限与目录配置
- Linux的文件权限与目录配置
- Linux的文件权限与目录配置
- Linux的文件权限与目录配置
- Linux 的文件权限与目录配置
- Linux 的文件权限与目录配置
- Linux的文件权限与目录配置
- Linux的文件权限与目录配置
- Linux的文件权限与目录配置
- Linux的文件权限与目录配置
- Linux的文件权限与目录配置
- linux的文件权限与目录配置
- Linux的文件权限与目录配置
- 【鸟哥Linux】Linux的文件权限与目录配置
- 6 Linux 的文件权限与目录配置
- 第六章 Linux的文件权限与目录配置
- msf生成payload过滤
- ThinkPHP连接mongo的奇异现象
- 二叉树中序遍历的非递归方法
- 第八周项目三(1):分数类中的运算符重载
- Linux Shell脚本面试25问
- Linux的文件权限与目录配置
- leetcode 5. 两个链表逐个元素相加 Add Two Numbers
- CUDA学习笔记(二)——CUDA扩展
- 第八周项目一实现复数类中的运算符重载(1)
- WebRTC代码走读(四):音频发送流程
- Docker简介及其应用领域
- SpringMVC 类型转换错误自定义返回
- List中的find的两种用法
- android生命周期内函数调用情况