鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

******************第五章学习******************

1、【重要的三个概念】

1)、文件拥有者(使用者)User,该文件/文件夹只能我来读写;

2)、群组Group,就像微信分组发朋友圈一样,该组群内的人员有读写权限,群外的人没有权限,而且在群组内也支持文件拥有者概念;

举个例子:

我们可以使用目前“家庭”的观念来进行解说喔! 假设有一家人,家里只有三兄弟,分别是王大毛、王二毛与王三毛三个人, 而这个家庭是登记在王大毛的名下的!所以,“王大毛家有三个人,分别是王大毛、王二毛与王三毛”, 而且这三个人都有自己的房间,并且共同拥有一个客厅喔!

使用者的意义:由于王家三人各自拥有自己的房间,所以, 王二毛虽然可以进入王三毛的房间,但是二毛不能翻三毛的抽屉喔!那样会被三毛K的! 因为抽屉里面可能有三毛自己私人的东西,例如情书啦,日记啦等等的,这是“私人的空间”,所以当然不能让二毛拿啰!
群组的概念:由于共同拥有客厅,所以王家三兄弟可以在客厅打开电视机啦、 翻阅报纸啦、坐在沙发上面发呆啦等等的! 反正,只要是在客厅的玩意儿,三兄弟都可以使用喔! 因为大家都是一家人嘛!
这样说来应该有点晓得了喔!那个“王大毛家”就是所谓的“群组”啰, 至于三兄弟就是分别为三个“使用者”,而这三个使用者是在同一个群组里面的喔! 而三个使用者虽然在同一群组内,但是我们可以设置“权限”, 好让某些使用者个人的信息不被群组的拥有者查询,以保有个人“私人的空间”啦! 而设置群组共享,则可让大家共同分享喔!

3)、其他人Other

好了,明白上述故事(概念),那么今天又有个人,叫做张小猪,他是张家的人,与王家没有关系! 这个时候,除非王家三兄弟有人认识张小猪,然后开门让张小猪进来王家,否则张小猪永远没有办法进入王家, 更不要说进到大毛、二毛、三毛的房间啦!不过,如果张小猪通过关系认识了三毛,并且跟王三毛成为好朋友, 那么张小猪就可以通过三毛进入王家啦!是滴,没错!那个张小猪就是所谓的“其他人,Others”!

为了形象地表达这个意思,可以借用数学里面的集合概念,比如包含,属于,交集等概念,在此借用鸟哥的图:

鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

有心人会发现,图里多了一个“天神”的角色,是滴,对应于linux中就是“root”了。这可是代表九五之尊,至上无限的权利。

特此提示:在Linux中所有使用者包括root的信息全在 /etc/passwd 文件内,使用者(个人)的密码信息都在 /etc/shadow 内,所有群组名称都在 /etc/group 内;

2、【Linux文件属性】

命令行输入: ls  ,是list的缩写,表示列出我恩建的文件名等信息,如果想要列出详细信息,如包括文件权限,修改创建时间等,便可以选择: ls -al 。

鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

解释一下:

1)、第 [1] 栏代表这个文件的类型与权限(permission),一共十个字符;

1.1)、第 [1] 栏第一个字符代表这个文件是“目录、文件或链接文件等等”,即:

  • 当为[ d ]则是目录,例如上表文件名为“.config”的那一行;
  • 当为[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
  • 若是[ l ]则表示为链接文件(link file);
  • 若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
  • 若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)。

1.2)、第 [1] 栏后 9 个字符,每三个一组,均为 “rwx” 的组合,如果哪一项缺省,就用 "-" 替代。其中 分别代表可读(read),可写(write),可执行权限(execute)。

但是,为什么要设置三组呢?是的,对应于上述的三个“人物”——文件拥有者,群组,和其他人的相对应的权限。

 特别地:可执行权限对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。因为在Windows下面一个文件是否具有执行的能力是借由“ 扩展名 ”来判断的, 例如:.exe, .bat, .com 等等,但是在Linux下面,我们的文件是否能被执行,则是借由是否具有“x”这个权限来决定的!跟文件名是没有绝对的关系的!

