第五章 Linux的文件权限与目录配置

1.使用者与群组

1.1 文件拥有者

提问:Linux有这么多使用者,还分什么群组,有什么用?

由于Linux是个多人多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作,为了考虑每个人的隐私权以及每个人喜好的工作环境,因此,文件拥有者的角色就显得相当重要了。

1.2 群组概念

假设有一家人,家里有三兄弟:大毛、二毛和三毛。这个家庭是登记在大毛名下的,所以是"大毛家有三个人,分别是大毛、二毛、三毛",这三个人都有自己的房间,并且共同拥有一个客厅。

  • 使用者:由于大毛家三个人各自拥有自己的房间,所以二毛虽然可以进入三毛的房间,但是二毛不能翻三毛的东西。因为三毛房间是私人的。

  • 群组:由于共同拥有客厅,所以这三兄弟可以共享这个客厅。只有是客厅的东西,三兄弟都可以使用。

这么说来,"大毛家"就是所谓的"群组","三兄弟"就是分别为三个"使用者",而这个三个使用者是在同一个群组里的。虽然他们在同一个群组,但是我们也可以设定权限保护私有空间;也可以设定群组共享,群组里的让共同分享。

1.3 其他人的概念

今天又有个人,叫小猪,与大毛家没关系。除非大毛家认识小猪,才能让小猪进入大毛家。小猪就是所谓的"其他人"。

因此,在Linux里面任何一个文件都具有"User、Group、Others"三种身份的权限。

1.4 用户身份与群组记录的文件

在Linux系统中,默认的情况下,所有的系统上的账号与一般身份使用者,还有root的信息都记录在/etc/passwd文件内;个人密码记录在/etc/shadow文件内;Linux所有的组名都记录在/etc/group文件内。

2.Linux文件权限概念

2.1 Linux文件属性

命令"ls -al"就可以查看文件的权限属性:

查看权限

第一栏代表这个文件的类型与权限

文件的类型与权限
  • 第一自负代表文件是什么(目录、文件、链接文件等):

    • [d]:表示目录;

    • [-]:表示文件;

    • [l]:表示连接档(link file);

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

    • [c]:表示装置文件里面的串行端口设备,例如键盘、鼠标;

  • 接下来的字符,三个为一组,且均为"[rwx]"的三个参数的组合。其中"r"表示可读(read),"w"表示可写(write),"x"表示可执行(execute)。需要注意到是,这三个权限的位置不会改变,如果没有权限,就会出现"-"号而已

    • 第一组为"文件拥有者可具备的权限",以上图中"initial-setup-ks.cfg"文件为例,该文件的拥有者可以读写,但不可执行;

    • 第二组为"加入此群组的账号的权限";

    • 第三组为"非本人且没有加入本群组的其他账号的权限"。

第二栏表示又多少档名连接到此节点(i-node)

每个文件都会将它的权限与属性记录到文件系统的i-node中,因为目录树使用文件名来记录,因此每个档名就连接到一个i-node。这个属性记录的,就是有多少不同的档名连接到相同的一个i-node号码。第七章详解。

第三栏表示这个文件(或目录)的拥有者账号

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

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

第六栏为这个文件的建党日期或修改日期

第七栏为这个文件的档名

2.2 如何改变文件属性与权限

这里先介绍几个常用于群组、拥有者、各种身份的权限修改指令:

改变所属群组:chgrp

注意:要被改变的组名必须要在/etc/group文件内存在才行,否则会显示错误。

用法:

chgrp 示例

改变文件拥有者:chown

注意:用户必须是已经存在系统中的账号,在/etc/passwd文件中有记录的用户名称才能改变。

用法:

chown 示例

我们知道如何改变文件的群组与拥有者了,那么什么时候用chown恶化chgrp呢?最常见的例子就是复制文件给其他人时,这里用cp指令来说明:

cp指令用法

假设你要将.bashrc文件拷贝称为.bashrc_test档名,然后给bin这个账号,你可以这样做:

cp指令新的文件属性并没有变化

所以,这怎么做呢?.bashrc_test还是属于root所拥有,所以就需要将这个文件的拥有者与群组修改一下!通过上述知道如何修改了吧。

改变权限:chmod

权限的设定方法有两种,分别可以使用数字和符号来进行权限的变更:

  • 数字类型改变文件权限

Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。例如,文件的权限字符为"-rwxrwx---",这九个权限三个一组,其中,"r"代表数字"4","w"代表数字"2","x"代表数字"1":

owner = rwx = 4 + 2 + 1 = 7

group = rwx = 4 + 2 + 1 = 7

others = --- = 0 + 0 + 0 = 0

所以,该文件的权限数字就是770了。变更权限的指令chmod语法如下:

chmod 用法

例如,如果将.bashrc这个文件所有的权限都设定启用:

chmod 示例
  • 符号类型改变文件权限

九个权限分别是user、group、others三种身份,我们分别用u、g、o代表三种身份的权限;此外,a则代表all表示全部的身份:

