📄 0210filepermission.htm
字号:
<div class=block2>
Linux 档案的基本属性就有九个,分别是 owner/group/others 组别的 read/write/excute 属性,
先复习一下刚刚上面提到的资料∶<ul><span class=text_import2>-rwxrwxrwx</span></ul>
这九个属性是三个三个一组的!其中,我们可以使用数字来代表各个属性,各属性的对照表如下∶
<ul><span class=text_import2><font face="细明体">r:4<br>w:2<br>x:1</font></span></ul>
同一组 (owner/group/others) 的三个属性 (r/w/x) 是需要累加的,例如当属性为
[-rwxrwx---] 则是∶<ul><span class=text_import2><font face="细明体">
owner = rwx = 4+2+1 = 7<br>
group = rwx = 4+2+1 = 7<br>
others= --- = 0+0+0 = 0</font></span></ul>
所以等一下我们设定属性的变更时,该属性的数字就是 770 啦!变更属性的指令 chmod 的语法是这样的∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>chmod [-R] xyz 档案或目录</span>
<span class=term_say>参数∶
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递回( recursive )的持续变更,亦即连同次目录下的所有档案、目录
都更新成为这个群组之意。常常用在变更某一目录的情况。
</pre></td></tr></table>
举例来说,如果要将 .bashrc 这个档案所有的属性都打开,那么就下达∶ <br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ls -al .bashrc</span>
<span class=term_write>-rw-r--r--</span> 1 root root 395 Jul 4 11:45 .bashrc
[root@linux ~]# <span class=term_command>chmod 777 .bashrc</span>
[root@linux ~]# <span class=term_command>ls -al .bashrc</span>
<span class=term_write>-rwxrwxrwx</span> 1 root root 395 Jul 4 11:45 .bashrc
</pre></td></tr></table>
看到了吗?属性改变了喔!由于一个档案有三组属性,所以你可以发现上面 777
为三组,而由于我们将所有的属性都打开,所以数字都相加,亦即『
<span class=text_import2><font face="细明体">r+w+x = 4+2+1 = 7</font></span>』<br><br>
那如果要将属性变成『 <span class=text_import2>-rwxr-xr--</span> 』呢?那么就成为
<span class=text_import2>[4+2+1][4+0+1][4+0+0]=754</span> 棉!所以你需要下达
<span class=text_import2><font face="细明体">chmod 754 filename</font></span>。
最常发生的一个问题就是,常常我们以 vi 编辑一个 shell 的文字档后,他的属性通常是
-rw-rw-rw- 也就是 666 的属性,如果要将他变成可执行档,并且不要让其他人修改此一档案的话,
那么就需要 -rwxr-xr-x 这一个 755 的属性,所以
<span class=text_import2><font face="细明体">chmod 755 test.sh</font></span> 就需要这样做棉!<br><br>
另外,有些档案你不希望被其他人看到,例如 -rwxr-----,那么就下达
<span class=text_import2><font face="细明体">chmod 740 filename</font></span> 吧! <br><br>
<table border=1 width=90% cellspacing=0 cellpadding=5><tr><td>
例题三∶将刚刚您的 .bashrc 这个档案的属性改回原来的 -rw-r--r--<br>
答∶<ul>chmod 644 .bashrc</ul>
</td></tr></table><br>
</div>
<li><span class=text_import1>符号类型改变档案权限</span></li>
<div class=block2>
还有一个改变属性的方法呦!从之前的介绍中我们可以发现,基本上就九个属性分别是(1)user
(2)group (3)others 三群啦!那么我们就可以藉由 <span class=text_import1>u, g, o</span>
来代表三群的属性!此外, <span class=text_import1>a</span> 则代表 all
亦即全部的三群!那么读写的属性就可以写成了 r, w, x 棉!也就是可以使用底下的方式来看∶<br><br>
<table width=80% cellspacing=0 cellpadding=2 border=1 style="color: darkblue ;">
<tr align=center>
<td>chmod</td><td>u<br>g<br>o<br>a</td>
<td style="font: 11pt '细明体'">+(加入)<br>-(除去)<br>=(设定)</td>
<td>r<br>w<br>x</td><td>档案或目录</td></table><br>
来实作一下吧!假如我们要『设定』一个档案的属性为『-rwxr-xr-x』时,基本上就是∶
<ul><li>user (u)∶具有可读、可写、可执行的权限;<br>
<li>group 与 others (g/o)∶具有可读与执行的权限。</ul>
所以就是∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>chmod u=rwx,go=rx .bashrc</span>
<span class=term_say># 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空白字元!</span>
[root@linux ~]# <span class=term_command>ls -al .bashrc</span>
-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
</pre></td></tr></table>
请注意, u=rwx,og=rx 这一段文字之间并没有空白字元隔开呦!不要搞错棉!
那么假如是『 -rwxr-xr-- 』?可以使用『 <span class=text_import2>chmod u=rwx,g=rx,o=r filename</span>
』来设定。此外,如果我不知道原先的档案属性,而我只想要增加 .bashrc
这个档案的每个人均可写入的权限,那么我就可以使用∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ls -al .bashrc</span>
<span class=term_write>-rwxr-xr-x</span> 1 root root 395 Jul 4 11:45 .bashrc
[root@linux ~]# <span class=term_command>chmod a+w .bashrc</span>
[root@linux ~]# <span class=term_command>ls -al .bashrc</span>
<span class=term_write>-rwxrwxrwx</span> 1 root root 395 Jul 4 11:45 .bashrc
</pre></td></tr></table>
而如果是要将属性去掉而不更动其他的属性呢?!例如要拿掉所有人的 x 的属性,则∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>chmod a-x .bashrc</span>
[root@linux ~]# <span class=term_command>ls -al .bashrc</span>
<span class=term_write>-rw-rw-rw-</span> 1 root root 395 Jul 4 11:45 .bashrc
</pre></td></tr></table>
知道 +, -, = 的不同点了吗?对啦! + 与 ˉ 的状态下,只要是没有指定到的项目,
则该属性『不会被变动』,例如上面的例子中,由于仅以
ˉ 拿掉 x 则其他两个保持当时的值不变!呵呵!多多实作一下,你就会知道如何改变属性棉!
这在某些情况底下很好用的~举例来说,您想要教一个朋友如何让一个程式可以拥有执行的权限,
但您又不知道该档案原本的权限为何,此时,利用 chmod a+x filename ,就可以让该程式拥有执行的权限了。
是否很方便?
</div>
</div>
</div>
<hr><a name="filepermission_dir"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>目录属性的意义∶</span><br>
<div class=block2>
刚刚上面我们提到的属性几乎都是针对一般档案的特性在说明,那么如果是针对目录时,
那个 r, w, x 对目录是什么意义呢?简单的说∶
<ul><li><span class=text_import1>r (read contents in directory)</span>∶
表示具有读取目录结构清单的权限,所以当您具有读取 (r) 一个目录的权限时,
您就可以利用 ls 这个指令将该目录的内容列表显示出来!<br><br>
<li><span class=text_import1>w (modify contents of directory)</span>∶
这个可写入的权限对目录来说,是很了不起的!
因为他表示您将具有异动该目录结构清单的权限,也就是底下这些权限∶<br><br><ul><span class=text_import2>
<li>建立新的档案与目录;
<li>删除已经存在的档案与目录(不论该档案是属于谁的!)
<li>将已存在的档案或目录进行更名;
<li>搬移该目录内的档案、目录位置。</ul><br></span>
所以说,如果您是一般身份使用者,例如鸟哥的帐号 dmtsai ,那么在 /home/dmtsai 这个家目录内,
无论是谁 (包括 root) 建立的档案,无论该档案属于谁,无论该档案的属性是什么,
dmtsai 这个使用者都『有权力将该档案删除』的喔!<br><br>
<li><span class=text_import1>x (access directory)</span>∶
这个在上头我们已经稍微提过了,这个 x 与能否进入该目录有关呢!
</ul>
好了,那么我们来简单的做个测试看看,底下可能会有很多您没有见过的指令,
不要担心,先照著作看看,等到未来提到该指令时,您自然就会了解了。<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>cd /tmp</span>
[root@linux tmp]# <span class=term_command>mkdir testing</span>
[root@linux tmp]# <span class=term_command>chmod 744 testing</span>
[root@linux tmp]# <span class=term_command>touch testing/testing</span>
[root@linux tmp]# <span class=term_command>chmod 600 testing/testing</span>
<span class=term_say># 这个 mkdir 是在建立目录用的指令!是 make directory 的缩写。
# 我们用 root 的身份在 /tmp 底下建立一个名为 testing 的目录,
# 并且将该目录的权限变为 744 ,该目录的拥有者为 root 喔!
# 另外, touch 可以用来建立一个没有内容的档案,因此, touch testing/testing
# 可以建立一个空的 /tmp/testing/testing 档案喔!</span>
[root@linux tmp]# <span class=term_command>ls -al</span>
drwxr--r-- 2 root root 4096 Jul 14 01:05 testing
<span class=term_say># 仔细看一下,目录的权限是 744 ,且所属群组与使用者均是 root 喔!
# 接下来,我们将 root 的身份切换成为一般身份使用者。
# 鸟哥的系统里面有个 dmtsai 的一般身份使用者帐号,所以切换身份成为 dmtsai </span>
[root@linux tmp]# <span class=term_command>su dmtsai</span>
<span class=term_say># 那个 su 的指令是用来『变换身份』的一个指令,我们未来会详细介绍。
# 注意看,底下这一行中,发现使用者变为 dmtsai 了,而且提示字元变成 $ 了!
# 也就是说,现在操作系统的人变成 dmtsai 了!那么 dmtsai 这个人对于
# /tmp/testing 是属于 others 的权限,那他可以对 /tmp/testing 干嘛?</span>
[dmtsai@linux tmp]$ <span class=term_command>ls -l testing</span> <span class=term_note><== 此时身份为 dmtsai</span>
total 0
?--------- ? ? ? ? ? testing
<span class=term_say># 可以查阅里面的资讯喔!因为dmtsai 具有 r 的权限,不过,毕竟权限不够,
# 很多资料竟然是问号 (?) 来的~怪怪的紧~</span>
[dmtsai@linux tmp]$ <span class=term_command>cd testing</span> <span class=term_note><== 此时身份为 dmtsai</span>
bash: cd: testing/: Permission denied
<span class=term_say># 发现了吗?即使我们具有 r 的权限,但是没有 x ,所以
# dmtsai 无法进入 /tmp/testing 喔!</span>
[dmtsai@linux tmp]$ <span class=term_command>exit</span>
[root@linux tmp]# <span class=term_command>chown dmtsai testing</span>
<span class=term_say># 使用 exit 就可以离开 su 的功能了。我们将这个 testing 目录的拥有者设定为
# dmtsai ,此时 dmtsai 就成为 owner 了,那么这个使用者又能干麻呢?</span>
[root@linux tmp]# <span class=term_command>su dmtsai</span>
[dmtsai@linux tmp]$ <span class=term_command>cd testing</span> <span class=term_note><== 此时身份为 dmtsai</span>
[dmtsai@linux testing]$ <span class=term_command>ls -l</span> <span class=term_note><== 此时身份为 dmtsai</span>
-rw------- 1 root root 0 Jul 14 01:13 testing
<span class=term_say># 再切换身份成为 dmtsai ,此时就能够进入 testing 了!查阅一下内容。
# 发现了 testing 这个档案存在喔!权限是只有 root 才能够存取~
# 那我们测试一下能否删除呢?</span>
[dmtsai@linux testing]$ <span class=term_command>rm testing</span> <span class=term_note><== 此时身份为 dmtsai</span>
rm: remove write-protected regular empty file `testing'? <span class=term_command>y</span>
<span class=term_say># 竟然可以删除!这样理解了吗?!</span>
</pre></td></tr></table>
透过上面这个简单的步骤,您就可以清楚的知道, x 在目录当中是与『能否进入该目录』有关,
至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建档案或目录,
是个很重要的参数啊!这样可以理解了吗?! ^_^
</div>
<hr><a name="filepermission_type"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>Linux 档案种类与附档名</span><br>
<div class=block2>
我们在学习 Linux 之前,就跟大家灌输过一个概念,那就是,任何装置在 Linux 底下都是档案,
不仅如此,连资料沟通的介面也有专属的档案在负责~所以,您会了解到, Linux 的档案种类真的很多~
除了前面提到的那个 -, d 亦即所谓的一般档案与目录档案之外,还有哪些种类的档案呢?<br><br>
<li><span class=text_import1>档案种类∶</span></li>
<div class=block2>
我们在刚刚的属性介绍中提到了最前面的标
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -