鸟哥Linux-第六章、Linux 的档案权限与目录配置

1. 使用者与群组

  • (1). 档案拥有者

    初次接触Linux的朋友大概会觉得很怪异,怎么『Linux有这么多使用者, 还分什么群组,有什么用?』。这个『用户与群组』的功能可是相当健全而好用的一个安全防护呢!怎么说呢? 由于Linux是个多人多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作的情况发生, 为了考虑每个人的隐私权以及每个人喜好的工作环境,因此,这个『档案拥有者』的角色就显的相当的重要了!

    例如当你将你的e-mail情书转存成档案之后,放在你自己的家目录,你总不希望被其他人看见自己的情书吧? 这个时候,你就把该档案设定成『只有档案拥有者,就是我,才能看不修改这个档案的内容』, 那么即使其他人知道你有这个相当『有趣』的档案,不过由于你有设定适当的权限, 所以其他人自然也就无法知道该档案的内容啰!

  • (2). 群组概念

    那么群组呢?为何要配置文件案还有所属的群组?其实,群组最有用的功能之一,就是当你在团队开发资源的时候啦! 举例来说,假设有两组专题生在我的主机里面,第一个与题组别为projecta,里面的成员有 class1, class2, class3三个;第二个与题组别为projectb,里面的成员有class4, class5, class6。 这两个专题之间是有竞争性质的,但却要缴交同一份报告。每组的组员之间必须要能够互相修改对方的数据, 但是其他组的组员则不能看到本组自己的档案内容,此时该如何是好?

    在Linux底下这样的限制是很简单啦!我可以经由简易的档案权限设定,就能限制非自己团队(亦即是群组啰) 的其他人不能够阅览内容啰!而且亦可以让自己的团队成员可以修改我所建立的档案! 同时,如果我自己还有私人隐密的文件,仍然可以设定成让自己的团队成员也看不到我的档案数据。 很方便吧!

    另外,如果teacher这个账号是projecta与projectb这两个专题的老师, 他想要同时观察两者的进度,因此需要能够进入这两个群组的权限时,你可以设定teacher这个账号, 『同时支持projecta与projectb这两个群组!』,也就是说:每个账号都可以有多个群组的支持呢!

  • (3). 其他人概念

    好了,那么今天又有个人,叫做张小猪,他是张小猪家的人,与王家没有关系啦! 这个时候,除非王家认识张小猪,然后开门让张小猪进来王家,否则张小猪永远没有办法进入王家, 更不要说进到王三毛的房间啦!不过,如果张小猪透过关系认识了三毛,并且跟王三毛成为好朋友, 那么张小猪就可以透过三毛进入王家啦!呵呵!没错!那个张小猪就是所谓的『其他人,Others』啰!

    因此,我们就可以知道啦,在Linux里面,任何一个档案都具有『User, Group及Others』三种身份的个别权限

  • (4). Linux用户身份与群组记录的档案
    在我们Linux系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有那个root的相关信息, 都是记录在/etc/passwd这个档案内的。至于个人的密码则是记录在/etc/shadow这个档案下。 此外,Linux所有的组名都纪录在/etc/group内!这三个档案可以说是Linux系统里面账号、密码、群组信息的集中地啰! 不要随便删除这三个档案啊! ^_^

2. Linux档案权限概念

2.1 Linux文件属性

