TechRepo是由软件学院学生科协推出的技术分享系列推送,每两周会进行一次更新,旨在为同学们提供一个分享技术、学习技术、传承技术的平台。欢迎感兴趣的同学关注我们,也欢迎有意向分享技术的同学联系我们(tech@ssast.org)了解投稿事宜。


目录

1.属主与属组

2.Linux文件属性

3.如何改变文件所有权与权限

4.Linux文件类型与扩展名

1

.属主与属组

不同于Windows系统,Linux系统经常被用于多人多任务,经常会出现很多人同时使用一部Linux主机进行不同任务的情况。在Linux系统中,每个用户都可以属于若干群组。为了考虑每个用户的隐私权和每个用户喜好的工作环境,因而Linux系统中的每个文件都有一个对应的属主(即该文件的拥有者,是Linux系统的某一个用户)和一个对应的属组(即该文件的所属群组,是Linux系统的某一个群组)(注意该文件的属主可以属于或不属于该文件的属组)。对于Linux系统中的每一个文件,其属主/其属组中的用户/其他用户(既不是该文件属主、也不属于该文件的属组的用户)可以具有对于该文件的不同操作权限。

在进一步介绍之前,为了让大家对于Linux的权限管理的重要性有更直观的理解,这里先举一些具体的例子:

场景一:

假设你的公司有两个团队在同一个Linux主机上进行代码开发,第一个团队在/projecta文件夹下开发,第二个团队在/projectb文件夹下开发,并且这两个团队的开发任务是有竞争性质的,最终只有一个团队开发出的代码会被选用。为了进行团队协作,需要本组的组员之间必须要能够互相修改对方的代码,但是其他组的组员则不能查看本组的代码文件,此时该如何是好?

一个简单的解决方案就是将第一个团队的所有开发者的账号的加入到群组A中,将第二个团队的所有开发者的账号的加入到群组B中,并将/projecta文件夹、/projectb文件夹的属组分别设置为群组A、群组B。这之后,我们只需要将这两个文件夹的各自的对属组中用户的权限设为可读可写可执行,并将这两个文件夹的各自的对其他用户的权限设为不可读不可写不可执行,便可达到我们的目的。

场景二:

假设你需要在Linux主机上的某个文件夹下备份一些私人资料,并且不希望被其他用户查看你的私人资料。这种情况下,一个很好的选择是建立一个文件夹保存你的私人资料,然后将自己设为该文件夹的属主并禁用该文件夹对其属组用户、其他用户的读、写、执行权限。通过这样的操作,你便可以安全地在Linux主机上保存自己的私人资料。


在Linux系统中,还有个特殊的用户,我们称之为root用户。root用户具有最高级别的权限,可以对系统中的所有文件执行增删查改等操作。所以在Linux系统中,普通用户并没有绝对的隐私,普通用户在Linux系统中备份私人资料时,需要注意root用户始终会对其有各种操作权限。


2

Linux文件属性

为了查看当前工作目录下的文件属性,可以在Linux的Shell中执行如下命令:

ls -al

执行完如下命令后,会看到类似于下图的输出:

我们以输出的第四行为例,可以看到该行上共有七个字段。分解来看,第一个字段"-rwxrw-r--"代表这个文件的类型与权限,第三个字段"jxq"代表了该文件的属主,第四个字段"jxq"代表了该文件的属组(注意在这里用户"jxq"属于群组"jxq"),其余字段则记录了该文件的大小、档名等其他信息。输出的其他行可以用同样的方法解读。

接下来,我们将详细地分析第一个字段"-rwxrw-r--"。输出的每一行的第一个字段都具有类似的形式,记录了该文件的类型和权限。

具体来说,该字段的第一个字符代表了这个文件的类型是目录、文件还是链接:

当为[ d ]则是目录,例如上图档名为『..』的那一行;

当为[ - ]则是文件,例如上图档名为『test2』那一行;

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

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

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

该字段的第2-10个字符,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]。

第一组(即第2-4个字符)为该文件属主的权限,以"rwx"为例, 该文件的属主可以读、写、执行该文件;

第二组(即第5-7个字符)为该文件属组中的用户的权限,以"rw-"为例, 该文件的属组中的用户可以读、写该文件,但不能执行;

第三组(即第8-10个字符)为其他用户(既不是该文件属主、又不属于该文件属组的用户)的权限,以"r--"为例,其他用户可以读取该文件,但不能写或执行。


3

如何改变文件所有权与权限

(1)改变文件所有权:chown和chgrp

chown命令用于改变文件的所有权,基本语法如下:

chown [OPTION] ... 

[OWNER][:[GROUP]] FILE...

