電腦網路與作業系統 電腦網路與作業系統

電腦網路與作業系統上課教材

電腦網路與作業系統 > 課程內容 > 第 11 章 - Linux 作業系統 - vim 文書編輯器與基礎帳號、權限管理

第 11 章 - Linux 作業系統 - vim 文書編輯器與基礎帳號、權限管理

上次更新日期 2020/05/21

管理系統經常需要更動到系統設定檔,系統設定檔的修改在 Linux 底下,經常讓大家使用的有兩個,nano 與 vim, 個人比較推薦使用 vim,因為他有顏色的語法檢驗,比較不容易發生錯誤的情況。另外,Linux 系統是多人多工的環境, 所以,總是得要知道帳號的概念與個別帳號的權限,如果了解權限概念,那就更好了。

學習目標

  1. 學會 mkdir, rmdir, cp, rm, mv 等簡單的檔案管理工具
  2. 學會 vim 文書編輯器以及 cat 讀出檔案內容指令
  3. 學會 useradd, passwd 等簡易的帳號管理工具
  4. 學會 chown, chgrp, chmod 等權限管理的工具
  5. 學會 rwx 的分數計算

11.1: 簡單檔案管理

在 Linux 底下,所有的東西都以檔案來呈現,不同的檔案特性會有不同的結果。讀者可以常見的兩種檔案格式為:

  • 一般檔案:實際放置資料的檔案
  • 目錄檔案:重點在放置『檔名』,並沒有實際的資料

為何需要目錄檔?讀者可以想像,如果僅有一個櫃子,你將所有書籍全部丟進同一個櫃子中,則未來要找資料時,會很難找尋 (因為單品太多)。 若可以有多個櫃子,將不同的資料分類放置於各別的櫃子中,未來要找某一類別的資料,只要找到該類別的櫃子,就能夠快速的找到資料 (單品較少), 這就是目錄檔案的重點。

  • 目錄的建立與刪除

目錄的建立主要使用 mkdir 這個指令,這個指令將建立一個『空目錄』。所謂的『空目錄』意指該目錄內並沒有其他檔案的存在。 至於刪除目錄則使用 rmdir 這個指令,但同理,這個指令僅能『刪除空目錄』而已。

例題 11.1-1: 建立目錄
  1. 前往 /dev/shm 目錄,並列出目前的工作目錄檔名
  2. 觀察目前目錄下的檔名有哪些
  3. 建立名為 unit11 的目錄
  4. 觀察目錄是否建置妥當。
  5. 刪除此目錄,並觀察是否刪除成功
簡易解答如下:
  1. cd /dev/shm; pwd
  2. ll
  3. mkdir unit11
  4. ll
  5. rmdir unit11
  • 檔案與目錄的複製、刪除

基本上,要複製檔案,就用 cp,要刪除檔案,就用 rm。但是這兩個指令有很多不同的參數與選項,使用的時候要很注意。

例題 11.1-2: 進行 /etc 的備份工作,預計將 /etc/ 備份到 /dev/shm/mybackup 內(測試用)
  1. 切換身份成為 root 管理員身份
  2. 前往 /dev/shm
  3. 建立 mybackup 目錄,並且切換工作目錄到 mybackup 去
  4. 將 /etc/hosts 複製到本目錄
  5. 將 /etc 整個資料複製到本目錄,應該要加什麼選項才行?
  6. 觀察本目錄底下的檔名有哪些?
  7. 前往 /dev/shm/mybackup/etc/sysconfig ,並列出工作目錄名稱
  8. 刪除名為 man-db 的檔名
  9. 刪除名為 console 的檔名
簡易解答如下:
  1. su -
  2. cd /dev/shm
  3. mkdir mybackup; cd mybackup
  4. cp /etc/hosts .
  5. cp /etc .; cp -r /etc .; cp -a /etc .
  6. ll
  7. cd mybackup/etc/sysconfig; pwd
  8. ll; rm man-db; ll
  9. rm console; rm -r console
  • 檔名的移動與更名

檔名的移動使用 mv (move),同時,更名也是用 mv 喔!

