linux 文件权限

一、文件的属性

[root@study ~]# ls -al
total 48
dr-xr-x---.  5    root     root    4096  May 29 16:08 .
dr-xr-xr-x. 17    root     root    4096  May  4 17:56 ..
-rw-------.  1    root     root    1816  May  4 17:57 anaconda-ks.cfg
-rw-------.  1    root     root     927  Jun  2 11:27 .bash_history
-rw-r--r--.  1    root     root      18  Dec 29  2013 .bash_logout
-rw-r--r--.  1    root     root     176  Dec 29  2013 .bash_profile
-rw-r--r--.  1    root     root     176  Dec 29  2013 .bashrc
drwxr-xr-x.  3    root     root      17  May  6 00:14 .config         
[    1    ][  2 ][   3  ][  4 ][    5   ][    6     ] [       7          ]
[  权限   ][链接][拥有者][群组][文件大小][ 修改日期 ] [      文件名        ]

由于本章后续的chgrp, chown等指令可能都需要使用root的身份才能够处理,所以这里建议您以root的身份来学习!要注意的是, 我们还是不建议你直接使用 root 登陆系统,建议使用 su - 这个指令来切换身份喔!离开 su - 则使用 exit 回到 dmtsai 的身份即可!

ls是“list”的意思,重点在显示文件的文件名与相关属性。而选项“-al”则表示列出所有的文件详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为“ . ”的文件)。如上所示,在你第一次以root身份登陆Linux时, 如果你输入上述指令后,应该有上列的几个东西,先解释一下上面七个字段个别的意思:

 

  • 第一栏代表这个文件的类型与权限(permission):

这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个字符:(图5.2.1及图5.2.2内的权限并无关系)

文件的类型与权限之内容

  • 第一个字符代表这个文件是“目录、文件或链接文件等等”:

    • 当为[ d ]则是目录,例如上表文件名为“.config”的那一行;
    • 当为[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
    • 若是[ l ]则表示为链接文件(link file);
    • 若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
    • 若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)。
  • 接下来的字符中,以三个为一组,且均为“rwx” 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

    • 第一组为“文件拥有者可具备的权限”,以“initial-setup-ks.cfg”那个文件为例, 该文件的拥有者可以读写,但不可执行;
    • 第二组为“加入此群组之帐号的权限”;
    • 第三组为“非本人且没有加入本群组之其他帐号的权限”。

 

例题1:若有一个文件的类型与权限数据为“-rwxr-xr--”,请说明其意义为何?答:先将整个类型与权限数据分开查阅,并将十个字符整理成为如下所示:

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

1 为:代表这个文件名为目录或文件,本例中为文件(-); 234为:拥有者的权限,本例中为可读、可写、可执行(rwx); 567为:同群组使用者权限,本例中为可读可执行(rx); 890为:其他使用者权限,本例中为可读(r),就是只读之意

同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)就是了。

另外,目录与文件的权限意义并不相同,这是因为目录与文件所记录的数据内容不相同所致。 由于目录与文件的权限意义非常的重要,所以鸟哥将他独立到5.2.3节中的目录与文件之权限意义中再来谈。

  • 第二栏表示有多少文件名链接到此节点(i-node):

每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个文件名就会链接到一个i-node啰!这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码去就是了。 关于i-node的相关数据我们会在第七章谈到文件系统时再加强介绍的。

  • 第三栏表示这个文件(或目录)的“拥有者帐号”

  • 第四栏表示这个文件的所属群组

在Linux系统下,你的帐号会加入于一个或多个的群组中。举刚刚我们提到的例子,class1, class2, class3均属于projecta这个群组,假设某个文件所属的群组为projecta,且该文件的权限如图5.2.2所示(-rwxrwx---), 则class1, class2, class3三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。 但如果是不属于projecta的其他帐号,对于此文件就不具有任何权限了。

  • 第五栏为这个文件的容量大小,默认单位为Bytes;

  • 第六栏为这个文件的创建日期或者是最近的修改日期:

这一栏的内容分别为日期(月/日)及时间。如果这个文件被修改的时间距离现在太久了,那么时间部分会仅显示年份而已。 如下所示:

[root@192 ~]# ll /etc/services 
-rw-r--r--. 1 root root 670293 6月   7 2013 /etc/services
[root@192 .ssh]# ll
总用量 12
-rw-------. 1 root root 1679 7月   2 19:50 id_rsa
-rw-r--r--. 1 root root  408 7月   2 19:50 id_rsa.pub
-rw-r--r--. 1 root root  176 7月   2 19:37 known_hosts