说了这么多,举个例子就明白了:

[-][rwx][r-x][r--]
1 234 567 890

解释:

1 为:代表这个文件名为目录或文件,本例中为文件(-);

234为:拥有者的权限,本例中为可读、可写、可执行(rwx);

567为:同群组使用者权限,本例中为可读可执行(rx);

890为:其他使用者权限,本例中为可读(r),就是只读之意;

同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)就行。

2)、第 [2] 栏代表有多少文件名链接到此节点(i-node);

3)、第 [3] 栏表示这个文件(或目录)的“拥有者帐号”;

4)、第 [4] 栏表示这个文件的所属群组;

5)、第 [5] 栏为这个文件的容量大小,默认单位为Bytes;

6)、第 [6] 栏为这个文件的创建日期或者是最近的修改日期;

7)、第 [7] 栏为这个文件的文件名。

举例:

例题:
假设test1, test2, test3同属于testgroup这个群组,如果有下面的两个文件,请说明两个文件的拥有者与其相关的权限为何?
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt
-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai
答:
文件test.txt的拥有者为root,所属群组为root。至于权限方面则只有root这个帐号可以存取此文件,其他人则仅能读此文件;
另一个文件ping_tsai的拥有者为test1,而所属群组为testgroup。其中:
test1 可以针对此文件具有可读可写可执行的权力;
而同群组的test2, test3两个人与test1同样是testgroup的群组帐号,则仅可读可执行但不能写(亦即不能修改);
至于没有加入testgroup这一个群组的其他人则仅可以读,不能写也不能执行! 例题:
承上一题如果我的目录为下面的样式,请问testgroup这个群组的成员与其他人(others)是否可以进入本目录?
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/
答:
文件拥有者test1[rwx]可以在本目录中进行任何工作;
而testgroup这个群组[r-x]的帐号,例如test2, test3亦可以进入本目录进行工作,但是不能在本目录下进行写入的动作;
至于other的权限中[r--]虽然有r ,但是由于没有x的权限,因此others的使用者,并不能进入此目录!

3、【改变文件的属性和权限】

3.1)、chown :即 change owner 改变文件拥有者;

[gjm@study ~]# chown [-R] 帐号名称 文件或目录
[gjm@study ~]# chown [-R] 帐号名称:群组名称 文件或目录
如:>>>chown bin initial-setup-ks.cfg //将 initial-setup-ks.cfg 的拥有者改为bin这个帐号:

3.2)、chgrp :即 change  group 改变文件所属群组;

[gjm@study ~]# chgrp [-R] dirname/filename ...
如:>>>chgrp users initial-setup-ks.cfg //变更initial-setup-ks.cfg文件所属组群为users,特别地,在变更某一目录内所有的文件之情况时,需要加上-r,表示递归执行目录下所有文件。

以上两个命令的运用场景:就是在使用 cp  命令时,比如,小明想要将user.cfg文件复制给小红,但是使用该命令后(也会复制执行者的属性与权限),文件权限还是小明,小红是不能读写该文件的,因为小红是Others。那么此时就可以使用上述命令来修改组群和拥有者权限了。

3.3)、chmod :即change  mode 改变文件的权限, SUID, SGID, SBIT等等的特性

文件权限的改变使用的是chmod这个指令,但是,权限的设置方法有两种, 分别可以使用数字或者是符号来进行权限的变更。

3.3.1)、数字类型改变文件权限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

所以等一下我们设置权限的变更时,该文件的权限数字就是770啦

举例:

[root@study ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

另外,如果有些文件你不希望被其他人看到,那么应该将文件的权限设置为例如:“-rwxr-----”,那就下达 chmod 740 filename  吧!

3.3.2)、符号类型改变文件权限

我一般使用的是数字,所以这个就不介绍了,知道有就行。O(∩_∩)O哈哈~

3)、文件和文件夹权限

鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

解释一下:

现在假设“文件是一堆文件数据夹”,所以你可能可以在上面写/改一些数据。而“目录是一堆抽屉”,因此你可以将数据夹分类放置到不同的抽屉去。 因此抽屉最大的目的是拿出/放入数据夹喔!

查询文件名(r)和能否进入目录(e)是没有关系的。

举例:

例题:
有个目录的权限如下所示:
drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh
系统有个帐号名称为vbird,这个帐号并没有支持root群组,请问vbird对这个目录有何权限?是否可切换到此目录中?
答:
vbird对此目录仅具有r的权限,因此vbird可以查询此目录下的文件名列表。因为vbird不具有x的权限,亦即 vbird 没有这个抽屉的钥匙啦! 因此vbird并不能切换到此目录内!(相当重要的概念!)

特殊例子:

例题:
假设有个帐号名称为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这个文件!
哇塞,不会吧,刚刚还是说对于Others来说,它没有e权限,怎么就又矛盾了?

别级别急~~~

上述的例子解释是这样的:

假设有个莫名其妙的人,拿着一个完全密封的数据夹放到你的办公室抽屉中,因为完全密封你也打不开、看不到这个数据夹的内部数据(对文件来说,你没有权限)。 但是因为这个数据夹是放在你的抽屉中,你当然可以拿出/放入任何数据在这个抽屉中(对目录来说,你具有所有权限)。

所以,情况就是:你打开抽屉、拿出这个没办法看到的数据夹、将他丢到走廊上的垃圾桶!搞定了 (顺利删除!)!是的,你有权限删除,但是没权限读写。

举个例子:

[dmtsai@study ~]$ cd /tmp
[dmtsai@study tmp]$ ls -l testing/
ls: cannot access testing/testing: Permission denied
total 0
?????????? ? ? ? ? ? testing
# 虽然有告知权限不足,但因为具有 r 的权限可以查询文件名。由于权限不足(没有x),所以会有一堆问号。
[dmtsai@study tmp]$ cd testing/
-bash: cd: testing/: Permission denied
# 因为不具有 x ,所以当然没有进入的权限啦!有没有呼应前面的权限说明啊!

#处理:

