Linux 基礎學習訓練教材 - CentOS 8.x

第 2 堂課:指令下達行為與基礎檔案管理

開始進行文字終端機模式底下的指令操作行為!以及一點點初階的檔案管理行為囉!

最近更新時間: 2020/03/09

前一堂課我們談到了文字界面 (command-line interface, CLI) 的指令操作,不過只是很簡單的一些指令而已。 你會發現如果指令每個字元都要手動輸入,好像很容易打字錯誤。這堂課我們會介紹一些組合按鈕,讓你可以快速的下達指令, 同時,透過 bash-completion 軟體的協助,連選項與參數都可以透過熱鍵來完成補齊的功能。另外,前一堂課我們也學到使用圖形界面查閱系統檔案, 這節課,就讓我們來簡單的透過 CLI 進行檔案管理的行為,當然,在實際操作檔案管理之前,本的目錄內資料的了解,也是必須要知道的項目。

2.1:文字界面終端機操作行為的建立

其實我們都是透過『軟體』或『程式』在跟系統作溝通的。文字模式登入後所取得的程式被稱為殼(Shell),這是因為這支程式負責最外面跟使用者(我們)溝通, 所以才被戲稱為殼程式!CentOS 8 的預設殼程式為 bash,使用者最好一開始就能夠建立良好的操作行為,對於未來的 Linux 使用上,會有很大的幫助。

另外,關於 CLI 的環境,有幾個常見會搞混的名詞,這裡我們先來理解一下:

  • 實體控制台 (Physical Console):直接提供鍵盤、滑鼠、螢幕等實體功能的硬體,就可稱為實體控制台。以我們上課的環境來說, 那個 remote-viewer 應該可以假裝為一個模擬出來的實體控制台。如果以實體 Linux server 來說,那一個實體電腦所在處,就是實體控制台。
  • 虛擬控制台 (Virtual Console):前一堂課我們談到可以使用組合按鍵分別進入 tty1~tty6,這 6 個可供登入的環境, 都是由實體控制台模擬出來控制台環境,因此就被稱為虛擬控制台。每一個虛擬控制台都是獨立的,可供不同的使用者登入。
  • 終端機 (Terminal):每個虛擬控制台都會提供一個界面,該界面可以提供鍵盤出入以及螢幕輸出,這個界面就稱為終端機。 使用者在終端機登入帳號與密碼後,即可取得殼程式 (shell) 來進行系統的互動。一般終端機大多指純文字界面,不過就廣義的說法, 圖形界面 (Graphical User Interface, GUI) 也可視為一種終端機。
  • 殼程式 (Shell):讓使用者輸入指令串,然後將該指令串丟進系統執行的軟體,就可稱為是殼程式。

2.1.1:文字模式指令下達的方式

bash shell 環境下,指令的下達基本上有幾個需要注意的地方:

[student@localhost ~]$ command  [-options]  [parameter1...]
  • command (指令部份):
    • 一行指令中第一個輸入的部分是指令(command)或可執行檔案(例如script)或完整執行檔名
    • 『 command 』:為指令的名稱,例如查看歷史命令的指令為 history 等等;
  • [-option] (選項部份):
    • 中括號『 [ ] 』不存在實際的指令中,僅作為一個說明提示,提示為 -option 在指令列中可有亦可無之意;
    • 『 -options 』:為選項,通常選項前面會帶有減號 (-),例如 -h ;
    • options 有時會提供長選項,此時會使用兩個減號,例如 --help。
    • 注意,選項 -help 通常代表 -h -e -l -p 之意,與 --help 的單一長選項不同。
    • 選項有時會帶有參數,因此可能會發現 [-option para] 或 [--option=para] 之類的語法
  • [parameter1...] (參數部份):
    • 『 parameter1 』:參數,為依附在選項後面的參數,或者是 command 的參數;
    • 若有 parameters... 後面有小數點,則代表可以加上多個參數之意。
  • 指令執行的注意事項:
    • 指令、選項、參數之間都以空格或 [tab] 作為區分,不論空幾格都視為一格,故空白是特殊字元
    • [Enter]按鍵代表著一行指令的開始啟動。
    • Linux 的世界中,英文大小寫為不同的字元,例如 cd 與 CD 是不一樣的指令。
  • 用 date 練習格式化日期輸出

前一堂課我們使用過 ls 與 ll 這兩個簡易的指令來查看檔名,那如果想要知道目前的時間,或者是格式化輸出時間時,就得要使用 date 這個指令來處理!

[student@localhost ~]$ date
二  3月  3 17:54:38 CST 2020

因為 student 選擇中文語系的關係,所以螢幕上出現的就會是中文的星期二與月日這樣。 若需要格式化的輸出,就得要加上特別的選項或參數來處理,例如一般台灣我們常見 2020/03/03 這樣的日期輸出格式, 此時你可能要這樣下達指令:

[student@localhost ~]$ date +%Y/%m/%d
2020/03/03

上述的選項資料 (+%Y/%m%d) 基本上不太需要背誦,使用線上查詢的方式來處理即可。 最簡單的處理方式,可以透過 --help 這個長選項來查詢各個選項的功能,如下所示:

[student@localhost ~]$ date --help
Usage: date [OPTION]... [+FORMAT]
  or:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]                 <==上面這兩行是語法的部份
Display the current time in the given FORMAT, or set the system date.      <==這一行是指令說明

Mandatory arguments to long options are mandatory for short options too.   <==底下是主要的 option 說明
  -d, --date=STRING          display time described by STRING, not 'now'
      --debug                annotate the parsed date,
                              and warn about questionable usage to stderr
  -f, --file=DATEFILE        like --date; once for each line of DATEFILE
  -I[FMT], --iso-8601[=FMT]  output date/time in ISO 8601 format.
                               FMT='date' for date only (the default),
                               'hours', 'minutes', 'seconds', or 'ns'
                               for date and time to the indicated precision.
                               Example: 2006-08-14T02:34:56-06:00
  -R, --rfc-email            output date and time in RFC 5322 format.
                               Example: Mon, 14 Aug 2006 02:34:56 -0600
      --rfc-3339=FMT         output date/time in RFC 3339 format.
                               FMT='date', 'seconds', or 'ns'
                               for date and time to the indicated precision.
                               Example: 2006-08-14 02:34:56-06:00
  -r, --reference=FILE       display the last modification time of FILE
  -s, --set=STRING           set time described by STRING
  -u, --utc, --universal     print or set Coordinated Universal Time (UTC)
      --help     顯示此求助說明並離開
      --version  顯示版本資訊並離開