在你以root的身份登入Linux之后,下达『 ls -al 』看看,会看到底下的几个咚咚: ![这里写图片描述](https://img-blog.csdn.net/20150412152126125) ls是『list』的意思,重点在显示档案的文件名与相关属性。而选项『-al』则表示列出所有的档案详细的权限与属性 (包括隐藏文件,就是文件名第一个字符为『 . 』的档案)。 文件属性的示意图如下: ![这里写图片描述](https://img-blog.csdn.net/20150412153332403) ***(1). 第一栏代表这个档案的类型与权限*** 这一栏其实共有十个字符:(如下图档案的类型与权限之内容) ![这里写图片描述](https://img-blog.csdn.net/20150412154249184)
  • 第一个字符代表这个档案是『目录、档案或链接文件等等』:
    • 当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
    • 当为[ - ]则是档案,例如上表档名为『install.log』那一行;
    • 若是[ l ]则表示为连结档(link file);
    • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
  • 接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
    • 第一组为『档案拥有者的权限』;
    • 第二组为『同群组的权限』;
    • 第三组为『其他非本群组的权限』。

(2). 第二栏表示有多少档名连结到此节点(i-node)

每个档案都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个i-node啰!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码去就是了。

(3). 第三栏表示这个档案(戒目彔)的『拥有者账号』

(4). 第四栏表示这个档案的所属群组

(5). 第五栏为这个档案的容量大小,默认单位为bytes;

(6). 第六栏为这个档案的建档日期或者是最近的修改日期:

如果想要让系统默认的语系变成英文的话,那么你可以修改系统配置文件『/etc/sysconfig/i18n』,利用nano来修改该档案的内容
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第1张图片

(7). 第七栏为这个档案的档名

Linux档案权限的重要性:
其实,最大的用途是在『数据安全性』上面的。

  • 系统保护的功能:
  • 团队开发软件或数据共享的功能:
  • 未将权限设定妥当的危害:

2.2 如何改变文件属性与权限: chgrp, chown, chmod

(1). 改变所属群组,chgrp
这个指令就是change group的缩写嘛!^_^!不过,请记得,要被改变的组名必项要在/etc/group档案内存在才行,否则就会显示错误!

选项与参数 含义
-R 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案、目录 都更新成为这个群组之意。常常用在变更某一目录内所有的档案之情况。

假设你是以root的身份登入Linux系统的,那么在你的家目彔内有一个install.log的档案, 如何将该档案的群组改变一下呢?假设你已经知道在/etc/group里面已经存在一个名为users的群组, 但是testing这个群组名字就不存在/etc/group当中了,此时改变群组成为users与testing分别会有什么现象发生呢?观察下图!
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第2张图片

(2). 改变档案拥有者,chown
如何改变一个档案的拥有者呢?很简单呀!既然改变群组是change group,那么改变拥有者就是change owner啰!BINGO!那就是chown这个指令的用途,要注意的是, 用户必项是已经存在系统中的账号,也就是在/etc/passwd 这个档案中有纪录的用户名称才能改变。
chown的用途还满多的,他还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录或档案同时更改档案拥有者的话,直接加上 -R 的选项即可!

范例1:将install.log的拥有者改为bin这个账号:
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第3张图片

范例2:将install.log的拥有者与群组改回为root:
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第4张图片
Tips: 事实上,chown也可以使用『chown user.group file』,亦即在拥有者与群组间加上小数点『.』也行! 不过很多朋友设定账号时,喜欢在账号当中加入小数点(例如scau.tsai这样的账号格式),这就会造成系统的误判了! 所以我们比较建议使用冒号『:』来隔开拥有者与群组啦!此外,chown也能单纯的修改所属群组呢! 例如『chown .sshd install.log』就是修改群组~看到了吗?就是那个小数点的用途!

知道如何改变档案的群组与拥有者了,那么什么时候要使用chown或chgrp呢?或讲你会觉得奇怪吧? 是的,确实有时候需要变更档案的拥有者的,最常见的例子就是在复制档案给你之外的其他人时, 我们使用最简单的cp指令来说明好了:
这里写图片描述

假设你今天要将.bashrc这个档案拷贝成为.bashrc_test档名,且是要给bin这个人,你可以这样做:
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第5张图片
由于复制行为(cp)会复制执行者的属性与权限,所以!怎么办?.bashrc_test还是属于root所拥有, 如此一来,即使你将档案拿给bin这个使用者了,那他仍然无法修改的(看属性/权限就知道了吧), 所以你就必项要将这个档案的拥有者不群组修改一下啰!

(3). 改变权限,chmod
档案权限的改变使用的是chmod这个指令,但是,权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。我们就来谈一谈:
(a)数字类型改变档案权限

Linux档案的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限,档案的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

权限字母 数字
r 4
w 2
x 1

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= — = 0+0+0 = 0

变更权限的指令chmod的语法是这样的:
这里写图片描述

选项与参数 含义
xyz 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都会变更

举例来说,如果要将.bashrc这个档案所有的权限都设定启用,那么就下达:
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第6张图片

(b)符号类型改变档案权限

还有一个改变权限的方法呦!从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以藉由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x啰!也就是可以使用底下的方式来看:

鸟哥Linux-第六章、Linux 的档案权限与目录配置_第7张图片

范例1:user(u):具有可读、可写、可执行的权限;group与others(g/o):具有可读可执行的权限
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第8张图片
此外,如果我不知道原先的文件属性,而我只想要增加.bashrc这个档案的每个人均可执行的权限, 那么我就可以使用:
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第9张图片

2.3 目录与档案之权限意义

  • 权限对档案的重要性
    档案是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。 因此,权限对于档案来说,他的意义是这样的:
    • r (read):可读取此一档案的实际内容,如读取文本文件的文字内容等;
    • w (write):可以编辑、新增或者是修改该档案的内容(但不含删除该档案);
    • x (execute):该档案具有可以被系统执行的权限。
  • 权限对目录的重要性
    目录主要的内容在记录文件名列表,文件名与目录有强烈的关联啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?
    • r(read contents in directory):
      表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
    • w (modify contents of directory):
      这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有改动该目录结构列表的权限,也就是底下这些权限:
      • 建立新的档案与目录;
      • 删除已经存在的档案与目彔(不论该档案的权限为何!)
      • 将已存在的档案或目录进行更名;
      • 搬移该目录内的档案、目录位置。
    • x (access directory):
      目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!
      例题1:
      有个目录的权限如下所示:
      drwxr–r– 3 root root 4096 Jun 25 08:35 .ssh
      系统有个账号名称为scau,这个账号并没有支持root群组,请问scau对这个目录有何权限?是否可切换到此目录中?
      答:
      scau对此目录仅具有r的权限,因此scau可以查询此目录下的文件名列表。因为scau不具有x的权限, 因此scau并不能切换到此目录内!(相当重要的概念!)

      例题2:
      (1)先用root的身份建立所需要的档案与目录环境
      我们用root的身份在所有人都可以工作的/tmp目彔中建立一个名为testing的目录, 该目录的权限为744且目录拥有者为root。另外,在testing目录下在建立一个空的档案, 档名亦为testing。建立目录可用mkdir(make directory),建立空档案可用touch来处理。 所以过程如下所示:
      鸟哥Linux-第六章、Linux 的档案权限与目录配置_第10张图片
      (2)一般用户的读写权限为何?观察中
      在上面的例子中,虽然目录是744的权限设定,一般用户应该能有 r 的权限, 但这样的权限使用者能做啥事呢?假设系统中有有一个账号名为 scau 的, 我们可以透过『 su - scau 』这个指令来变换身份喔!看看底下的操作先!
      鸟哥Linux-第六章、Linux 的档案权限与目录配置_第11张图片
      (3)如果该目录属于用户本身,会有什么状况?
      上面的练习我们知道了只有r确实可以让用户读取目录的文件名列表,不过详细的信息却还是读不到的, 同时也不能将该目录变成工作目录(用 cd 进入该目彔之意)。那如果我们让该目录变成用户的, 那么用户在这个目录底下是否能够删除档案呢?底下的练习做看看:
      鸟哥Linux-第六章、Linux 的档案权限与目录配置_第12张图片
      透过上面这个简单的步骤,你就可以清楚的知道, x 在目录当中是不『能否进入该目录』有关, 至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建档案或目录, 是个很重要的参数啊!这样可以理解了吗?! ^_^

2.4 Linux档案种类与扩展名

***(1). 档案种类:***
  • 正规档案(regular file ):
    就是一般我们在进行存取的类型的档案,在由 ls -al 所显示出来的属性方面,第一个字符为 [ - ],例如 [-rwxrwxrwx ]。另外,依照档案的内容,又大略可以分为:
    • 纯文本档(ASCII):
      这是Linux系统中最多的一种文件类型啰, 称为纯文本档是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为设定的档案都属于这一种文件类型。 举例来说,你可以下达『 cat ~/.bashrc 』就可以看到该档案的内容。 (cat 是将一个档案内容读出来的指令)
    • 二进制文件(binary):
    • 数据格式文件(data):
      有些程序在运作的过程当中会读取某些特定格式的档案,那些特定格式的档案可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登入时,都会将登录的数据记录在 /var/log/wtmp那个档案内,该档案是一个data file,他能够透过last这个指令读出来! 但是使用cat时,会读出乱码~因为他是属于一种特殊格式的档案。瞭乎?
  • 目录(directory):
    就是目录啰~第一个属性为 [ d ],例如 [drwxrwxrwx]。
  • 连结档(link):
    就是类似Windows系统底下的快捷方式啦! 第一个属性为 [ l ](英文L的小写),例如 [lrwxrwxrwx] ;
  • 设备与装置文件(device):
    与系统周边及储存等相关的一些档案, 通常都集中在/dev这个目录之下!通常又分为两种:
    • 区块(block)设备档 :
      就是一些储存数据, 以提供系统随机存取的接口设备,举例来说,硬盘与软盘等就是啦! 你可以随机的在硬盘的不同区块读写,这种装置就是成组设备啰!你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ]喔!
    • 字符(character)设备文件:
      亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!这些设备的特色就是『一次性读取』的,不能够截断输出。 举例来说,你不可能让鼠标『跳到』另一个画面,而是『滑动』到另一个地方啊!第一个属性为 [ c ]。
  • 资料接口文件(sockets):
    既然被称为数据接口文件, 想当然尔,这种类型的档案通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/var/run这个目录中看到这种文件类型了。
  • 数据输送文件(FIFO, pipe):
    FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个档案所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。

