Linux文件属性

一.使用者与群组:

那么群组呢?为何要设定档案还有所属的群组?其实,群组最简单的功能之一,就是当您在团队开发资源的时候最有用啦

二.Linux 档案属性

在你以 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

 第一栏                                          
[档案属性][档案数][拥有者][所有者群组][大小][建档日期][档名]

1.第一栏代表这个档案的属性:这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个属性:


(1).  第一个属性代表这个档案是『目录、档案或连结文件』:

当为[d ]则是目录,例如上表的第 11 行;

当为[- ] 则是档案,例如上表的第 5 行;

若是[l ] 则表示为连结档(link file)

若是[b ] 则表示为装置文件里面的可供储存的接口设备;

若是[c ] 则表示为装置文件里面的串行端口设备,例如键盘、鼠标。

(2). 接下来的属性中,三个为一组,且均为rwx的三个参数的组合。其中,[ r ]代表可读、[ w ]代表可写、[ x ]代表可执行:

第一组为『拥有人的权限』,以第五行为例,该档案的拥有人可以读写,但不可执行;

第二组为『同群组的权限』

第三组为『其它非本群组的权限』

范例:若有一个档案的属性为『-rwxr-xr--』,简单的可由下面说明之:

[-][rwx][r-x][r--]
 1  234  567  890


 1 为:代表这个文件名为目录或档案(上面为档案)
 234为:拥有人的权限(上面为可读、可写、可执行)
 567为:同群组使用者权限(上面为可读可执行)
 890为:其它使用者权限(上面为仅可读)

上面的属性情况代表一个档案、这个档案的拥有人可读可写可执行、但同群组的人仅可读与执行,非同群组的使用者仅可读的意思!
除此之外,需要特别留意的是 x 这个标号!若文件名为一个目录的时候,例如上表中的 .ssh 这个目录:

drwx------   2 root    root         4096 Feb 10 00:44 .ssh
可以看到这是一个目录,而且只有 root 可以读写与执行。但是若为底下的样式时,请问非 root 的其它人是否可以进入目录呢?

drwxr--r--   2 root    root         4096 Feb 10 00:44 .ssh

咦!似乎好像是可以喔!因为有可读[ r ]存在嘛!『错!』答案是非 root 这个账号的其它使用者均不可进入 .ssh 这个目录,为什么呢?因为 x 目录 的关系相当的重要,如果您在该目录底下不能执行任何指令的话,那么自然也就无法执行 ls, cd 等指令,所以啰,也就无法进入了,因此,请特别留意的是,如果您想要开放某个目录让一些人进来的话,请记得将该目录的 x 属性给开放呦


另外,你也必须要更加的小心的是,在 Windows 底下一个档案是否具有执行的能力是藉由『附档名』来执行的,例如:.exe,.bat, .com 等等,但是在 Linux 底下,我们的档案是否能执行,则是藉由是否具有 x 这个属性来决定的!所以,跟档名是没有绝对的关系的!这点还请特别留意呢!

 

2.第二栏表示为连结占用的节点(i-node) ( 若为目录时,通常与该目录底下还有多少目录有关 )这部分将在介绍连结 link 档案时 (下一节) 再深入的介绍;

 

3.第三栏表示这个档案(或目录)的『拥有人』;

 

4.第四栏表示拥有人的群组;
这里再次解释一下,在Linux 中,你的 ID ( root test 等账号均是所谓的 ID ) 即是你的身份,而且你还有附属在一个或多个群组之下,例如刚刚我们上面提到的,你有一个团体 ( 即群组 ) 代号为 testgroup ,且这个群体里有三个人,其代号分别是 test1, test2, test3,则这三个人为同一群组即 testgroup!那么如果以上图的[-rwxrwx---]的档案属性来看,如果该档案属于 test1 所有,那么 test2, test3 亦有读、写、执行的权力,因为他们都属于同一个 group 呀!而如果您不是属于 test1, test2, test3 的任何一个人,也不属于testgroup 这个群组时,那么您将不具备读、写、执行这个档案的权限了!

 

5.第五栏为这个档案的大小;

 

6.第六栏为这个档案的建档日期或者是最近的修改日期,分别为月份、日期及时间。请特别留意,如果您是以繁体中文来进行安装您的 Linux 时,那么预设的语系可能会被改为中文。而由于中文无法显示在文字型态的终端机上面,所以这一栏会成为怪怪的乱码,这个时候,请修改一下 /etc/sysconfig/i18n 这个档案,里面的『LC_TIME 』修改为:『 LC_TIME=en 』再储存离开,再登入一次,就可以得到英文字形显示的日期了!那么如何修改该档案呢?呵呵!以root 身份用vi 修改!
 

7.第七栏为这个档案的档名,如果档名之前多一个『. 』,则代表这个档案为『隐藏档』,例如上表第 6 行的『.bashrc_history』档名即是隐藏档,由于我们有下一个参数为 ls -al,所以连隐藏档都列出来,如果你只输入 ls 则档名有加『 . 』的档案就不会被显示出来!

 

三.如何改变档案权限

改变档案所属群组,  chgrp
请记得,要改变成为的群组名称必须要在 /etc/group 里面存在的名字才行,否则就会显示错误!例如底下的例子中,我们要将 tmp 的群组改变一下,其中, users 这个群组本身已经存在 /etc/group 当中了,但是 testing 这个群组名字就不存在 /etc/group 当中,所以就会有错误讯息发生啦!

/tmp档案的群组改成users :

语法:
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

要注意的是,使用者必须是已经存在系统中的,也就是在 /etc/passwd 这个档案中有纪录的使用者名称才行改变。 chown 的用途还满多的,他还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录或档案同时更改档案拥有者的话,直接加上 –R 的参数即可!我们来看看语法与范例:

/tmp的拥有者改为test:

语法:
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 来说明好了,假设您今天要将 .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 )
1. 数字类型改变档案权限
其实,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,他的语法为:

[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 吧!


2. 符号类型改变档案型态
还有一个改变属性的方法呦!从之前的介绍中我们可以发现,基本上就九个属性分别是(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=rfilename 』来设定。此外,如果我不知道原先的档案属性,而我只想要增加 .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 则其它两个保持当时的值不变!呵呵!多多实作一下,你就会知道如何改变属性啰!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值