2012年10月28日 星期日

利用 ln 命令,以整理、分類、及防止誤刪檔案

硬碟的容量愈來愈大,資料也愈存愈多,對於需要常常查詢,或偶而會修改、更新的資料,是不適合燒錄在光碟中。將這些資料放在硬碟中,查詢方便、修改也容易。但是,一不小心,把辛苦收集的資料給誤刪掉,那可是『人間悲劇』,尤其是當原來網站也關閉了,不知如何是好。
    把資料設成「唯讀」應是不錯的想法,可是修改、更新時又要將檔案屬性改回,似乎也不太方便。所幸,Linux 的「多工、多用戶」設計,讓這種需求有另一種解決辦法。那就是
「分身用戶」、「檔案鏈結」及「檔案存取模式」三者合併應用
想要用這個方法保護自已的檔案,需要:
  • 兩個具有同一「私有群組」的帳號,
  • 會使用 ln (鏈結)命令,用「終端機」管理資料。
詳細說明如下:
這些步驟都需要系統管理者(root)幫忙操作,如果這是個人使用的電腦,那就沒問題了。先切換到 root 權限,再開始操作,

一、設定用戶帳號、群組

這個步驟要有系統管理者幫忙,如果這是個人使用的電腦,那就沒問題了。先切換到 root 權限,再做以下的修改,
  • 新增一個用戶(假設原用戶為 SiB),例:SiB2
    [root@Celeron-D ~]# adduser -N SiB
  • 新增加一群組,例:SiB_group
    [root@Celeron-D ~]# groupadd SiB_group
  • 將兩個用戶加入 SiB_group 這個群組,並將 SiB2 的「主群組」設為 SiB_group
    [root@Celeron-D ~]# usermod -G SiB_group -a SiB
    [root@Celeron-D ~]# usermod -g SiB_group SiB2
  • 將用戶 SiB2 移出除 SiB_group 外的其它群組,
    [root@Celeron-D ~]# usermod -G SiB_group SiB2
    設定後,SiB2 新建立的檔案、目錄的「群組」屬性都會是 SiB_group,而 SiB 也是 SiB_group 群組的一員,也就有權限可以存取 SiB2 的所有檔案、目錄了。

二、修改目錄屬性

假設平常使用的帳號是 SiB,那麼「家目錄」應為『/home/SiB』,其中的「模式」、「擁有者」及「群組」三個「屬性值」應為『drwx------』、『SiB』及『users』,也就是每個用戶只能讀、寫自己的「家目錄」,其他用戶連看有哪些檔案都不行。
[SiB@Celeron-D ~]$ ll /home/
總計 44
drwx------. 55  SiB  users4096  9月 12 21:51  SiB
drwx------.33  SiB2  users4096  10月 12 16:25  SiB2
drwx------.2  root  root  163842月 17  2012  lost+found
[SiB@Celeron-D ~]$ 
更改目錄 SiB2 及其子目錄的「群組」屬性為:SiB_group
[root@Celeron-D ~]# cd /home
[root@Celeron-D home]# chgrp -R SiB_group
參數『-R』會將之前已建立的檔案、目錄的「群組」屬性,全部(含所有子目錄)更改。
    最後,再更改目錄的「存取模式」,
[root@Celeron-D home]# chmod -R g+rx SiB2
即,目錄『/home/SiB2』以下的所有檔案、目錄,都設定為『可被同屬一個群組』的 SiB 所讀取,但不能寫入。

三、設定目錄鏈結

現在可以切換回用戶身份了,在用戶 SiB 的「家目錄」下建立「目錄鏈結」指向 SiB2 的目錄,假設該分享給 SiB 的目錄名為『/home/SiB2/ReadOnly』,則在 SiB 所下的命令為,
[SiB@Celeron-D ~]$ ln -s /home/SiB2/ReadOnly ReadOnlyInSiB2
這個命令,會在 SiB 的「家目錄」中,建立一個名為『ReadOnlyInSiB2』的鏈結。用戶 SiB 可以經由這個目錄鏈結,讀取 SiB2 的資料,但是不會更改內容。

已測試版本:

  • Fedora: 14, 17

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)