符号类型

例如我们要设定一个文件的权限是"-rwxr-xr-x"时,可以做以下操作:

符号类型修改权限

此外,如果我们不知道原先的文件属性,而我们只想增加.bashrc这个文件的每个人均可写入的权限,可以做以下操作:

符号类型修改权限

2.3 目录与文件的权限意义

  • 权限对文件的重要性

文件是实际有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件等。因此,权限对于文件,它的意义是:

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

  • 权限对目录的重要性

r :表示具有读取目录结构列表的权限。
w:表示你具有移动该目录结构列表的权限:建立新的文件与目录;删除已经存在的文件与目录(无论该文件的权限为何);将已存在的文件或目录进行更名;搬移该目录内的文件、目录位置。
x:用户能否进入该目录称为工作目录。

总结一下就是:

目录、文件的权限
  • 用户操作功能与权限

有两个档名:

/dir1/file1
/dir2

假设现在在系统使用dmtsai这个账号,那么这个账号对/dir1,/dir1/file1,/dir2这三个档名来说分别需要哪些最小的权限?

示例

2.4 Linux文件种类与扩展名

文件种类

  • 正规文件(regular file):第一个字符为"-",例如"-rwxrwxrwx"。

纯文本挡(ASCII):几乎所有文件都是这种类型。
二进制文件(binary):就是Linux可执行文件。
数据格式文件(data):程序在运行中会读取某些特定格式的文件。举例来说,Linux在使用者登入时,会将登录的数据保存在/var/log/wtmp文件,该文件就是(data file),可以使用"last"指令读出来。但是使用"cat"指令时,会读出乱码。

  • 目录(directory):第一个属性为"d",例如"drwxrwxrwx"。

  • 连结档(link):类似windows中的快捷方式,第一个属性为"l"。例如"lrwxrwxrwx"。

  • 设备与装置文件(device):与系统周边及存储等相关的一些文件,通常集中在/dev这个目录下。分为两种:

区块(block)设备档:一些存储数据,以提供系统随机存取的接口设备。例如硬盘和软盘。可以随机的在硬盘的不同区块读写,这种装置就是组设备。第一个属性为"b"。
字符(character)设备文件:一些串行端口的设备,例如键盘、鼠标等。这些设备的特点是一次性读取的,不能够截断输出。第一个属性为"c"。

  • 资料接口文件(sockets):通常被用于网络上的数据连接。我们可以启动一个程序来坚挺客户端的要求,而客户端可以透过这个socket来进行数据的沟通。第一个属性为"s"。通常在/run或/tmp这些目录中看到这种文件类型。

  • 数据输送文件(FIFO,pipe):一种特殊的文件类型,主要目的在解决多个程序同时存取一个文件所造成的错误问题。第一个属性为"p"。

Linux文件扩展名

Linux没有所谓的扩展名的 ,一个Linux文件能不能被执行,与他的可执行权限有关。

"可执行的权限"和"可执行的程序代码"是两回事。例如有一个文本文件test.txt,你具有"可执行的权限",但是这个文件显然无法执行,因为它不具备可执行的程序代码。

不过通常还是会以适当的扩展名来表示该文件是什么种类的:

  • *.sh :脚本或批处理文件。

  • Z,.tar,.tar.gz,.zip,*.tgz:进过打包的压缩文件。

  • .html,.php:网页相关文件。

Linux文件长度限制

在Linux下,使用传统的Ext2/Ext3/Ext4文件系统及被CentOS7当作预设文件系统的xfs而言,针对文件的档名长度限制为:

  • 单一文件或目录的最大容许文件名为255bytes,以一个ASCII英文占用一个bytes来说,大约是255个字符长度。

3. Linux目录配置

3.1 Linux目录配置的依据—FHS

使用Linux开发产品或distributions的社群与个人实在太多了,后来就有了Filesystem Hierarchy Standard(FHS)标准出炉了。

FHS依据文件系统使用的频繁与否和是否允许使用者随意改动,将目录定义成四种交互作用的形态:

FHS

事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据:

  • /(root,根目录):与开机系统有关;

  • /usr(unix software resource):与软件安装/执行有关;

  • /var(variable):与系统运作过程有关;

根目录(/)的意义和内容

根目录很重要,所有的目录都是由根目录衍生出来的,同时也与开机/还原/系统修复等动作有关。因此FHS要求根目录不要放在大分区槽内,因为越大的分区槽你会放越多的数据,这样可能会有较多发生错误的机会。

所以FHS建议:根目录所在分区槽应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区槽,不容易发生问题。