例題 11.1-3: 進行檔案的移動與更名
  1. 前往 /dev/shm,並且建立名為 moving 的目錄,同時進入 moving 成為工作目錄
  2. 將 /dev/shm/mybackup/hosts 移動到本目錄下
  3. 觀察本目錄下的檔名
  4. 發現檔名不喜歡,更改檔名成為 myhosts
  5. 再次觀察檔名
簡易解答如下:
  1. cd /dev/shm; mkdir moving; cd moving; pwd
  2. ll ..; mv ../mybackup/hosts .
  3. ll
  4. mv hosts myhosts
  5. ll

這就是簡單的檔案管理功能!包括查看檔名、建立目錄、刪除與複製檔案及目錄、移動與更名的資料等。

11.2: vim 的使用

事實上我們在 Linux 裡面比較常使用的應該是 vim 這個程式編輯器~vim 有三種基本的模式,亦即是:

  • 一般指令模式 (command mode):使用『 vim filename 』進入 vim 之後,最先接觸到的模式。 在這個模式底下使用者可以進行複製、刪除、貼上、移動游標、復原等任務。
  • 編輯模式 (insert mode):在上述模式底下輸入『 i 』這個按鈕,就可以進入編輯模式,終於可以開始打字了。
  • 指令列命令模式 (command-line mode):回到一般模式後,可以進行儲存、離開、強制離開等動作。

簡單的說,讀者可以將三種模式使用底下的圖示來思考一下相關性:

vi三種模式的相互關係

實際來練習一下,先打開終端機,然後輸入『 vim test.txt 』,進入 vim 的畫面中,你會看到如下的圖示:

vim 的使用

事實上,整個 vim 預設畫面可以分為兩個部份:

  • 第一個部份就是上半部的可編輯區,可編輯區有個游標,該游標所在處,會在右下角顯示 X, Y 軸~
  • 第二個部份就是最後一行的狀態列,該狀態列會顯示目前的檔名、游標所在處,可編輯區佔整個檔案的百分比, 以及目前是否在可輸入編輯 (INSERT/REPLACE) 的狀態等等。

現在,請按下『 i 』這個按鈕 (insert) ,就可以進入編輯模式!你會看到狀態列左下方出現可編輯的字樣, 然後開始在第一行編輯歡迎訊息,如下所示:

vim 的使用

如果編輯完畢,此時需要進入到指令列模式進行檔案的儲存~要先按下『 esc 』按鈕,回到一般模式, 然後再輸入『 :w 』就可以進行儲存~輸入『 :q 』就可以離開 vim 編輯了!

vim 的使用

離開 vim 環境回到 bash 中,再次輸入『 ll 』看一下有沒有名為 test.txt 的檔案存在呢?那就是剛剛建立的檔案。 那要如何讀出該檔案的內容呢?可以使用 cat 這個指令來讀出即可:

[student@localhost ~]$ ll test*
-rw-rw-r--. 1 student student 28  5月 21 06:03 test.txt

[student@localhost ~]$ cat test.txt
Welcome to my linux server.

基本上,你只要會這幾個簡單的按鈕即可!其他的都暫時不要學!那就很棒了!

  • 編輯檔案: vim file
  • 進入編輯: i
  • 離開編輯: [esc]
  • 從一般模式進行儲存: :w
  • 從一般模式進行離開: :q
例題 11.2-1: 使用 vim 來修改文字檔
  1. 以 student 的身份,移動工作目錄到 /dev/shm 目錄下
  2. 將 /etc/crontab 複製到本目錄,複製完成後請觀察檔案權限
  3. 使用 vim 來編輯該檔案
  4. 在第 4 行的地方新增一些資料,可以是『This is a test line!』即可。
  5. 去到最後一行,新增一些資料,可以是『* * * * * root echo haha』
  6. 離開編輯模式後,進行儲存,進行離開。
  7. 回到 bash 環境後,查看一下該檔案的時間參數是否修訂了?
  8. 使用 cat 呼叫出 crontab 檔案的內容,看看有沒有順利修改?
簡易解答如下:
  1. cd /dev/shm
  2. cp /etc/crontab .; ll
  3. vim crontab
  4. 按下『 i 』進入編輯,依據上述資料在第 4 行新增
  5. 用方向鍵移動到最底下,持續進行編輯
  6. 按下『 esc 』、『 :w 』、『 :q 』
  7. ll
  8. cat crontab

