第 11 章 - Linux 作業系統 - vim 文書編輯器與基礎帳號、權限管理
上次更新日期 2020/05/21
管理系統經常需要更動到系統設定檔,系統設定檔的修改在 Linux 底下,經常讓大家使用的有兩個,nano 與 vim, 個人比較推薦使用 vim,因為他有顏色的語法檢驗,比較不容易發生錯誤的情況。另外,Linux 系統是多人多工的環境, 所以,總是得要知道帳號的概念與個別帳號的權限,如果了解權限概念,那就更好了。
學習目標
- 學會 mkdir, rmdir, cp, rm, mv 等簡單的檔案管理工具
- 學會 vim 文書編輯器以及 cat 讀出檔案內容指令
- 學會 useradd, passwd 等簡易的帳號管理工具
- 學會 chown, chgrp, chmod 等權限管理的工具
- 學會 rwx 的分數計算
11.1: 簡單檔案管理
在 Linux 底下,所有的東西都以檔案來呈現,不同的檔案特性會有不同的結果。讀者可以常見的兩種檔案格式為:
- 一般檔案:實際放置資料的檔案
- 目錄檔案:重點在放置『檔名』,並沒有實際的資料
為何需要目錄檔?讀者可以想像,如果僅有一個櫃子,你將所有書籍全部丟進同一個櫃子中,則未來要找資料時,會很難找尋 (因為單品太多)。 若可以有多個櫃子,將不同的資料分類放置於各別的櫃子中,未來要找某一類別的資料,只要找到該類別的櫃子,就能夠快速的找到資料 (單品較少), 這就是目錄檔案的重點。
- 目錄的建立與刪除
目錄的建立主要使用 mkdir 這個指令,這個指令將建立一個『空目錄』。所謂的『空目錄』意指該目錄內並沒有其他檔案的存在。 至於刪除目錄則使用 rmdir 這個指令,但同理,這個指令僅能『刪除空目錄』而已。
- 前往 /dev/shm 目錄,並列出目前的工作目錄檔名
- 觀察目前目錄下的檔名有哪些
- 建立名為 unit11 的目錄
- 觀察目錄是否建置妥當。
- 刪除此目錄,並觀察是否刪除成功
- cd /dev/shm; pwd
- ll
- mkdir unit11
- ll
- rmdir unit11
- 檔案與目錄的複製、刪除
基本上,要複製檔案,就用 cp,要刪除檔案,就用 rm。但是這兩個指令有很多不同的參數與選項,使用的時候要很注意。
- 切換身份成為 root 管理員身份
- 前往 /dev/shm
- 建立 mybackup 目錄,並且切換工作目錄到 mybackup 去
- 將 /etc/hosts 複製到本目錄
- 將 /etc 整個資料複製到本目錄,應該要加什麼選項才行?
- 觀察本目錄底下的檔名有哪些?
- 前往 /dev/shm/mybackup/etc/sysconfig ,並列出工作目錄名稱
- 刪除名為 man-db 的檔名
- 刪除名為 console 的檔名
- su -
- cd /dev/shm
- mkdir mybackup; cd mybackup
- cp /etc/hosts .
- cp /etc .; cp -r /etc .; cp -a /etc .
- ll
- cd mybackup/etc/sysconfig; pwd
- ll; rm man-db; ll
- rm console; rm -r console
- 檔名的移動與更名
檔名的移動使用 mv (move),同時,更名也是用 mv 喔!
- 前往 /dev/shm,並且建立名為 moving 的目錄,同時進入 moving 成為工作目錄
- 將 /dev/shm/mybackup/hosts 移動到本目錄下
- 觀察本目錄下的檔名
- 發現檔名不喜歡,更改檔名成為 myhosts
- 再次觀察檔名
- cd /dev/shm; mkdir moving; cd moving; pwd
- ll ..; mv ../mybackup/hosts .
- ll
- mv hosts myhosts
- ll
這就是簡單的檔案管理功能!包括查看檔名、建立目錄、刪除與複製檔案及目錄、移動與更名的資料等。
11.2: vim 的使用
事實上我們在 Linux 裡面比較常使用的應該是 vim 這個程式編輯器~vim 有三種基本的模式,亦即是:
- 一般指令模式 (command mode):使用『 vim filename 』進入 vim 之後,最先接觸到的模式。 在這個模式底下使用者可以進行複製、刪除、貼上、移動游標、復原等任務。
- 編輯模式 (insert mode):在上述模式底下輸入『 i 』這個按鈕,就可以進入編輯模式,終於可以開始打字了。
- 指令列命令模式 (command-line mode):回到一般模式後,可以進行儲存、離開、強制離開等動作。
簡單的說,讀者可以將三種模式使用底下的圖示來思考一下相關性:
實際來練習一下,先打開終端機,然後輸入『 vim test.txt 』,進入 vim 的畫面中,你會看到如下的圖示:
事實上,整個 vim 預設畫面可以分為兩個部份:
- 第一個部份就是上半部的可編輯區,可編輯區有個游標,該游標所在處,會在右下角顯示 X, Y 軸~
- 第二個部份就是最後一行的狀態列,該狀態列會顯示目前的檔名、游標所在處,可編輯區佔整個檔案的百分比, 以及目前是否在可輸入編輯 (INSERT/REPLACE) 的狀態等等。
現在,請按下『 i 』這個按鈕 (insert) ,就可以進入編輯模式!你會看到狀態列左下方出現可編輯的字樣, 然後開始在第一行編輯歡迎訊息,如下所示:
如果編輯完畢,此時需要進入到指令列模式進行檔案的儲存~要先按下『 esc 』按鈕,回到一般模式, 然後再輸入『 :w 』就可以進行儲存~輸入『 :q 』就可以離開 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
- 以 student 的身份,移動工作目錄到 /dev/shm 目錄下
- 將 /etc/crontab 複製到本目錄,複製完成後請觀察檔案權限
- 使用 vim 來編輯該檔案
- 在第 4 行的地方新增一些資料,可以是『This is a test line!』即可。
- 去到最後一行,新增一些資料,可以是『* * * * * root echo haha』
- 離開編輯模式後,進行儲存,進行離開。
- 回到 bash 環境後,查看一下該檔案的時間參數是否修訂了?
- 使用 cat 呼叫出 crontab 檔案的內容,看看有沒有順利修改?
- cd /dev/shm
- cp /etc/crontab .; ll
- vim crontab
- 按下『 i 』進入編輯,依據上述資料在第 4 行新增
- 用方向鍵移動到最底下,持續進行編輯
- 按下『 esc 』、『 :w 』、『 :q 』
- ll
- cat crontab
如果使用 vim 來編輯設定檔呢?可以得到會變色的文字喔!
- 使用 student 的身份,直接編輯 /etc/fstab 設定檔
- 觀察左下角的檔名資訊,會出現唯讀 (readonly) ,顯示 student 是沒有權限修改的。
- 按下『 i 』強迫修改檔案,系統會警告,先略過不要緊~
- 找到『 defaults 』字樣的地方,將 s 拿掉,或將關鍵字改掉,看字體顏色有沒有改變?
- 反正就亂改~持續亂填資料~
- 回到一般模式,持續按下『 u 』,就可以恢復原本的檔案內容!
- 最後不儲存離開,按下『 :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 |
- 前往 /dev/shm 之後,將 /etc/services 檔案複製到當前目錄下
- 使用 wc --help 查看一下 wc 指令的用法,然後使用 wc 去檢查 services 有多少行?
- 使用 vim 編輯 services
- 移動到最後一行
- 重新移到到第 10 行,複製該行底下的 10 行內容,接下來移動到最後一行,貼上剛剛複製的 10 行。
- 移動到第 500 行,然後刪除 20 行
- 回到第一行,並且在第一行新增全新的一行,輸入『This file changed』的字樣。
- 儲存之後離開這個檔案。
- cd /dev/shm; cp /etc/services .
- wc services (出現的資料依序是行、字數、字元數)
- vim servcies
- G
- 10G, 10yy, G, p
- 500G, 20dd
- gg (1G), i, [enter] 後回到第一行輸入文字
- [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 後面加上帳號名稱去觀察!若該帳號不存在,系統也會回報有問題。
- 輸入『 id root 』查閱該帳號,注意其 UID 號碼為何?
- 輸入『 id bin 』查閱該帳號
- 輸入『 id myclass 』查閱該帳號是否存在
- root 很特別,他的 UID 一定會是 0 喔!
- 應該是有該帳號,會顯示 uid 與 gid 資訊
- 因為沒這個人,所以會顯示找不到該帳號喔!
當帳號不存在時, 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 來進行登入的行為:
- 切換終端機到 tty4
- 使用剛剛新建立的 niki 來登入系統
- 登入之後輸入 w 查閱一下目前登入系統的用戶群
- 輸入『 pwd 』看看目前的家目錄位於哪個實際的檔名中
- 轉回 tty2 的畫面
- 在任何一個終端機輸入『 w 』以及『 pwd 』看看差異為何?
- 回到 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 』的項目,然後手動輸入帳號、密碼即可!登入看看喔!
- 在 tty1 上,使用 niki 帳號登入
- 依據前幾周的訓練,自行選擇語系資料等
- 切換 tty1, tty2, tty3,看看差異在哪裡。
- 在任何一個 tty 上面打開終端機,輸入 w 後,看出現的 tty 結果顯示為何。
[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
- 建立帳號的階段:
- 建立一個名為 ksu 的帳號,密碼設定為 itismyksu00。
- 建立完畢之後查看 ksu 的 UID 與 GID,同時觀察 /home 是否有 ksu 的家目錄產生
- 使用新帳號登入系統看看:
- 在 tty5 上面使用 ksu 帳號密碼登入系統
- 登入後使用 w 指令觀察系統上面有哪些人登入了
- 觀察完畢之後請登出系統,並回到原本的 root 身份終端機界面上。
- 嘗試忘記加上 -r 的方式來刪除帳號後,看看如何挽救!
- 單純使用『 userdel ksu 』刪除使用者
- 刪除完畢之後查看 ksu 的 UID 與 GID,同時觀察 /home 是否有保留 ksu 的家目錄
- 使用『 rm -rf /home/ksu 』,然後再次觀察 /home 的目錄狀態
特別注意,那個『 rm -rf 』對於 root 的身份來說,那是很可怕而危險的指令,很可能不小心就將整個系統刪除! (類似刪除掉 windows 的 C 槽) 所以操作該指令時,不要亂做,要注意後面接的目錄名稱是否正確才行。
- 群組管理
群組的目的就像『分組管理』的功能而已!重點還是在帳號。舉例來說,設計『童軍社』的目的,是為了招攬『同學們參加活動』, 只是相關的活動與童軍比較有關而已!而當學校要分配資源時,就將童軍社需要的資源分配給『童軍社』,而不是單一個人的學生。 加入童軍社,你就可以使用童軍社那個社團裡面的資源。
增加群組使用 groupadd,刪除群組使用 groupdel,將某個已存在的用戶加入群組,可以使用 usermod -a -G 來處理!
- 增加名為 pro 的群組
- 使用 cat 呼叫 /etc/group 內容 (因為群組資訊就放在 /etc/group 檔案內)
- 將 student 加入 pro 這個群組
- 觀察 student 的 id 顯示的結果。
- groupadd pro
- cat /etc/group (重點看最後幾行)
- usermod --help; usermod -a -G pro student
- 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 個字元為檔案類型,後續 9 個字元每 3 個一組,共分 3 組,為三種身份的權限;
- 檔案連結數,這與檔案系統有關,讀者可暫時略過;
- 該檔案的擁有者,本例當中,擁有者身份為 root
- 該檔案的所屬群組,本例當中這個檔案屬於 mail 這個群組底下
- 這個檔案的容量
- 該檔案最後一次被修改/修訂的日期時間
- 這個檔案的檔名。
讀者首先可以分析一下這個『檔案』的『類型』。之前讀者應該看過第一個字元為 - 以及 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 的權限 (第三組權限)
- 使用 ll -d /var/spool/cups 觀察該檔名的特性
- 該檔名屬於目錄還是檔案
- 該檔名屬於哪個用戶與哪個群組所擁有
- 使用者、群組、其他人個別權限為何
- ll -d /var/spool/cups
- 最前面『drwx--x---.』,所以是目錄
- 使用者 root、群組 lp
- 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。
- 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
- 使用 root 身份,並且移動工作目錄到 /dev/shm
- 將 /etc/fstab 複製到 /dev/shm 底下
- 將 /dev/shm/fstab 更改檔名成為 newfs
- 讓 newfs 的用戶成為 sshd 、群組成為 wheel
- sshd 這個帳號可讀、可寫 newfs,wheel 群組成員僅可讀,其他人則無任何權限
- su -; cd /dev/shm
- cp /etc/fstab .
- mv fstab newfs
- chown sshd newfs; chgrp wheel newfs
- chmod 640 newfs
11.5: 課後練習
作業上傳時的注意事項:
- 伺服器的詳細資料,以及相關傳輸軟體設定,請參考第一章的 1.5 節的內容。
- 可以使用 MS office 的 word 或者是 libreoffice 的 writer 等軟體來撰寫你的作業,作業檔名可以使用 .doc, .docx 或者是 .odt 或者是 pdf 等格式,均可接受。
- 若作業中有圖檔,請將圖檔降低水平解析度到 800 像素以下再貼到文章中,檔案容量以不超過 2Mbytes 為限。
- 檔名請設定為: os_4XXXCYYY_unit11.doc (4XXXCYYY 是你的學號,請填正確,有分大小寫,請確認)
- 請上傳到你家目錄底下的 os 目錄中 (若不存在,請自行建立該目錄)
開始本章節題目:
- 使用 root 的身份完成底下的資料處理:
- 建立 /backups 目錄
- 建立 /backups/YYYYMM 目錄,YYYYMM 為西元年月,舉例來說,可能是 /backups/202006 這樣的狀態
- 將 /etc /home /root 這三個目錄,連同權限喔,備份到 /backups/202006 目錄去
- 使用 vim 建立文字檔,檔名為 /backups/YYYYMM/readme.txt,內容為『這個目錄資料備份的日期為: (這裡寫當日處理時的時間)』
- 上述資料處理完畢後,請執行這串指令,然後截圖貼上『cat /backups/20*/readme.txt; ls -ld /backups/20*/* 』
- 使用 root 的身份完成底下的檔案編輯
- 打開 /etc/issue 這個檔案,這個檔案目前應該有 3 行才對
- 第 3 行增加一串文字『Welcome to XXXX(寫你的英文暱稱) Station..』
- 第 4 行依舊保留一個空白行,所以目前這個檔案共有 4 行而已!
- 儲存離開後,請到任何一個尚未使用中的終端機環境 (tty4, tty5 或 tty6),看一下畫面最上面幾行,有沒有出現你的專屬訊息?
- 請將上述的 tty 畫面截圖貼上來。
- 使用 root 的身份完成底下的帳號管理與權限管理功能
- 建立名為 demo1 的帳號,這個帳號的密碼為 mydemo
- 建立名為 demo2 的帳號,這個帳號的密碼為 mydemo
- 建立名為 myqq 的群組
- 將 demo1 與 demo2 加入 myqq 群組的支援
- 建立名為 /srv/mydemo 的目錄
- 讓 /srv/mydemo 屬於 myqq 群組支援
- 讓 myqq 群組的成員可以完整使用 /srv/mydemo 目錄,root 也能完整使用,但是其他人沒有任何權限
- 上述指令完成後,執行底下指令,並將結果截圖貼上『id demo1; id demo2; ll -d /srv/mydemo 』