第二部分Linux的文件、目录、磁盘格式_第5章Linux的文件权限与目录配置
每个文件都有相当多的属性与权限,其中最重要的可能就是文件的拥有者的概念
注:查询命令
- ls --help
- man ls
- info ls
5.1用户与用户组
5.1.1 文件拥有者
5.1.2 用户组的概念
5.1.3 others
5.1.4 Linux 用户身份与用户组记录的文件
文件 | 位置 |
---|---|
所有的系统上的帐号与一般身份使用者,还有root的相关信息 | /etc/passwd |
个人的密码 | /etc/shadow |
Linux所有的群组名称 | /etc/group |
这三个文件可以说是Linux系统里面帐号、密码、群组信息的集中地
5.2 Linux文件权限概念
5.2.1 文件属性
- ls -al
ls是“list”的意思,重点在显示文件的文件名与相关属性。
选项“-al”则表示列出所有的文件详细的权限与属性 (包含隐藏 文件,就是文件名第一个字符为“ . ”的文件)。
第一栏共有十个字符
第二栏表示有多少文件名链接到此节点(i-node):
每个文件都会将他的权限与属性记录到文件系统的i-node中,我们使用的目录树使用文件名来记录, 因此 每个文件名就会链接到一个i-node,这个属性记录有多少不同的文件名链接到相同的一个i-node号码。
文件权限的重要性
- 系统保护
- 团队开发软件或数据共享
5.2.2 修改文件属性与权限
- chgrp :改变文件所属群组
chgrp users initial-setup-ks.cfg - chown :改变文件拥有者
如果要连目录下的所有次目录或文件同时更改文件 拥有者的话,加上 -R 的选项
chown bin initial-setup-ks.cfg - chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
r=4; w=2; x=1
chmod 777 .bashrc - 符号类型改变文件权限
chmod u=rwx,g=rx,o=r filename
chmod a+w .bashrc
5.2.3 目录与文件权限的意义
-
权限对文件的重要性
(1)r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
(2)w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限
(3)x (eXecute):该文件具有可以被系统执行的权限。
对于文件的rwx来说, 主要都是针对“文件的内容”而言,与文件文件名的存在与否没有关系。因为 文件记录的是实际的数据 -
权限对目录的重要性
(1)r :表示具有读取目录结构清单的权限,所以当你具有读取®一个目录的权限时,表示你可以查询该目录下的文件名数据。 可以利用 ls 这个指令将该目录的内容列表显示出来
w:表示具有异动该目录结构清单的权限,也就是:
创建新的文件与目录;
删除已经存在的文件与目录(不论该文件的权限为何)
将已存在的文件或目录进行更名;
搬移该目录内的文件、目录位置。
目录的w权限就与该目录下面的文件名异动有关
x :目录的x代表的 是使用者能否进入该目录成为工作目录。所谓的工作目录(work directory)就是你目前所在的目录
目录主要的内容在记录文件名清单,文件名与目录有强烈的
关连
例题1
有个目录的权限如下所示:
drwxr–r-- 3 root root 4096 Jun 25 08:35 .ssh
系统有个帐号名称为vbird,这个帐号并没有支持root群组,请问vbird对这个目录有何权限?是否可切换到此目录中?
答:
vbird对此目录仅具有r的权限,因此vbird可以查询此目录下的文件名列表。因为vbird不具有x的权限,因此vbird并不能切换到此目录内!(相当重要的概念!)如果你在某目录下不具有x的权限, 那么 你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r或w的权限。
例题2
在架设网站的时候都会卡在一些权限的设置上,他们开放目录数据给网际网络的任何人来浏览, 却只开放r的权限,结果就是导致网站服务器软件无法到该目录下读取文件(最多只能看到文件名), 最终用户总是无法正确的查阅到文件的内容(显示权限不足)。要注意:要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给! 为什么w不能随便给,我们来看下一个例子:
例题3
5.2.4 Linux文件种类与拓展名
文件种类:
- 正规文件 [ - ]:
(1)纯文本文件(ASCII)
(2)二进制档(binary)
(3)数据格式文件(data) - 目录文件 [ d ]
- 链接文件 [ l ]
- 设备与设备文件
与系统周边及储存等相关的一些文件, 通常都集中在/dev这个目录之下!通常又分为两种:
(1)**区块(block)设备文件[b] ?*就是一些储存数据, 以提供系统随机存取的周边设备(硬盘与软盘),可以随机的在硬盘的不同区块读写,这种设备就是区块设备(/dev/sda)
(2)字符(character)设备文件:[c](键盘、鼠标等,这些设备的特色就是“一次性读取”的,不能够截断输出。 举例来说,你不可能让鼠标“跳到”另一个画面,而是“连续性滑动”到另一个地方。 - 数据接口文件[s]
通常被用在网络上的数据承接。我们可以启动一个程序来监听用户 端的要求, 而用户端就可以通过这个socket来进行数据的沟通了。, 最常在/run或/tmp这些个目录中看到这 种文件类型。 - 数据输送档[p]
FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的 缩写。
linux文件拓展名
一个Linux文件能不能被执行,与他的第一栏的十个属性有关, 与文件名没有关系。跟Windows不同,在Windows下面, 能被执行的文件扩展名通常是 .com .exe .bat等等,而在Linux下面,只要你的权限当中具有x的话,例如[ -rwxr-xr-x ] 即代表这个文件具有可以被执行的能力
**注:**可以被执行跟可以执行成功是不一样的。一个纯文本文件,内容根本就没有可以执行的数据。所以 说,这个x代表这个文件具有可执行的能力, 但是能不能执行成功,要看该文件的内容
5.3 Linux目录配置
5.3.1 Linux目录配置的依据–FHS
FHS标准文件:要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下,FHS的重点在于规范每个特定的目录下应该要放置什么样子的数据
- 可分享的:可以分享给其他系统挂载使用的目录,所以包括可执行文件与使用者的邮件等数据, 是能够分享给网络上其他主 机挂载用的目录;
- 不可分享的:自己机器上面运行的设备文件或者是与程序有关的socket文件等, 由于仅与自身机器有关,所以当然就不适合分 享给其他主机了。
- 不变的:有些数据是不会经常变动的,跟随着distribution而不变动。 例如函数库、文件说明文档、系统管理员所管理的主机服务配置文件等等;
- 可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻群组等。
FHS针对目录树架构仅定义出三层目录下面应该放置什么数据
(1)/ (root, 根目录):与开机系统有关;
(2)/usr (unix software resource):与软件安装/执行有关;
(3)/var (variable):与系统运行过程有关。
根目录 (/) 的意义与内容
根目录是整个系统最重要的一个目录,
(1)所有的目录都是由根目录衍生出来的
(2)根目录也与开机/还原/系统修 复等动作有关。 系统开机时需要特定的开机软件、核心文件、开机所需程序、函数库等等文件数据,若系统出现错误时,根目 录也必须要包含有能够修复文件系统的程序才行。
FHS要求:希望根目录不要放在非常大的分区内( 因为分区越大,数据越多,发生错误的机会越大。)建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 (性能较佳,不容易发生问题)
FHS定义出根目录(/)下面应该要有以下次目录存在,即使没有实体目录,至少有链接文件
其他并非FHS针对根目录要求的重要目录
/usr 的意义与内容
/usr是Unix Software Resource的缩写, 也就是“Unix操作系统软件资源”所放置的 目录,而不是使用者的数据啦。
FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行创建该软件自己独立的目录。
因为是所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr下面,因此这个目录有点类似Windows 系统 的“C:\Windows\ (当中的一部份) + C:\Program files\”这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容 量。一般来说,/usr的次目录建议有下面这些:
注1;
由于FHS仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件或目录数据, 因此,在其他次目录层级 内,就可以随开发者自行来配置了。
注2:
此外,CentOS 7 在目录的编排上与过去的版本不同,比较大的差异在于
将许多原本应该要在根目录 (/) 里面的目录,将他内部数据全部挪到 /usr 里面去,然后进行链接设置:
- /bin --> /usr/bin
- /sbin --> /usr/sbin
- /lib --> /usr/lib
- /lib64 --> /usr/lib64
- /var/lock --> /run/lock
- /var/run --> /run
5.3.2 目录树
- 目录树的启始点为根目录 (/, root);
- 每一个目录不止能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem 。举例来说, 可以利用 Network File System (NFS) 服务器挂载某特定目录等。
- 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。
根据FHS的 定义,需要将/var独立出来, 这样对于系统的数据还有一些安全性的保护,当/var死掉时,你的根目录还会活着,能够进入救援模式
绝对路径与相对路径
据文件名写法的不同,也可将所谓的路 径(path)定义为绝对路径(absolute)与相对路径(relative)
- 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
- 相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 …/…/home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法
注:
- . :代表当前的目录,也可以使用 ./ 来表示;
- … :代表上一层目录,也可以 …/ 来代表。
例题1
如何先进入/var/spool/mail/目录,再进入到/var/spool/cron/目录内?
答:
由于/var/spool/mail与/var/spool/cron是同样在/var/spool/目录中,因此最简单的指令下达方法为:
- cd /var/spool/mail
- cd …/cron