如果使用 vim 來編輯設定檔呢?可以得到會變色的文字喔!

例題 11.2-2: 使用 vim 來修改設定檔
  1. 使用 student 的身份,直接編輯 /etc/fstab 設定檔
  2. 觀察左下角的檔名資訊,會出現唯讀 (readonly) ,顯示 student 是沒有權限修改的。
  3. 按下『 i 』強迫修改檔案,系統會警告,先略過不要緊~
  4. 找到『 defaults 』字樣的地方,將 s 拿掉,或將關鍵字改掉,看字體顏色有沒有改變?
  5. 反正就亂改~持續亂填資料~
  6. 回到一般模式,持續按下『 u 』,就可以恢復原本的檔案內容!
  7. 最後不儲存離開,按下『 :q! 』,加個驚嘆號,就可以強制不儲存離開!

在 vim 環境下,常見的指令有:

慣用的指令說明
i, [esc] i 為進入編輯模式, [esc] 為離開編輯模式
G 移動到這個檔案的最後一列
gg 移動到這個檔案的第一列
dd dd 為刪除游標所在行,5dd 為刪除 5 行,ndd 為刪除 n 行
yy yy 為複製游標所在行,5yy 為複製 5 行,nyy 為複製 n 行
p 在游標底下貼上剛剛刪除/複製的資料
u 復原前一個動作
:w 將目前的資料寫入硬碟中
:q 離開 vim
:q! 不儲存 (強制) 離開 vim

例題 11.2-3: 在 vim 的環境下,進行刪除、複製、貼上、移動的行為
  1. 前往 /dev/shm 之後,將 /etc/services 檔案複製到當前目錄下
  2. 使用 wc --help 查看一下 wc 指令的用法,然後使用 wc 去檢查 services 有多少行?
  3. 使用 vim 編輯 services
  4. 移動到最後一行
  5. 重新移到到第 10 行,複製該行底下的 10 行內容,接下來移動到最後一行,貼上剛剛複製的 10 行。
  6. 移動到第 500 行,然後刪除 20 行
  7. 回到第一行,並且在第一行新增全新的一行,輸入『This file changed』的字樣。
  8. 儲存之後離開這個檔案。
簡單解答如下:
  1. cd /dev/shm; cp /etc/services .
  2. wc services (出現的資料依序是行、字數、字元數)
  3. vim servcies
  4. G
  5. 10G, 10yy, G, p
  6. 500G, 20dd
  7. gg (1G), i, [enter] 後回到第一行輸入文字
  8. [esc], :w, :q

11.3: Linux 帳號管理

Linux 是多人多工的作業系統,他允許同時間有多人同時操作此系統。這點與 windows 差異比較大,因為 windows 有一人操作時,其他登入者通常是在休眠的狀態。 Linux 則是大家可以同時工作,只是工作的情況不太一樣。Linux 的用戶很多都僅是使用純文字模式,透過網路登入系統,不必啟用 GUI 的。

想知道使用者自己的 ID 資訊時,可以使用 id 這個指令來追蹤~其實,Linux 帳號有點像『名字』,是方便大家記憶的, 但是,事實上系統記憶的是 UID,有點像你的『身份證』,所以,『名字/身份證』,對應就是『帳號/UID』囉!:

[student@localhost ~]$ id
uid=1000(student) gid=1000(student) groups=1000(student) context=.....

如上所示,student 這個帳號的 UID 是 1000,舉例來說,就是有個人,名字是 student,他的身份證號碼是 1000 這樣的意思! 而系統上面的檔案,紀錄的身份資料,其實就是 UID 喔!

如果要檢查是否有其他帳號名稱存在,也可以在 id 後面加上帳號名稱去觀察!若該帳號不存在,系統也會回報有問題。

例題 11.3-1: 觀察系統上面的帳號名稱與 UID 的對應
  1. 輸入『 id root 』查閱該帳號,注意其 UID 號碼為何?
  2. 輸入『 id bin 』查閱該帳號
  3. 輸入『 id myclass 』查閱該帳號是否存在
