Week 04(2021/10/14)

Vim

來由

  • 查看檔案內容會用cat指令

    • cat 可以改內容
      • 使用cat > filename,會附蓋掉原本內容
      • cat >> filename 則會讓輸入增加在原本內容後面
      • ctrl + d 儲存並離開
    • 未來如果改是設定檔,只是想改一行我卻須要重寫一次檔案
      • 需要編輯器,方便編輯檔案
  • nano

    • 大家電腦應該都會有
    • 比較早期的文字編輯器,功能有限
    • 對一些較嚴謹的檔案做編輯有時會出錯
      • e.g. 無法分辨 spacetab 的差異
      • Windows 的換行符號\r\n
      • Linux的換行符號\n
      • MAC的換行符號\r
    • 所以如果檔案跨系統搬來搬去,可能會因為換行符號的關係無法正常開啟
    • dosZunix or unixZous可以處理換行符號的關係
    • 功能有限
      • 想要在這個遠端伺服器上寫程式
      • 遠端桌面
        • 太吃資源
  • vim

    • 執行環境簡潔,且功能強大
      • 解決吃太多資源的問題
    ​​​ // 安裝vim ​​​ sudo apt install vim
    • 操作不直觀
      Image Not Showing Possible Reasons
      • The image file may be corrupted
      • The server hosting the image is unavailable
      • The image path is incorrect
      • The image format is not supported
      Learn More →
    • 一進入 vim 是 command mode
    • i:insert mode
    • :w:write,將剛剛做的變更寫回檔案
    • !強制執行(例如要離開,打:q!)
    • :q:離開
  • 在terminal更改檔案,若要退出/儲存先按 esc

    • :wq出去+儲存
    • :w 儲存檔案
    • :q 退出檔案
    • ! 強制執行
    • :set nu 顯示行號
    • / 搜尋,然後按n顯示下一個

指令

  • 安裝: sudo apt install vim
  • 一進入 vim 是 command mode,輸入i進入 insert mode
  • 在 terminal 更改檔案,若要退出 / 儲存先按 esc
指令 用處
:w 存檔
:q 退出檔案
:q! 強制退出檔案
:wq 儲存並離開
:e! 還原到剛開啟檔案的時候
/+"關鍵字" 搜尋"關鍵字"
n 找下一個"關鍵字"
dd 刪除一行
數字+dd (從游標那行算起)刪除底下"數字"行
u 還原
ctrl+r 重做
dw 一次刪除一個字
yy 複製一行
"數字"+yy (從游標那行算起)複製底下"數字"行
p 貼上
  • 建立/更改 vim 設定檔: vim .vimrc
:set nu # 顯示行數 :set tabstop=4 # tab 轉換成 4 個空白 :set cursorline # 顯示該行的底線

Uncle Roger 的 vimrc

網路上的 vim cheat sheet