# 如上所示,/etc/services 为 2013 年所修改过的文件,离现在太远之故,所以只显示年份;
# 至于 /root/initial-setup-ks.cfg 是今年 (2015) 所创建的,所以就显示完整的时间了。

 如果想要显示完整的时间格式,可以利用ls的选项,亦即:“ls -l --full-time”就能够显示出完整的时间格式了!包括年、月、日、时间喔。 另外,如果你当初是以繁体中文安装你的Linux系统,那么日期字段将会以中文来显示。 可惜的是,中文并没有办法在纯文本的终端机模式中正确的显示,所以此栏会变成乱码。 那你就得要使用“export LC_ALL=en_US.utf8”来修改语系喔!

如果想要让系统默认的语系变成英文的话,那么你可以修改系统配置文件“/etc/locale.conf”

[root@192 .ssh]# ls -l --full-time
总用量 12
-rw-------. 1 root root 1679 2024-07-02 19:50:13.675534746 +0800 id_rsa
-rw-r--r--. 1 root root  408 2024-07-02 19:50:13.675534746 +0800 id_rsa.pub
-rw-r--r--. 1 root root  176 2024-07-02 19:37:06.709562029 +0800 known_hosts
 

  • 第七栏为这个文件的文件名

这个字段就是文件名了。比较特殊的是:如果文件名之前多一个“ . ”,则代表这个文件为“隐藏文件”,例如上表中的.config那一行,该文件就是隐藏文件。 你可以使用“ls”及“ls -a”这两个指令去感受一下什么是隐藏文件啰!

二、如何改变文件属性与权限

2.1、我们先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令,如下所示:

  • chgrp  (change group):改变文件所属群组
  • chown :改变文件拥有者
  • chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

2.2.1、chgrp :改变文件所属群组

[root@192 123]# ll
总用量 0
drwxr-xr-x. 2 root root 19 7月   4 11:19 123
drwxr-xr-x. 2 root root  6 7月   2 17:17 dd
-rw-r--r--. 1 root root  0 7月   4 11:17 file1
[root@192 123]# cd 123/
[root@192 123]# ll
总用量 0
-rw-r--r--. 1 root root 0 7月   4 11:19 test1
 

例1、修改123所属群组为zhaosheng

选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录
     都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
[root@192 123]# chgrp zhaosheng 123
[root@192 123]# ll
总用量 0
drwxr-xr-x. 2 root zhaosheng 19 7月   4 11:19 123
drwxr-xr-x. 2 root root       6 7月   2 17:17 dd
-rw-r--r--. 1 root root       0 7月   4 11:17 file1

2.2.改变文件拥有者 chown

[root@study ~]# chown [-R] 帐号名称 文件或目录
[root@study ~]# chown [-R] 帐号名称:群组名称 文件或目录
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更
[root@localhost 123]# ll
总用量 0
drwxr-xr-x. 2 root zhaosheng 19 7月   4 11:19 123
drwxr-xr-x. 2 root root       6 7月   2 17:17 dd
-rw-r--r--. 1 root root       0 7月   4 11:17 file1

例1、把其中的file1拥有者改成zhaosheng

[root@localhost 123]# chown zhaosheng file1 
[root@localhost 123]# ll
总用量 0
drwxr-xr-x. 2 root      zhaosheng 19 7月   4 11:19 123
drwxr-xr-x. 2 root      root       6 7月   2 17:17 dd
-rw-r--r--. 1 zhaosheng root       0 7月   4 11:17 file1
 

例2、把其中123文件夹及其中的文件全部改成zhaosheng

[root@localhost 123]# chown -R zhaosheng 123/
[root@localhost 123]# ll
总用量 0
drwxr-xr-x. 2 zhaosheng zhaosheng 19 7月   4 11:19 123
drwxr-xr-x. 2 root      root       6 7月   2 17:17 dd
-rw-r--r--. 1 zhaosheng root       0 7月   4 11:17 file1
[root@localhost 123]# cd /123
-bash: cd: /123: 没有那个文件或目录
[root@localhost 123]# cd 123/
[root@localhost 123]# ll
总用量 0
-rw-r--r--. 1 zhaosheng root 0 7月   4 11:19 test1

2.3改变权限 chmod

文件权限的改变使用的是chmod这个指令,但是,权限的设置方法有两种, 分别可以使用数字或者是符号来进行权限的变更.

2.3.1数字类型改变文件权限        

Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限, 先复习一下刚刚上面提到的数据:文件的权限字符为:“-rwxrwxrwx”, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

> r:4 > w:2 > x:1

chmod [-R] xyz 文件或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

如果要把这个file1设置都启用

chmod 777 file1

