红联Linux门户
Linux帮助

Linux档案权限介绍以及相关指令

发布时间:2014-12-10 10:46:41来源:linux网站作者:DLODJ

一. owner,group,others

介绍权限之前我们要先认识3个linux下的身份,也即 owner(拥有者),group(群组),others(其他人)

举个例子:

公司开发部有2个开发组,group1(a,b,c),group2(x,y,z),group1是开发1组,做c++开发。group2时开发2组,做数据库开发。a,b,c属于开发一组的3个开发人员,x,y,z属于开发2组的3个开发人员;由于a,b,c开发同一个产品,x,y,z开发同一个产品,所以,要求a,b,c可以互相查阅对方的文件并修改,但是group1和group2之间却不可以。此时如果文档M属于开发者a创建的,则a为M的“owner ",b,c和a属于同一个group,也即a支持group "group1",而,x,y,z对应group1来讲则是others。

(小知识:默认情况下,在Linux中,系统的账号和一般身份使用者,以及root账户的相关信息,都是放在/etc/passwd这个档案下的;个人密码则是记录在/etc/shadow这个目录下的;所有的组名则记录在/etc/group 这个档案中。)


二. 档案的属性的解释

如果你刚刚装完linux,那么你会发现在/root目录下有一个install.log的文件。我们用ls 查看一下。

(备注:ls指令可以用man ls自己看看。常用的如下:

ls -l  ----以清单样式列出详细信息 如: ls -l /root

ls -a ----列出所有的文档,包括以“.”开头的,也即包含隐藏档  ls -a  /root

ls -d ----列出后边指定档案的属性(不限制个数)  如: ls -ld   /root/install.log  /root    ---以清单样式列出所有指定档案的属性)

ls -l /root/install.log    会得到如下信息:

-rwxr-xr-x   1    root   root    30921    Aug  14   21:96   /root/install.log

1                 2      3       4           5                     6                      7

可以将这些属性划分为7个部分。

1. 档案的类型和权限。第一个字符“-”代表  “/root/install.log”这个档案是一个档案文件。

常见的档案类型标志请见下边:

d 文件夹
- 档案
l 链接档,类似windows的快捷方式
b 随即存取设备,如cd_rom,u盘等等
c 一次性存取设备,如键盘,鼠标等等
s socket,资料接口文件,常用于网络数据承接
p pipe(FIFO),即先进先出,数据传输文件。常用于解决多程序存取同一个档案造成的错误问题。

紧跟在“-”后边的9个字符是固定的,无论什么档案都是9个,这九个字符按照顺序分别代表了owner,group,others对于这个档案的“读,写,执行”权限。

r read:读权限
w write:写权限
x executable:执行权限

2是表示有多少档名连接到此节点(i-node),3是档案的归属者,4是档案的所属群组,5代表档案的大小,6代表档案的建立时间或者最新修改时间  7代表档名

如上文所示: /root/install.log这个档案的属性所代表的意义即:

1. 这是一个档案,owner对他具有读、写、执行三种权限,owner所属的group对此档案具有读、执行权限,没有写权限,others对此档案也具有读、执行权,无写权限。

2. 链接到此i-node的档名有一个

3. 该档案的归属用户为root

4. 该档案的归属群组为root

5. 该档案的大小为30921bytes

6. 该档案的最后修改时间(建立时间)为 Aug  14   21:96    如果想要显示完整的时间格式,可以用以下命令: ls -l --full-time /root/install.log   

7. 该档案的档名为“/root/install.log”


三. 修改档案的属性和权限指令。

1. chgrp  改变档案所属群组

比如 ls -l  /home/uncle_cat/install_1.log  得到:

-rwxrwxrwx  1  uncle_cat   uncle_cat    30921  Aug 19 14:21   /home/uncle_cat/install_1.log

则执行一下命令:

chgrp users /home/uncle_cat/install_1.log

ls -l  /home/uncle_cat/install_1.log 

修改后为这个样子:

-rwxrwxrwx  1  uncle_cat   users 30921  Aug 19 14:21   /home/uncle_cat/install_1.log

2. chown  改变档案拥有者,需要时也可以连同拥有者和所属群组一并改动。

chown  bin  /home/uncle_cat/install_1.log

ls -l  /home/uncle_cat/install_1.log 

修改后为这个样子:

-rwxrwxrwx  1  bin   users 30921  Aug 19 14:21   /home/uncle_cat/install_1.log

chown  root:root  /home/uncle_cat/install_1.log

ls -l  /home/uncle_cat/install_1.log 

