---
# System prepended metadata

title: 113 網路管理與通信技術整合實務 0603
tags: ["01\_伺服器環境規畫建置"]

---

# Day9 伺服器環境規畫建置

+ 基本指令
    + mkdir 建立一個空目錄
    + cp 複製目錄
    + rm 刪除目錄
    + 2> /dev/null 錯誤資料導向垃圾桶

+ 檔案管理指令
    ||檔案|目錄|
    |--|--|--|
    |新增|touch, vim, nano|mkdir|
    |修改|cp, mu|cp -r,cp -a, mu, cd|
    |刪除|rm|rmdir, rm -rf|
    |查詢|find, locate, pwd, ll, ls|find, locate, pwd, ll, ls|

+ 萬用字元
    |符號|說明|
    |-|-|
    |* |代表任意字元
    |?|代表一個任字字元
    |[]|代表存在括號中字元中的任一個字元
    |[-]|代表為括號中之編碼連續的任一個字元
    |^|為反向選擇，即不存在包括^表示的任一個字元
:::info
例題 3.1.1-1：了解基礎的工作目錄切換、觀察隱藏檔、複製檔案、刪除非空白目錄等任務。請以 student 身份完成下列動作。
1. 前往 /dev/shm 目錄
    ==cd /dev/shm==
2. 在該目錄下建立名為 class3 的子目錄
    ==mkdir class3==
3. 觀察 /dev/shm/class3 這個目錄的內容，並請說明內部有沒有其他檔案 (註：使用 ll 加上顯示隱藏檔的選項)
    ==class3為空目錄；顯示隱藏檔ll指令加 -a 參數==
4. 透過 cp /etc/hosts /dev/shm/class3 將檔案複製到該目錄內，並觀察 class3 目錄的內容
    ==class3目錄多了一個名為hosts的檔案==
5. 使用 rmdir /dev/shm/class3 嘗試刪除該目錄，並說明可以或不行刪除該目錄的原因
    ==rmdir 為刪除空目錄指令，需將目錄中檔案刪除才可使用==
:::

:::info
例題 3.1.1-2：讓含有資料的目錄變成空目錄，再以 rmdir 刪除
1. 承上一個例題，進入到 /dev/shm/class3 當中，並且使用 rm 刪除掉所有該目錄下的檔案 (非隱藏檔)
    ==cd /dev/shm/class3==
    ==rm hosts==
2. 回到 /dev/shm 當中，此時能否使用 rmdir 刪除 class3 目錄？為什麼？
    ==可以刪除class3，此時該目錄為空目錄，可使用rmdir指令刪除==
:::

:::info
例題 3.1.2-1：使用萬用字元搭配，來找出某些特殊的檔名
1. 列出 /etc/ 底下含有 5 個字元的檔名
    ==ls /etc/???\??==
