# 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 + 新增有+或-符號檔名時,需加上相對路徑或絕對路徑 :::