Linux 基本指令

  • pwd(檔名) 顯示目前的位置,有時候會自己建一個新檔案
  • cd <路徑>(change directory) 改變位置
    • cd / 移至根目錄
    • cd ~ 移至家目錄
    • cd 也是移至家目錄
    • cd .. 回到前一層,但是在根目錄使用的話就會停留在根目錄
    • 相對路徑
      • 從目前的路徑往上 / 下層尋找(不是由 / 開頭)
      • cd 要去的資料夾
      • cd ./要去的資料夾 這樣也行,.表示當前資料夾
    • 絕對路徑
      • / (根目錄) 寫起
      • cd /要去的資料夾的完整路徑
  • ls 顯示所有檔案
    • -l 印出檔案詳細資訊
    • -a all file(印出隱藏檔)
    • -S用檔案大小排序,ls檔案大小的排序預設為降冪
    • -r反向排序
    • ls常用指令
    • Image Not Showing Possible Reasons
      • The image file may be corrupted
      • The server hosting the image is unavailable
      • The image path is incorrect
      • The image format is not supported
      Learn More →
  • tab:打前幾個字,若目錄下有名字一樣的檔案,會自動補齊
  • mkdir <dir name> 產生新目錄
  • man <指令名稱> 顯示指令說明
  • touch <檔名> 產生新空白的檔案
    • -a <檔名>: 更改檔案時間

    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →

  • stat <檔名> 顯示相關時間戳記
  • 上鍵 上一個指令
  • cat <檔名>: 讀取檔案內容
  • more <檔名> 從上開始顯示
  • less <檔名> 用分頁顯示(按q退出)
  • head -<行數> <檔名> 輸出前面幾行
  • tail -<行數> <檔名> 輸出最後幾行
  • tac 反著印出資料
  • echo <文字> 打什麼輸出什麼,會回復<文字>
    • echo "hello moto" ,他會印出 hello moto
    • echo $SHELL: 現在的shell是什麼
  • echo <文字> > <檔名> 將輸入的<文字>覆蓋原本檔案的內容
    • 例如 echo 123 > 123.txt

      原本123.txt的內容全部會被123蓋過,所以123.txt的檔案內容只剩下123

  • echo <文字> >> <檔名> 將<文字>加入在<檔案>內容的後面
  • > : stdout replace
  • >> : stdout append
  • 1> : stdout replace
  • 2> : stderr replace
  • 2>&1: 將 "標準錯誤 (stderr)" 重導入至 "標準輸出(stdout)當前的檔案描述符"
  • Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →
  • cat&>> : stdout, stderr 都會寫入
    • stdout : 標準輸出 (代碼為1)
      • ex: cat 存在檔案出現的內容
    • stderr : 標準錯誤輸出(代碼為2)
      • ex: cd 到不存在目錄出現的錯誤訊息
  • cd /jsdf 2>&1 | less
    • 將錯誤訊息導到標準輸出再 pipe 到 less
  • tee 輸入並顯示(會覆蓋原檔案)
    • 同時輸出到螢幕與檔案
  • tee -a <檔名> 在原有的東西後加入後也顯示
  • ls | tee -a <檔名>
    • |: 將前面的 stdout 當作後面指令的 stdin
    • 應是前面 ls 後的輸出結果導入到後面當作輸入並經由 tee 輸出到螢幕與檔案
  • ./<指令名稱> 執行當前目錄此名稱的指令
  • cp <file> <path> 複製檔案
    • -r 遞迴複製,複製資料夾及其底下東西
    • -a 維持原本各種資料,包括權限
  • rm <file> 刪除檔案(remove)
    • -r 遞迴,刪除資料夾內容
    • -rf 把所有檔案全部強制刪除

環境變數

  • export | less 來看有哪些環境變數
    • pipeline 進 less 裡是為了方便搜尋
    • 在 less 裡按 / 接著打 keyword 再按 Enter 來搜尋
  • $HOME 你的 home 目錄位置
  • $PWD 當前目錄
  • $SHELL 當前所使用的 shell 之名稱
    • 如果確定要執行的檔案在當前的目錄下,前面加./,告訴 SHELL 這個檔案就在這裡,不會執行到其他同名的檔案
  • $PATH 當執行指令但沒指定確切目錄,則會從 $PATH 裡的路徑去找
    • 如果都找不到就會說 command not found
    • 如果自己寫了一個指令,可以把它放到系統某個地方,再將該路經加到 PATH,就可以執行這個指令

大家有看過 Windows 的隱藏檔案,和打開副檔名顯示ㄇ?
因為顯示副檔名預設是關閉的,有心人士就能騙你打開 可愛狗勾.jpg.EXE,你會只看到可愛狗勾.jpg ,然後你就中毒了。

  • stat <檔名>
  • 在檔案瀏覽器上按「永久刪除」,這檔案在硬碟上不會馬上被抹掉,還在硬碟表面某個磁區裡!為了效率的關係沒抹掉
  • 事實上只是取消列出檔案而已,如果你用檔案救援軟體(電子鑑識)還是有機會撿回來喔
  • 如何最大化檔案救援回來機會:斷電!不要再做任何寫入了
  • 讀檔也有在寫入

Linux 基本指令 (cont.)

  • 先切到bin 底下輸入xxd zip
  • xxd zip |less
  • xxd 用binary狀態開啟檔案
  • mount ro 掛載磁區且 read-only
  • realatime
  • mount |grep noatime:

    /etc/目錄下

  • cp <檔案> <路徑>複製檔案
    • -a維持檔案的相關權限
    • cp -r <目錄> <路徑>複製目錄
  • rm <檔案>移除檔案
    • rm -r <目錄>移除目錄及其底下所有檔案
    • sudo rm -rf <目錄>強制移除目錄
    • -f強制
  • mv <檔案1> <目錄> 把檔案1移到目錄下
    • 如果是目錄,後面加/比較好(<目錄>/)
  • clearctrl+l清除 terminal
  • ls -al /ll: 全部檔案的詳細資訊

檔案權限

  • r 4讀、w 2寫、x 1執行、 7讀寫執行 (後面的數字是二進位來的)
  • 分 3 組,分別是擁有者(user)權限、群組(group)權限、任何人(other)權限

image source: Linux chmod 命令 | 菜鸟教程