3. 列出 /etc/ 底下含有數字在內的檔名
    ==ls /etc/*[0-9]\*==
:::

+ 檔案及目錄的複製與刪除
    + 複製使用 cp 指令，若需要複製目錄，參數一般使用 -r，需要完整備份，參數使用 -a (可完整複製該檔權限及檔案時間)
    + 刪除使用 rm、rmdir(刪除空目錄) 指令，
    + 建立或刪除目錄或檔案名稱含有空白字元，可使用單引號、雙引號或\進行處理。
    + 建立或刪除目錄或檔案名稱含有+或-字元，前方需加上絕對路徑或相對路徑
    + ll -a 顯示隱藏檔及一般檔案(以小數點開頭檔名為隱藏檔)
    + ll -d .*　僅顯示隱藏檔
    + file 查詢檔案類型與型態 

:::info
例題 3.1.3-1：目的地的目錄是否存在，會影響到複製的行為。
1. 先進入 /dev/shm ，同時觀察目錄下有無名為 rc.d 的檔名
    ==cd /dev/shm==
    ==ll /dev/shm/rc.d==
    ==查無該檔案==
2. 使用『 cp -r /etc/rc.d rc.d 』將 rc.d 複製到本目錄下，然後使用 ll 與 ll rc.d 觀察該目錄
    ==ll 查詢shm目錄中是否有rc.d目錄==
    ==ll rc.d 查詢該目錄中的檔案==
3. 重新執行上述複製的指令一次，然後使用 ll rc.d ，觀察一下有什麼變化？
    ==rc.d目錄中又新增一個rc.d的目錄==
:::

:::info
例題 3.1.3-2：刪除的實驗
1. 進入 /dev/shm ，觀察到前一個例題 /dev/shm/rc.d 的目錄存在後，請將它刪除
    ==cd /dev/shm==
    ==rm -rf rc.d==
:::

+ 檔名移動與更名
  + mv 指令用於搬移檔案或更改檔案名稱 
    
:::info
例題 3.1.6-1：如何進行檔案的更名
1. 讓 student 回到家目錄
    ==cd ~==
3. 將 /etc/rpm 複製到本目錄
4.  ==cp /etc/rpm .==
5. 該目錄移動錯誤，請將本目錄的 rpm 移動到 /dev/shm
    ==mv rpm /dev/shm==
7. 檔名依舊錯誤，請將 /dev/shm 底下的 rpm 更名為 mail3
    ==cd /dev/shm/
    ==mv rpm mail3==
:::

:::info
例題 3.1.7-1：大量建置檔案的方法，透過 {} 的輔助
1. 我需要在 /dev/shm/testing 目錄下建立名為 mytest_XX_YY_ZZ 的檔案，其中 XX 為 jan, feb, mar, apr 四個資料， YY 為 one, two, three 三個資料，而 ZZ 為 a1, b1, c1 三個資料，如何使用一個指令就建立出上述的 36 個檔案？
    ==mkdir testing==
    ==cd testing==
    ==touch mytest_{jan,feb,mar,apr}\_{one,two,three}_{a1,b1,c1}==
2. 我需要在 /dev/shm/student/ 目錄下，建立檔名為 4XXXC001 到 4XXXC050 的檔案，如何使用一個指令來完成這 50 個檔案的建置？
    ==mkdir student==
    ==touch 4XXXC{001..050}==
:::

+ 新增檔案
    + touch 指令，可用{}建立多個名稱檔案

+ 查詢檔案內容
    + cat 顯示檔案全部內容
    + head 僅顯示前10行內容
    + tail 僅顯示最後10行內容
    + 可使用 -n 參數加上預查看的行數數值；例 head -n 5 /etc/passwd 顯示passwd檔案前5行內容

:::info
例題 3.2.2-1：了解 more 與 less 的用法
1. 使用 more /etc/services 一頁一頁翻動資料
2. 承上，請找出 http 這個關鍵字，之後直接離開不再查閱
3. 使用 less /etc/services 查詢檔案內容
4. 承上，請找出 http 這個關鍵字，重複查詢 http 數次後，之後直接離開不再查閱
:::


+ vim程式編輯器
    + 一般指令模式：使用「vim filename」進入 vim 之後，最先接觸到的模式。模式下可以進行複製、刪除、貼上、移動游標、復原等任務。
    + 編輯模式：在一般指令模式底下輸入「i」這個按鈕，進入編輯模式，可以開始打字編輯文件。
    + 延伸指令列命令模式：此模式可以進行儲存、離開、強制離開、搜尋、取代。
    + 選取模式：此模式進行類似滑鼠圈選的選取模式，主要分為三種圈選方式：
        + v ：字元方式圈選；
        + [shift]+v ：以整行方式圈選
        + [ctrl]+v ：以區塊方式圈選
            圈選完畢後，可以按 y 複製、按 d 刪除，在其他地方可以按 p 貼上

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

# 課後練習操作
:::info
+ 關於 vim 建立檔案，以及資料的轉存情況：(使用 student 身份)
1. 先用 vim 建立一個名為 /dev/shm/mycheck.txt 的檔案，裡面填寫你的姓名與學號，一行一個
==vim /dev/shm/mycheck.txt==
    :::danger
    + vim 為檔案編輯器
    + 使用 dd 為刪除游標該行數，前面加數值再按dd為刪除數值之行數
    + 使用 yy 為複製游標該行數，前面加數值再按yy為複製數值之行數，使用p為貼上
    + 使用 u 為回復上一動作
    + 使用 i 進入編輯模式，按Esc鍵退出模式
    + 使用 :wq 退出vim模式；w為存檔、q為離開
    :::
2. 使用 file 去檢查 /etc/group /bin/groups 的檔案類型，並將查詢的資料轉存並累加到 /dev/shm/mycheck.txt 當中
==file /etc/group /bin/groups >> /dev/shm/mycheck.txt==
    :::danger
    + file 指令為查詢檔案類型與型態
    :::
3. 查詢出 /etc/ 底下，使用 s 開頭以及 s 結尾的檔名 (不含子目錄下的檔案)，並將找到的檔名轉存並累加一份到 /dev/shm/mycheck.txt 當中
==ll -d /etc/s*s >> /dev/shm/mycheck.txt==
4. 找出最近有使用過的 rm 的指令，並將該執行的指令轉存並累加到 /dev/shm/mycheck.txt 當中
==history | grep rm >> /dev/shm/mycheck.txt==
    :::danger
    + 使用 history 查詢歷史指令，再使用 | 管線與查詢關鍵字 grep 指令，再轉存至 mycheck.txt 
    :::
5. 將 /etc/passwd 前 5 行與最後 5 行抓出來，並且附上行號之後，轉存並累加到 /dev/shm/mycheck.txt 當中
==head -n 5 /etc/passwd >> /dev/shm/h5.txt==
==tail -n 5 /etc/passwd >> /dev/shm/t5.txt==
==cat -n /dev/shm/h5.txt /dev/shm/t5.txt >> /dev/shm/mycheck.txt==
    :::danger
    + 第一步先使用head -n 5 取前5行，並暫存至h5.txt
    + 第二步使用tail -n 5 取最後5行，同樣存至t5.txt
    + 第三步使用cat 指令顯示檔案全部內容再使用-n參數每行加上編號，轉存至 mycheck.txt中
    :::

+ 關於檔案管理：(使用 student 身份)
1. 嘗試在 /dev/shm/unit03/files/ 目錄下，新增 ksu001 ~ ksu100 這 100 個空檔案
==mkdir -p /dev/shm/unit03/file/ksu{001..100}==
    :::danger
    + mkdir 指令為新增空目錄，參數-p 為需要時建立目標目錄的上層目錄，即使這些目錄已存在也不當作錯誤處理
    :::
2. 嘗試在 /dev/shm/unit03/dirs/ 目錄下，新增 dir01 ~ dir10 這 10 個空目錄
==mkdir -p /dev/shm/unit03/dirs/dir{01..10}==
3. 嘗試在 /dev/shm/unit03/season/ 目錄下，新增 jan, feb, mar 這三個空目錄
==mkdir -p /dev/shm/unit03/season/{jan,feb,mar}==
4. 嘗試在 /dev/shm/unit03/seaon/ 目錄下的 jan, feb, mar 子目錄內，建立 mylog_XX_YY_ZZ.txt 空檔案，其中：『XX 為 1~9』, 『YY 為 aa 與 bb』，『ZZ 為 start 與 end』。
==touch /dev/shm/unit03/season/{jan,feb,mar}/ mylog_{1..9}_{aa,bb}\_{start,end}.txt==
5. 嘗試在 /dev/shm/unit03/spc/ 目錄下，建立名為 -check.txt 的目錄
==mkdir -p /dev/shm/unit03/spc/-check.txt==
    :::danger
   + 新增有+或-符號檔名時，需加上相對路徑或絕對路徑
:::