这条命令将文件FILE的属主更改为OWNER,属组更改为GROUP。

下面这条命令将文件days的属主更改为lewis,而将其属组更改为root组:

$ ls -l days

//查看当前days的所有权

-rw-r--r-- 1 guest guest 57 2008-11-24 17:00 days


$ sudo chown lewis:root days 

//修改days的所有权


$ ls -l days

//查看修改后days的所有权

-rw-r--r-- 1 lewis root 57 2008-11-24 17:00 days

如果只需要更改文价属主,那么可以省略参数“:GROUP”。下面这条命令把days文件的属主更改为guest用户,而保留其属组设置:

$ sudo chown guest days

相应的,可以省略参数OWNER,而只改变文件的属组。注意此时不能省略GROUP前的冒号“:”。下面这条命令把days的属组更改为nogroup组,保留属主设置。

$ sudo chown :nogroup days

chown命令提供了-R选项, 用于改变一个目录及其下的所有文件和子目录的所有权设置。下面这条命令将iso/ 和其下所有文件交给用户lewis:

$ sudo chown -R lewis iso/

Linux单独提供了另一个命令chgrp用于设置文件的属组。下面这条命令将文件days的属组设置为nogroup组:

$ sudo chgrp nogroup days

chgrp同样可以使用-R选项递归地对一个目录实施设置。


(2)改变文件权限:chmod

chmod用于改变一个文件的权限。这个命令使用“用户组+/-权限”的表述方式来增加/删除相应的权限。具体来说,用户组包括了文件属主(u),文件属组(g),其他人(o)和所有人(a)。而权限则包括了读取(r),写入(w),执行(x)。例如,下面这条命令增加了属主对文件days的执行权限:

$ chmod u+x days

而下面这条命令删除所有人(属主、属组和其他人)对days的执行权限:

$ chmod a-x days

还可以通过“用户组=权限”的规则直接设置文件权限。例如下面这条命令赋予属主和属组的读取/写入权限,而仅赋予其他用户读取权限:

$ chmod ug=rw,o=r days

最后一条常用规则是“用户组1=用户组2”,用于将用户组1的权限和用户组2的权限设为完全相同。下面这条命令将其他人的权限设置为和属主的权限一样:

$ chmod o=u days


(3)文件权限的八进制表示

chmod的助记符尽管意义明确,但有时候显得太罗嗦了。更常用的是chmod的八进制语法。

首先介绍以下八进制记法的来历。每一组权限rwx在计算机中实际占用了3位,每一位都有两种情况。这样计算机就可以使用二进制来表示每一个权限位,其中0表示没有设置,而1表示设置。例如rwx就被表示成111,-w-表示为010等。进而可以用一个八进制数来表示一组权限。例如rwx为7,r-x为5,等等。

这样一来,完整的9位权限位就可以用3个八进制数来表示了。例如“rwxr-x--x”就对应于751。下面这条命令将文件prog的所有权赋予属主,而属组用户和其他人仅有执行权限:

$ chmod 711 prog


4

Linux文件类型与扩展名

Linux中的一切都被表示成文件的形式,包括程序进程、硬件设备、通信通道甚至是内核数据结构等。Linux中一共有7种文件类型,下面简要介绍一下阅读文件类型的方法。

用带-l选项的ls命令可查看文件类型。

$ ls -l

总用量21460

drwxr-xr-x2 lewis lewis 40962008-12-03 16:43 account

-rw-r--r--1 lewis lewis 159942008-11-13 20:14 ask.tar.gz

-rw-r--r-- 1 lewis lewis 1782008-12-13 15:19 ati3d

...

命令显示的第1个字符就是文件类型。所有的7种文件类型及其表示符号如下所示


文件类型

符号

文件类型

符号

普通文件

-

本地域套接口

s

目录

d

有名管道

p

字符设备文件

c

符号链接

l

块设备文件

b



字符设备指的是能够从它那里读取成字符序列的设备,如磁带和串行线路,通常又被称为顺序访问设备。块设备指的是用来存储数据并对其各部分内容提供同等访问权的设备,如磁盘,通常又被称为随机访问设备。

本地域套接口和有名管道都是有关进程间通信的。

符号链接类似于Windows下的快捷方式,用户可以通过别名去访问另一个文件。

Linux下一个文件是否能被执行,与扩展名没有太大的关系。带有扩展名的文件,只能代表程序的关联,并不能说明文件是可以执行。当然现在的Linux桌面环境中,文件的类型是和相应的程序关联的。在我们打开某个文件时,系统会自动判断用哪个应用程序打开。



文案:张欣炜 金昕祺

排版:蔡韫睿

审核:骆炳君