簡易解答如下:
  1. root 很特別,他的 UID 一定會是 0 喔!
  2. 應該是有該帳號,會顯示 uid 與 gid 資訊
  3. 因為沒這個人,所以會顯示找不到該帳號喔!

當帳號不存在時, id 就會告知該帳號不存在了。另外, Linux 也將帳號分了兩個層級,一個是系統管理員,名稱預設都是 root 這個名詞, 其他的都是一般帳號。一般帳號因為使用的情況又分為兩大類,一個是給系統使用的系統帳號,一個是給終端用戶登入使用的帳號。 分辨的方法主要是透過使用者識別碼 (UID)。

台灣有名字與身份證號碼作為身份辨別,但是名字是因為人腦記憶的方便,事實上相關的資訊都是使用身份證在記錄的。 Linux 帳號的 UID 就像身份證號碼,登入帳號名稱就是名字這樣的意思。而通常所有記錄都是身份證啊,因此系統上所有的檔案都是記錄 UID 的! 這點要特別注意喔。

預設 0 號是系統管理員專用的 UID (身份證),1~999 預設給一般系統帳號使用, 1000~ 則是給一般終端用戶使用。因此,你剛剛 id 自己, 應該就能夠看到 UID 應該是 1000 號吧!

  • 建立新帳號

那如何新建 Linux 帳號?還記得登入時需要輸入帳號+密碼吧?所以建立帳號也是需要兩個動作,假設新帳號名稱為 niki 的話,那麼就是:

[root@localhost ~]# useradd niki 
[root@localhost ~]# passwd niki 
Changing password for user niki.
New password: <==這裡輸入密碼
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: <==這裡輸入密碼
passwd: all authentication tokens updated successfully.

[root@localhost ~]# id niki 
uid=1001(niki) gid=1001(niki) groups=1001(niki)

基本上,Linux 對於密碼的規範是比較嚴謹的,因此當你輸入比較爛的密碼之後,系統會告知該密碼很爛!你真的要使用嘛? 不過,因為你是 root ,因此爛密碼還是會被接受。雖然很不建議接受爛密碼,所以當系統回報這是爛密碼之後,建議你在想一個新的密碼來輸入比較妥當! 不要使用爛密碼了!養成習慣吧。

  • 使用新帳號

想要使用新的帳號登入,可以找任何一個目前尚未使用的 tty 來進行登入的行為:

例題 11.3-2: 使用新的帳號
  1. 切換終端機到 tty4
  2. 使用剛剛新建立的 niki 來登入系統
  3. 登入之後輸入 w 查閱一下目前登入系統的用戶群
  4. 輸入『 pwd 』看看目前的家目錄位於哪個實際的檔名中
  5. 轉回 tty2 的畫面
  6. 在任何一個終端機輸入『 w 』以及『 pwd 』看看差異為何?
  7. 回到 tty4 ,登出 niki 這個帳號。

就像 windows 在不同的帳號登入後,他的桌面會是在 C:\>Users\Desktop\ 目錄下一樣,Linux 的所有帳號預設目錄放在 /home ,那個斜線 / 就類似 windows 的『本機』, 最頂層的目錄所在。然後不同的帳號放置在不同的目錄下,所以 student 家目錄在 /home/student/ ,而 niki 就在 /home/niki/ 之意。 預設目錄檔名會主動加上斜線,所以 /home/student 與 /home/student/ 意義是一樣的。

CentOS 8 很有意思,在本機上面支援多個 GUI (Graphical User Interface, 使用者圖形化界面),登入的圖形終端都在 tty1,而第一個圖形界面會在 tty2, 第二個圖形界面則在 tty3 這樣,相當有趣!現在,請前往 tty1 ,你可能可以看到 niki 這個用戶出現了! 如果沒有出現,則可以點選『 not list 』的項目,然後手動輸入帳號、密碼即可!登入看看喔!

例題 11.3-3: 使用新的帳號, GUI 環境
  1. 在 tty1 上,使用 niki 帳號登入
  2. 依據前幾周的訓練,自行選擇語系資料等
  3. 切換 tty1, tty2, tty3,看看差異在哪裡。
  4. 在任何一個 tty 上面打開終端機,輸入 w 後,看出現的 tty 結果顯示為何。