# 1. 先用 root 的身份来搞定 /tmp/testing 的属性、权限设置:
[root@study tmp]# chown dmtsai /tmp/testing
[root@study tmp]# ls -ld /tmp/testing
drwxr--r--. 2 dmtsai root 20 6月 3 01:00 /tmp/testing # dmtsai 是具有全部权限的!
# 2. 再用 dmtsai 的帐号来处理一下 /tmp/testing/testing 这个文件看看:
[dmtsai@study tmp]$ cd /tmp/testing
[dmtsai@study testing]$ ls -l <==确实是可以进入目录
-rw-------. 1 root root 0 Jun 3 01:00 testing <==文件不是vbird的!
[dmtsai@study testing]$ rm testing <==尝试杀掉这个文件看看!
rm: remove write-protected regular empty file `testing'? y
# 竟然可以删除!这样理解了吗?!

4)、文件种类 & 扩展名:

我们的Linux在使用者登陆时,都会将登录的数据记录在 /var/log/wtmp那个文件内;

文件种类:

  • 正规文件(regular file ):“-”
  • 目录(directory):"d"
  • 链接文件(link):"l"
  • 设备与设备文件(device)
    • 区块(block)设备文件:"b"
    • 字符(character)设备文件:"c"
  • 数据接口文件(sockets):"s"
  • 数据输送档(FIFO,pipe):"p"

扩展名:基本上,Linux系统上的文件名真的只是让你了解该文件可能的用途而已, 单一文件或目录的最大容许文件名为 255Bytes,以一个 ASCII 英文占用一个 Bytes 来说,则大约可达 255 个字符长度。若是以每个中文

字占用 2Bytes 来说, 最大文件名就是大约在 128 个中文字之谱!

5)、目录配置依据

Filesystem Hierarchy Standard (FHS):FHS的重点在于规范每个特定的目录下应该要放置什么样子的数据而已,希望让使用者可以了解到已安装软件通常放置于那个目录下,

鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

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

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

/dev:在Linux系统上,任何设备与周边设备都是以文件的型态存在于这个目录当中的。 你只要通过存取这个目录下面的某个文

件,就等于存取某个设备啦。

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

/proc:这个目录本身是一个“虚拟文件系统(virtual filesystem)”,他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边设备的状态及网络状态等等。

/sbin:放在/sbin下面的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。

/tmp:这是让一般使用者或者是正在执行的程序暂时放置文件的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要数据不可放置在此目录啊!

/usr (unix software resource):"Unix操作系统软件资源”,与软件安装/执行有关;我一直以为是user的缩写,丢人了;

/var (variable):与系统运行过程有关。

注:这个 root 在 Linux 里面的意义真的很多很多~多到让人搞不懂那是啥玩意儿。 如果以“帐号”的角度来看,所谓的 root 指的是“系统管理

员!”的身份, 如果以“目录”的角度来看,所谓的 root 意即指的是根目录,就是 / 啦~ 要特别留意喔!

5.1)、/usr目录下的文件夹

鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

5.2)、/var目录下的文件夹

鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

5.3)、目录树(directory tree)

鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

目录树架构图(引自《鸟哥的Linux私房菜第四版》219页)

5.4)、绝对路径与相对路径

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

注意:

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

举个例子:

例题1:
如何先进入/var/spool/mail/目录,再进入到/var/spool/cron/目录内?
答:
由于/var/spool/mail与/var/spool/cron是同样在/var/spool/目录中,因此最简单的指令下达方法为:
1. >>>cd /var/spool/mail
2. >>>cd ../cron

例题2:
网络文件常常提到类似“./run.sh”之类的数据,这个指令的意义为何?
答:
由于指令的执行需要变量(bash章节才会提到)的支持,若你的可执行文件放置在本目录,并且本目录并非正规的可执行文件
目录(/bin, /usr/bin等为正规),此时要执行指令就得要严格指定该可执行文件。“./”代表“本目录”的意思,所以“./run.sh”代表“执
行本目录下, 名为run.sh的文件”啰!

6)、本章重点回顾

  • Linux的每个文件中,可分别给予使用者、群组与其他人三种身份个别的 rwx 权限;
  • 群组最有用的功能之一,就是当你在团队开发资源的时候,且每个帐号都可以有多个群组的支持;
  • 利用ls -l显示的文件属性中,第一个字段是文件的权限,共有十个位,第一个位是文件类型, 接下来三个为一组共三组,为使用者、群组、其他人的权限,权限有r,w,x三种;
  • 如果文件名之前多一个“ . ”,则代表这个文件为“隐藏文件”;
  • 若需要root的权限时,可以使用 su - 这个指令来切换身份。处理完毕则使用 exit 离开 su 的指令环境;
  • 更改文件的群组支持可用chgrp,修改文件的拥有者可用chown,修改文件的权限可用chmod;
  • chmod修改权限的方法有两种,分别是符号法与数字法,数字法中r,w,x分数为4,2,1;
  • 对文件来讲,权限的性能为:
    • r:可读取此一文件的实际内容,如读取文本文件的文字内容等;
    • w:可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
    • x:该文件具有可以被系统执行的权限。
  • 对目录来说,权限的性能为:要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给;
    • r (read contents in directory)
    • w (modify contents of directory)
    • x (access directory)
  • 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给;
  • 能否读取到某个文件内容,跟该文件所在的目录权限也有关系 (目录至少需要有 x 的权限);
  • Linux文件名的限制为:单一文件或目录的最大容许文件名为 255 个英文字符或 128 个中文字符;
  • 根据FHS的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下;
  • FHS订定出来的四种目录特色为:shareable, unshareable, static, variable等四类;
  • FHS所定义的三层主目录为:/, /var, /usr三层而已;
  • 绝对路径文件名为从根目录 / 开始写起,否则都是相对路径的文件名。

over...

上一篇:Python学习 之 爬虫


下一篇:nodejs在后台运行