FORMAT controls the output.  Interpreted sequences are:  <==底下則是格式 (FORMAT) 的說明

  %%   a literal %
  %a   locale's abbreviated weekday name (e.g., Sun)
  %A   locale's full weekday name (e.g., Sunday)
  %b   locale's abbreviated month name (e.g., Jan)
......

整個輔助文件大致上可分為幾個部份:

  • Usage (執行語法部份):
    • 執行語法共有兩個項目,分別是:
      • date [OPTION]... [+FORMAT]
      • date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
    • 第 3 行則是說明這個指令的用途是: (1)顯示目前的時間,並可進行格式化輸出,以及 (2)設定系統時間。
  • Mandatory arguments...(主要選項說明):
    • 例如『 -d, --date=STRING 』的意思是,可以用『 -d STRING 』,也可以用『 --date=STRING 』的意思。
    • 那個 STRING 是你指定的日期,而不是現在的時間。例如想要知道昨天的日期,可以使用『 date -d yesterday 』或『 date --date=yesterday 』來展示的意思。
  • FORMAT controls...(詳細 FORMAT 格式的說明):
    • 例如 %a 代表星期幾的英文小寫,可以使用 date +%a 來展示
    • 例如 %A 代表星期幾的英文大寫
    • 在這個項目就可查詢到 %Y, %m, %d 的相關選項功能!
例題 2.1.1-1:使用 date --help 找出說明文件,進一步完成底下的動作:
  1. 如果需要秀出『 小時:分鐘 』的格式,例如:『 15:20 』,要如何執行指令?
  2. 請直接輸入指令『 date +%s 』,對照 --help 功能,查詢一下輸出的資訊是什麼?
  3. 如果要顯示兩天以前 (2 days ago) 的『 +%Y/%m/%d 』,要如何下達指令?
  4. 如果需要顯示出『 西元年-日-月 小時:分鐘 』的格式,日期與時間中間有一個空格!該如何下達指令?

你懂這個 command --help 的用法之後,未來許多指令你都可以自己查用法了!舉例來說,你知道 cal 這個指令的功能與如何應用嘛?

例題 2.1.1-2:使用 cal 搭配 cal --help 查詢相關選項,完成底下的題目。
  1. cal 這個指令的功能是什麼?
  2. 顯示目前這個月份的月曆
  3. 顯示今年的年曆
  4. 顯示前一個月、本月、下一個月的月曆

2.1.2:身份切換 su - 的使用

繼續來玩一下 date 這個指令!從前一小節使用 date --help 後,可以發現語法有兩種情況,如下所示:

[student@localhost ~]$ date --help
Usage: date [OPTION]... [+FORMAT]
  or:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.

指令說明當中,可以是『顯示, display』也能夠是『設定, set』日期。語法 (Usage) 的第一行就是顯示日期而已,第二行當然就是設定日期了。 如果使用 student 身份來設定日期,會有什麼狀況?

# 先注意,設定日期的格式是: MMDDhhmmYYYY,也就是 月日時分年,除了年,其他都有兩位數
[student@station10-101 ~]$ date
三  3月  4 00:04:53 CST 2020  <==當下的日期

[student@station10-101 ~]$ date 030400052020  <==重設為當下的時間
date: 無法設定時間: 此項操作並不被允許
三  3月  4 00:05:00 CST 2020  <==這個動作其實沒有生效!

可以發現到日期並沒有變更到正確的日期,而且 date 也明白的告訴操作者,操作者沒有權限 (Operation not permitted)!因為日期的設定要系統管理員才能夠設定的。 此時我們就得要切換身份成為系統管理員(root)才行。處理的方法如下:

[student@localhost ~]$ su -
密碼:  <==輸入密碼時,不會出現 * 符號!
[root@localhost ~]#

本教學系統 root 的密碼為 myCentOS8,請注意大小寫不同!因此在『密碼:』後面輸入 myCentOS8 之後,你就可以發現使用者的身份變換成為 root 了! 此時再次使用 date 來看看日期能否被設定為正確?

[root@localhost ~]# date 030400052020
Wed Mar  4 00:05:00 CST 2020
[root@localhost ~]# date
Wed Mar  4 00:05:20 CST 2020
[root@localhost ~]# hwclock -w

讀者們可以發現上表兩個指令的操作相差約 20 秒鐘,因此輸出的資訊就會有兩秒鐘的誤差。不過,日期確實就被修訂成為目前的狀態。 但如果需要完整的設定系統時間,則需要使用 hwclock -w 寫入 BIOS 時間鐘才行。(由於虛擬機的 BIOS 也是虛擬的,因此就不需要使用 hwclock 寫入)

另外, root 的身份是作為系統管理所需要的功能,因此做完任何系統維護行為後,請回復到一般用戶的身份較佳 (這個習慣請務必養成!)。

例題 2.1.2-1:
  1. 為何當你使用 su - 切換成 root 之後,想要使用方向鍵上/下去呼叫剛剛下達的『date 030400052020 』指令卻呼叫不出來?
  2. 要如何離開 root 再次成為 student ?

2.1.3:語系功能切換

由於我們的系統環境使用中文,因此在日期的輸出方面可能就是以中文為主。那如果想要顯示為英文年月時,就得要修改一個變數,如下所示:

[student@localhost ~]$ date
三  3月  4 00:12:33 CST 2020  <==這個時候是中文
[student@localhost ~]$ LANG=en_US.utf8  <==這個 LANG 就可以改語系
[student@localhost ~]$ date
Wed Mar  4 00:13:10 CST 2020  <==輸出就變成英文了!

你可以發現日期已經變更成為英文的方式來顯示了!此即 LANG 語系變數的設定功能。台灣地區經常使用的語系有中文 (zh_TW) 與英文 (en_US) 的萬國碼兩種, 當然,比較舊的資料可能需要使用 big5 編碼,所以台灣常見的語系有:

  • zh_TW.utf8
  • zh_TW.big5
  • en_US.utf8

我們操作終端機 (terminal) 需要很多顯示的環境,還有一些基礎的設定,這些設定很多都是可以調整的。為了方便使用者可以自行修訂參數, 因此,我們就使用類似上面的 LANG 這個『變數』來設定一些功能。透過修改這些『變數』,就能夠影響操作環境或操作行為了。那如何查看某個變數呢? 透過 echo 這個指令,搭配變數取用方法即可。常見的呼叫變數的方式有:

[student@localhost ~]$ echo $var
[student@localhost ~]$ echo ${var}
# 簡單的說,就是變數名稱 (var) 前面加上錢字號成為 $var 即可。詳細規範則加上大括號成為 ${var} 即可。