簡易解答:底下只針對最後一題,亦即 w 的顯示結果如下:
[student@localhost ~]$ w
 18:14:41 up 1 day, 18:02,  3 users,  load average: 1.64, 0.46, 0.16
USER     TTY   FROM   LOGIN@   IDLE   JCPU   PCPU WHAT
student  :1    :1     Wed01   ?xdm?   5:35   0.01s /usr/libexec/gdm-x-session gnome-session
niki     :2    :2     18:14   ?xdm?   5:35   0.01s /usr/libexec/gdm-x-session gnome-session
你會發現 TTY 的欄位上,就會有對應的 :1, :2 這兩個圖形界面的終端機喔!:0 (tty1) 是第一個圖形界面,:1 (tty2) 與 :2 (tty3) 分別是第 2, 3 個圖形界面的意思!
  • 刪除舊帳號

基本上,UID 小於 1000 的帳號最好不要隨意刪除,否則容易出問題。而如果有已經不再使用的 UID 大於 1000 的帳號,刪除掉可能也是可以思考的方式。 刪除的方式比較重要,需要加上 -r 的選項。此外,要被刪除的帳號也記得需要登出才行。

[root@localhost ~]# ll /home 
drwx------. 15 niki    niki    4096 May 21 18:14 niki
drwx------. 15 student student 4096 May 21 06:26 student

[root@localhost ~]# id niki 
uid=1001(niki) gid=1001(niki) groups=1001(niki)

[root@localhost ~]# userdel -r niki 
userdel: user niki is currently used by process 698
# 原來忘記登出!趕緊到 tty3 以及其他 tty ,登出 niki 才行!登出後持續進行如下行為:

[root@localhost ~]# userdel -r niki 

[root@localhost ~]# ll /home 
drwx------. 15 student student 4096 May 21 06:26 student

[root@localhost ~]# id niki 
id: ‘niki’: no such user
例題 11.3-3: 如果設定了帳號,結果帳號刪除忘記加上 -r 時,該如何處理?同時查閱檔案記載的 UID 狀態
  1. 建立帳號的階段:
    1. 建立一個名為 ksu 的帳號,密碼設定為 itismyksu00。
    2. 建立完畢之後查看 ksu 的 UID 與 GID,同時觀察 /home 是否有 ksu 的家目錄產生
  2. 使用新帳號登入系統看看:
    1. 在 tty5 上面使用 ksu 帳號密碼登入系統
    2. 登入後使用 w 指令觀察系統上面有哪些人登入了
    3. 觀察完畢之後請登出系統,並回到原本的 root 身份終端機界面上。
  3. 嘗試忘記加上 -r 的方式來刪除帳號後,看看如何挽救!
    1. 單純使用『 userdel ksu 』刪除使用者
    2. 刪除完畢之後查看 ksu 的 UID 與 GID,同時觀察 /home 是否有保留 ksu 的家目錄
    3. 使用『 rm -rf /home/ksu 』,然後再次觀察 /home 的目錄狀態

特別注意,那個『 rm -rf 』對於 root 的身份來說,那是很可怕而危險的指令,很可能不小心就將整個系統刪除! (類似刪除掉 windows 的 C 槽) 所以操作該指令時,不要亂做,要注意後面接的目錄名稱是否正確才行。

  • 群組管理

群組的目的就像『分組管理』的功能而已!重點還是在帳號。舉例來說,設計『童軍社』的目的,是為了招攬『同學們參加活動』, 只是相關的活動與童軍比較有關而已!而當學校要分配資源時,就將童軍社需要的資源分配給『童軍社』,而不是單一個人的學生。 加入童軍社,你就可以使用童軍社那個社團裡面的資源。

增加群組使用 groupadd,刪除群組使用 groupdel,將某個已存在的用戶加入群組,可以使用 usermod -a -G 來處理!

例題 11.3-4: 增加特殊群組,讓用戶加入該群組
  1. 增加名為 pro 的群組
  2. 使用 cat 呼叫 /etc/group 內容 (因為群組資訊就放在 /etc/group 檔案內)
  3. 將 student 加入 pro 這個群組
  4. 觀察 student 的 id 顯示的結果。
參考解答:
  1. groupadd pro
  2. cat /etc/group (重點看最後幾行)
  3. usermod --help; usermod -a -G pro student
  4. id student