修改權限

  • 方法一:文字
    • chmod <人+動作> <file>修改權限
    • u user
    • g group
    • o other
    • a all
    • <人>+<動作> 讓<人>可以<動作>

      <人>-<動作> 讓<人>刪除這個<動作>

    • chmod u+x file
  • 方法二:數字
    • chmod 777 file
    • 777 依序為 user group others
    • 7的來源為
      1112
      (rwx都可以的二進位)

如果要將一個檔案hi.txt的權限變更為下表的樣子,有二種方法

u 用戶 g 群組 o 其他
str rwx rwx rwx
str rw- rw- r
0x 110 110 100
0o 6 6 4
  • 方法一:chmod 664 hi.txt
  • 方法二:chmod u+rw hi.txt

用 bit 記檔案權限,會比用字元 (char) 記省好多空間

  • 0x110110100 -> 9 bits
  • rw-rw-r-- -> 9 bytes = 72 bits

Linux 基本指令 (cont.)

  • find <path> 搜尋檔案

    • -perm 數字 找有這權限的
    • -name <字> 找名字為 <字> 的 (要完全符合)
  • ls | grep <字>: 找那個目錄下含有該<字>的檔案 (部份符合就好)

  • grep 參數

    • -i 不管大小寫
    • log 找到<字>相同的(輸入的大小寫有差)
    • -n 印出行數
    • -in 不管大小寫的行數
    • -r recursion,遞迴往下找
  • ls -l | awk '{print $1"\t"$8}' 過濾出ls資料的第一列和第8列並將資料印出來

    awk 一個可以操作字串的程式,資工系教授 klim 寫的 cheat sheet

  • sort 排序

    • -c 將重複的刪除
    • -u 刪掉輸出到螢幕上重複行
    • -r 降冪
    • -n 依照數值排列
    • -k <第幾個col> 依照第幾個col排序
  • sed 只會把操作完的字串顯示出來,沒有改變檔案

    • -i 操作完的字串顯示並寫入檔案

#!/bin/bash shebang

  • 只能寫在第一行才有效
  • 我希望接下來的(純文字)內容用什麼去執行他。這樣就可以開一個文字檔,給他執行權限之後 ./檔名 來執行
  • #!:Shebang

作業討論???

FHS

1.哪一個預設使用者的家目錄,預設沒有放在 /home/
Ans: 超級使用者

2.如果我想查詢這台主機有哪些使用者帳號,要查看哪個檔案 ?
Ans: /home/

/etc/passwd ??

passwd或shadow?

指令

1.修改檔案 test.py 的權限,檔案 owner 可以讀、寫、執行,與擁有者同一群組者可以讀、執行,其餘的使用者可以讀。請問要如何下指令?

  • 用數字表示法修改權限

    Ans: chmod 754 test.py

  • 用文字表示法修改權限

    Ans: chmod u+rwx,g+rx,o+r test.py

    ? chmod u=rwx,g=rx,o=r test.py

2.若要將當前目錄下檔名含有 LSA 檔案的詳細資料,並依檔案大小(由小到大)輸出於螢幕上,請問要如何下指令?

Ans:ls -S | grep LSA

? ls -lSr | grep LSA

? ls -Slr | grep LSA

ls -lSr | grep LSA

硬碟配置

故事

Uncle 很愛迷因,為此他非常熱心地架了一個網頁,可以即時的更新迷因圖跟大家分享,但 PP 覺得這個網站常常連不進去,要求改善,不然就要請歐姊姊對 Uncle 提告。 Uncle 強迫蓬萊幫他找問題,蓬萊迫於淫威,查了 Apache 網頁伺服器的紀錄檔沒發現問題,又調整了 MySQL 資料庫的設定,但改善程度有限,不知如何是好,便求助鍋子。 不消一炷香時間,就發現 CPU 和記憶體使用量正常,問題其實是硬碟太老舊,所以撐不住資料庫的大量的讀寫,加上網頁空間也快要滿了。 於是 Uncle 又強迫蔣媽花錢更新設備,不過蔣媽沒錢,走在路上一籌莫展時,阿棟剛好騎車經過,剛好背包掉東西出來,又剛好掉了 2 顆 1T SSD 跟 1 顆有多層泡泡紙精心包裝的 4T HDD,被蔣媽撿到, Uncle 拿到新的硬碟後,便強迫 keke 把網頁設置到硬碟上,但 keke 不會用,只好詢問 LSA 的各位學生,該怎麼配置,才能改善這個網頁呢 ?

跑在上面服務

  • MySQL 資料庫
  • Apache 網頁伺服器

硬碟

  • 1T SSD * 2 、 4T HDD * 1

Ans