至於語系的變化其實有兩個變數可以使用,除了常用的 LANG 之外,也可以透過 LC_ALL 來修訂!但一般建議使用 LANG 即可。 既然已經知道語系的設定變數為 LANG,透過上面的呼叫方式,則查閱目前語系的方法就是:

[student@localhost ~]$ echo ${LANG}
en_US.utf8
實際練習:修改一下語系資料,同時查看一下系統中的全部語系資料有哪些
  1. 先將語系調整為預設的 zh_TW.utf8
    [student@station10-101 ~]$ LANG=zh_TW.utf8
    [student@station10-101 ~]$ echo ${LANG}
    zh_TW.utf8  <==這樣就變更了語系
    
  2. 語系資料有很多,包括語言文字、貨幣符號、數值模式、時間格式、住址格式等等,每個項目是可以獨立設定的。 想要知道目前語系底下所有的上述輸出訊息,用 locale 指令來查詢,如下:
    [student@station10-101 ~]$ locale
    LANG=zh_TW.utf8                <==整體語系,底下則是個別訊息的語系
    LC_CTYPE="zh_TW.utf8"
    LC_NUMERIC="zh_TW.utf8"
    LC_TIME="zh_TW.utf8"
    LC_COLLATE="zh_TW.utf8"
    LC_MONETARY="zh_TW.utf8"
    LC_MESSAGES="zh_TW.utf8"
    LC_PAPER="zh_TW.utf8"
    LC_NAME="zh_TW.utf8"
    LC_ADDRESS="zh_TW.utf8"
    LC_TELEPHONE="zh_TW.utf8"
    LC_MEASUREMENT="zh_TW.utf8"
    LC_IDENTIFICATION="zh_TW.utf8"
    LC_ALL=
    
    [student@station10-101 ~]$ locale --help
    使用方式: locale [參數…] 名稱
      或者:  locale [參數…] [-a|-m]
    取得語區資料特定的資訊
    
     系統相關資訊:
      -a, --all-locales          寫出存在的語區資料名稱
      -m, --charmaps             寫出存在的字集對照表名稱
    ....
    
  3. 列出目前這部 Linux 主機上面所有支援的語系有哪些?從上題的最終 locale --help 可以查到 -a 的選項,因此:
    [student@station10-101 ~]$ locale -a
    C             <==標準 C 程式語言語系
    C.utf8
    en_AG
    en_AU
    en_AU.utf8
    ......
    zh_TW
    zh_TW.euctw
    zh_TW.utf8
    
    上面的資料量輸出比較多,如果超出整個視窗的行列範圍,我們可以按下 [shift]+[pageup] 向上翻頁,或 [shift]+[pagedown] 向下翻頁喔!你就可以看到所有的語系資料了。
  4. 若想要改變整體系統的語系顯示,可以使用 localectl 這個指令來處理。例如,雖然我們 student 帳號使用的是中文語系, 但是整個 Linux 系統的預設語系還是英文的,如下:
    [student@station10-101 ~]$ echo ${LANG}
    zh_TW.utf8 <==是中文
    [student@station10-101 ~]$ localectl
       System Locale: LANG=en_US.UTF-8  <==是英文
           VC Keymap: us
          X11 Layout: us
    
    [student@station10-101 ~]$ localectl --help
    localectl [OPTIONS...] COMMAND ...
    ......
    
    Commands:
      status                   Show current locale settings
      set-locale LOCALE...     Set system locale   <==看起來是可以設定成為不同的語系
      list-locales             Show known locales
      set-keymap MAP [MAP]     Set console and X11 keyboard mappings
    ......
    
    [student@station10-101 ~]$ localectl set-locale zh_TW.utf8
    # 這個指令要經過 root 驗證,因為會更動到系統設定值!所以這裡先知道即可。不建議修改啦!
    

2.1.4:常見的熱鍵與組合按鍵

除了上個例題談到的可以上下移動螢幕畫面的組合按鍵之外,在純文字模式 (bash shell) 的環境下,建議讀者們一定要熟記且經常應用的熱鍵與組合鍵有:

  • [tab]:可以是命令補齊,可以是檔名補齊,也能是變數名稱補齊
  • [ctrl]+c:中斷一個運作中的指令
  • [shift]+[PageUp], [shift]+[PageDown]:上下移動螢幕畫面
例題 2.1.4-1:
  1. 系統中以 if 及 ls 為開頭的指令,各有哪些?
  2. 有個以 ifco 為開頭的指令,詳細指令名稱我忘記了,你可以找到這個指令名稱嘛?
  3. 操作一個指令『 find / 』這個指令輸出很亂,我不想看了,該如何中斷這個指令?
  4. 操作一個指令『 ls ' 』,因為不小心多按了一個單引號,導致指令輸入行為很怪異,如何中斷?
  5. 我想用『 ll -d 』去看一下 /etc/se 開頭的檔案有哪些,可以怎麼做?
  6. 我想要知道,到底有多少變數是由 H 開頭的?如何使用 echo 去查閱?

2.1.5:線上求助方式

ll, ls, date, cal 均可使用 --help 來查詢語法與相關的選項、參數資料,但某些指令則沒有辦法顯示詳細的資訊。例如底下的小算盤指令:

[student@localhost ~]$ bc --help
usage: bc [options] [file ...]
  -h  --help         print this usage and exit
  -i  --interactive  force interactive mode
  -l  --mathlib      use the predefined math routines
......

並沒有說明算術邏輯的符號,例如指數應用、小數點位數、加減乘除的符號等等。在開始說明之前,我們先來使用 bc 軟體的功能, 進行一下,如果你沒有計算機在身邊時,如何透過文字界面來進行數值運算:

[student@localhost ~]$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+2+3+4
10
1/3
0  <==預設不輸出小數點後資料
quit

bc 指令為 Linux 純文字界面下的小算盤,你可以使用 bc --help 查詢到相關的選項資料,但是如上所示,加減乘除的符號, 還有小數點位數資料,以及離開 (quit) 等資訊,則沒有顯示於 --help 的輸出畫面中。Linux 有提供一個名為 manual page (手冊頁) 的功能, 你可以用 manual 縮寫 (man) 來查詢,如下所示:

[student@localhost ~]$ man bc
bc(1)                           General Commands Manual                           bc(1)

NAME
       bc - An arbitrary precision calculator language

SYNTAX
       bc [ -hlwsqv ] [long-options] [  file ... ]

DESCRIPTION
       bc is a language that supports arbitrary precision numbers with interactive exe‐
       cution of statements.  There are some similarities in the syntax to the  C  pro‐
       gramming language.  A standard math library is available by command line option.
       If requested, the math library is  defined  before  processing  any  files.   bc
       starts  by  processing code from all the files listed on the command line in the
       order listed.  After all files have been processed, bc reads from  the  standard
       input.   All  code  is executed as it is read.  (If a file contains a command to
       halt the processor, bc will never read from the standard input.)
