Linux权限详解

什么是权限

文件权限=人(角色)+ 文件属性(读[r],写[w],执行[x])

人的分类

Linux操作系统把人分成了三类:文件拥有者(owner),所属组(grouper),其他人(other)

如何查看文件属性

通过ll指令查看文件属性

这里就是ll指令显示的结果,我们来解释一下这里显示的内容分别是什么意思:

下面我们逐个解释上图每位分别表示什么:

文件的分类:

首先,第一位表示文件类型。在文件类型这一块linux和Windows的区别很大,windows的文件类型与后缀有关,比如说可执行文件的后缀就是.exe,图片的后缀是.png,word文档的后缀是.docx。而在linux,文件类型和后缀是没有关系的,linux的后缀仅仅是给用户自己看的,给用户提供一个提示符的作用,本质上是文件名的一部分,而要想查看文件的真正的类型还是得通过ll指令显示的第一个字符来进行确定。但是linux操作系统不对文件后缀有要求,可是有的Linux上的解释器却对后缀有要求,例如:我们使用gcc命令时,文件的后面必须为.c,不然则无法生成可执行文件。

- 表示的普通文件比如说:源代码文件,库文件,可执行程序,文件压缩包等等;

d 表示的是目录文件,也类似于windows下的文件夹。

c 表示的是字符设备文件,例如键盘,显示器等,我们可以在/dev/tty中看到这些文件:

b 表示的是块文件,专门用来管理硬盘的,我们可以在/dev/vda1中看到块文件:

I 表示的是链接文件,这个文件就相当于我们windows中的快捷方式,这些图标就是一个个的链接文件,最明显的特点就是我们将这些图标删除不会影响软件的本体。

p 表示的是管道文件, l 就是管道文件的一种,使用mkfifo指令就可以创建一个管道文件。

s 这个就表示的是socket文件,后面再做解释。

文件属性

解释完第一个字符的含义,我们来看紧跟在后面的九个字符的含义。

这九个字符分为三组,分别代表所有者,所属组,其他人对该文件的权限。

某类角色拥有该权限即显示对应字母,未拥有该权限即显示-

文件下三类权限的解释:
r(read)读权限:

如上图,此时我们拥有读权限。可以使用cat命令正确输出test.txt文件中的内容。

如上图,此时我们没有读权限,在使用cat命令读取test.txt文件中内容时,就显示我们没有此权限。

w(write)写权限:

若我们对文件没有写权限,则无法对文件进行写操作。如上图,我们无法用echo指令向test.txt内写入内容。

x(execute)执行权限:

为了解释执行权限,我们需要做一组对比:

首先使用nano或者vim编辑器向文件test.c中输入一段可执行代码,用cat指令查看一下文件内容,确保输入正确。

使用此文件生成一个可执行程序,名为tmp。

为了进行对比,我们复制了一份tmp的拷贝内容,命名为tmp1,并对tmp1进行权限修改(对于权限修改的操作我们在文章后面会说明)。此时这两个文件的区别只是:owner(拥有者)对tmp拥有x权限,对tmp1没有x权限。最终我们执行的时候,可以正常运行tmp,但是无法运行tmp1。

目录下三类权限的解释:

目录就类似于windows下的文件夹,目录和普通文件的的权限变化的表现是不一样的。

r(read):

若一个人没有这个文件夹的读权限,就无法查看利用ll等指令这个文件夹的内容。

此时我们对lesson1目录用有读权限,可以使用ll指令对其进行查看。

下面我们修改lesson1的权限,去除了其r的权限,我们再使用ll查看指令时,就会发现此操作不被允许(即无法执行了)。

w(write):

没有文件夹的w权限我们就没有办法在文件夹里面创建文件夹以及其他文件。

我们仍拿lesson1目录做实例:

此时lesson1目录拥有w权限,我们可以成功使用touch命令在目录内创建了一个111.txt文件。

我们对lesson1进行权限修改操作,去除了其的w权限,我们再用touch指令创建文件时,就被告知不被允许了。

x(execute):

没有文件夹的x权限则无法进入文件夹。

如图,我们没有lesson1目录的x权限,则无法使用cd命令进入lesson1文件夹。

