鸟哥的第一本书籍的主要内容,内容稍微与书籍不太一样了!
鸟哥的第一本书大约是在 2002 年的年底左右出版的,内容几乎都是 Linux 基础学习,一点也没有谈到服务器的部份!这也是后来的雏型! 不过内容错误的地方很多,导致在 2003 年的年底推出了『基础学习篇增订版』的内容,大致上就是处理掉一些比较有严重错误的部份。 不过,因为 Linux 的版本变化非常快速,因此,写完了这些文档之后,鸟哥还是持续在网站上更新文档内容,导致原本书籍内容的数据与网站数据差异太大! 这个问题直到鸟哥在 2008 年左右才发现!糟糕了!旧版的文档数据已经遗失~觉得相当扼腕~
因此,在底下的文档内容与当初的书籍内容虽然大同小异,不过章节的编排却是有所不同!再花时间去一个一个处理,似乎也不太符合成本效益! 鸟哥仅是想要将自己以前的文档记录下来而已,同时将过时的 big5 编码改回 utf8 编码,再加上可以支持 RWD 的样式而已啦! 内容已经不多做编排~因此,如果内容文档你看不懂,那也是应该的! ^_^
建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。最新文章请前往鸟站首页查阅啰!
初次接触 Linux 的朋友大概会觉得很怪异,怎么『Linux 有这么多用户,还分什么群组,有什么用?』。 这个『用户与群组』的功能可是相当健全而好用的一个安全防护呢!怎么说呢?由于 Linux 是个多人多任务的系统 ( 已经提过若干次啰! ),因此可能常常会有多人同时使用这部主机来进行工作的情况发生,为了考虑每个人的隐私权,因此,这个『文件拥有者』的角色就显的相当的重要了!例如当你 将你的e-mail情书转存成文件之后,放在您自己的家目录,您总不希望被其他人看见自己的情书吧?这个时候,你就把该文件设置成『只有文件拥有者,就是 我,才能看与修改这个文件的内容』,那么即使其他人知道你有这个相当『有趣』的文件,不过由于您有设置适当的权限,所以其他人自然也就无法知道该文件的内 容啰!
那么群组呢?为何要设置文件还有所属的群组?其实,群组最简单的功能之一,就是当您在团队开发资源的时候最有用啦!举个例子来说好了,假如在我的主机上面有两个团体,这第一个团体名称为 testgroup 而他的成员是 test1, test2, test3 三个,第二个团体名称为 treatgoup 他的团员为 treat1, treat2, treat3,这两个团体之间是互相有竞争性质的,但是却又要缴交同一份报告,然而每组团员又需要同时可以修改自己的团体内任何人所创建的文件,且不能让非自己团体以外的人看到自己的文件内容!这个时候怎么办?呵呵!在 Linux 底下可就很简单啦!我可以经由简易的文件权限设置,就能限制非自己团队( 亦即是群组啰 )的其他人不能够阅览内容啰!而且亦可以让自己的团队成员可以修改我所创建的文件!同时,如果我自己还有私人隐密的文档,仍然可以设置成让自己的团队成员也看不到我的文件数据,很方便吧!另外,如果 teacher 这个帐号是 testgroup 与 treatgroup 这两个群组的老师,他想要同时观察两者的进度,因此需要两边的群组都能够进去观看,这个时候,您可以设置 teacher 这个帐号,『同时支持 testgroup 与 treatgroup 这两个群组!』,也就是说,每个人都可以有多个群组的支持呢!
这样说或许你还不容易理解这个用户与群组的关系吧?没关系,我们可以使用目前『家庭』的观念来进行解说喔!假设有一家人,家里只有三兄弟,分别 是王大毛、王二毛与王三毛三个人,而这个家庭是登记在王大毛的名下的!所以,『王大毛家有三个人,分别是王大毛、王二毛与王三毛』,而且这三个人都有自己 的房间,并且共同拥有一个客厅喔!这样说来应该有点晓得了喔!那个『王大毛家』就是所谓的『群组』啰,至于三兄弟就是分别为三个『用户』,而这三个用户是在同一个群组里面的 喔!而三个用户虽然在同一群组内,但是我们可以设置『权限』,好让某些用户个人的信息不被群组的所有人查找,以保有个人『私人的空间』啦!而设置群组 共享,则可让大家共同分享喔!
- 由于王家三个人各自拥有自己的房间,所以,王二毛虽然可以进入王三毛的房间,但是二毛不能翻三毛的抽屉喔!那样会被三毛 K 的!因为抽屉里面可能有三毛自己私人的东西,例如情书啦,日记啦等等的,这是『私人的空间』,所以当然不能让二毛拿啰!
- 由于共同拥有客厅,所以王家三兄弟可以在客厅打开电视机啦、翻阅报纸啦、坐在沙发上面发呆啦等等的!反正,只要是在客厅的玩意儿,三兄弟都可以使用喔!因为大家都是一家人嘛!
好了,那么今天又有个人,叫做张小猪,他是张小猪家的人,与王家没有关系啦!这个时候,除非王家认识张小猪,然后开门让张小猪进 来王家,否则张小猪永远没有办法进入王家,更不要说进到王三毛的房间啦!不过,如果张小猪通过关系认识了三毛,并且跟王三毛成为好朋友,那么张小猪就可以 通过三毛进入王家啦!呵呵!没错!那个张小猪就是所谓的『其他人, Others 』啰!因此,我们就可以知道啦,在 Linux 里面,任何一个文件都具有『User, Group 及 Others』三个权限!我们可以将上面的说明以底下的图标来解释:
不过,这里有个特殊的人物要来介绍的,那就是『万能的天神』!这个天神具有无限的神力,所以他可以到达任何他想要去的地方,呵呵!那个人在 Linux 系统中的身份代号是『 root 』啦!所以要小心喔!那个 root 可是『万能的天神』喔!
无论如何,『用户身份』,与该用户所支持的『群组』概念,在 Linux 的世界里面是相当的重要的,他可以帮助您让您的多任务 Linux 环境变的更容易管理!更详细的 『身份与群组』 设置,我们将在帐号管理再进行解说。底下我们将针对文件系统与文件权限来进行说明。
大致了解了 Linux 的用户与群组之后,接着下来,我们要来谈一谈,那么这个文件的权限要如何针对这些所谓的『用户』与『群组』来设置该文件的权限呢?这个部分是相当的重要的,尤其对于初学者来说,因为文件的权限与属性是学习 Linux 的一个相当重要的关卡,如果没有这部份的概念,那么您将老是听不懂别人在讲什么呢!尤其是当您在您的屏幕前面出现了『Permission deny』的时候,不要担心,『肯定是权限设置错误』啦!呵呵!好了,闲话不多聊,赶快来瞧一瞧先:
嗯!既然要让你了解 Linux 的文件属性,那么有个重要的也是常用的指令就必须要先跟你说啰!那一个?!就是『 ls 』这一个 list 文件的指令啰!在你以 root 的身份登录 Linux 之后,下达『ls -al 』看看,会看到底下的几个咚咚:
[root@tsai root]# ls -al
total 64
drwxr-x--- 4 root root 4096 Feb 14 22:02 .
drwxr-xr-x 23 root root 4096 Feb 16 13:35 ..
-rw-r--r-- 1 root root 1210 Feb 10 06:03 anaconda-ks.cfg
-rw------- 1 root root 12447 Feb 14 23:22 .bash_history
-rw-r--r-- 1 root root 24 Jun 11 2000 .bash_logout
-rw-r--r-- 1 root root 234 Jul 6 2001 .bash_profile
-rw-r--r-- 1 root root 217 Feb 9 22:06 .bashrc
-rw-r--r-- 1 root root 210 Jun 11 2000 .cshrc
drwx------ 2 root root 4096 Feb 14 21:54 .gnupg
-rw------- 1 root root 8 Feb 14 22:05 .mysql_history
drwx------ 2 root root 4096 Feb 10 00:44 .ssh
-rw-r--r-- 1 root root 196 Jul 11 2000 .tcshrc
-rw-r--r-- 1 root root 1126 Aug 24 1995 .Xresources第一栏 二 三 四 五 六 七
[文件属性][文件数][拥有者][所有者群组][大小][建档日期][文件名]
ls 是『list』的意思,与在早期的 DOS 年代的 dir 类似功能。而参数『-al』则表示列出所有的文件(包含隐藏档,就是文件名前面第一个字符为 . 的那种文件)。如上所示,在你第一次以 root 身份登录 Linux 时,如果你输入指令后,应该有上列的几个东西,先解释一下上面七个字段个别的意思:
- 第一栏代表这个文件的属性:这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个属性:
- 第一个属性代表这个文件是『目录、文件或链接档』:
- 当为[ d ]则是目录,例如上表的第 11 行;
- 为[ - ]则是文件,例如上表的第 5 行;
- 若是[ l ]则表示为链接档(link file);
- 若是[ b ]则表示为设备档里面的可供保存的周边设备;
- 若是[ c ]则表示为设备档里面的串口设备,例如键盘、鼠标。
- 接下来的属性中,三个为一组,且均为『rwx』的三个参数的组合。其中,[ r ]代表可读、[ w ]代表可写、[ x ]代表可运行:
- 第一组为『拥有人的权限』,以第五行为例,该文件的拥有人可以读写,但不可运行;
- 第二组为『同群组的权限』;
- 第三组为『其他非本群组的权限』。
范例:若有一个文件的属性为『-rwxr-xr--』,简单的可由下面说明之:
[-][rwx][r-x][r--]
1 234 567 890
1 为:代表这个文件名为目录或文件(上面为文件)
234为:拥有人的权限(上面为可读、可写、可运行)
567为:同群组用户权限(上面为可读可运行)
890为:其他用户权限(上面为仅可读)
上面的属性情况代表一个文件、这个文件的拥有人可读可写可运行、但同群组的人仅可读与运行,非同群组的用户仅可读的意思!
- 除此之外,需要特别留意的是 x 这个标号!若文件名为一个目录的时候,例如上表中的 .ssh 这个目录:
可以看到这是一个目录,而且只有 root 可以读写与运行。但是若为底下的样式时,请问非 root 的其他人是否可以进入该目录呢?
drwx------ 2 root root 4096 Feb 10 00:44 .ssh
咦!似乎好像是可以喔!因为有可读[ r ]存在嘛!『错!』答案是非 root 这个帐号的其他用户均不可进入 .ssh 这个目录,为什么呢?因为 x 与 目录 的关系相当的重要,如果您在该目录底下不能运行任何指令的话,那么自然也就无法运行 ls, cd 等指令,所以啰,也就无法进入了,因此,请特别留意的是,如果您想要开放某个目录让一些人进来的话,请记得将该目录的 x 属性给开放呦!
drwxr--r-- 2 root root 4096 Feb 10 00:44 .ssh
- 另外,你也必须要更加的小心的是,在 Windows 底下一个文件是否具有运行的能力是借由『附文件名』来运行的,例如:.exe, .bat, .com 等等,但是在 Linux 底下,我们的文件是否能运行,则是借由是否具有 x 这个属性来决定的!所以,跟文件名是没有绝对的关系的!这点还请特别留意呢!
- 第二栏表示为链接占用的节点 (i-node) ( 若为目录时,通常与该目录底下还有多少目录有关 )这部分将在介绍链接 link 文件时 (下一节) 再深入的介绍;
- 第三栏表示这个文件(或目录)的『拥有人』;
- 第四栏表示拥有人的群组;
这里再次解释一下,在 Linux 中,你的 ID ( 如 root 或 test 等帐号均是所谓的 ID ) 即是你的身份,而且你还有附属在一个或多个群组之下,例如刚刚我们上面提到的,你有一个团体 ( 即群组 ) 代号为 testgroup ,且这个群体里有三个人,其代号分别是 test1, test2, 与 test3,则这三个人为同一群组即 testgroup!那么如果以上图的[-rwxrwx---]的文件属性来看,如果该文件属于 test1 所有,那么 test2, test3 亦有读、写、运行的权力,因为他们都属于同一个 group 呀!而如果您不是属于 test1, test2, test3 的任何一个人,也不属于 testgroup 这个群组时,那么您将不具备读、写、运行这个文件的权限了!
- 第五栏为这个文件的大小;
- 第六栏为这个文件的建档日期或者是最近的修改日期,分别为月份、日期及时间。请特别留意,如果您是以繁体中文来进行安装您的 Linux 时,那么缺省的语系可能会被改为中文。而由于中文无法显示在文本型态的终端机上面,所以这一栏会成为怪怪的乱码,这个时候,请修改一下 /etc/sysconfig/i18n 这个文件,里面的『 LC_TIME 』修改为:『 LC_TIME=en 』再保存离开,再登录一次,就可以得到英文本形显示的日期了!那么如何修改该文件呢?呵呵!以 root 身份用 vi 修改! ;
- 第七栏为这个文件的文件名,如果文件名之前多一个『 . 』,则代表这个文件为『隐藏档』,例如上表第 6 行的『.bashrc_history』文件名即是隐藏档,由于我们有下一个参数为 ls -al,所以连隐藏档都列出来,如果你只输入 ls 则文件名有加『 . 』的文件就不会被显示出来!
对于更详细的 ls 用法,还记得怎么查找吗?对啦!使用 man ls 或 info ls 去看看他的基础用法去!自我进修是很重要的,因为『师傅带进门,修行在个人!』,自古只有天才学生,没有天才老师呦!加油吧! ^_^
- 例题一:如果有下面的两个文件:
-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 这一个群组的人则仅可以读,不能写也不能运行!
- 例题二:如果我的目录为底下的样式:
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/
请问 testgroup 这个群组的成员与其他人( others )是否可以进入本目录?
答:
- 文件拥有者 test1 可以在本目录中进行任何工作;
- 而 testgroup 这个群组的帐号,例如 test2, test3 亦可以进入本目录进行工作,但是不能在本目录下进行写入的动作;
- 至于 other 的权限中虽然有 r ,但是由于没有 x 的权限,因此 others 的用户,并不能进入此目录!
Linux 文件属性的重要性:
与 Windows 系统不一样的是,在 Linux 系统(或者说 Unix-Like 系统)当中,每一个文件都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢?基本上,最大的用途是在『安全性』上面的。举个简单的例子,在你的 系统中,关于系统服务的文件通常只有 root 才能读写,或者是运行,例如 /etc/shadow这一个帐号管理的文件,由于该文件记录了你的系统中的所有帐号的数据,因此是很重要的一个信息档,当然不能让任何人读取,只有 root 才能够来读取啰!所以该文件的属性就会成为 [ -rw------- ]啰!
那么,如果你有一个开发团队,在你的团对中,你希望每个人都可以使用某一些目录下的文件,而非你的团队的其他人则不予以开放呢?以上面的例子来说,testgroup 的团队共有三个人,分别是 test1, test2, test3 !那么我就可以将 test1 的文件属性订为 [ -rwxrwx--- ]来提供给 testgroup 的工作团队使用啰!这可是相当重要的。
再举个例子来说,如果你的目录权限没有作好的话,可能造成其他人都可以在你的系统上面乱搞啰!例如本来只有 root 才能做的开关机、ADSL 的拨接程序、添加或删除用户等等的指令,若被你改成任何人都可以运行的话,那么如果用户不小心给你重新开机啦!重新拨接啦!等等的!那么你的系统不就 会常常莫名其妙的挂掉啰!而且万一你的用户的密码被其他不明人士取得的话,只要他登录你的系统就可以轻而易举的运行一些 root 的工作!可怕吧!因此,在你修改你的 linux 文件与目录的属性之前,一定要先搞清楚,什么是可变的,什么是不可变的!千万注意啰!
好了,我们已经知道文件权限对于一个系统的安全重要性了,也知道文件的权限对于用户与群组的相关性了,好了,那么如何修改一的 文件的权限呢?又!有多少文件的权限我们可以修改呢?其实一个文件的权限很多嘛!大致上我们先介绍几个简单的,例如:群组、拥有者、各种身份的权限等等。chgrp :改变文件所属群组
chown :改变文件所属人
chmod :改变文件的属性、 SUID 、等等的特性
- 改变所属群组, chgrp:
改变一个文件的群组也真是很简单的,直接以 chgrp 来改变即可,咦!这个指令就是 change group 的缩写嘛!对啦!这样就很好记了吧! ^_^。不过,请记得,要改变成为的群组名称必须要在 /etc/group 里面存在的名字才行,否则就会显示错误!例如底下的例子中,我们要将 tmp 的群组改变一下,其中, users 这个群组本身已经存在 /etc/group 当中了,但是 testing 这个群组名字就不存在 /etc/group 当中,所以就会有错误消息发生啦!
语法:
chgrp 群组名称 文件或目录范例:
[root@test root]# chgrp users tmp
[root@test root]# ls –l
drwx------ 2 root root 4096 Oct 19 11:43 drakx/
drwx------ 2 root users 4096 Oct 19 21:24 tmp/
[root@test root]# chgrp testing tmp
chgrp: invalid group name `testing' <==发生错误消息啰!
- 改变文件拥有者, chown:
好了,那么如何改变一个文件的拥有者呢?很简单呀!既然改变群组是 change group ,那么改变拥有者就是 change owner 啰!BINGO,对啦!那就是 chown 这个指令的用途,要注意的是,用户必须是已经存在系统中的,也就是在 /etc/passwd 这个文件中有纪录的用户名才行改变。 chown 的用途还满多的,他还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上 –R 的参数即可!我们来看看语法与范例:
语法:
chown [ -R ] 帐号名称 文件或目录
chown [ -R ] 帐号名称:群组名称 文件或目录范例:
[root@test root]# chown test tmp
[root@test root]# ls -l
total 28
drwx------ 2 root root 4096 Oct 19 11:43 drakx/
drwx------ 2 test users 4096 Oct 19 21:24 tmp/
[root@test root]# chown –R root:root tmp
[root@test root]# ls –l
drwx------ 2 root root 4096 Oct 19 11:43 drakx/
drwx------ 2 root root 4096 Oct 19 21:24 tmp/
嗯!知道如何改变文件的群组与拥有者了,那么什么时候要使用 chown 或 chgrp 呢?!或许您会觉得奇怪吧?!是的,确实有时候需要变更文件的拥有者的,最常见的例子就是在 copy 文件给你之外的其他人时,我们使用最简单的 cp 来说明好了,
语法:
cp 来源文件 目的文件
假设您今天要将 .bashrc 这个文件拷贝成为 .bashrc_test ,且是要给 test 这个人,您可以这样做:
[root@test root]# cp .bashrc .bashrc_test
[root@test root]# ls –al .bashrc*
-rw-r--r-- 1 root root 226 Feb 16 2002 .bashrc
-rw-r--r-- 1 root root 226 Oct 21 14:24 .bashrc_test
哇!怎么办? .bashrc_test 还是属于 root 所有,如此一来,即使你将文件拿给 test 这个用户了,那他仍然无法修改的( 看属性就知道了吧! ),所以你就必须要将这个文件的拥有者与群组修改一下啰!知道如何修改了吧!?呵呵!
- 改变九个属性 ( chmod ):
数字类型改变文件权限
其实, Linux 文件的属性不只九个呦!不过这里不打算写的太复杂!先说一些简单的,较难的以后有空再说吧!先复习一下刚刚上面说的:
-rwxrwxrwx
这九个属性是三个三个一组的!其中,我们可以使用数字来代表各个属性,各属性的对照表如下:
r:4
由于同一组的数字是相加的!例如当属性为 [ -rwxrwx--- ] 则是:
w:2
x:1
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0
所以,这样的属性造成的数值就是 770 啰!而更改属性的指令为 chmod,他的语法为:
语法:
chmod [-R] xyz 文件或目录
xyz 为同三组 rwx 属性数值的相加
举例来说,如果要将 .bashrc 这个文件所有的属性都打开,那么就下达:
[root@test root]# ls –al .bashrc
-rw-r--r-- 1 root root 226 Feb 16 2002 .bashrc
[root@test root]# chmod 777 .bashrc
[root@test root]# ls –al .bashrc
-rwxrwxrwx 1 root root 226 Feb 16 2002 .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 吧!
符号类型改变文件型态
还有一个改变属性的方法呦!从之前的介绍中我们可以发现,基本上就九个属性分别是(1)user (2)group (3)others 三群啦!那么我们就可以借由 u, g, o 来代表三群的属性!此外, a 则代表 all 亦即全部的三群!那么读写的属性就可以写成了 r, w, x 啰!也就是可以使用底下的方式来看:
chmod u
g
o
a+(加入)
-(除去)
=(设置)r
w
x文件或目录
来实作一下吧!假如我们要『设置』一个文件的属性为『-rwxr-xr-x』时,基本上就是:
- u: 具有可读、写、运行
- g 与 o: 具有读与运行
所以就是:
[root@test root]# chmod u=rwx,og=rx .bashrc
[root@test root]# ls –al .bashrc
-rwxr-xr-x 1 root root 226 Feb 16 2002 .bashrc
请注意, r=rwx,og=rx 这一段文本之间并没有空白字符隔开呦!不要搞错啰!那么假如是『 -rwxr-xr-- 』?可以使用『 chmod u=rwx,g=rx,o=r filename 』来设置。此外,如果我不知道原先的文件属性,而我只想要增加 .bashrc 这个文件的每个人均可写入的权限,那么我就可以使用:
[root@test root]# ls –al .bashrc
-rwxr-xr-x 1 root root 226 Feb 16 2002 .bashrc
[root@test root]# chmod a+w .bashrc
[root@test root]# ls –al .bashrc
-rwxrwxrwx 1 root root 226 Feb 16 2002 .bashrc*
而如果是要将属性去掉而不更动其他的属性呢?!例如要拿掉所有人的 x 的属性,则
[root@test root]# chmod a-x .bashrc
[root@test root]# ls –al .bashrc
-rw-rw-rw- 1 root root 226 Feb 16 2002 .bashrc
知道 +, -, = 的不同点了吗?对啦! + 与 – 的状态下,只要是没有指定到的项目,则该属性『不会被变动』,例如上面的例子中,由于仅以 – 拿掉 x 则其他两个保持当时的值不变!呵呵!多多实作一下,你就会知道如何改变属性啰!
Linux 的文件与 Windows 的文件能不能互相使用?为何可以?为何不行?这些咚咚都涉及到 Linux 的文件类型与文件格式喔!底下我们就来谈一谈这些基本的观念吧!
- 文件格式:
什么是文件格式呢?就是你的操作系统用来访问的数据格式,例如我们知道 Windows 用来访问硬盘的数据格式为 FAT (或 FAT16 ) ,而 Windows 2000 也有所谓的 NTFS 文件格式等等,至于 Linux 的正统文件格式为 ext2 这一个。不过,目前 Linux 所能支持的文件格式非常的多,不过,你必须要将你所想要支持的文件格式编译到你的内核当中才能被支持!因为如果内核不认识该文件格式的话,那么自然就无法取用呀!因此,您可以发现, Windows 与 Linux 安装在同一个硬盘的不同 partition 时, Windows 将不能取用 Linux 的硬盘数据, Why ? 就因为 Windows 的内核不认识 Linux 的文件系统呀!
目前 Mandrake 9.0 缺省的文件格式为 ext3 (Third Extended File System ),是 ext2 文件格式的升级版,不过也向下兼容 ext2, ext 等等。另外,如果你需要将你原有的 Windows 系统也挂载在 Linux 底下的话,那么 Linux 也支持 MS-DOS, VFAT, FAT, BSD 等等的文件格式,至于 Window NT 的 NTFS 文件格式则不见得每一个 Linux distribution 都有支持,例如 Red Hat 缺省的内核就不支持 NTFS,但是 Mandrake 9.0 的内核竟然缺省有支持 ntfs 耶!真高兴!问我怎么看出来的?呵呵! Linux 能够支持的文件格式与内核是否有编译进去有关,所以你可以到你的 Linux 系统的底下看一看,如果有你想要的文件格式,那么这个内核就有支持啦!目前使用的最广泛的虽然还是 ext2 ,不过,最近发布的 Linux distribution 大多已经缺省采样 ext3 或 reiserfs 这种具有日志式管理( Journaling )的文件格式了。那为什么要使用 ext3 这种文件格式呢?我们采用第一个使用 ext3 做为 Linux distribution 的 Red Hat 公司中,首席内核开发者 Michael K. Johnson 的话:
/lib/modules/`uname –r`/kernel/fs
更详细的 ext3 说明在底下的链接中:ext3 or ReiserFS? Hans Reiser Says Red Hat's Move Is Understandable ( http://www.linuxplanet.com/linuxplanet/reports/3726/1/ ) 所以啰,我们可以使用 ext3 来做为我们的 Linux 的文件格式啦! ^_^ 。在这里,您只要记得,我们 Linux 正统的文件格式是 ext2 ,而目前有逐渐被 Journaling 的文件格式取代的趋势就是了。
『为什么你想要从ext2转换到ext3呢?有四个主要的理由:可利用性、数据完整性、速度及易于转换』 『可利用性』,他指出,这意味着从系统中止到快速重新复原而不是持续的让e2fsck首席执行官时间的修复。ext3的日志式条件可以避免数据毁损的可能。他也指出:
『除了写入若干数据超过一次时,ext3往往会较快于ext2,因为ext3的日志使硬盘读取头的移动能更有效的进行』
然而或许决定的因素还是在Johnson先生的第四个理由中。
『它是可以轻易的从ext2变更到ext3来获得一个强而有力的日志式文件系统而不需要重新做格式化』。『那是正确的,为了体验一下ext3的好处是不需要去做一种长时间的,冗长乏味的且易于产生错误的备份工作及重新格式化的动作』。
- 文件种类:
谈完了文件格式之后,再来谈谈所谓的文件种类吧!我们在刚刚的属性介绍中提到了最前面的标志 ( d 或 - ) 可以代表目录或文件,那就是不同的文件种类啦!Linux 的文件种类主要有底下这几种:
- 正规文件( regular file ):就是一般类型的文件,在由 ls –al 所显示出来的属性方面,第一个属性为 [ - ]。另外,依照文件的内容,又大略可以分为两种文件种类:
- 纯文本档(ascii) :这是 Unix 系统中最多的一种啰,几乎只要我们可以用来做为设置的文件都属于这一种;
- 二进位档(binary) :通常运行档除了 scripts (文本型批量档)之外,就是这一种文件格式;
- 目录 (directory):就是目录啦!第一个属性为 [ d ];
- 链接档 (link):就是类似 Windows 底下的捷径啦!第一个属性为 [ l ];
- 设备档 (device):与系统周边相关的一些文件,通常都集中在 /dev 这个目录之下!通常又分为两种:
- 区块 (block) 设备档 :就是一些保存数据,以提供系统访问的周边设备,简单的说就是硬盘啦!例如你的一号硬盘的代码是 /dev/hda1 等等的文件啦!第一个属性为 [ b ];
- 字符 (character) 设备档 :亦即是一些串口的周边设备,例如键盘、鼠标等等!第一个属性为 [ c ]。
那么使用刚刚的『 ls -al 』这个指令,你就可以简单的经由判断每一个文件的第一个属性来了解这个文件是何种类型!很简单吧!除了设备档是我们系统中很重要的文件,最好不要随意修改之外(通常他也不会让你修改的啦!),另一个比较有趣的文件就是链接档。如果你常常将应用程序捉到桌面来的话,你就应该知道在 Windows 底下有所谓的『捷径』。同样的,你可以将 linux 下的链接档简单的视为一个文件或目录的捷径。但是基本上这两个东西是不一样的!在 Windows 系统的捷径中,你将无法修改主程序,但是在 Linux 中,链接档可以直接链接到主程序,因此你只要改了这个链接档,则主程序亦被改变了!这部份我们也会在后面的链接档介绍中,再次详细的谈一谈。
- Linux 文件附文件名:
基本上,Linux 文件的附文件名是没有意义的!因为由前面的说明我们可以知道,一个 Linux 文件能不能被运行,与他的第一栏的十个属性有关,与文件名根本一点关系也没有。这个观念跟 Windows 的情况不相同喔!在 Windows 底下,能被运行的文件附文件名通常是 .com .exe .bat 等等,而在 Linux 底下,只要你的属性当中有 x 的话,例如 [ -rwx-r-xr-x ] 即代表这个文件可以被运行喔!不过,由于我们仍然希望可以借由附文件名来了解该文件是什么东西?!所以,通常我们还是会以适当的附文件名来表示该文件是什么种类的。简单的分别,底下有数种常用的附文件名:
- 批量档 ( scripts ):通常以 *.sh 来代表,(因为批量档为使用 shell 写成的,所以附文件名就编成 .sh 啰);
- 打包或压缩档:通常附文件名为 *.Z, *.tar, *.tar.gz, *.zip, *.tgz 等等,这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的附文件名啰!
- 网页相关文件:通常使用 *.html 与 *.php 等等的文件,分别代表 HTML 语法与 PHP 语法的网页文件啰!这种文件可以使用网页浏览器来打开!
另外,还有编程语言如 perl 的文件,其附文件名也可能取成 .pl 这种文件名!基本上, Linux 上面的文件名真的只是让你了解该文件可能的用途而已,真正的运行与否仍然需要属性的规范才行!例如虽然有一个文件为可运行档,如有名的代理服务器软件 squid ,不过,如果这个文件的属性被修改成无法运行时,那么他就变成不能运行啰!这种问题最常发生在文件发送的过程中。例如你在网络上下载一个可运行档,但是偏偏在你的 Linux 系统中就是无法运行!呵呵!那么就是可能文件的属性被改变了!不要怀疑,从网络上发送到你的 Linux 系统中,文件的属性确实是会被改变的喔!
再提个另外!在 Linux 底下,每一个文件或目录的文件名最长可以到达 256 的字符,是相当长的文件名喔!我们希望 Linux 的文件名称可以一看就知道该文件在干嘛的,所以文件名通常是很长很长!而用惯了 Windows 的人可能会受不了,因为文件名称通常真的都很长,对于用惯 Windows 而导致打字速度不快的朋友来说,嗯!真的是很困扰.....不过,只得劝您好好的加强打字的训练啰!当然啦,如果您已经读完了本书第三篇关于 BASH 的用法,那么您将会发现『哇!变量真是一个相当好用的东西呐!』嗯!看不懂,没关系,到第三篇谈到 bash 再说!
在 Linux 系统的缺省状态下,你在根目录中输入『 ls -l 』应该可以看到如下的画面:
[vbird@tsai vbird ]$ cd /
[vbird@tsai /]$ ls -l
total 153
drwxr-xr-x 2 root root 4096 Feb 10 02:06 bin
drwxr-xr-x 3 root root 4096 Feb 10 00:05 boot
drwxr-xr-x 17 root root 77824 Feb 11 14:45 dev
drwxr-xr-x 41 root root 4096 Feb 16 15:18 etc
drwxr-xr-x 8 root root 1024 Feb 9 22:44 home
drwxr-xr-x 2 root root 4096 Jun 22 2001 initrd
drwxr-xr-x 6 root root 4096 Feb 10 02:12 lib
drwxr-xr-x 2 root root 16384 Feb 10 05:35 lost+found
drwxr-xr-x 2 root root 4096 Aug 30 00:10 misc
drwxr-xr-x 3 root root 4096 Feb 9 22:05 mnt
drwxr-xr-x 2 root root 4096 Aug 24 1999 opt
dr-xr-xr-x 102 root root 0 Feb 11 22:45 proc
drwx------ 4 root root 4096 Feb 16 15:25 root
drwxr-xr-x 2 root root 4096 Feb 14 21:28 sbin
drwxrwxrwt 2 root root 4096 Feb 16 15:40 tmp
drwxr-xr-x 16 root root 4096 Feb 10 01:28 usr
drwxr-xr-x 20 root root 4096 Feb 14 21:41 var
由属性的角度来看,上面的文件名每个都是『目录名称』,较为特殊的是 root ,由于 root 这个目录是管理员 root 的家目录,这个家目录可重要了!所以一定要设置成较为严密的 700 ( rwx------ )这个属性才行呐!如果以较为完整的树状目录来视察的话,可以将整个 Linux 的树状目录会制程下图:
请注意,每个目录都是依附在 / 这个根目录底下的,所以我们在安装的时候一定要有一个 / 对应的 partition 才能安装的原因即在于此!这也就是我们俗称的『树状目录』啰!
每个目录的大致内容如下表所示:
/bin 这是放例如: ls, mv, rm, mkdir, rmdir, gzip, tar, telnet, 及 ftp 等等常用的运行档的地方(这些运行档的运行方法会在后面提到),有时候这个目录的内容与 /usr/bin 是一样的(有时候甚至会使用链接档哩),是给一般用户使用的运行程序放置的所在! /boot 没错,这里就是放置你 Linux 内核与开机相关文件的地方,这个目录底下的 vmlinuz-xxx 就是 Linux 的 Kernel 啦!粉重要的东西!而如果你的开机管理程序选择 grub 的话,那么这个目录内还有 /boot/grub 这个次目录呦! /dev 摆放一些与设备有关的文件。基本上 Unix 或 Linux 系统均把设备当成是一个文件来看待,例如 /dev/fd0 代表软碟,亦即 Windows 系统下的 A 槽,而 /dev/cdrom 则代表光盘,等等!而如上所述,在这个目录底下的文件型态通常分为两种喔,分别是管理磁盘 Input/Output 的 Block 文件与周边的 Character 文件。 /etc 系统在开机过程中需要读取的文件均在这个目录中,例如 Lilo 的参数、人员的帐号与密码、系统的主要设置、http 架站的参数内容、你所要打开的服务项目等等都在这个目录中,所以在这个目录下工作的时候,请记得一定要备份,否则文件被改掉了可是很麻烦的! /etc/rc.d 这个路径主要在记录一些开关机过程中的 scripts 文件, scripts 有点像是 DOS 下的批量档(.bat文件名) /etc/rc.d/init.d 所以服务缺省的启动 scripts 都是放在这里的,例如要启动与关闭 iptables 的话,可以:
/etc/rc.d/init.d/iptables start
/etc/rc.d/init.d/iptables stop/etc/xinetd.d 这个路径在较新的 Linux distribution 当中才有,由于早期的版本用来打开服务的文件是 inetd.conf ,但是在较新的版本中,打开服务的项目已经变成使用 xinetd.conf 这个文件,因此,你若需要启动一些额外的服务的话,在 Mandrake 9.0 或者是 Red Hat 7.0 以后就要到 /etc/xinetd.d 这个目录下了。 /etc/X11 这是与 X windows 有关的设置档所在的目录,尤其里面的 XF86Config-4 更是重要呢! /home 基本上,这是系统缺省的用户的家目录( home directory ),在你添加一般用户帐号的时候,缺省的用户家目录都在这里设置好啰! /lib 在 Linux 运行或编译一些程序的时候,均会使用到一些函数库(library),就在这个目录下 /lost+found 系统不正常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在设备目录下。例如你加装一棵硬盘于 /disk 中,那在这个目录下就会自动产生一个这样的目录 /disk/lost+found /mnt 这是软碟与光盘缺省挂载点的地方;通常软碟挂在 /mnt/floppy 下,而光盘挂在 /mnt/cdrom 下,不过也不一定啦!只要你高兴,随便找一个地方来挂载也可以呀! /proc 系统内核与运行进程的一些信息。例如你的网络状态的问题啦!这个目录将在启动 Linux 的时候自动的被挂上,而且该目录底下不会占去硬盘空间!因为里面都是『内存』内的数据啦 /root 系统管理员的家目录 /sbin 放置一些系统管理常用的程序,例如: fdisk, mke2fs, fsck, mkswap, mount 等等。与 /bin 不太一样的地方,这个目录下的程序通常是给 root 等系统管理员使用的程序喔! /tmp 这是让一般用户暂时存放文件的地方,例如你在安装 Linux 下的软件时,可能软件缺省的工作目录就是 /tmp ,所以你要定期的清理一下,当然,重要数据最好不要放在这里! /usr 这是最重要的一个目录了,里面含有相当多的系统信息,内有许多目录,用来存放程序与指令等等。这个目录有点像是 Windows 底下的『Program Files』那个目录说~ /usr/bin 放置可运行程序,如前所说,这个目录的文件与 /bin 几乎是相同的。 /usr/include 一些套件的header档。基本上,当我们在以 tarball 方式( *.tar.gz 的方式安装软件)安装某些数据时,会使用到的一些函数库都在这个目录底下喔! /usr/lib 内含许多程序与子程序所需的函数库。 /usr/local 在你安装完了 Linux 之后,基本上所有的配备你都有了,但是软件总是可以升级的,例如你要升级你的 proxy 服务,则通常软件缺省的安装地方就是在 /usr/local 中( local 是『当地』的意思),同时,安装完毕之后所得到的运行档,为了与系统原先的运行档有分别,因此升级后的运行档通常摆在 /usr/local/bin 这个地方。 给个建议啦,通常 VBird 都会将后来才安装上去的软件放置在这里,因为便于管理呦!
/usr/sbin 放置管理者使用程序,与 /sbin 类似的功能 /usr/share/doc 放置一些系统说明文档的地方,例如你安装了 lilo 了,那么在该目录底下找一找,就可以查到 lilo 的说明文档了!很是便利! /usr/share/man 放置一些程序的说明档的地方,那是什么?呵呵!就是你使用 man 的时候,会去查找的路径呀!例如你使用 man ls 这个指令时,就会查出 /usr/share/man/man1/ls.1.bz2 这个说明档的内容啰! /usr/src 这是放置内核原代码的缺省目录,未来我们要编译内核的时候,就必须到这个目录底下呦! /usr/X11R6 X Window System存放相关文件的目录 /var 这个目录可就重要了!所有服务的注册表或错误消息文件(log files)都在 /var/log 里面,此外,一些数据库如 MySQL 的数据库则在 /var/lib 里头,此外,用户未读邮件邮件的缺省放置地点为 /var/spool/mail !呵呵!你说重不重要呀!?
- 需要注意的目录
在 Linux 系统中,有几个目录是特别需要注意的,以下提供几个需要注意的目录,以及缺省相关的用途:
- /etc:这个目录相当重要,如前所述,你的开机与系统数据文件均在这个目录之下,因此当这个目录被破坏,那你的系统大概也就差不多该死掉了!而在往后的文档中,你会发现我们常常使用这个目录下的 /etc/rc.d/init.d 这个子目录,因为这个 init.d 子目录是打开一些 Linux 系统服务的 scripts (可以想成是 批量档 )的地方。而在 /etc/rc.d/rc.local 这个文件是开机的运行档,有点像是旧 Windows 系统下的 autoexec.bat 及 config.sys 档。所以,如果你有需要在开机加载的服务或运行文件,可以写在这个文件的最后一行,则开机时就会自动帮你加载运行档了!
- /bin, /sbin, /usr/bin, /usr/sbin:这是系统缺省的运行档的放置目录,例如 root 常常使用的 userconf, netconf, perl, gcc, c++ 等等的数据都放在这几个目录中,所以如果你在提示字符下找不到某个运行档时,可以在这四个目录中查一查!其中, /bin, /usr/bin 是给系统用户使用的指令,而 /sbin, /usr/sbin 则是给系统管理员使用的指令!
- /usr/local:这是系统缺省的让你安装你后来升级的套件的目录。例如,当你发现有更新的 Web 套件(如 Apache )可以安装,而你又不想以 rpm 的方式升级你的套件,则你可以将 apache 这个套件安装在 /usr/local 底下。安装在这里有个好处,因为目前大家的系统都是差不多的,所以如果你的系统要让别人接管的话,也比较容易上手呀!也比较容易找的到数据喔!因此,如果你有需要的话,通常我都会将 /usr/local/bin 这个路径加到我的 path 中。
- /home:这个是系统将有帐号的人口的家目录设置的地方。
- /var:这个路径就重要了!不论是登录、各类服务的问题发生时的记录、以及常态性的服务记录等等的记录目录,所以当你的系统有问题时,就需要来这个目录记录的文件数据中察看问题的所在啰!而 mail 的缺省放置也是在这里,所以他是很重要的喔!
- /usr/share/man, /usr/local/man:这两个目录为放置各类套件说明档的地方,例如你如果运行 man man,则系统会自动去找这两个目录下的所有说明档,如果有相同的数据就会叫出来给你幽!
- 一般主机可能会分配的磁盘情况
好了,知道了 Linux 的文件权限,目前也知道了各个文件内可能摆放的数据是什么了,那么再来说说你的目录与磁盘分割之间的相关性。通常一般的大型主机都不会将所有的数据放置在一个磁盘中(就是只有一个『 / 』根目录),这有几个目的:
- 安全性考量:你的系统通常是在 /usr/ 中,而个人数据则可能放置在 /home 当中,至于一些开机数据则放置在 /etc 当中。如果将所有的数据放在一起,当你的系统不小心被黑客破坏,或者不小心自己砍了一个小东西,则所有的咚咚也都跟着不见了.....这对于我们市井小民 或许无所谓,再安装一次就好了,但是对于一些大型企业可不行这样!因此需要将数据分别放置于不同的磁盘中,会比较保险些。
- 便利性:如果你需要升级你的系统的话,是否需要重新 format 安装呢?有些数据例如 /home 里面的数据为个人用户的数据,似乎与系统无关!所以如果你将这些数据分别放置于不同的磁盘,则你要升级或者进行一些系统更动时,将比较有弹性。
你或许可以将你的系统做成这样的 partition 分布:
/
/boot
/usr
/home
/var
这是比较常见的磁盘分布情况,其中,
- / 根目录可以分配约 256 MB 以内;
- /boot 大概在 50 MB 就可以了,因为开机文件并不大;
- /var 就至少需要 1GB 以上,因为你的 mail 、 proxy 缺省的保存区都在这个目录中,除非你要将一些设置改变!
- /home 与 /usr 通常是最大的,因为你所安装的数据都是在 /usr/ 当中,而用户数据则放置在 /home 当中,因此通常书上都会建议你将所剩下的磁盘空间平均分配给这两个目录说!
无论如何,每部主机的环境与功能用途都不相同,自然其磁盘的分配就会不太一样,因此,上面的设置您就看看就好,等您将整个网页内容全 K 完了,那么大概就知道怎样设置您的主机最恰当啦!接着下来,我们来谈一谈简单的文件与目录的管理了!