11.4: Linux 檔案權限初探:chown, chgrp, chmod

如前所述,FAT 檔案系統是沒有甚麼保障的檔案系統,而其他的檔案系統則有很多的權限與屬性設定等等。 如果你使用 ll 的話,就會看到第一欄位有很多的特殊旗標,主要是 r, w, x 的組合!那是甚麼呢?這需要從 Linux 的傳統權限講起。

  • Linux 帳號與群組

Linux 的檔案權限在設定上,主要依據三種身份來決定,包括:

  • user / owner / 檔案擁有者 / 使用者:就是檔案所屬人
  • group / 群組:這個檔案附屬於那一個群組團隊
  • others / 其他人:不是 user 也沒加入 group 的帳號,就是其他人。
  • 檔案權限的觀察

單純的檔案權限觀察,可以使用 ls -l 或 ll 來查閱,底下為查詢系統 /var/spool/mail 這個目錄的權限方式:

[student@localhost ~]$ ls -ld /var/spool/mail
drwxrwxr-x. 2 root mail 32   5月 21 19:03 /var/spool/mail
[    A    ][B][C ] [D ] [E]  [    F     ] [    G        ]

簡單的分析,上述的資料共有七個欄位,每個欄位的意義為:

  1. 檔案類型與權限,第 1 個字元為檔案類型,後續 9 個字元每 3 個一組,共分 3 組,為三種身份的權限;
  2. 檔案連結數,這與檔案系統有關,讀者可暫時略過;
  3. 該檔案的擁有者,本例當中,擁有者身份為 root
  4. 該檔案的所屬群組,本例當中這個檔案屬於 mail 這個群組底下
  5. 這個檔案的容量
  6. 該檔案最後一次被修改/修訂的日期時間
  7. 這個檔案的檔名。

讀者首先可以分析一下這個『檔案』的『類型』。之前讀者應該看過第一個字元為 - 以及 d 的表示方式,事實上還有很多常見的檔案類型, 底下僅為常見的類型介紹:

  • -: 代表後面的檔名為一般檔案
  • d: 代表後面的檔名為目錄檔
  • l: 代表後面的檔名為連結檔 (有點類似 windows 的捷徑概念)
  • b: 代表後面的檔名為一個裝置檔,該裝置主要為區塊裝置,亦即儲存媒體的裝置較多
  • c: 代表後面的檔名為一個週邊裝置檔,例如滑鼠、鍵盤等

所以讀者可以知道 /var/spool/mail 為一個目錄檔案 (d 開頭,為 directory 的縮寫)。確定了檔案類型後,接下來的 9 個字元都是 rwx 與減號而已, 從這 9 個字元判斷,讀者大概可以猜出 rwx 的意義為:

  • r: read,可讀的意思
  • w: write,可寫入/編輯/修改的意思
  • x: eXecutable,可以執行的意思

只不過 rwx 該如何與 root, mail 這個使用者與群組套上關係?我們可以使用下圖來查閱第 1, 3, 4 個欄位的相關性:

使用者、群組與權限的相關性

如上圖所示,第一組為檔案擁有者的權限,第二組為檔案擁有群組的權限,第三組為不是擁有者也沒有加入該群組的其他人權限。 所以上述的檔案權限為:

  • 擁有者為 root,root 具有 rwx 的權限 (第一組權限)
  • 群組設定為 mail,則所有加入 mail 這個群組的帳號可以具有 rwx 的權限 (第二組權限)
  • 不是 root 也沒有加入 mail 的其他人 (例如 student 這個帳號) 具有 rx 的權限 (第三組權限)
例題 11.4-1: 了解 Linux 檔案權限概念
  1. 使用 ll -d /var/spool/cups 觀察該檔名的特性
  2. 該檔名屬於目錄還是檔案
  3. 該檔名屬於哪個用戶與哪個群組所擁有
  4. 使用者、群組、其他人個別權限為何
參考解答:
  1. ll -d /var/spool/cups
  2. 最前面『drwx--x---.』,所以是目錄
  3. 使用者 root、群組 lp
  4. root具有rwx權限、加入 lp 群組的用戶具有 x 的權限,其他非 root 也沒加入 lp 群組的其他人沒任何權限
  • 檔案屬性與權限的修改方式