......

   OPTIONS
       -h, --help
              Print the usage and exit.

       -i, --interactive
              Force interactive mode.
......

   VARIABLES
......
       There  are four special variables, scale, ibase, obase, and last.  scale defines
       how some operations use digits after the decimal point.  The  default  value  of
       scale is 0. ibase and obase define the conversion base for input and output num‐
       bers.  The default for both input and output is base 10.  last (an extension) is
       a  variable  that  has the value of the last printed number.  These will be dis‐
       cussed in further detail where appropriate.  All of  these  variables  may  have
       values assigned to them as well as used in expressions.
......
       - expr The result is the negation of the expression.

       ++ var The variable is incremented by one and the new value is the result of the
              expression.

       -- var The variable is decremented by one and the new value is the result of the
              expression.

       var ++
               The result of the expression is the value of the variable and  then  the
              variable is incremented by one.

       var -- The  result  of  the expression is the value of the variable and then the
              variable is decremented by one.

       expr + expr
              The result of the expression is the sum of the two expressions.
......

   MATH LIBRARY
       If bc is invoked with the -l option, a math library is preloaded and the default
       scale  is  set  to  20.   The math functions will calculate their results to the
       scale set at the time of their call.  The math  library  defines  the  following
       functions:
......
   EXAMPLES
       In  /bin/sh,   the following will assign the value of "pi" to the shell variable
       pi.
               pi=$(echo "scale=10; 4*a(1)" | bc -l)
......
AUTHOR
       Philip A. Nelson
       philnelson@acm.org
......

這個 man 是比較詳細的資料,在該畫面中,你可以使用底下的按鈕來移動螢幕顯示整份文件的位置:

  • [enter]:向文件後面移動一行
  • [PageUp]/[PageDown]:向文件前/後移動一頁
  • 方向鍵上/下:向文件前/後移動一行
  • g:移動到整份文件的第一行
  • G:移動到整份文件的最後一行
  • q:離開 man page

有興趣的話,讀者們可以自己慢慢的閱讀 man page。如果是短時間要查詢重要的項目,例如我們需要調整輸出的小數點位數 (scale) 時, 可以『跑到整份文件的第一行,然後輸入斜線 / ,輸入關鍵字』之後 man page 就可以自動幫你找關鍵字。

  • /keyword:命令 man page 找到關鍵字
  • n:向整份文件的下方繼續找關鍵字
  • N:向整份文件的上方繼續找關鍵字
例題 2.1.5-1:搭配 man page 的查詢來運作指令,可以開啟兩個終端機進行操作:
  1. 在 bc 的執行環境中,讓 1/3 可以輸出 .3333 這樣的格式
  2. 以 man bc 當中,找關鍵字『 pi= 』,然後在 bc 的環境中,算出 pi 的 50 位數結果。
  3. 在 bc 的環境下,算出 1000/17 的『餘數 (remainder)』
  4. 在 man date 的環境下,找到第一個範例 (Examples),並說明該指令的意義為何?

man page 除了上述的功能之外,其實 man page 的第一行也顯示了該指令/檔案的功能,例如 BC(1) 代表的是 1 號 man page, 而共有 9 種左右的 man page 號碼,其意義為:

代號代表內容
1使用者在shell環境中可以操作的指令或可執行檔
2系統核心可呼叫的函數與工具等
3一些常用的函數(function)與函式庫(library),大部分為C的函式庫(libc)
4裝置檔案的說明,通常在/dev下的檔案
5設定檔或者是某些檔案的格式
6遊戲(games)
7慣例與協定等,例如Linux檔案系統、網路協定、ASCII code等等的說明
8系統管理員可用的管理指令
9跟kernel有關的文件

上述的表格內容可以使用『man man』來更詳細的取得說明。透過這張表格的說明, 未來你如果使用man page在察看某些資料時,就會知道該指令/檔案所代表的基本意義是什麼了。

實際練習:讓我們來理解一下 man man 查到的選項功能,以及了解每個數字的意義
  1. 先以 man man 找一下 -k 與 -f 這兩個選項的差別:
    [student@station10-101 ~]$ man man
    MAN(1)                             Manual pager utils                            MAN(1)
    
    NAME
           man - an interface to the on-line reference manuals
    
    SYNOPSIS
           man  [-C  file]  [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-m
    ......
    DESCRIPTION
    ......
           The table below shows the section numbers of the manual followed by the types of
           pages they contain.
    
           1   Executable programs or shell commands
           2   System calls (functions provided by the kernel)
           3   Library calls (functions within program libraries)
           4   Special files (usually found in /dev)
           5   File formats and conventions eg /etc/passwd
           6   Games
           7   Miscellaneous  (including  macro  packages  and  conventions),  e.g. man(7),
               groff(7)
           8   System administration commands (usually only for root)
           9   Kernel routines [Non standard]
    ......
    OPTIONS
    ......
       Main modes of operation
           -f, --whatis
                  Equivalent to whatis.  Display a short description from the manual  page,
                  if available.  See whatis(1) for details.
    
           -k, --apropos
                  Equivalent  to  apropos.   Search  the short manual page descriptions for
                  keywords and display any matches.  See apropos(1) for details.
    ......
    
    文件說明中, -f 類似 whatis 指令,顯示較為完整的查詢,而 -k 則是與 apropos 指令相似,列出的是關鍵字的內容。 兩者都是在查詢有沒有某個 man page 的意思。底下我們來查查看這兩個差別在哪裡:
    [student@station10-101 ~]$ man -f passwd
    passwd: nothing appropriate.
    [student@station10-101 ~]$ man -k passwd
    passwd: nothing appropriate.
    
    見鬼!沒東西!這是因為我們的 man 還沒有建置資料庫的問題所致。處理方案很簡單,透過 root 執行 mandb 即可!
    [student@station10-101 ~]$ su -
    密碼:
    [root@station10-101 ~]# mandb
    ......
    Checking for stray cats under /usr/local/share/man...
    Checking for stray cats under /var/cache/man/local...
    112 man subdirectories contained newer manual pages.
    7466 manual pages were added.
    0 stray cats were added.
    0 old database entries were purged.
    [root@station10-101 ~]# exit
    logout
    [student@station10-101 ~]$
    
    下達指令前,請注意你的身份為何啊!
  2. 現在,讓我們查詢一下,系統裡面關於 passwd 的說明文件可能有多少?
    [student@station10-101 ~]$ man -f passwd
    openssl-passwd (1ssl) - compute password hashes
    passwd (1)           - update user's authentication tokens
    passwd (5)           - password file
    # 只有左側是完整的 passwd 的項目,才會列出來
    
    [student@station10-101 ~]$ man -k passwd
    chpasswd (8)         - 成批更新使用者的口令
    chgpasswd (8)        - update group passwords in batch mode
    fgetpwent_r (3)      - get passwd file entry reentrantly
    getpwent_r (3)       - get passwd file entry reentrantly
    gpasswd (1)          - administer /etc/group and /etc/gshadow
    grub2-mkpasswd-pbkdf2 (1) - Generate a PBKDF2 password hash.
    lpasswd (1)          - Change group or user password
    openssl-passwd (1ssl) - compute password hashes
    pam_localuser (8)    - require users to be listed in /etc/passwd
    passwd (1)           - update user's authentication tokens
    passwd (5)           - password file
    passwd2des (3)       - RFS password encryption
    pwhistory_helper (8) - Helper binary that transfers password hashes from passwd or shad...
    saslpasswd2 (8)      - set a user's sasl password
    smbpasswd (5)        - The Samba encrypted password file
    sslpasswd (1ssl)     - compute password hashes
    userpasswd (1)       - A graphical tool to allow users to change their passwords.
    vncpasswd (1)        - change the VNC password
    # 無論是左側還是右側,只要有 passwd 這個關鍵字,就列出來!
    
    這樣就很輕鬆的可以查詢到,passwd(1) 是指令,可以變更密碼, passwd(5) 則是檔案,意思是密碼檔。
  3. 如何查詢 passwd (5) 呢?先用預設的方法來查 passwd 的用途:
    [student@station10-101 ~]$ man passwd
    PASSWD(1)                            User utilities                           PASSWD(1)
    
    NAME
           passwd - update user's authentication tokens
    
    SYNOPSIS
           passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i
           inactivedays] [-S] [--stdin] [username]
    
    DESCRIPTION
           The passwd utility is used to update user's authentication token(s).
    ......
    
    前面幾行就告訴你,這是 (1) 的指令說明!如果想要知道 passwd(5) 的話,這樣做:
    [student@station10-101 ~]$ man 5 passwd
    PASSWD(5)                      Linux Programmer's Manual                      PASSWD(5)
    
    NAME
           passwd - password file
    
    DESCRIPTION
           The  /etc/passwd  file is a text file that describes user login accounts for the
           system.  It should have read permission allowed for all users  (many  utilities,
           like  ls(1)  use it to map user IDs to usernames), but write access only for the
           superuser.
    ......
    
    如此就可以查詢兩個相同檔名,但不同位置與功能的說明文件了!