[root@localhost 123]# chmod 777 file1 
[root@localhost 123]# ll
总用量 0
drwxr-xr-x. 2 zhaosheng zhaosheng 19 7月   4 11:19 123
drwxr-xr-x. 2 root      root       6 7月   2 17:17 dd
-rwxrwxrwx. 1 zhaosheng root       0 7月   4 11:17 file1
 

符号类型改变文件权限

还有一个改变权限的方法呦!从之前的介绍中我们可以发现,基本上就九个权限分别是(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@localhost 123]# chmod u=rwx,go=rx file1 
[root@localhost 123]# ll
总用量 0
drwxr-xr-x. 2 zhaosheng zhaosheng 19 7月   4 11:19 123
drwxr-xr-x. 2 root      root       6 7月   2 17:17 dd
-rwxr-xr-x. 1 zhaosheng root       0 7月   4 11:17 file1
 

 那么假如是“ -rwxr-xr-- ”这样的权限呢?可以使用“ chmod u=rwx,g=rx,o=r filename ”来设置。此外,如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均可写入的权限, 那么我就可以使用:

[root@localhost 123]# ll
总用量 0
drwxr-xr-x. 2 zhaosheng zhaosheng 19 7月   4 11:19 123
drwxr-xr-x. 2 root      root       6 7月   2 17:17 dd
-rwxr-xr-x. 1 zhaosheng root       0 7月   4 11:17 file1
[root@localhost 123]# chmod a+w file1 
[root@localhost 123]# ll
总用量 0
drwxr-xr-x. 2 zhaosheng zhaosheng 19 7月   4 11:19 123
drwxr-xr-x. 2 root      root       6 7月   2 17:17 dd
-rwxrwxrwx. 1 zhaosheng root       0 7月   4 11:17 file1

三、目录与文件之权限意义:

1、权限对文件的重要性

文件是实际含有数据的地方,包括一般文本文件、数据库内容档、二进制可可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:

  • r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
  • w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
  • x (eXecute):该文件具有可以被系统执行的权限。

那个可读(r)代表读取文件内容是还好了解,那么可执行(x)呢?这里你就必须要小心啦! 因为在Windows下面一个文件是否具有执行的能力是借由“ 扩展名 ”来判断的, 例如:.exe, .bat, .com 等等,但是在Linux下面,我们的文件是否能被执行,则是借由是否具有“x”这个权限来决定的!跟文件名是没有绝对的关系的!

至于最后一个w这个权限呢?当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限!对于文件的rwx来说, 主要都是针对“文件的内容”而言,与文件文件名的存在与否没有关系喔!因为文件记录的是实际的数据嘛!

2、权限对目录的重要性

文件是存放实际数据的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录文件名清单,文件名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?

  • r (read contents in directory):

    表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!

  • w (modify contents of directory):

    这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构清单的权限,也就是下面这些权限:

    • 创建新的文件与目录;
    • 删除已经存在的文件与目录(不论该文件的权限为何!)
    • 将已存在的文件或目录进行更名;
    • 搬移该目录内的文件、目录位置。 总之,目录的w权限就与该目录下面的文件名异动有关就对了啦!
  • x (access directory):

    咦!目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是使用者能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登陆Linux时, 你所在的主文件夹就是你当下的工作目录。而变换目录的指令是“cd”(change directory)啰!

 总结 现在假设“文件是一堆文件数据夹”,所以你可能可以在上面写/改一些数据。而“目录是一堆抽屉”,因此你可以将数据夹分类放置到不同的抽屉去。 因此抽屉最大的目的是拿出/放入数据夹喔!现在让我们汇整一下数据:

元件内容叠代物件rwx
文件详细数据data文件数据夹读到文件内容修改文件内容执行文件内容
目录文件名可分类抽屉读到文件名修改文件名进入该目录的权限(key

 

大致的目录权限概念是这样,下面我们来看几个范例,让你了解一下啥是目录的权限啰!

例题:有个目录的权限如下所示:

drwxr--r--  3  root  root  4096   Jun 25 08:35   .ssh

系统有个帐号名称为vbird,这个帐号并没有支持root群组,请问vbird对这个目录有何权限?是否可切换到此目录中?答:vbird对此目录仅具有r的权限,因此vbird可以查询此目录下的文件名列表。因为vbird不具有x的权限,亦即 vbird 没有这个抽屉的钥匙啦! 因此vbird并不能切换到此目录内!(相当重要的概念!) |

上面这个例题中因为vbird具有r的权限,因为是r乍看之下好像就具有可以进入此目录的权限,其实那是错的。 能不能进入某一个目录,只与该目录的x权限有关啦!此外, 工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r或w的权限。

        

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值