檔案的權限與屬性的修改,若以 ls -l 的輸出來說,則每個部份可以修改的指令參照大致如下:

[student@localhost ~]$ cd /dev/shm/
[student@localhost shm]$ touch checking
[student@localhost shm]$ ls -l checking
-rw-rw-r--. 1 student student 0  5月 21 19:26 checking
 [ chmod ]    [chown] [chgrp]    [   touch  ] [  mv  ]

由於一般帳號僅能修改自己檔案的檔名、時間與權限,無法隨意切換使用者與群組的設定。因此底下的例題中, 讀者應該使用 root 的身份來進行處理,方可順利進行。首先,切換身份成為 root ,並且將工作目錄切換到 /dev/shm。 (也就是說,一般使用者還是能夠操作 chmod 以及 touch 等等指令的)

[student@localhost shm]$ su -
password:
[root@localhost ~]# cd /dev/shm
[root@localhost shm]# ll checking
-rw-rw-r--. 1 student student 0  5月 21 19:26 checking

要修改一個檔名 (不論是目錄檔案還是一般檔案) 時,你必須要:

  • 透過類似 ll 或 ls ,加上『相對路徑或絕對路徑』確認該檔名是存在的才能繼續
  • 透過 id 或 grep 或其他方式,確認目標資料是存在的(例如切換的用戶與群組)
  • 實際操作指令。
  • 使用 chown 修改檔案擁有者

查詢系統中是否有名為 daemon 的帳號,如果存在該帳號,請將 checking 的使用者改為 daemon 所擁有,而非 student 所擁有。

[root@localhost shm]# id daemon
uid=2(daemon) gid=2(daemon) groups=2(daemon)
# 這個動作就是在確認目標資料,也就是要切換的用戶帳號是否存在的意思!

[root@localhost shm]# chown daemon checking
[root@localhost shm]# ll checking
-rw-rw-r--. 1 daemon student 0 May 21 19:26 checking

其實 chown 的功能非常多,chown 也可以用來進行群組的修改,也能同時修改檔案擁有者與群組。建議讀者們應該 man chown 查詢相關語法, 或直接 chown --help 查詢用法。

  • 使用 chgrp 修改檔案擁有的群組

系統的群組都紀錄在 /etc/group 檔案內,若想要了解系統是否存在某個群組,可以使用 grep 這個關鍵字擷取指令來查詢。 舉例來說,當系統內有 bin 這個群組時,就將 checking 的群組改為 bin 所有,否則就不予修改。

[root@localhost shm]# grep myname /etc/group
# 不會出現任何資訊,因為沒有這個群組存在的意思。

[root@localhost shm]# grep bin /etc/group
bin:x:1:        <==代表確實有這個群組存在!

[root@localhost shm]# chgrp bin checking
[root@localhost shm]# ll checking
-rw-rw-r--. 1 daemon bin 0 May 21 19:26 checking
  • 使用 chmod 搭配數字法修改權限

由於檔案紀錄了三種身份,每種身份都擁有 rwx 的最大權限與 --- 沒權限的情況。為了搭配性的方便,於是使用 2 位元的方法來記憶! 亦即是 2 進位的情況:

  • r ==> read    ==> 22 ==> 4
  • w ==> write   ==> 21 ==> 2
  • x ==> eXecute ==> 20 ==> 1

於是每種身份最低為 0 分,最高則為 r+w+x --> 4+2+1 --> 7 分!而因為有 3 種身份,因此使用者,群組,其他人的身份, 最多為 777 最少為 000 。以上述 checking 的分數來說,使用者為 rw=6, 群組為 rw=6,其他人為 r=4,亦即該檔案權限為 664。

例題 11.4-2:讓 daemon 可讀、可寫、可執行 checking,讓加入 bin 群組的用戶可唯讀該檔案,讓其他人沒有權限!
  • daemon 為使用者,可讀可寫可執行則為 rwx = 7
  • 加入 bin 的群組為唯讀,亦即為 r-- = 4
  • 其他人沒權限,因此為 --- = 0
  • 最終可以使用『 chmod 740 checking 』修改權限