(2). Linux档案扩展名:

  • *.sh :
    脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名就编成 .sh 啰;
  • *Z,.tar,.tar.gz,.zip,.tgz:
    经过打包的压缩文件。这是因为压缩软件分别为 gunzip,tar 等等的,由于不同的压缩软件,而取其相关的扩展名啰!
  • .html,.php:
    网页相关档案,分别代表 HTML 语法与 PHP 语法的网页档案啰! .html 的档案可使用网页浏览器来直接开启,至于 .php 的档案, 则可以透过 client 端的浏览器来 server 端浏览,以得到运算后的网页结果呢!

(3). Linux档案长度限制:
在Linux底下,使用预设的Ext2/Ext3文件系统时,针对档案的档名长度限制为:

  • 单一档案或目录的最大容许文件名为 255 个字符;
  • 包含完整路径名称及目录 (/) 之完整档名为 4096 个字符。

(4). Linux文件名的限制:
由于Linux在文字接口下的一些指令操作关系,一般来说,你在设定Linux底下的文件名时, 最好可以避免一些特殊字符比较好!例如底下这些:
* ? > < ; & ! [ ] | \ ’ ” ` ( ) { }

3. Linux目录配置

3.1 Linux目录配置的依据–FHS:/, /usr, /var

因为利用Linux来开发产品或distributions的社群/公司与个人实在太多了, 如果每个人都用自己的想法来配置档案放置的目录,那么将可能造成徆很多管理上的困扰。 你能想象,你进入一个企业之后,所接触到的Linux目录配置方法竟然跟你以前学的完全不同吗? 很难想象吧~所以,后来就有所谓的Filesystem Hierarchy Standard (FHS)标准的出炉了!

FHS依据文件系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:

鸟哥Linux-第六章、Linux 的档案权限与目录配置_第13张图片

  • 可分享的:
    可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
  • 不可分享的:
    自己机器上面运作的装置档案或者是与程序有关的socket档案等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
  • 不变的:
    有些数据是不会经常变动的,跟随着distribution而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
  • 可变动的:
    经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。

事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

  • / (root, 根目彔):与开机系统有关;
  • /usr (unix software resource):与软件安装/执行有关;
  • /var (variable):与系统运作过程有关。

(1). 根目录 (/)的意义与内容:
在FHS的要求方面,他希望根目录不要放在非常大的分割槽内, 因为越大的分割槽妳会放入越多的数据,如此一来根目录所在分割槽就可能会有较多发生错误的机会。

因此FHS标准建议:根目录(/)所在分割槽应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。

FHS定义出根目录(/)底下应该要有底下这些次目录的存在才好:

鸟哥Linux-第六章、Linux 的档案权限与目录配置_第14张图片

鸟哥Linux-第六章、Linux 的档案权限与目录配置_第15张图片
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第16张图片


鸟哥Linux-第六章、Linux 的档案权限与目录配置_第17张图片
这里写图片描述

除了这些目录的内容之外,另外要注意的是,因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分割槽则是在开机完成之后才会持续的进行挂载的行为。就是因为如此,因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分割槽去!那哪些目录不可与根目彔分开呢?有底下这些:

  • /etc:配置文件
  • /bin:重要执行档
  • /dev:所需要的装置档案
  • /lib:执行档所需的函式库与核心所需的模块
  • /sbin:重要的系统执行文件

(2). /usr 的意义与内容:
依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的(shareable, static),

很多读者都会误会/usr为user的缩写,其实usr是Unix Software Resource的缩写, 也就是『Unix操作系统软件资源』所放置的目录,而不是用户的数据啦!这点要注意。 FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。

一般来说,/usr的次目录建议有底下这些:
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第18张图片
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第19张图片

(3). /var 的意义与内容:
如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的档案,包括快取(cache)、登录档(log file)以及某些软件运作所产生的档案, 包括程序档案(lock file, run file),或者例如MySQL数据库的档案等等。常见的次目录有:
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第20张图片

3.2目录树(directory tree)

这个目录树有什么特性呢?他主要的特性有:

  • 目录树的启始点为根目彔 (/, root);
  • 每一个目录不止能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem 。举例来说, 可以利用 Network File System (NFS) 服务器挂载某特定目录等。
  • 每一个档案在此目录树中的文件名(包括完整路径)都是独一无二的。

来看看根目录底下会有什么样子的数据吧!我们可以下达以下的指令来查询:
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第21张图片

如果我们将整个目录树以图标的方法来显示,并且将较为重要的档案数据列出来的话,那么目录树架构有点像这样:
鸟哥Linux-第六章、Linux 的档案权限与目录配置_第22张图片

3.3 绝对路径与相对路径

  • 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
  • 相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法

特别注意这两个特殊的目录:

  • . :代表当前的目录,也可以使用 ./ 来表示;
  • .. :代表上一层目录,也可以 ../ 来代表。

你可能感兴趣的:(Linux学习)