修改后为这个样子:

-rwxrwxrwx  1  root  root  30921  Aug 19 14:21   /home/uncle_cat/install_1.log

3. chmod  改变档案的权限。

改变档案的权限有2个类型,一个是数字型,一个是字符型。

(1)数字型,数字型的权限对照表如下:

r: 4

w: 2

x: 1

每种身份(owner,group,others)对应的权限时累加的,如:

-rwxrwxrwx  1  root  root  30921  Aug 19 14:21   /home/uncle_cat/install_1.log

权限为 777,如果要修改others对于此文档的权限为不可写,执行,只可读,即为: -rwxrwxr--   则语句为:

chmod  774    /home/uncle_cat/install_1.log

如果需要变更权限的是一个文件夹,而且你希望此文件夹下所有的档案权限都跟着文件夹做相应的改变,可以使用选项 -r (recursive),如:

chmod  -r  770  /home/uncle/test   ----持续递归设定/home/uncle/test 以及其下的所有档案的权限为770

(2)字符型,字符型的对照表为如下所示:

chmod u(owner:也可看做users) “+”加入

“-”减去 “=”等于
 r     

w    

x
档案或目录
g(group)
o(others)
a(all:等于u+g+o)

例如:

chmod  u=rwx,g=rx,o=r  /home/uncle_cat/install_1.log  

ls -l /home/uncle_cat/install_1.log

-rwxr-xr--    ..........

chmod  u=rwx,go=rx  /home/uncle_cat/install_1.log  

ls -l /home/uncle_cat/install_1.log

-rwxr-xr-x    ..........

如果我们不知道档案/home/uncle_cat/install_1.log    的权限为什么,但是我们想为每个身份都加入写的权限,则用如下语句:

chmod  a+w  /home/uncle_cat/install_1.log  

ls -l /home/uncle_cat/install_1.log

-rwxrwxrwx    ..........


四. 各个权限对于档案的意义。

1. 对于档案来讲,3个权限的意义分别如下:

r read(可以读取此档案的内容)
w write(可以修改此档案的内容,但不含删除此档案)
x execute(该档案具有被系统执行的权限)

对于x稍作解释,windows下一个文件是否是可执行的,时基于扩展名来判定的,比如如果是.exe的文件,那么你双击的话就可以执行了(如果能被执行的话),但是对于linux来讲,档案是否可以被执行和他的扩展名没有什么直接的联系,而是基于x这个权限来判定的,比如bash这个指令,他是可以执行的,但是如果你把他的档案修改为-rw-r--r--,那么你再使用bash的时候就会发现使用不了了,因为他已经不可执行了

2. 对于文件夹来讲,3个权限的意义分别如下:

r read content in directory(可以读取此文件夹的目录列表,也即查看目录下的文件名)
w modify content in directory:
1. 删除,移动该文件夹内的档案或目录。
2. 在该文件夹中增加新的档案或者目录。
3. 将本文件夹中已存在的目录或档案更名。
x access directory(可以切换到此目录,并把此目录作为工作目录,也就是cd过去了。。)

对于这个x请注意,在你架站的时候,想要开放一个目录给大家浏览,至少要给予r和x的权限,这样用户才能看到并进入目录。如果你只给一个r权限的话,那么就悲剧了。

他们只能干瞪眼。


五.  其他小指令。

cp  ---复制(copy),例子如下:

cp   /root/install.log    /home/uncle_cat/install_1.log     ---将“/root/install.log”这个文档复制到“/home/uncle_cat”目录下,命名为install_1.log这个名字。

mkdir  --新建文件夹(make directory)

mkdir  /tmp/testing    在/tmp目录下建立testing这个文件夹

touch  --新建空文档

touch /tmp/testing/testing 在/tmp/testing这个目录内新建空文档testing

su    --切换用户

如su - uncle_cat   切换用户成为uncle_cat,请注意,root用户可以随时切换其他用户,但是其他用户切换root需要密码哦。

rm   --删除 (remove)

rm  /home/uncle_cat/zjj/123.txt   删除/home/uncle_cat/zjj目录下123.txt这个档案

但是如果用rm删除目录的时候会报错:

rm  /home/uncle_cat/zjj

rm: cannot remove xxx  is a directory

此时我们可以通过加参数来达到删除的目的:

rm -r  /home/uncle_cat/zjj

ok,搞定!

mv  move(剪切)

mv  /root/install.log   /home/uncle_cat/install_1.log  ---将文档/root/install.log   剪切到/home/uncle_cat/目录下,并改名为install_1.log。