第一部分:FHS要求必须要存在的目录

  • /bin:它放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般账号所使用,主要有cat,chmod,chown,date,mv,mkdir,cp,bash等。

  • /boot:这个目录主要放置开机要使用的文件。

  • /dev:在Linux系统上,任何装置与接口设备都是以文件的形态存在于这个目录当中的。只要透过存取这个目录底下的某个文件,就等于存取某个装置了。

  • /etc:系统主要配置文件几乎都放在这里。例如人员的账号密码文件、各种服务的启动档等。一般来说,这个目录下的文件可以让一般使用者查询,但是只有root可以修改。

  • /lib:系统的函式库非常多,/lib放的是开机时会使用的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库。

  • /media:这个目录下放置的是可移除的装置。包括软盘、光盘、DVD等都暂时挂载于此。

  • /mnt:如果想暂时挂载某些额外的装置,一般放在这个目录。

  • /opt:这个是给第三方协力软件放置的目录。

  • /run:FHS规定系统开机后所产生的各项信息配置到这个目录。

  • /sbin:Linux有很多指令用来设定系统环境,这些指令只有root才能使用来设定系统,其他用户最多只能查询。放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统需要的指令。

  • /srv:一些网络服务启动之后,这些服务所需要取用的目录。常见的服务如www,ftp等。www服务器需要的网页资料可以放在/srv/www里面。

  • /tmp:一般用户或正在执行的程序暂时放置文件的地方。这个目录任何人都可以存取的。

  • /usr:的二层FHS设定。

  • /var:第二层FHS设定,主要放变动性的数据。

第二部分:FHS建议可以存在的目录

  • /home:是系统默认的用户家目录。

  • /lib<qual>:存放与/lib不同格式的二进制函式库,例如支持64位的/lib64函式库等。

  • /root:系统管理员(root)的家目录。如果进入单人模式而仅挂载根目录时,该目录就能够拥有root的家目录,我们希望root的家目录与根目录放置在同一个分区槽中。

  • /lost+found:这个目录是使用ext2/ext3/ext4文件系统格式才会产生的一个目录,目的在于当文件发生错误时,将一些遗失的片段放到这个目录下。

  • /proc:这个目录本事是一个虚拟文件系统。放置的数据都在内存中,例如系统核心、行程信息、周边装置的状态及网络状态等。因为它的数据在内存中,所以本身不占用任何硬盘空间。

  • /sys:这个目录也是一个虚拟的文件系统,主要也是记录核心与系统硬件信息较相关的信息。也是在内存中的。

/usr的意义和内容

依据FHS定义,/usr里面放置的数据属于不可分享与不可变动的。如果你知道如何透过网络进行分区槽的挂载,那么/usr确实可以分享给局域网络内的其他主机来使用。

FHS建议所有开发者,应该将他们的数据合理的分别放置在/usr目录的此目录下,而不要自行建立该软件自己独立的目录。

一般来说,/usr的此目录建议有以下这些:

FHS要求必须存在的目录

  • /usr/bin:所有一般用户能够使用的命令都放在这里。也就是说/usr/bin与/bin是一模一样了。另外,FHS要求此目录下不应该有子目录。

  • /usr/lib:基本上与/lib功能相同,所以/lib就是链接到此目录中的。

  • /usr/local:系统管理员在本机自行安装自己下载的软件,建议安装到此目录。

  • /usr/sbin:非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)。基本功能与/sbin一样,所以也是/sbin链接到此目录中国的。

  • /usr/share:主要放置只读的数据文件,也包括共享文件。

第二部分:FHS建议可以存在的目录

  • /usr/games:与游戏相关的数据放置处。

  • /usr/include:C/C++等程序语言的档头与包含档放置处。当我们以*.tar.gz的方式安装软件时,会使用到里面的许多包含档。

  • /usr/libexec:某些不被一般使用者惯用的执行档或脚本放在这里。例如大部分的X窗口底下的操作命令。

  • /usr/lib<qual>:与/lib<qual>功能相同,所以/lib<qual>链接到此目录中。

  • /usr/src:一般原始码建议放在这里,核心原始码建议放在/usr/src/linux目录下。

/var的意义与内容

/var是在系统运作后才会逐渐占用硬盘容量的目录。因为/var目录主要针对常态性变动的文件,包括快取(cache)、登录档(log file)以及某些软件运作所产生的文件,包括程序文件(lock file,run file),或者例如mysql数据库的文件等。

第一部分:FHS要求必须存在的目录

  • /var/cache:应用程序本身运作过程中会产生的一些暂存档。

  • /var/lib:程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。例如mysql的数据库放置在/var/lib/mysql而rpm的数据库放到/var/lib/rpm。

  • /var/lock:某些装置或是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置,可能产生一些错误。因此需要给该装置上锁,确保该装置只会给单一软件使用。

  • /var/log:很重要,登录文件放置的目录。里面比较重要的文件如/var/log/messages,/var/log/wtmp(记录登入者信息)等。

  • /var/mail:放置个人电子邮箱的目录。

  • /var/run:某些程序或者服务启动后,会将他们的PID放置在这个目录下。与/run相同,这个目录链接到/run了。

  • /var/spool:通常放置一些队列数据,这些数据被使用过后通常都会被删除。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容