如何修改权限

具体格式如下:

角色分为三类(u,g,o),u(user)代表的是拥有者,g(grouper)代表的是所属组,o(other)代表的是其他人,a(all)代表所有人,如果你想增加权限的话就使用+,如果你想删除权限的话就使用-,对应的权限就是r w x,当然这里的权限可以是一个组合比如说rwx,rx,wx等等,最后再加上你想要修改的文件,那么这里的操作就如下:

上述几个例子完美覆盖了所有的修改权限的操作。

八进制修改权限

除了以上操作修改权限外,我们还可以用另一种方法修改文件的权限。

如上图:是否有权限可以对应成二进制的0和1,而每3位二进制数字可以对应成1位八进制位。

所以9位的权限位可以用3位的八进制位来表示。

例如上图:lesson1的权限位为rwx rwx r-x,对应二进制位则为111 111 101,换算为八进制则为775。通过此方法我们也可以更改文件权限。

格式为:chmod  我们想改成的权限的八进制表示  文件名称

例如我们想把lesson1的权限改为r-x r-x r--,即可做以下操作。r-x r-x r--这几位对应的二进制为101 101 100,换算为八进制则为554,所以做下图操作即可。

umask的有关内容(文件创建时的默认权限)

解释之前我们要想一个问题,在我们创建文件的时候,文件都会有一个默认权限。那么这个默认权限属性是怎么来的呢?

其实一个文件的默认权限属性,是跟①起始权限和②umask值有关。

一、首先我们先看起始权限:

Linux规定:

目录的起始权限为777;

普通文件的起始权限为666。

二、然后我们来看umask权限掩码

我们可以通过umask指令查看umask值

系统默认umask值为2,第一个0表示这是个八进制数,后面三位为数值。

我们将三个八进制数字展开成二进制就变成了这样:000 000 010,将这三组数字转化为对应权限则为---  ---  - w -,而umask的概念是权限掩码就是凡事在umask中出现的权限在文件或者目录中都得去掉,linux规定:目录的起始权限为777也就是rwx rwx rwx 普通文件的起始权限是666也就是rw- rw- rw-,而umask中的other有写权限,所以目录和文件在创建的时候就得将other中的写权限去掉,所以目录在创建的时候权限就变为了rwx rwx r-x,文件的权限就变成了rw- rw- r--。

而umask值是可以修改的,如图我们将umask值改为777,再创建的文件就什么权限都没有。

我们需要特别注意的是,默认权限不是等于初始权限减去umask掩码值。而是

默认权限==初始权限&(~umask)

umask值为1的位都是要去除权限的位,将umask值按位取反,1变0,0变1,按位与之后,就能将要去除的位对应的权限删除。

小思考:为什么目录的初始权限为777?

因为我们创建一个目录,必备的权限就是要能进入这个目录,所以我们必要的权限就是x。将初始权限定义成777,去除掉第二位权限时,能使目录仍拥有x权限,所以目录的初始权限为777。

角色的修改

关于角色的修改我们只关心owner(即文件所有者)和grouper(即文件所属组)的修改。对于other(其他人),我们并不关心,因为除了owner和grouper以外的所有人都属于其他人。

具体修改的时候我们主要使用两个指令:chown(修改文件所有者),chgrp(修改文件所属组)

具体格式如下:

chown  用户名  文件名                   chown   用户名:用户名  文件名

chgrp  用户名  文件名

我们需要注意的是,修改文件所有者和所属组的时候需要登陆root账号,如果在普通用户下操作,需要使用sudo命令进行提权,否则无法进行这两种操作。(需要注意的是,尽管一个文件是我本人的,但是我无法在我的用户中将这个文件给别人,对此可以这样理解:比如我写了一个病毒,如果我能随意将文件给别人的话,那么我把这个病毒文件发给别人,别人就会中招,所以修改文件所有者和所属组的操作必须在root的权限下才能操作。)

具体例子如下:

一步:用chown命令,将a.txt的所有者从cyf改成了root。

二步:用chgrp命令,将lesson1的所属组从cyf改成了root。

三步:用chown命令,在一步内将pipe的所有者和所属组都改成了root。

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值