2.1.6:管線命令的應用

從前幾小節的練習中,有時候我們會發現幾件事情:(1)指令輸出的資料量常常很大,一個螢幕裝不下,連使用[shift]+[pageup] 都沒有辦法全部看完; (2)在 man bc 時,找那個 pi= 的項目中,範例提到在文字界面下,可以透過某些方式不要進入 bc 去算 pi !

尤其是第 2 個項目,裡面就談到那個 | 的符號,這個符號我們稱作『管線 (pipe) 』! 它的目的是『將前一個指令輸出的資料,交由後面的指令來處理』的意思~我們來談談該指令的意義:

[student@localhost ~]$ echo "scale=10; 4*a(1)" | bc -l

如果你將上面的指令分成兩部份來看,第一部份先執行『echo "scale=10; 4*a(1)"』,就可以發現從螢幕上輸出『 scale=10; 4*a(1) 』的字樣,echo 這個指令很單純的將後續的資料當成文字訊息輸出到螢幕上。 這些資料之後被帶入到 bc 指令中,亦即直接在 bc 的環境中進行 scale=10; 4*a(1) 的運算之意。

  • 大量資料的展示,用 more 與 less 處理

有兩個指令很常使用於大量資料輸出時的片段展示,那就是 more 與 less。more 會一頁一頁翻動,但是無法向前回去查詢之前的畫面。 至於 less 就是 man page 的操作環境。

例題 2.1.6-1:實驗 more 與 less 搭配管線命令的方法
  1. 分別透過 more 與 less 將 ll /etc 的結果一頁一頁翻動;
  2. 承上,嘗試找到 passwd 相關字樣的檔名結果
  3. 使用 find /etc 的指令,但是將結果交給 less 來查詢
  4. 承上,若使用的身份為 student 時,能否找到錯誤訊息呢?
  5. 透過管線的功能,計算出一年 365 天共有幾秒鐘?
並不是所有的指令都支援管線命令的,例如之前談到的 ls, ll, find 或本章稍晚會提到的 cp, mkdir 等指令。 能夠支援管線 | 的指令,就被稱為管線命令。
  • 只列出關鍵字的 grep keyword 擷取字元方法

除了使用 | less 的功能加上斜線 (/) 找到關鍵字的方法之外,我們也可以透過 grep 來取得關鍵字! 以上頭的例題來看,如果要使用 ll /etc/ 找出 passwd 的關鍵字『那一行』的話,可以簡單的這樣做:

[student@localhost ~]$ ll /etc/ | grep 'passwd'
例題 2.1.6-2:練習 grep 來抓關鍵字那一行
  1. 以 ifconfig 指令來觀察系統的所有介面卡 IP
  2. 使用管線命令搭配 grep 取得關鍵字,來取出有 IP 的那行訊息即可。

2.2:Linux 檔案管理初探

在 Linux 的系統下,總是會需要用到檔案管理的情況發生,包括建立目錄與檔案、複製與移動檔案、刪除檔案與目錄等等。 另外,讀者也應該要知道在 Linux 的系統下,那些目錄是正規系統會存在的,以及該目錄又應該要放置哪些資料等等。

2.2.1:Linux 目錄樹系統簡介

所有的 Linux distribions 理論上都應該要遵循當初 Linux 開發時所規範的各項標準,其中之一就是檔案系統的階層標準 (Filesystem Hierarchy Standard, FHS)。基本上 FHS 只是一個基本建議值,詳細的資料還是保有讓各個 distribution 自由設計的權力! 無論如何,FHS 還是規範了根目錄與 /usr, /var 這三個目錄內應該要放置的資料就是了。

另外,根據檔案是否經常變動,以及檔案運作的情況,大致上有幾個比較重要的目錄分類:

  • static (固定的內容):包含不會變動的工具程式、函式庫與說明文件等
  • dynamic / variable (變動的內容):可能會被運作中的程序所修改掉
  • persistent (持續性內容):開機之後會持續存在且大多不會變動的資料,例如一些環境設定資訊
  • runtime (運作中的內容):包含用戶程序或系統程序運作中的資料,這些資料會在重新開機後被刪除

