🐧 Linux 指令教學 === ## 作業系統 Operating system  - 硬體 (Hardware):整個系統的實體工作者。 - 核心 (Kernel):內部的核心,聽完Shell的翻譯,再指示硬體要進行的工作。 - 殼層 (Shell):使用者與核心的溝通橋樑。負責接收使用者的訊息,再翻譯給Kernel。 - 使用者:將需求或想做的事輸入給Shell(就是你和我)。 ### 常見的作業系統 - macOS - Linux - Windows - Android  :::warning *切入正題!!!* *今天要講的是**Linux**(的指令而已啦* :penguin::penguin::penguin: ::: ## Linux 作業系統架構 :::warning *在開發環境上,Linux是比較具有優勢的~* ::: - **For Mac users**:因為macOS跟Linux的基礎都是跟Unix操作系統有關,所以在Mac上是可以用Linux指令的~ - **For Windows users**:完全是不同的作業系統,所以會用不同的指令。 - 可以安裝 **WSL** (Windows Subsystem on Linux) - 接著在命令提示字元中輸入 `wsl` 或 `bash` 就可以進入Linux系統了 :::warning **Shell有分為:** *:penguin: 圖形化使用者介面 (Graphical User Interface, GUI)* *:penguin: 指令介面 (Command-Line Interface, CLI)* **Linux比較常用CLI** :::  - Shell:有不同的版本,常見的有`bash, Zsh, Csh, Fish`。不同的shell會有一些不同的進階指令,可以做到更多樣的功能 - Utilities: 是基本的功能或工具,也就是本日主角 ---- 各種指令 打開Terminal,看看自己是使用哪個shell ``` echo $SHELL # 預設的shell echo $0 # 當前所在的shell ``` 查看你有哪些shell ``` cat /etc/shells ``` 更改shell(一次性) ``` zsh bash fish ``` 更改預設的shell ``` chsh -s /bin/bash chsh -s /bin/zsh ``` ***:penguin: `/etc/shells` 跟 `/bin/zsh` 到底是啥?*** ## Linux 檔案系統架構  :::warning *macOS 跟 Linux 還是有點差異啦* ::: - `/` 根目錄 - `/bin` 一般使用者可以操作的指令,連結到 `/usr/bin` - `/sbin` 系統管理員可以操作的指令,連結到 `/usr/sbin` - `/etc` 系統設定檔 - `/var` 記載著各種系統上的變數 - `/usr` 全名為 unix software resource,放置系統相關軟體、服務 - `/tmp` 全名為 temporary,放置暫存檔案(雜七雜八的東西) - `/opt` 全名為 optional,通常為第三方廠商放置軟體處 - `/Users` 裡面會有你的用戶資料夾(又稱家目錄`~`),類似Linux的 `/home` ``` cat /etc/shells # 表示shell有紀錄在 /etc 底下的 shells 裡面 ``` ## Linux 指令 ### Navigation 相關 #### pwd > Windows `cd` print working directory 顯示當前工作目錄 ``` pwd ``` #### cd change directory 改變目錄 ``` cd <絕對/相對路徑> cd .. # 回到上一個路徑 cd ../example # 回到上一個路徑並去到example目錄 ``` #### ls > Windows `dir` list 列出檔案 ``` ls # 列出當前工作目錄底下的檔名 ls <目錄> # 列出該工作目錄底下的檔名 ls -l # 顯示檔案的詳細資訊 ==output== 權限 底下的目錄&檔案 大小 檔名 drwx------@ 7 zhangzhifen staff 224 11 2 22:50 W8 所有者 群組 最後編輯時間 ``` 會有一些(.開頭的)隱藏檔案 ``` ls -a # 隱藏檔案也列出 # 顯示包含隱藏檔案的所有檔案詳細資訊 ls -al ls -la ll ls -R # 也列出子資料夾內的所有檔案及資料夾內容 ``` #### open 打開圖形介面的資料夾或檔案 ``` open . # .代表目前所在的位置 open <檔案> ``` ### File 相關 #### mkdir 建立工作目錄 ``` mkdir <資料夾名稱> mkdir -p dir1/dir2/dir3 # 創建多層目錄 ``` #### touch > Windows `echo. >` 創建文件 ``` touch <文件名稱> touch aa.txt bb.txt cc.txt # 創建多個文件 ``` #### cp > Windows `copy` copy 複製檔案 **參數** `-r`:整個資料夾 `-f`:強制執行 `-i`:會先詢問再執行 `-p`:將檔案本身屬性(權限、所有者、時間)同時複製過去,一般用於備份居多 `-s`:複製成捷徑檔 ``` cp <檔案> <目的> cp aa.txt ~/Desktop # 可以放到一個路徑底下 cp aa.txt newaa.txt # 也可以創建一個新的複製檔案 ``` 如果要複製到已存在的檔案 ``` cp aa.txt bb.txt # 會直接覆寫 cp aa.txt >> bb.txt # 會附加在bb.txt的尾端 ``` #### rm > Windows `del` remove 刪除檔案 **參數** `-r`:整個資料夾 `-f`:強制執行 ``` rm <檔案> rm -r <資料夾> # 刪除資料夾 rm -f <檔案> # 強制刪除(避免一些確認提示) rm -rf <資料夾> # 強制刪除資料夾 ```  #### mv > Windows `move`, `ren` move 移動檔案 or 改檔案名字 **參數** `-v`:做完移動之後顯示所做的移動 ``` mv <檔案> <目的> mv <原名稱> <新名稱> # 如果要往外移出一層目錄的話 mv <檔案> <../> # 如果要移出兩層 mv <檔案> <../../> mv -v aa.txt ../ # 輸出:aa.txt -> ../aa.txt ``` #### cat & more & less > Windows `type` 查看檔案 ``` cat <文件名稱> more <文件名稱> less <文件名稱> ``` - `cat` 會一次性將內容印出來,因此適合較小的文件 - `more` 支援翻頁,用空白格可以跳到下一頁,但不能往回翻。支援向前搜尋`/pattern`,使用`q`退出。 - `less` 比`more`更靈活 - 空白格跳到下一頁 - `b` 回到前一頁 - `/pattern` 向前搜尋 - `?pattern` 向後搜尋 - `g` 跳轉到開頭 - `G` 跳轉到結尾 - `q` 退出 #### find 尋找檔案位置 **參數** `-name`:指定檔案(目錄)名稱 `-iname`:不區分大小寫 `-size`:指定檔案(目錄)大小 `-mtime`:存取、修改天數 `-amin`:存取、修改分鐘 `-ctime`:創建天數 ``` find <目錄> -name '*.html' # 只會匹配 .html檔 find <目錄> -iname '*.html' # 也會匹配 .Html檔 find <目錄> -size +50M # 50MB 以上 find <目錄> -mtime +7 # 超過7天沒有被存取跟修改 find <目錄> -amin -10 # 10分鐘內有被存取跟修改 ``` 使用邏輯運算符號 `-a`:邏輯與(AND),在 find 中是默認的操作,通常可以省略 `-o`:邏輯或(OR),將多個條件組合在一起,匹配任一條件的檔案 `!` 或 `-not`:邏輯非(NOT),排除符合條件的檔案。 ``` find <目錄> -name '*.html' -o -name '*.js' ``` 指定檔案類型 ``` # 指定搜尋「檔案」 find <目錄> -type f -iname '*.txt' # type "file" # 指定搜尋「目錄」 find <目錄> -type d -iname 'dir' # type "directory" ```  ## 文字編輯 Text Editor ::: warning *可以在**指令介面**編輯文件~* ::: ### nano :penguin: **簡單好操作** 創建&打開檔案 ``` nano <檔名> ``` 接著整個終端機介面就會變成編輯器,可以輸入跟刪除等等~ 大部分指令都是透過`ctrl^` + 其他東東,介面底下都會寫,所以不怕迷路! - `ctrl^+k` 剪下整行 - `ctrl^+u` 貼上 - `ctrl^+shift+6` 選取範圍 - `alt+6` 複製整行(但Mac沒有這種東東) - `ctrl^+O` 儲存 - `ctrl^+X` 離開 ### vim :penguin: **複雜多功能、學習曲線高**    #### vim 的四種主要模式 - 命令/普通模式 command/normal mode:一進入vim的預設模式,無法**直接編輯**內容(打字、刪除),主要在這裡進行模式的切換並操作一些功能 - 插入模式 insert mode: - 視覺模式 visual mode - 底線命令/命令行/指令模式 last line / command line mode #### 普通模式 一進入vim的預設模式,**無法直接編輯**內容(打字、刪除),主要在這裡進行模式的切換並操作一些功能。 創建&打開檔案 ``` vim <檔名> ``` 一開始進入vim會是在普通模式,如果要**切換模式** - 進入插入模式: - 光標位置 : `i` (insert) - 光標後方 : `a` (append) - 光標下方 : `o` (open) - 取代字符 : `s` (substitute) - 進入視覺模式:`v` - 退回普通模式:`esc` **常用功能* - 有關移動  - `w` 移動到下一個單字 - `b` 移動到前一個單字 - `0` 移動到行首 - `$` 移動到行尾 - `G` 移動到頁面底端 - `gg` 移動到頁面頂端 - 有關翻頁 - `ctrl^+f` 往下一頁 - `ctrl^+b` 往上一頁 - 有關複製 - `yy` 整行複製 - `yyp` 複製整行到下一行 - `x` 剪下一個字母 - `dd` 整行剪下 - `dw` 從光標位置剪下一個單字 - `daw` 剪下目前所指的一個單字 ``` He|llo World! # dw He World! # daw World! ``` - 有關貼上 - `p` 從光標位置往後貼上 - `P` 從光標位置往前貼上 #### 指令模式  - `:` - `:w`:儲存 - `:q`:退出 - `:q!`:退出不儲存 - `:wq`:儲存並退出 - `:w <filename>`:另存新檔 - `:undo`, `u`:返回上一動 - `:redo`, `ctrl^+r`:回到下一動 - `:set nu` 顯示行數 - `:set nonu` 關閉行數 - `/<word>`:往下搜尋字段,字段後面加上 `\c` 代表不分大小寫,`\C` 則代表大小敏感 - `?<word>`:往上搜尋字段 - `n`:找下一個字 - `N`:找前一個字  #### 視覺模式 像是用滑鼠在文件上拖曳一樣,會把光標移動的範圍反白,然後就可以針對反白的部分進行操作 - `y` 複製 yank - `d` 剪下 delete - `p` 往後貼 - `P` 往前貼 執行了以上步驟後就會回到普通模式 #### 視窗分割 - `:new <檔名>` 開啟水平新視窗 - `:vnew <檔名>` 開啟垂直新視窗 - `ctrl^+ww` 切換視窗 - `ctrl^+wq` 關閉當前視窗 - `:only` 只保留當前所在視窗 這樣就可以同時編輯多個檔案 :::warning *雖然vim感覺很複雜,指令多到爆、有點難上手><* *But市面上看起來還是有一批擁護者(?)* ::: 
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.