• chown:改变文件拥有者。
• chmod:改变文件的属性、SUID等特性。
[root@linux ~]# chgrp [-R] dirname/filename ... |
发现了吗?文件的用户组被改成users了,但要改成testing的时候,就会发生错误。注意,出现错误信息,还是要查查错误信息的内容才好。
更改文件拥有者, chown
那 么,如何改变一个文件的拥有者呢?很简单。既然改变用户组是change group,那么改变拥有者就是change owner(改变拥有者)。这就是chown这个命令的用途,要注意的是,用户必须是已经存在系统中的,也就是在 /etc/passwd这个文件中有记录的用户名称才可改变。
chown的用途很多,还可以顺便直接修改用户组的名称。此外,如果要连目录下的所有子目录或文件同时更改文件拥有者的话,直接加上 -R的参数即可。我们来看看语法与范例:
[root@linux ~]# chown [-R] 账号名称 文件或目录 |
我们知道如何改变文件的用户组与拥有者了,那么,什么时候要使用chown或chgrp呢?或许你会觉得奇怪吧?是的,确实有时候需要更改文件的拥有者的,最常见的例子就是在复制文件给其他人时,我们使用最简单的cp来说明好了:
[root@linux ~]# cp 来源文件 目的文件 |
假设今天要将 .bashrc文件复制成为 .bashrc_test,且是要给bin这个人,你可以这样做:
[root@linux ~]# cp .bashrc .bashrc_test |
怎么办?.bashrc_test还是属于root所有,如此一来,即使将文件拿给bin用户了,他仍然无法修改(看属性就知道了),所以就必须修改这个文件的拥有者与用户组。
更改9个属性, chmod
文件属性的改变使用chmod命令,但是,属性的设置方法有两种,分别可以使用数字或者是符号。
• 数字类型改变文件权限
Linux文件的基本属性有9个,分别是owner/group/others组别的read/write/ excute属性,先复习一下刚刚上面提到的数据:
-rwxrwxrwx |
这9个属性是三个一组。其中,可以使用数字来表示各个属性,各属性的对照表如下:
r:4 |
同一组(owner/group/others)的3个属性(r/w/x)是需要累加的,例如当属性为 [-rwxrwx—] 则是:
owner = rwx = 4+2+1 = 7 |
所以,等一下设置属性的更改时,该属性的数字就是770。更改属性的命令chmod的语法是这样的:
[root@linux ~]# chmod [-R] xyz 文件或目录 |
参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录都更新成为这个用户组。常常用在更改某一目录的情况。
举例来说,如果要将 .bashrc这个文件所有的属性都打开,那么就发出命令:
[root@linux ~]# ls -al .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。也就是可以使用下面的方式来看:
chmod
|
u
g
o
a
|
+(加入)
–(除去)
=(设置)
|
r
w
x
|
文件或目录
|
假如我们要“设置”一个文件的属性为“-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 |
请 注意,r=rwx,og=rx这一段文字之间并没有空格隔开。那么,假如是“-rwxr-xr–”?可以使用“chmod u=rwx,g=rx,o=r filename”来设置。此外,如果不知道原先的文件属性,而只想要增加 .bashrc文件的每个人均可写入的权限,那么就可以使用:
[root@linux ~]# ls -al .bashrc |
而如果是要将属性去掉,而不更改其他属性呢?例如要去掉所有人的x属性,则:
[root@linux ~]# chmod a-x .bashrc |
知 道 +, -, = 的不同点了吗?+ 与 – 的状态下,只要是没有指定到的项目,则该属性“不会变动”。例如,上面的例子中,由于仅以 – 去掉x,则其他两个保持当时的值不变。多多练习一下,你就会知道如何改变属性。这在某些情况下很好用。举例来说,你想要教一个人如何让一个程序可以拥有执 行的权限,又不知道该文件原本的权限是什么,此时,利用chmod a+x filename,就可以让该程序拥有执行的权限了。很方便。
在Linux系統下,你的帳號會附屬於一個或多個的群組中。舉剛剛我們提到的例子,class1, class2, class3均屬於projecta這個群組,假設某個檔案所屬的群組為projecta,且該檔案的權限如圖2.1.2所示(-rwxrwx—), 則class1, class2, class3三人對於該檔案都具有可讀、可寫、可執行的權限(看群組權限)。 但如果是不屬於projecta的其他帳號,對於此檔案就不具有任何權限了。