CentOS 7 以後 (包含 CentOS 8) 的系統目錄規範跟以前的版本差異挺大的,詳細的資料還請參考相關文件,底下僅就個別目錄中應該要放置的資料做個基本的解釋。 請自行『 ll / 』對照下表的相關目錄說明。

目錄名稱應放置檔案內容(一定要知道的內容)
/bin
/sbin
/bin 主要放置一般用戶可操作的指令
/sbin 主要放置系統管理員可操作的指令
這兩個資料目前都是連結檔,分別連結到 /usr/bin, /usr/sbin 當中
/boot 與開機有關的檔案,包括核心檔案 / 開機管理程式與設定檔
/dev 是 device 的縮寫,放置裝置檔,包括硬碟檔、鍵盤滑鼠終端機檔案等
/etc 一堆系統設定檔,包括帳號、密碼與各式服務軟體的設定檔大多在此目錄內
/home
/root
/home 是一般帳號的家目錄預設放置位置
/root 則是系統管理員的家目錄了!
/lib
/lib64
系統函式庫與核心函式庫,其中 /lib 包含核心驅動程式,而其他軟體的函式庫若為 64 位元,則使用 /lib64 目錄內的函式庫檔案。 這兩個目錄目前也都是連結到 /usr/lib, /usr/lib64 內。
/proc 將記憶體內的資料做成檔案類型,放置於這個目錄下,連同某些核心參數也能手動調整
/sys 跟 /proc 類似,只是比較針對硬體相關的參數方面。
/usr 是 usr 不是 user 喔!是 unix software resource 的縮寫,與 Unix 程式有關。從 CentOS 7 開始, 系統相關的所有軟體、服務等,均放置在這個目錄中了!因此不能與根目錄分離。
/var 是一些變動資料,系統運作過程中的服務資料、暫存資料、登錄資料等等。
/tmp 一些使用者操作過程中會啟用的暫存檔,例如 X 軟體相關的資料等等。

Linux 是由工程師開發的,許多的目錄也沿用 Unix 的規範,Unix 也是工程師開發的,所以許多的目錄命名通常就與該目錄要放置的資料有點相關性。 例如 bin, sbin 就類似 binary, system binary (二進位程式、系統管理二進位程式) 來結合這樣~

目錄名稱應放置檔案內容(以後用到就知道了)
/media
/mnt
/media 主要是系統上臨時掛載使用的裝置(如隨插即用 USB)之慣用目錄
/mnt 主要是使用者或管理員自行暫時手動掛載的目錄
/opt /opt 是 optional 的意思,通常是第三方協力廠商所開發的軟體放置處
/run 系統進行服務軟體運作管理的功能,CentOS 7以後,這個目錄也放在記憶體當中了!
/srv 通常是給各類服務 (service) 放置資料使用的目錄

另外,在 Linux 環境下,所有的目錄都是根目錄 (/) 衍生出來的,從根目錄開始撰寫的檔名也就被稱為『絕對路徑』。 而磁碟規劃方面,若需要了解磁碟與目錄樹的搭配,可以使用 df (display filesystem) 的軟體來查閱:

[student@localhost ~]$ df
檔案系統                 1K-區段    已用    可用 已用% 掛載點
devtmpfs                  918108       0  918108    0% /dev
tmpfs                     936140       0  936140    0% /dev/shm
tmpfs                     936140    9388  926752    2% /run
tmpfs                     936140       0  936140    0% /sys/fs/cgroup
/dev/mapper/centos-root 10475520 4359596 6115924   42% /
/dev/vda2                1998672  149448 1727984    8% /boot
/dev/mapper/centos-home  3135488   70240 3065248    3% /home
tmpfs                     187228      16  187212    1% /run/user/42
tmpfs                     187228       4  187224    1% /run/user/0
tmpfs                     187228       4  187224    1% /run/user/1000

上表中最左側為檔案系統,最右側則是掛載點。掛載點有點類似 windows 系統的 C:, D:, E: 等磁碟槽的意思。 在 Linux 底下所有的檔案都是從目錄樹分出來,因此檔案系統也需要跟目錄結合在一起。以上表來說,『當你進入 /boot 這個目錄時, 就可以看到 /dev/vda2 這個裝置的內容』之意。

此外,系統也已經將記憶體模擬成檔案系統,提供使用者將暫存資料放置於高速的記憶體內。只是這些資料在關機後就會消失。 這些目錄包括很重要的 /dev/shm (上表)。

例題 2.2.1-1:
  1. 使用 ll / 觀察檔名,在出現的畫面中,『連結檔』與『一般目錄』的差別中,最左邊的字元分別是什麼?
  2. /proc 與 /sys 的檔案容量分別有多大?為什麼?
  3. /boot/vmlinuz 開頭的檔名為系統的『核心檔案』,找出來 CentOS 8 的環境下,這個核心檔案容量有多大?
  4. 使用 man ls 及 man ifconfig 兩個指令查詢完畢後,猜測 ls 與 ifconfig 『可能』放置在哪些目錄內?
  5. 如果你有一個暫時使用的檔案需要經常存取,且檔案容量相當大,為了加速,你可以將這個檔案暫時放置於哪裡來做編輯? 只是編輯完畢後必須要重新複製回原本的目錄去。

2.2.2:工作目錄的切換與相對/絕對路徑

預設的情況下,使用者取得 shell 的環境時,通常就是在自己的『家目錄』,例如 windows 檔案總管打開後, 出現在畫面中的,通常是『我的文件夾』之類的環境。若要變更『工作目錄』,例如變更工作目錄到 /var/spool/mail 去,可以這樣做:

[student@localhost ~]$ ls
Desktop    Downloads  Music     Public     text1.txt
Documents  group      Pictures  Templates  Videos

[student@localhost ~]$ cd /var/spool/mail
[student@localhost mail]$ ls
rpc  student

如上所示,一開始讀者會在 student 家目錄下,因此單純使用 ls 時,會列出工作目錄 (家目錄) 底下的資料,亦即是一堆家目錄應該會存在的目錄名稱。 而當讀者操作『 cd /var/spool/mail 』之後,工作目錄會變成該目錄,所以提示字元裡面也將 ~ 變成了 mail 了。因此使用 ls 所列出的工作目錄下的資料, 就會有不一樣的檔名出現。讀者在操作指令時,要特別注意『工作目錄』才行。而列出目前工作目錄的方法為使用 pwd:

[student@localhost mail]$ pwd
/var/spool/mail
[student@localhost mail]$ 

讀者操作系統時,不要只看提示字元下的檔名,最好能夠查閱實際的目錄較佳。如下案例:

