如何改变档案权限 好了,我们已经知道档案权限对于一个系统的安全重要性了,也知道档案的权限对于使用者与群组的相关性了,好了,那么如何修改一的档案的权限呢?又!有多少档案的权限我们可以修改呢?其实一个档案的权限很多嘛!大致上我们先介绍几个简单的,例如:群组、拥有者、各种身份的权限等等。
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 users4096 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 users4096 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
w:2
x:1
由于同一组的数字是相加的!例如当属性为 [ -rwxrwx--- ] 则是:
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 -rwxrwxrwx1 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 啰!也就是可以使用底下的方式来看:
来实作一下吧!假如我们要『设定』一个档案的属性为『-rwxr-xr-x』时,基本上就是:
u: 具有可读、写、执行
g 与 o: 具有读与执行
所以就是:
[root@test root]# chmod u=rwx,og=rx .bashrc
[root@test root]# ls –al .bashrc
-rwxr-xr-x1 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-x1 root root 226 Feb 16 2002 .bashrc
[root@test root]# chmod a+w .bashrc
[root@test root]# ls –al .bashrc
-rwxrwxrwx1 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 支援的档案格式与档案种类 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 系统的
/lib/modules/`uname –r`/kernel/fs
底下看一看,如果有你想要的档案格式,那么这个核心就有支援啦!目前使用的最广泛的虽然还是 ext2 ,不过,最近释出的 Linux distribution 大多已经预设采样 ext3 或 reiserfs 这种具有日志式管理( Journaling )的档案格式了。那为什么要使用 ext3 这种档案格式呢?我们采用第一个使用 ext3 做为 Linux distribution 的 Red Hat 公司中,首席核心开发者 Michael K. Johnson 的话:
『为什么你想要从ext2转换到ext3呢?有四个主要的理由:可利用性、资料完整性、速度及易于转换』
『可利用性』,他指出,这意味着从系统中止到快速重新复原而不是持续的让e2fsck执行长时间的修复。ext3的日志式条件可以避免资料毁损的可能。他也指出:
『除了写入若干资料超过一次时,ext3往往会较快于ext2,因为ext3的日志使硬碟读取头的移动能更有效的进行』
然而或许决定的因素还是在Johnson先生的第四个理由中。
『它是可以轻易的从ext2变更到ext3来获得一个强而有力的日志式档案系统而不需要重新做格式化』。『那是正确的,为了体验一下ext3的好处是不需要去做一种长时间的,冗长乏味的且易于产生错误的备份工作及重新格式化的动作』
更详细的 ext3 说明在底下的连结中:ext3 or ReiserFS? Hans Reiser Says Red Hat's Move Is Understandable ( ) 所以啰,我们可以使用 ext3 来做为我们的 Linux 的档案格式啦! ^_^ 。在这里,您只要记得,我们 Linux 正统的档案格式是 ext2 ,而目前有逐渐被 Journaling 的档案格式取代的趋势就是了。
档案种类:
谈完了档案格式之后,再来谈谈所谓的档案种类吧!我们在刚刚的属性介绍中提到了最前面的标志 ( 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 的用法,那么您将会发现『哇!变数真是一个相当好用的东西吶!』