[root@localhost shm]# chmod 740 checking
[root@localhost shm]# ll checking
-rwxr-----. 1 daemon bin 0 May 21 19:26 checking
  • 其他屬性的修改

至於檔名的修改則是 mv 這個指令,例如,將 checking 改成 checking.exe 這樣:

[root@localhost shm]# mv checking checking.exe
[root@localhost shm]# ll checking*
-rwxr-----. 1 daemon bin 0 May 21 19:26 checking.exe
例題 11.4-3: 綜合練習
  1. 使用 root 身份,並且移動工作目錄到 /dev/shm
  2. 將 /etc/fstab 複製到 /dev/shm 底下
  3. 將 /dev/shm/fstab 更改檔名成為 newfs
  4. 讓 newfs 的用戶成為 sshd 、群組成為 wheel
  5. sshd 這個帳號可讀、可寫 newfs,wheel 群組成員僅可讀,其他人則無任何權限
請務必記得,每次做完一個動作後,就立刻以 ll 或 ls -l 去查閱預計要變換的資料區塊欄位是否正確喔!
  1. su -; cd /dev/shm
  2. cp /etc/fstab .
  3. mv fstab newfs
  4. chown sshd newfs; chgrp wheel newfs
  5. chmod 640 newfs

11.5: 課後練習

作業上傳時的注意事項:

  1. 伺服器的詳細資料,以及相關傳輸軟體設定,請參考第一章的 1.5 節的內容。
  2. 可以使用 MS office 的 word 或者是 libreoffice 的 writer 等軟體來撰寫你的作業,作業檔名可以使用 .doc, .docx 或者是 .odt 或者是 pdf 等格式,均可接受。
  3. 若作業中有圖檔,請將圖檔降低水平解析度到 800 像素以下再貼到文章中,檔案容量以不超過 2Mbytes 為限。
  4. 檔名請設定為: os_4XXXCYYY_unit11.doc (4XXXCYYY 是你的學號,請填正確,有分大小寫,請確認)
  5. 請上傳到你家目錄底下的 os 目錄中 (若不存在,請自行建立該目錄)

開始本章節題目:

  1. 使用 root 的身份完成底下的資料處理:
    1. 建立 /backups 目錄
    2. 建立 /backups/YYYYMM 目錄,YYYYMM 為西元年月,舉例來說,可能是 /backups/202006 這樣的狀態
    3. 將 /etc /home /root 這三個目錄,連同權限喔,備份到 /backups/202006 目錄去
    4. 使用 vim 建立文字檔,檔名為 /backups/YYYYMM/readme.txt,內容為『這個目錄資料備份的日期為: (這裡寫當日處理時的時間)』
    5. 上述資料處理完畢後,請執行這串指令,然後截圖貼上『cat /backups/20*/readme.txt; ls -ld /backups/20*/* 』
  2. 使用 root 的身份完成底下的檔案編輯
    1. 打開 /etc/issue 這個檔案,這個檔案目前應該有 3 行才對
    2. 第 3 行增加一串文字『Welcome to XXXX(寫你的英文暱稱) Station..』
    3. 第 4 行依舊保留一個空白行,所以目前這個檔案共有 4 行而已!
    4. 儲存離開後,請到任何一個尚未使用中的終端機環境 (tty4, tty5 或 tty6),看一下畫面最上面幾行,有沒有出現你的專屬訊息?
    5. 請將上述的 tty 畫面截圖貼上來。
  3. 使用 root 的身份完成底下的帳號管理與權限管理功能
    1. 建立名為 demo1 的帳號,這個帳號的密碼為 mydemo
    2. 建立名為 demo2 的帳號,這個帳號的密碼為 mydemo
    3. 建立名為 myqq 的群組
    4. 將 demo1 與 demo2 加入 myqq 群組的支援
    5. 建立名為 /srv/mydemo 的目錄
    6. 讓 /srv/mydemo 屬於 myqq 群組支援
    7. 讓 myqq 群組的成員可以完整使用 /srv/mydemo 目錄,root 也能完整使用,但是其他人沒有任何權限
    8. 上述指令完成後,執行底下指令,並將結果截圖貼上『id demo1; id demo2; ll -d /srv/mydemo 』