[student@localhost mail]$ cd /etc
[student@localhost etc]$ pwd
/etc
[student@localhost etc]$ cd /usr/local/etc
[student@localhost etc]$ pwd
/usr/local/etc
[student@localhost etc]$ 

操作者可發現,自從進到 /etc 之後,提示字元內的目錄位置一直是『 etc 』,然而使用 pwd 就能夠發現兩者的差異。 這在系統管理時非常的重要,若去錯目錄,會導致檔案修訂的錯誤!

除了根目錄與家目錄之外,Linux 上有一些比較特別的目錄需要記憶:

目錄名稱目錄意義
/ 根目錄,從根目錄寫起的檔名只會存在一個
~ 使用者的家目錄,不同用戶的家目錄均不相同
. 一個小數點,代表的是『本目錄』,亦即目前的工作目錄之意
.. 兩個小數點,代表的是『上一層目錄』
- 一個減號,代表『上一次的工作目錄』之意

操作者應該要注意,根據檔名寫法的不同,也可將所謂的路徑(path)定義為絕對路徑(absolute)與相對路徑(relative)。 這兩種檔名/路徑的寫法依據是這樣的:

  • 絕對路徑:由根目錄(/)開始寫起的檔名或目錄名稱, 例如 /home/student/.bashrc;
  • 相對路徑:相對於目前路徑的檔名寫法。 例如 ./home/student 或 ../../home/student/ 等等。開頭不是 / 就屬於相對路徑的寫法
例題 2.2.2-1:了解檔名撰寫的『絕對路徑檔名』與『相對路徑檔名』的操作
  1. 前往 /var/spool/mail 並觀察當下的工作目錄
  2. 觀察上一層目錄的檔名資料,查詢一下有沒有『 anacron 』這個檔名存在?
  3. 請前往『上一層目錄的那個 anacron 目錄』
  4. 在當下的目錄中,如何查詢 /var/log 這個目錄的內容?分別使用兩種方式 (相對/絕對路徑) 來查閱
  5. 回到 student 家目錄
  6. 分別使用『預設』、『相對路徑』、『絕對路徑』、『工作目錄底下』執行 ifconfig 的方法

2.2.3:簡易檔案管理練習

由本章的說明,讀者可以清楚 /etc 與 /boot 為兩個相當重要的目錄,其中 /etc 更是需要備份的所在。 若讀者使用 student 的身份來暫時進行檔案管理行為時,例如將 /etc 完整備份時,可以如何進行?

  1. 先前往 /dev/shm 這個記憶體模擬的目錄來操作後續指令:
    [student@localhost ~]$ cd /dev/shm
    [student@localhost shm]$ pwd
    /dev/shm
    
  2. 建立一個名為 backup 的目錄,等待備份資料:
    [student@localhost shm]$ mkdir backup
    [student@localhost shm]$ ll
    總計 0
    drwxrwxr-x. 2 student student 40  3月  4 13:14 backup
    
  3. 進入 backup 目錄當中:
    [student@localhost shm]$ cd backup
    [student@localhost backup]$ pwd
    /dev/shm/backup
    
  4. 將 /etc 完整的複製過來:複製使用的指令說明,你應該要 cp --help 去查閱!也可以使用 man cp 去查閱!
    [student@localhost backup]$ cp --help
    用法:cp [選項]... [-T] 來源 目的地
      或:cp [選項]... 來源... 目錄    <==這個是最常用的指令串!
      或:cp [選項]... -t 目錄 來源...
    Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
    
    Mandatory arguments to long options are mandatory for short options too.
      -a, --archive                same as -dR --preserve=all    <==嘗試完整保留權限
          --attributes-only        don't copy the file data, just the attributes
          --backup[=CONTROL]       make a backup of each existing destination file
    ......
      -R, -r, --recursive          copy directories recursively  <==複製目錄
    ......
    
    # 開始嘗試將 /etc 檔名複製到本目錄 (.) 底下
    [student@localhost backup]$ cp /etc .
    cp: -r not specified; omitting directory '/etc'
    
    因為 cp 會自動忽略目錄的複製,因此需要如下的指令來複製目錄才行
  5. 開始複製目錄 (-r) 的動作:
    # 剛剛 cp --help 有看到 -r 可以複製目錄,因此加上這個選項功能來處理目錄複製:
    [student@localhost backup]$ cp -r /etc .
    cp: 無法開啟 ‘/etc/crypttab’ 來讀取資料: 拒絕不符權限的操作
    cp: 無法存取 ‘/etc/pki/CA/private’: 拒絕不符權限的操作
    cp: 無法存取 ‘/etc/pki/rsyslog’: 拒絕不符權限的操作
    .......
    [student@localhost backup]$ ll
    總計 0
    drwxr-xr-x. 135 student student 5020  3月  4 13:21 etc
    
    因為系統很多保密的檔案是不許被一般用戶所讀取的,因此 student 許多檔案無法順利複製也是正確的!操作者無須擔心。
  6. 再次複製檔案,同時將錯誤訊息傳送到垃圾桶,不要顯示在螢幕上:
    [student@localhost backup]$ cp -r /etc . 2> /dev/null
    [student@localhost backup]$ ll -d /etc ./etc
    drwxr-xr-x. 135 student student 5020  3月  4 13:22 ./etc
    drwxr-xr-x. 135 root    root    8192  3月  3 17:54 /etc
    

透過上面的練習,最終我們知道其實 student 身份複製的 /dev/shm/backup/etc 是沒有完整的備份的!因為兩者的容量大小、 內容檔案、權限都不相同之故。至於相關的指令功能、選項功能等等,請自由 man cp、 man mkdir 來預先了解。

另外,在一些錯誤訊息要丟棄的環境中,也可以在指令的最後面加上 2> /dev/null 來將錯誤的資料導向垃圾桶 (/dev/null)。

例題 2.2.3-1:
  1. 先查看一下有沒有 /dev/shm/backup/etc/passwd* 的檔名存在?
  2. 複製使用 cp 而刪除可以使用 rm。嘗試刪除前一題的檔名,並確認該檔案已經不存在了。
  3. 查看一下 /dev/shm/backup/etc/X11 是『檔案』還是『目錄』?
  4. 如何刪除前一題談到的目錄?
  5. 若想要刪除 /dev/shm/backup/etc/xdg 這個目錄,且『每個檔案刪除前均須詢問』,須加上哪個選項?

