网站托管团队,大连html5网站建设价格,wordpress公众号菜单,国内扁平化网站【BASH】回顾与知识点梳理 二十一 二十一. Linux 的文件权限与目录配置21.1 使用者与群组属主(文件拥有者)属组(群组概念)其他人的概念root(万能的天神)Linux 用户身份与群组记录的文件 21.2 Linux 文件权限概念Linux 文件属性Linux 文件权限的重要性 21.3 如何改变文件属性与权… 【BASH】回顾与知识点梳理 二十一 二十一. Linux 的文件权限与目录配置21.1 使用者与群组属主(文件拥有者)属组(群组概念)其他人的概念root(万能的天神)Linux 用户身份与群组记录的文件 21.2 Linux 文件权限概念Linux 文件属性Linux 文件权限的重要性 21.3 如何改变文件属性与权限改变所属群组, chgrp改变文件拥有者, chown改变权限, chmod 21.4 目录与文件之权限意义权限对文件的重要性权限对目录的重要性用户操作功能与权限 21.6 Linux 文件种类与扩展名文件种类Linux 文件扩展名Linux 文件长度限制Linux 文件名的限制 21.7 Linux 目录配置Linux 目录配置的依据--FHS根目录 (/) 的意义与内容/usr 的意义与内容/var 的意义与内容针对 FHS各家 distributions 的异同与 CentOS7 的变化目录树(directory tree) 该系列目录 -- 【BASH】回顾与知识点梳理目录
二十一. Linux 的文件权限与目录配置
Linux 最优秀的地方之一就在于他的多人多任务环境。而为了让各个使用者具有较保密的文件数据因此文件的权限管理就变的很重要了。 Linux 一般将文件可存取的身份分为三个类别分别是 owner/group/others且三种身份各有read/write/execute 等权限。若管理不当你的 Linux 主机将会变的很『不苏湖_』。另外你如果首次接触 Linux 的话那么 在 Linux 底下这么多的目录/文件到底每个目录/文件代表什么意义呢底下我们就来一一介绍呢
21.1 使用者与群组
属主(文件拥有者)
由于 Linux 是个多人多任务的系统因此可能常常会有多人同时使用这部主机来进行工作的情况发生 为了考虑每个人的隐私权以 及每个人喜好的工作环境因此这个『文件拥有者』的角色就显的相当的重要了
当文件设定成『只有文件拥有者就是我才能看与修改这个文件的内容』 那么即使其他人知道你有这个相当『有趣』的文件不过由于你有设定适当的权限 所以其他人自然也就无法知道该文件的内容啰
属组(群组概念)
在 Linux 底下这样的限制是很简单啦我可以经由简易的文件权限设定就能限制非自己团队(亦即是群组啰) 的其他人不能够阅览内容啰而且亦可以让自己的团队成员可以修改我所建立的文件 同时如果我自己还有私人隐密的文件仍然可以设定成让自己的团队成员也看不到我的文件数据。
每个账号都可以有多个群组的支持呢 举例假设有一家人家里只有三兄弟分别是王大毛、王二毛与王三毛三个人 而这个家庭是登记在王大毛的名下的所以『王大毛家有三个人分别是王大毛、王二毛与王三毛』 而且这三个人都有自己的房间并且共同拥有一个客厅喔 使用者的意义由于王家三人各自拥有自己的房间所以 王二毛虽然可以进入王三毛的房间但是二毛不能翻三毛的抽屉喔那样会被三毛 K 的 因为抽屉里面可能有三毛自己私人的东西例如情书啦日记啦等等的这是『私人的空间』所以当然不能让二毛拿啰群组的概念由于共同拥有客厅所以王家三兄弟可以在客厅打开电视机啦、 翻阅报纸啦、坐在沙发上面发呆啦等等的 反正只要是在客厅的玩意儿三兄弟都可以使用喔 因为大家都是一家人嘛 这样说来应该有点晓得了喔那个『王大毛家』就是所谓的『群组』啰 至于三兄弟就是分别为三个『使用者』而这三个使用者是在同一个群组里面的喔 而三个使用者虽然在同一群组内但是我们可以设定『权限』 好让某些用户个人的信息不被群组的拥有者查询以保有个人『私人的空间』啦 而设定群组共享则可让大家共同分享喔 其他人的概念
这个文档和哪些用户没有任何的关系此时那些用户就是其他人的范畴
root(万能的天神)
不过这里有个特殊的人物要来介绍的那就是『万能的天神』这个天神具有无限的神力 所以他可以到达任何他想要去的地方呵呵那个人在 Linux 系统中的身份代号是『 root 』啦所以要小心喔那个root 可是『万能的天神』喔
Linux 用户身份与群组记录的文件
在我们 Linux 系统当中默认的情况下所有的系统上的账号与一般身份使用者还有那个 root 的相关信息都是记录在/etc/passwd 这个文件内的。至于个人的密码则是记录在/etc/shadow 这个文件下。此外Linux 所有的组名都纪录在/etc/group 内这三个文件可以说是 Linux 系统里面账号、密码、群组信息的集中地啰 不要随便删除这三个文件啊 ^_^
[rootnode-135 bin]# head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[rootnode-135 bin]# head -3 /etc/shadow
root:$6$CxTq1OkkZPBr3c.8$mQEBysixMLtVF2I7vwH/78y0Kl3wT0n7PRVINuFPRWLPiyZZObH8fpC8ZgSu9AaetwuEf/zqNkuN99cUVIrzu1::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
[rootnode-135 bin]# head -3 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:21.2 Linux 文件权限概念
文件的权限主要针对这些所谓的『使用者』与『群组』来设定
Linux 文件属性
[rootstudy ~]# ls -al
total 48
...
drwxr-xr-x. 3 root root 17 May 6 00:14 .config 范例说明处
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg 范例说明处
[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ]
[ 权限 ] [连结] [拥有者] [群组] [文件容量] [ 修改日期 ] [ 檔名 ]第一栏代表这个文件的类型与权限(permission) 仔细看的话你应该可以发现这一栏其实共有十个字符 第一个字符代表这个文件是『目录、文件或链接文件等等』 当为[ d ]则是目录例如上表档名为『.config』的那一行当为[ - ]则是文件例如上表档名为『initial-setup-ks.cfg』那一行若是[ l ]则表示为连结档(link file)若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置)若是[ c ]则表示为装置文件里面的串行端口设备例如键盘、鼠标(一次性读取装置)。 接下来的字符中以三个为一组且均为『rwx』 的三个参数的组合。其中[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是这三个权限的位置不会改变如果没有权限就会出现减号[-]而已。 第一组为『文件拥有者可具备的权限』以『initial-setup-ks.cfg』那个文件为例 该文件的拥有者可以读写但不可执行第二组为『加入此群组之账号的权限』第三组为『非本人且没有加入本群组之其他账号的权限』 请你特别注意喔不论是那一组权限基本上都是『针对某些账号来设计的权限』喔以群组来说他规范的是『加入这个群组的账号具有什么样的权限』之意 以学校社团为例假设学校有个童军社的社团办公室『加入童军社的同学就可以进出社办』主角是『学生(账号)』而不是童军社本身喔这样可以理解吗 细心的小伙伴一定还注意到了第一栏的第十一个字符点(.)这个.是RedHat家族的linux系统例如centos所特有的表示该文件存在“SELinux的安全标签”。当关闭了selinux这时候新建一个文件发现文件权限后面的小点没了和我们平时看到的文件权限一样正常了。但当开启时已存在或者新创建的文件无论selinux是否开启.都是存在的。SELinux全称Security-Enhanced Linux是一种访问控制体系可以“简单的”理解为更安全的linux系统。“更安全”必然是有代价的包括访问限制权限限制等等所以大多数情况下我们都选择关闭毕竟不需要那么“安全”或者有其他杀软保证相对安全就可以了。 第二栏表示有多少档名连结到此节点(i-node) 每个文件都会将他的权限与属性记录到文件系统的 i-node 中不过我们使用的目录树却是使用文件名来记录 因此每个档名就会连结到一个 i-node 啰这个属性记录的就是有多少不同的档名连结到相同的一个 i-node 号码去就是了。 第三栏表示这个文件(或目录)的『拥有者账号』 第四栏表示这个文件的所属群组 第五栏为这个文件的容量大小默认单位为 bytes 第六栏为这个文件的建档日期或者是最近的修改日期 这一栏的内容分别为日期(月/日)及时间。如果这个文件被修改的时间距离现在太久了那么时间部分会仅显示年份而已。 [rootstudy ~]# ll /etc/services /root/initial-setup-ks.cfg
-rw-r--r--. 1 root root 670293 Jun 7 2013 /etc/services
-rw-r--r--. 1 root root 1864 May 4 18:01 /root/initial-setup-ks.cfg
# 如上所示/etc/services 为 2013 年所修改过的文件离现在太远之故所以只显示年份
# 至于 /root/initial-setup-ks.cfg 是今年 (2015) 所建立的所以就显示完整的时间了。[rootnode-135 /]# ll --full-time
...
drwxr-xr-x. 2 root root 6 2018-04-11 12:59:55.000000000 0800 media
drwxr-xr-x. 3 root root 36 2023-08-01 10:30:13.110995188 0800 mnt『ls -l --full-time』就能够显示出完整的时间格式了包括年、月、日、时间喔。 另外如果你当初是以繁体中文安装你的 Linux 系统那么日期字段将会以中文来显示。 可惜的是中文并没有办法在纯文本的终端机模式中正确的显示所以此栏会变成乱码。 那你就得要使用『export LC_ALLen_US.utf8』来修改语系喔 第七栏为这个文件的档名 比较特殊的是如果档名之前多一个『 . 』则代表这个文件为『隐藏档』
Linux 文件权限的重要性
与 Windows 系统不一样的是在 Linux 系统当中每一个文件都多加了很多的属性进来尤其是群组的概念这样有什么用途呢 其实最大的用途是在『数据安全性』上面的。
系统保护的功能团队开发软件或数据共享的功能未将权限设定妥当的危害
21.3 如何改变文件属性与权限
我们先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令如下所示
chgrp 改变文件所属群组chown 改变文件拥有者chmod 改变文件的权限, SUID, SGID, SBIT 等等的特性
改变所属群组, chgrp
这个指令就是 change group 的缩写嘛要被改变的组名必须要在/etc/group 文件内存在才行否则就会显示错误
[rootstudy ~]# chgrp [-R] dirname/filename ...
选项与参数
-R : 进行递归(recursive)的持续变更亦即连同次目录下的所有文件、目录都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。# 范例
[rootstudy ~]# chgrp users initial-setup-ks.cfg
[rootstudy ~]# ls -l
-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup-ks.cfg
[rootstudy ~]# chgrp testing initial-setup-ks.cfg
chgrp: invalid group: testing 发生错误讯息啰找不到这个群组名改变文件拥有者, chown
改变拥有者就是 change owner 啰用户必须是已经存在系统中的账号也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变。
[rootstudy ~]# chown [-R] 账号名称 文件或目录
[rootstudy ~]# chown [-R] 账号名称:组名 文件或目录
选项与参数
-R : 进行递归(recursive)的持续变更亦即连同次目录下的所有文件都变更# 范例将 initial-setup-ks.cfg 的拥有者改为 bin 这个账号
[rootstudy ~]# chown bin initial-setup-ks.cfg
[rootstudy ~]# ls -l
-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg#范例将 initial-setup-ks.cfg 的拥有者与群组改回为 root
[rootstudy ~]# chown root:root initial-setup-ks.cfg
[rootstudy ~]# ls -l
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg事实上chown 也可以使用『chown user.group file』亦即在拥有者与群组间加上小数点『 . 』也行 不过很多朋友设定账号时喜欢在账号当中加入小数点(例如 vbird.tsai 这样的账号格式)这就会造成系统的误判了 所以我们比较建议使用冒号『:』来隔开拥有者与群组啦此外chown 也能单纯的修改所属群组呢 例如『chown .sshd initial-setup-ks.cfg』就是修改群组看到了吗就是那个小数点的用途 那么什么时候要使用 chown 或 chgrp 呢 以cp指令为例简单说明
[rootstudy ~]# cp 来源文件 目标文件
[rootstudy ~]# cp .bashrc .bashrc_test
[rootstudy ~]# ls -al .bashrc*
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test 新文件的属性没变由于复制行为(cp)会复制执行者的属性与权限所以怎么办.bashrc_test 还是属于 root 所拥有 如此一来即使你将文件拿给 bin 这个使用者了那他仍然无法修改的(看属性/权限就知道了吧) 所以你就必须要将这个文件的拥有者与群组修改一下啰知道如何修改了吧
改变权限, chmod
文件权限的改变使用的是 chmod 这个指令但是权限的设定方法有两种 分别可以使用数字或者是符号来进行权限的变更。我们就来谈一谈 数字类型改变文件权限 文件的权限字符为『-rwxrwxrwx』 这九个权限是三个三个一组的其中我们可以使用数字来代表各个权限各权限的分数对照表如下 r:4w:2x:1每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的例如当权限为 [-rwxrwx---] 分数则是 owner rwx 421 7group rwx 421 7others --- 000 0[rootstudy ~]# chmod [-R] xyz 文件或目录
选项与参数
xyz : 就是刚刚提到的数字类型的权限属性为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更亦即连同次目录下的所有文件都会变更[rootstudy ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
[rootstudy ~]# chmod 777 .bashrc
[rootstudy ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc符号类型改变文件权限 从之前的介绍中我们可以发现基本上就九个权限分别是(1)user (2)group (3)others 三种身份啦那么我们就可以藉由u, g, o来代表三种身份的权限此外a则代表 all 亦即全部的身份那么读写的权限就可以写成 r, w, x 啰也就是可以使用底下的方式来看
命令选项类型权限文件chmodugoa(加入)-(除去)(设定)rwx文件或目录
来实作一下吧假如我们要『设定』一个文件的权限成为『-rwxr-xr-x』时基本上就是
user (u)具有可读、可写、可执行的权限group 与 others (g/o)具有可读与执行的权限。
[rootstudy ~]# chmod urwx,gorx .bashrc
# 注意喔那个 urwx,gorx 是连在一起的中间并没有任何空格符
[rootstudy ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[rootstudy ~]# chmod aw .bashrc
[rootstudy ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
[rootstudy ~]# chmod a-x .bashrc
[rootstudy ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
[rootstudy ~]# chmod 644 .bashrc # 测试完毕得要改回来喔那么假如是『-rwxr-xr--』这样的权限呢可以使用『chmod urwx,grx,or filename』来设定。
21.4 目录与文件之权限意义
权限对文件的重要性
文件是实际含有数据的地方包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。 因此权限对于文件来说他的意义是这样的
r (read)可读取此一文件的实际内容如读取文本文件的文字内容等w (write)可以编辑、新增或者是修改该文件的内容(但不含删除该文件)x (eXecute)该文件具有可以被系统执行的权限。
可执行(x)这里你就必须要小心啦 因为在Windows 底下一个文件是否具有执行的能力是藉由『 扩展名 』来判断的 例如.exe, .bat, .com 等等但是在 Linux 底下我们的文件是否能被执行则是藉由是否具有『x』这个权限来决定的跟档名是没有绝对的关系的
当你对一个文件具有 w 权限时你可以具有写入/编辑/新增/修改文件的内容的权限 但并不具备有删除该文件本身的权限!对于文件的 rwx 来说 主要都是针对『文件的内容』而言与文件档名的存在与否没有关系喔因为文件记录的是实际的数据嘛 如果当前用户要删除他用户的文件需要具备至少什么权限呢 对文件需要有全部权限-rwxr-xrwx 对文件所在目录有写权限-rwxr-x-wx
权限对目录的重要性
文件是存放实际数据的所在那么目录主要是储存啥玩意啊目录主要的内容在记录文件名列表文件名与目录有强烈的关连啦 所以如果是针对目录时那个 r, w, x 对目录是什么意义呢 r (read contents in directory) 表示具有读取目录结构列表的权限所以当你具有读取(r)一个目录的权限时表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来 w (modify contents of directory) 这个可写入的权限对目录来说是很了不起的 因为他表示你具有异动该目录结构列表的权限也就是底下这些权限 建立新的文件与目录删除已经存在的文件与目录(不论该文件的权限为何)将已存在的文件或目录进行更名搬移该目录内的文件、目录位置。 x (access directory) 咦目录的执行权限有啥用途啊目录只是记录文件名而已总不能拿来执行吧没错目录不可以被执行目录的 x 代表的是用户能否进入该目录成为工作目录的用途 所谓的工作目录(work directory)就是你目前所在的目录啦举例来说当你登入 Linux 时 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)啰
组件内容迭代物件rwx文件详细资料data文件文件夹读到文件内容修改文件内容目录檔名可分类抽屉读到档名修改檔名进入该目录的权限(key)
你可以看到对一般文件来说rwx 主要是针对『文件的内容』来设计权限对目录来说rwx 则是针对『目录内的文件名列表』来设计权限。
其中最有趣的大概就属目录的 x 权限了『档名怎么执行』没道理嘛其实这个 x 权限设计就相当于『该目录也就是该抽屉的 钥匙 』啦 没有钥匙你怎么能够打开抽屉呢对吧
能不能进入某一个目录只与该目录的 x 权限有关啦此外 工作目录对于指令的执行是非常重要的如果你在某目录下不具有 x 的权限 那么你就无法切换到该目录下也就无法执行该目录下的任何指令即使你具有该目录的 r 或 w 的权限。
要开放目录给任何人浏览时应该至少也要给予 r 及 x 的权限但 w 权限不可随便给 为什么 w 不能随便给我们来看下一个例子 假设有个账号名称为 dmtsai他的家目录在/home/dmtsai/dmtsai 对此目录具有[rwx]的权限。 若在此目录下有个名为 the_root.data 的文件该文件的权限如下 -rwx------ 1 root root 4365 Sep 19 23:20 the_root.data 请问 dmtsai 对此文件的权限为何可否删除此文件 答 如上所示由于 dmtsai 对此文件来说是『others』的身份因此这个文件他无法读、无法编辑也无法执行 也就是说他无法变动这个文件的内容就是了。 但是由于这个文件在他的家目录下 他在此目录下具有 rwx 的完整权限因此对于 the_root.data 这个『档名』来说他是能够『删除』的 结论就是dmtsai 这个用户能够删除 the_root.data 这个文件 上述的例子解释是这样的假设有个莫名其妙的人拿着一个完全密封的文件夹放到你的办公室抽屉中因为完全密封你也打不开、看不到这个文件夹
的内部数据(对文件来说你没有权限)。 但是因为这个文件夹是放在你的抽屉中你当然可以拿出/放入任何数据在这个抽屉中(对目录来说你具有所有
权限)。 所以情况就是你打开抽屉、拿出这个没办法看到的文件夹、将他丢到走廊上的垃圾桶搞定了 (顺利删除)用户操作功能与权限
假设两个档名分别是底下这样
/dir1/file1/dir2
分别需要『哪些最小的权限』才能达成各项任务
操作动作/dir1/dir1/file1/dir2重点读取file1内容xr-要能够进入/dir1才能读到里面的文件数据修改file1内容xrw-能够进入/dir1且修改file1才行执行file1内容xrx-能够进入/dir1且file1能运作才行删除file1文件wx--能够进入/dir1具有目录修改的权限即可将file1复制到/dir2xrwx要能够读file1且能够修改/dir2内的数据 你可能会问上面的表格当中很多时候 /dir1 都不必有 r 耶为啥我们知道 /dir1 是个目录也是个抽屉那个抽屉的 r 代表『这个抽屉里面有灯光』 所以你能看到的抽屉内的所有文件夹名称 (非内容)。但你已经知道里面的文件夹放在哪个地方那有没有灯光有差嘛你还是可以摸黑拿到该文件夹的对吧 因此上面很多动作中你只要具有 x 即可r 是非必备的只是没有r 的话使用 [tab] 时他就无法自动帮你补齐档名了这样理解乎 21.6 Linux 文件种类与扩展名
文件种类 正规文件(regular file )[-] 就是一般我们在进行存取的类型的文件在由 ls -al 所显示出来的属性方面第一个字符为 [ - ]例如[-rwxrwxrwx ]。另外依照文件的内容又大略可以分为 纯文本档(ASCII)二进制文件(binary)数据格式文件(data) 有些程序在运作的过程当中会读取某些特定格式的文件那些特定格式的文件可以被称为数据文件 (data file)。举例来说我们的 Linux 在使用者登入时都会将登录的数据记录在 /var/log/wtmp 那个文件内该文件是一个 data file他能够透过 last 这个指令读出来 但是使用 cat 时会读出乱码因为他是属于一种特殊格式的文件。瞭乎 目录(directory)[ d ] 连结档(link) [ l ] 设备与装置文件(device)[b] [c] 区块(block)设备档就是一些储存数据 以提供系统随机存取的接口设备举例来说硬盘与软盘等就是啦字符(character)设备文件亦即是一些串行端口的接口设备 例如键盘、鼠标等等这些设备的特色就是『一次性读取』的不能够截断输出。 资料接口文件(sockets)[ s ] 数据输送文件(FIFO, pipe)[p] FIFO 也是一种特殊的文件类型他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。
Linux 文件扩展名
基本上Linux 的文件是没有所谓的『扩展名』的我们刚刚就谈过一个 Linux 文件能不能被执行与他的第一栏的十个属性有关 与文件名根本一点关系也没有。这个观念跟 Windows 的情况不相同喔在 Windows 底下 能被执行的文件扩展名通常是 .com .exe .bat 等等而在 Linux 底下只要你的权限当中具有 x 的话例如[ -rwxr-xr-x ] 即代表这个文件具有可以被执行的能力喔 具有『可执行的权限』以及『具有可执行的程序代码』是两回事在 Linux 底下你可以让一个文本文件例如我们之前写的 text.txt 具有『可执行的权限』 (加入 x 权限即可) 但是这个文件明显的无法执行因为他不具备可执行的程序代码而如果你将上面提到的 cat 这个可以执行的指令将他的 x 拿掉那么 cat 将无法被你执行 我们仍然希望可以藉由扩展名来了解该文件是什么东西所以 通常我们还是会以适当的扩展名来表示该文件是什么种类的。底下有数种常用的扩展名
*.sh 脚本或批处理文件 (scripts)因为批处理文件为使用 shell 写成的所以扩展名就编成 .sh 啰*Z, *.tar, *.tar.gz, *.zip, *.tgz 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的由于不同的压缩软件而取其相关的扩展名啰*.html, *.php网页相关文件分别代表 HTML 语法与 PHP 语法的网页文件啰 .html 的文件可使用网页浏览器来直接开启至于 .php 的文件 则可以透过 client 端的浏览器来 server 端浏览以得到运算后的网页结果呢
基本上Linux 系统上的文件名真的只是让你了解该文件可能的用途而已 真正的执行与否仍然需要权限的规范才行例如虽然有一个文件为可执行文件 如常见的/bin/ls 这个显示文件属性的指令不过如果这个文件的权限被修改成无法执行时 那么 ls 就变成不能执行啰 上述的这种问题最常发生在文件传送的过程中。例如你在网络上下载一个可执行文件但是偏偏在你的 Linux 系统中就是无法执行呵呵那么就是可能文件的属性被改变了不要怀疑从网络上传送到你的 Linux 系统中文件的属性与权限确实是会被改变的喔 Linux 文件长度限制
在 Linux 底下使用传统的 Ext2/Ext3/Ext4 文件系统以及近来被 CentOS 7 当作预设文件系统的 xfs 而言针对文件的档名长度限制为
单一文件或目录的最大容许文件名为 255bytes以一个 ASCII 英文占用一个 bytes 来说则大约可达 255 个字符长度。若是以每个中文字占用 2bytes 来说 最大档名就是大约在 128 个中文字之谱
Linux 文件名的限制
由于 Linux 在文字接口下的一些指令操作关系一般来说你在设定 Linux 底下的文件名时 最好可以避免一些特殊字符比较好例如底下这些
* ? ; ! [ ] | \ ( ) { }因为这些符号在文字接口下是有特殊意义的另外文件名的开头为小数点『.』时 代表这个文件为『隐藏档』喔同时由于指令下达当中常常会使用到 -option 之类的选项 所以你最好也避免将文件档名的开头以 - 或来命名啊
21.7 Linux 目录配置
Linux 目录配置的依据–FHS
Filesystem Hierarchy Standard (FHS)标准主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下 所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户都能够遵循 FHS 的标准。 也就是说FHS 的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。 这样做好处非常多因为 Linux 操作系统就能够在既有的面貌下(目录架构不变)发展出开发者想要的独特风格。
将目录定义成为四种交互作用的形态
可分享的(shareable)不可分享的(unshareable)不变的(static)/usr (软件放置处) /etc (配置文件)/opt (第三方协力软件) /boot (开机与核心档)可变动的(variable)/var/mail (使用者邮件信箱) /var/run (程序相关)/var/spool/news (新闻组) /var/lock (程序相关)
可分享的可以分享给其他系统挂载使用的目录所以包括执行文件与用户的邮件等数据 是能够分享给网络上其他主机挂载用的目录不可分享的自己机器上面运作的装置文件或者是与程序有关的 socket 文件等 由于仅与自身机器有关所以当然就不适合分享给其他主机了。不变的有些数据是不会经常变动的跟随着 distribution 而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等可变动的经常改变的数据例如登录文件、一般用户可自行收受的新闻组等。
FHS 针对目录树架构仅定义出三层目录底下应该放置什么数据而已分别是底下这三个目录的定义
/ (root, 根目录)与开机系统有关/usr (unix software resource)与软件安装/执行有关/var (variable)与系统运作过程有关。 这个root在 Linux 里面的意义真的很多很多多到让人搞不懂那是啥玩意儿。 如果以『账号』的角度来看所谓的 root 指的是『系统管理员』的身份 如果以『目录』的角度来看所谓的 root 意即指的是根目录就是/啦 要特别留意喔 根目录 (/) 的意义与内容
根目录是整个系统最重要的一个目录因为不但所有的目录都是由根目录衍生出来的同时根目录也与开机/还原/系统修复等动作有关。由于系统开机时需要特定的开机软件、核心文件、开机所需程序、函式库等等文件数据若系统出现错误时根目录也必须要包含有能够修复文件系统的程序才行。 因为根目录是这么的重要所以在 FHS 的要求方面他希望根目录不要放在非常大的分区槽内 因为越大的分区槽妳会放入越多的数据如此一来根目录所在分区槽就可能会有较多发生错误的机会。
因此 FHS 标准建议根目录(/)所在分区槽应该越小越好 且应用程序所安装的软件最好不要与根目录放在同一个分区槽内保持根目录越小越好。 如此不但效能较佳根目录所在的文件系统也较不容易发生问题。
第一部份FHS 要求必须要存在的目录
目录应放置文件内容/bin系统有很多放置执行文件的目录但/bin 比较特殊。因为/bin 放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般账号所使用主要有cat, chmod, chown, date, mv, mkdir, cp, bash 等等常用的指令。/boot这个目录主要在放置开机会使用到的文件包括 Linux 核心文件以及开机选单与开机所需配置文件等等。 Linux kernel 常用的档名为vmlinuz如果使用的是 grub2 这个开机管理程序 则还会存在/boot/grub2/这个目录喔/dev在 Linux 系统上任何装置与接口设备都是以文件的型态存在于这个目录当中的。 你只要透过存取这个目录底下的某个文件就等于存取某个装置啰 比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/loop*, /dev/sd*等等/etc系统主要的配置文件几乎都放置在这个目录内例如人员的账号密码文件、 各种服务的启始档等等。一般来说这个目录下的各文件属性是可以让一般使用者查阅的 但是只有 root 有权力修改。FHS建议不要放置可执行文件(binary)在这个目录中喔。比较重要的文件有/etc/modprobe.d/, /etc/passwd, /etc/fstab, /etc/issue 等等。另外 FHS 还规范几个重要的目录最好要存在 /etc/ 目录下喔- /etc/opt(必要)这个目录在放置第三方协力软件 /opt 的相关配置文件- /etc/X11/(建议)与 X Window 有关的各种配置文件都在这里尤其是 xorg.conf 这个 X Server 的配置文件。- /etc/sgml/(建议)与 SGML 格式有关的各项配置文件- /etc/xml/(建议)与 XML 格式有关的各项配置文件/lib系统的函式库非常的多而/lib 放置的则是在开机时会用到的函式库 以及在/bin 或/sbin 底下的指令会呼叫的函式库而已。 什么是函式库呢妳可以将他想成是『外挂』某些指令必须要有这些『外挂』才能够顺利完成程序的执行之意。 另外 FSH 还要求底下的目录必须要存在- /lib/modules/这个目录主要放置可抽换式的核心相关模块(驱动程序)喔/mediamedia 是『媒体』的英文顾名思义这个/media 底下放置的就是可移除的装置啦包括软盘、光盘、DVD 等等装置都暂时挂载于此。常见的档名有/media/floppy, /media/cdrom 等等。/mnt 如果妳想要暂时挂载某些额外的装置一般建议妳可以放置到这个目录中。 在古早时候这个目录的用途与/media 相同啦只是有了/media 之后这个目录就用来暂时挂载用了。/opt这个是给第三方协力软件放置的目录。什么是第三方协力软件啊 举例来说KDE 这个桌面管理系统是一个独立的计划不过他可以安装到 Linux 系统中因此 KDE 的软件就建议放置到此目录下了。 另外如果妳想要自行安装额外的软件(非原本的 distribution 提供的)那么也能够将你的软件安装到这里来。 不过以前的 Linux 系统中我们还是习惯放置在/usr/local 目录下呢/run早期的 FHS 规定系统开机后所产生的各项信息应该要放置到 /var/run 目录下新版的 FHS 则规范到/run 底下。 由于 /run 可以使用内存来仿真因此效能上会好很多/sbinLinux 有非常多指令是用来设定系统环境的这些指令只有 root 才能够利用来『设定』系统其他用户最多只能用来『查询』而已。放在/sbin 底下的为开机过程中所需要的里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary)则放置到/usr/local/sbin/当中了。常见的指令包括fdisk, fsck, ifconfig, mkfs 等等。/srvsrv 可以视为『service』的缩写是一些网络服务启动之后这些服务所需要取用的数据目录。 常见的服务例如 WWW, FTP 等等。举例来说WWW 服务器需要的网页资料就可以放置在/srv/www/里面。不过系统的服务数据如果尚未要提供给因特网任何人浏览的话预设还是建议放置到 /var/lib 底下即可。/tmp这是让一般用户或者是正在执行的程序暂时放置文件的地方。 这个目录是任何人都能够存取的所以你需要定期的清理一下。当然重要数据不可放置在此目录啊 因为 FHS 甚至建议在开机时应该要将/tmp 下的数据都删除唷/usr第二层 FHS 设定后续介绍/var第二曾 FHS 设定主要为放置变动性的数据后续介绍
第二部份FHS 建议可以存在的目录
目录应放置文件内容/home这是系统默认的用户家目录(home directory)。在你新增一个一般使用者账号时 默认的用户家目录都会规范到这里来。比较重要的是家目录有两种代号喔- ~代表目前这个用户的家目录- ~dmtsai 则代表 dmtsai 的家目录/lib用来存放与 /lib 不同的格式的二进制函式库例如支持 64 位的 /lib64 函式库等/root系统管理员(root)的家目录。之所以放在这里是因为如果进入单人维护模式而仅挂载根目录时 该目录就能够拥有 root 的家目录所以我们会希望 root 的家目录与根目录放置在同一个分区槽中。
事实上 FHS 针对根目录所定义的标准就仅有上面的咚咚不过我们的 Linux 底下还有许多目录你也需要了解一下的。 底下是几个在 Linux 当中也是非常重要的目录喔 第三部份非FHS 建议的重要目录
目录应放置文件内容/lostfound这个目录是使用标准的 ext2/ext3/ext4 文件系统格式才会产生的一个目录目的在于当文件系统发生错误时 将一些遗失的片段放置到这个目录下。不过如果使用的是 xfs 文件系统的话就不会存在这个目录了/proc这个目录本身是一个『虚拟文件系统(virtual filesystem)』喔他放置的数据都是在内存当中 例如系统核心、行程信息(process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中 所以本身不占任何硬盘空间啊比较重要的文件例如/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。/sys这个目录其实跟/proc 非常类似也是一个虚拟的文件系统主要也是记录核心与系统硬件信息较相关的信息。 包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量喔 早期 Linux 在设计的时候若发生问题时救援模式通常仅挂载根目录而已因此有五个重要的目录被要求一定要与根目录放置在一起 那就是 /etc, /bin, /dev, /lib, /sbin 这五个重要目录。现在许多的 Linux distributions 由于已经将许多非必要的文件移出 /usr 之外了 所以 /usr 也是越来越精简同时因为 /usr 被建议为『即使挂载成为只读系统还是可以正常运作』的模样所以救援模式也能同时挂载 /usr 喔 例如我们的这个 CentOS 7.x 版本在救援模式的情况下就是这样。因此那个五大目录的限制已经被打破了呦例如 CentOS 7.x 就已经将 /sbin, /bin, /lib 通通移动到 /usr 底下了哩 /usr 的意义与内容
依据 FHS 的基本定义/usr 里面放置的数据属于可分享的与不可变动的(shareable, static) 如果你知道如何透过网络进行分区槽的挂载(例如在服务器篇会谈到的 NFS 服务器)那么/usr 确实可以分享给局域网络内的其他主机来使用喔
很多读者都会误会/usr 为 user 的缩写其实 usr 是 Unix Software Resource 的缩写 也就是『Unix 操作系统软件资源』所放置的目录而不是用户的数据啦这点要注意。 FHS 建议所有软件开发者应该将他们的数据合理的分别放置到这个目录下的次目录而不要自行建立该软件自己独立的目录。
因为是所有系统默认的软件(distribution 发布者提供的软件)都会放置到/usr 底下因此这个目录有点类似 Windows 系统的『C:\Windows\ (当中的一部份) C:\Program files\』这两个目录的综合体系统刚安装完毕时这个目录会占用最多的硬盘容量。一般来说/usr 的次目录建议有底下这些 第一部份FHS 要求必须要存在的目录
目录应放置文件内容/usr/bin/所有一般用户能够使用的指令都放在这里目前新的 CentOS 7 已经将全部的用户指令放置于此而使用连结档的方式将 /bin 连结至此 也就是说 /usr/bin 与 /bin 是一模一样了另外FHS 要求在此目录下不应该有子目录/usr/lib/基本上与 /lib 功能相同所以 /lib 就是链接到此目录中的/usr/local/系统管理员在本机自行安装自己下载的软件(非 distribution 默认提供者)建议安装到此目录 这样会比较便于管理。举例来说你的 distribution 提供的软件较旧你想安装较新的软件但又不想移除旧版 此时你可以将新版软件安装于/usr/local/目录下可与原先的旧版软件有分别啦 你可以自行到/usr/local 去看看该目录下也是具有 bin, etc, include, lib…的次目录喔/usr/sbin/非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)啰不过基本功能与 /sbin 也差不多 因此目前 /sbin 就是链接到此目录中的。/usr/share/主要放置只读架构的数据文件当然也包括共享文件。在这个目录下放置的数据几乎是不分硬件架构均可读取的数据 因为几乎都是文本文件嘛在此目录下常见的还有这些次目录- /usr/share/man联机帮助文件- /usr/share/doc软件杂项的文件说明- /usr/share/zoneinfo与时区有关的时区文件
第二部份FHS 建议可以存在的目录
目录应放置文件内容/usr/games/与游戏比较相关的数据放置处/usr/include/c/c等程序语言的档头(header)与包含档(include)放置处当我们以 tarball 方式 (*.tar.gz 的方式安装软件)安装某些数据时会使用到里头的许多包含档喔/usr/libexec/某些不被一般使用者惯用的执行档或脚本(script)等等都会放置在此目录中。例如大部分的 X 窗口底下的操作指令 很多都是放在此目录下的。/usr/lib/与 /lib/功能相同因此目前 /lib 就是链接到此目录中/usr/src/一般原始码建议放置到这里src 有 source 的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。
/var 的意义与内容
如果/usr 是安装时会占用较大硬盘容量的目录那么/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/某些装置或者是文件资源一次只能被一个应用程序所使用如果同时有两个程序使用该装置时 就可能产生一些错误的状况因此就得要将该装置上锁(lock)以确保该装置只会给单一软件所使用。举例来说刻录机正在刻录一块光盘你想一下会不会有两个人同时在使用一个刻录机烧片 如果两个人同时刻录那片子写入的是谁的资料所以当第一个人在刻录时该刻录机就会被上锁 第二个人就得要该装置被解除锁定(就是前一个人用完了)才能够继续使用啰。目前此目录也已经挪到/run/lock 中/var/log/重要到不行这是登录文件放置的目录里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。/var/mail/放置个人电子邮件信箱的目录不过这个目录也被放置到/var/spool/mail/目录中 通常这两个目录是互为链接文件啦/var/run/某些程序或者是服务启动后会将他们的 PID 放置在这个目录下喔至于 PID 的意义我们会在后续章节提到的。 与 /run 相同这个目录链接到 /run 去了/var/spool/这个目录通常放置一些队列数据所谓的『队列』就是排队等待其他程序使用的数据啦这些数据被使用后通常都会被删除。举例来说系统收到新信会放置到/var/spool/mail/中 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中 等到被送出后就被删除。如果是工作排程数据(crontab)就会被放置到/var/spool/cron/目录中 建议在你读完整个基础篇之后可以挑战 FHS 官方英文文件相信会让你对于Linux 操作系统的目录有更深入的了解喔 针对 FHS各家 distributions 的异同与 CentOS7 的变化 由于 FHS 仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件或目录数据 因此在其他次目录层级内就可以随开发者自行来配置了。举例来说CentOS 的网络设定数据放在/etc/sysconfig/network-scripts/ 目录下但是 SuSE 则是将网络放置在 /etc/sysconfig/network/ 目录下目录名称可是不同的呢不过只要记住大致的 FHS 标准差异性其实有限啦 CentOS 7 在目录的编排上与过去的版本不同喔
/bin -- /usr/bin/sbin -- /usr/sbin/lib -- /usr/lib/lib64 -- /usr/lib64/var/lock -- /run/lock/var/run -- /run
目录树(directory tree) 所有的文件与目录都是由根目录开始的那是所有目录与文件的源头 然后再一个一个的分支下来有点像是树枝状啊因此我们也称这种目录配置方式为『目录树(directory tree)』 这个目录树有什么特性呢他主要的特性有
目录树的启始点为根目录 (/, root)每一个目录不止能使用本地端的 partition 的文件系统也可以使用网络上的 filesystem 。举例来说 可以利用 Network File System (NFS) 服务器挂载某特定目录等。每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。 该系列目录 -- 【BASH】回顾与知识点梳理目录