2.3:課後練習操作

  • 上課的課後練習,非作業:
  1. 先查看一下目前的語系資料,同時將語系資料改為 C 這個語系資料
  2. CentOS 8.1 釋出的時間是 2020/02/09 這一天,假設為格林威治時間 (GMT) 的 0 點好了,如何以 +%s 計算出該天累加的 Linux 時間總秒數?
  3. 那總天數又是多少?可以透過 bc 來計算
  4. 假設你看到一個人的密碼,他的密碼日期被推算為 18310,你覺得該密碼被建立的日期,大概是什麼時候?
  5. 2020 年的 10 月 10 號大概是星期幾?
  6. 歷史命令據說可以記載 1000 比,而歷史的大小中文 HISTORY,取其前面 4 個英文字母來看,在你目前的終端機中, 有沒有相關的 HIST 變數可以參考?將該變數內容叫出來
  7. 前往 /dev/shm 目錄,然後依序完成底下的動作:
    1. 將 /dev/shm 變成工作目錄
    2. 建立名為 check 的目錄
    3. 將上述的目錄變成工作目錄
    4. 將 /etc/X11 複製到本目錄
    5. 將 ./X11/xinit 目錄刪除
    6. 透過 find /etc 搭配管線命令與 grep ,抓出 group 關鍵字的檔名。
    7. 將上述找到的檔名複製到本目錄
    8. 列出本目錄底下的所有檔名,並包含權限喔!
  • 作業 (不提供學生答案,僅提供教師參考答案)

作業硬碟一般操作說明:

  • 開啟雲端虛擬機器前,請務必確認你開啟的硬碟是『unit02』,否則就會做錯題目
  • 若要使用圖形界面,請務必使用 student 身份登入,若需要切換身份,再啟用終端機處理。
  • 若有簡答題需要使用中文,請自行以第一堂課的動作自行處理輸入法安裝。
  • 每部虛擬機器均有獨特的網卡位址,請勿使用他人硬碟上傳,否則計分為 0 分。
  • 每位同學均有自己的 IP 尾數,請先向老師詢問您的 IP 尾數,才可以進行作業上傳。
  • 最終上傳作業結果,請務必使用 root 身份上傳。
  • 進入作業硬碟後,先用 root 身份執行 vbird_book_setup_ip , 執行流程請參考:vbird_book_setup_ip

作業當中,某些部份可能為簡答題~若為簡答題時,請將答案寫入 /home/student/ans.txt 當中,並寫好正確題號,方便老師訂正答案。 請注意,檔名寫錯將無法上傳!

  1. (20%)關於 console, terminal, shell (控制台、終端機、殼程式) 的一些簡單認知:
    1. 在 tty1, tty2 等待你登入的環境,這種環境稱為什麼 (寫下中文與英文)?
    2. 有一個界面,這個界面可以提供鍵盤輸入/螢幕輸出,這種界面稱為什麼? (寫下中文與英文)
    3. 提供使用者輸入指令,然後將指令帶入系統中執行的軟體,稱為什麼? (寫下中文與英文)
    4. 一串指令列,分別是:『 cmd --op1="para1" --op2 para2 』這五個元件分別稱為什麼 (基本上只有 3 種狀態)?
    5. 當我執行『 localectl list-locales 』這個指令的參數意義是什麼?
  2. (20%)常用的指令的操作練習:
    1. (a)在 bash shell 的環境下,什麼指令可以將輸出的語系切換成為 en_US.utf8,並且(b)如何查看語系的設定值;
    2. Linux 的日期設定其實與 Unix 相同,都是從 1970/01/01 開始計算時間而來。若有一個密碼資料,該資料告訴你密碼修改的日期是在 16849,請問如何使用 date 這個指令計算出該日期其實是西元年月日?(寫下完整指令)
    3. 用 cal 輸出 2021/04/29 這一天的月曆與直接看到該日為星期幾?(寫下完整指令)
    4. 承上,當天是這一年當中由 1 月 1 日算起來的第幾天? (註:該日期稱為 julian date),(a)寫下完整指令與(b)執行結果顯示第幾天
    5. (a)先顯示出目前的時間 (b)再用 date 這個指令,設定為正確的時間。寫下指令。
  3. (20%)常用的指令的操作練習:
    1. 若為 root 的身份,使用 su - student 切換成為 student 時,需不需要輸入密碼?
    2. 呼叫出 HISTFILESIZE 這個變數的完整指令為何?
    3. 使用那一個指令可以查出 /etc/group 這個檔案的第三個欄位意義為何?(寫下指令)
    4. 請查出 /dev/null 這個裝置的意義為何?(寫下指令與查詢的 DESCRIPTION 結果)
    5. 如何利用 student 身份,透過管線命令與 grep 的功能,透過 find /etc 找出檔名含有 shadow 的檔名資料?(a)寫下指令與(b)執行結果的檔名有哪幾個?
    6. 承上,將一堆錯誤訊息丟棄,我只需要顯示正確的檔名而已。(寫下指令)
  4. (20%)一些基礎目錄的認知:
    1. 根目錄下,那兩個目錄主要在放置使用者與管理員常用的指令?
    2. 根目錄下,那兩個目錄其實是記憶體內的資料,本身並不佔硬碟空間?
    3. 根目錄下,那一個目錄主要在放置設定檔?
    4. 上網找出, /lib/modules/ 這個目錄的內容主要在放置什麼東西?
    5. 有個指令名稱為 /usr/bin/mount,請使用『絕對路徑』與『工作目錄下的指令』來執行該指令
  5. (20%)實作題:基本檔案管理 (直接在系統上面操作,操作成功即可,無須寫下任何答案)
    1. 使用 student 身分,在自己的家目錄底下,建立名為 ./20xx/unit02 的目錄
    2. 使用 student 身分,將 /etc/X11 這個資料複製到上述的目錄內
    3. 使用 root 的身分,刪除 /opt/myunit02 檔名。
    4. 使用 root 的身分,建立名為 /mnt/myunit02 目錄
    5. 使用 root 的身分,透過 find /etc 指令,找出檔名含有 shadow 的檔案資料,並將這些檔案資料複製到 /mnt/myunit02 去。

作業結果傳輸:請以 root 的身分執行 vbird_book_check_unit 指令上傳作業結果。 正常執行完畢的結果應會出現【XXXXXX_aa:bb:cc:dd:ee:ff_unitNN】字樣。若需要查閱自己上傳資料的時間, 請在作業系統上面使用瀏覽器查詢: http://192.168.251.254 檢查相對應的課程檔案。 相關流程請參考: vbird_book_check_unit

修改歷史:
  • 2020/02/25:修改自 CentOS 7.x 版本的第2章,將一些資料補充的比較齊全,同時增加一些題目資料。
  • 2020/03/09:修改了課後作業,順利產生作業系統!
2020/03/10 以來統計人數
計數器
伺服器篇文件
各版本彙整說明
CentOS 6.x