# Unix 基本操作 ## 簡介 Unix系統通常以文字介面來操作,以Linux系統為例, 我們可以開啟Terminal,並輸入各種指令來進行操作 簡單的從新增、刪除檔案到各種作業系統相關的進階操作都可以做到 ## 工作目錄 工作目錄可以理解成你在檔案系統中的位置,所有指令都以工作目錄為中心。 假如我的檔案夾架構如下 ``` |--1 | |-A | └-B └--2 └-A ``` 若我在工作目錄為1時,刪除A檔案,刪除的是1/A 若我在工作目錄為2時,刪除A檔案,刪除的是2/A ## 代稱 `. ` 當下工作目錄 `..` 上層工作目錄 ## 指令 `pwd`(present working directory) 顯示當前工作目錄 `ls` (list)列出工作目錄下所有檔案 `cd [Name]` (change directory) 切換工作目錄 ex: cd Desktop, cd .. `rm [Name]` (remove)刪除檔案 `touch [Name]` 創建新的空白檔案 `mkdir [Name]` (make directory)創建空的檔案夾 # Vim tutorial ## 簡介 Vim 是一款在大部分系統都內建的文字編輯器,因此不管是新電腦或是遠端連線到別的電腦,都可以直接使用。 ## 優勢 1. 輕量 2. 不需要預先安裝 3. 使用時手完全不用離開鍵盤(高手) ## Get started 在terminal中直接輸入 `$ vim [FileName]` ## Vim的三種模式 ![](https://i.imgur.com/GMEWeMu.png) (ref:鳥哥的Linux私房菜)[1] 1. 一般指令模式: 各類指令 2. 編輯模式: 打字 3. 指令列命令模式:存擋、關閉等等 一般指令模式可以切換至 編輯模式(i) 或 指令列命令模式(/) 編輯模式 或 指令列命令模式 可以切換至一般指令模式(ESC) 但 編輯模式 和 指令列命令模式 不能直接相互切換 ## 一般模式操作 ### 移動 `h` 或 向左方向鍵(←) 游標向左移動一個字元 `j` 或 向下方向鍵(↓) 游標向下移動一個字元 `k` 或 向上方向鍵(↑) 游標向上移動一個字元 `l` 或 向右方向鍵(→) 游標向右移動一個字元 `nG` 游標移至第n行 ### 搜尋 `/word` 尋找游標下一個word字串 `n` 再找下一個 `N` 找上一個 ### 刪除、複製、貼上 `dd` 刪游標在的整行 `yy` 複製一行 `nyy` 複製游標下的n行 `p` 於游標下一行貼上 `u` 復原上一個動作 ## 編輯模式 `i` 進入插入模式,於游標位置開始編輯 `ESC` 回到一般模式 其他 `I`, `a`,`A`, `o`, `O`, `r`, `R` 請自行研究 ## 指令列模式 `:w` 將編輯的資料寫入硬碟檔案中(常用) `:q` 離開 Vim(通常會fail,可以試試看`:q!`) `:wq` 儲存後離開 # Makefile ## 簡介 make是一個工具程式,他會讀取一個名為makefile的檔案,並利用裡面的資訊來自動編譯程式。 小型的程式碼可以直接用shell command進行編譯,但大型專案通常會使用make來進行編譯。make會根據上次修改時間等資訊來決定哪些檔案需要重新編譯,因此在大型專案中可以大量節省時間。 ## makefile 結構 `target`: 要生成的檔案 `dependencies`: 需要的檔案 note:縮排是Tab ``` target:dependencies command 1 command 2 ... command n ``` ## make 流程 make程式會先找到第一個target,並且檢查depencies是否存在。如果存在,下方的command就會被依序執行並完成編譯。如果不存在,make程式則會在下方的其他target中尋找所需的dependencies,並遞迴地完成所需的target後再完成第一個target。 假設我有檔案`main.c`, `1.c`, `1.h` 並且`makefile`如下 ``` all: main.o 1.o gcc -Wall -o a.out main.o 1.o main.o: main.c 1.h gcc -c main.c 1.o: 1.c 1.h gcc -c 1.c ``` 首先make會先找到第一個target all,發現dependencies main.o, 1.o 不存在。隨後make找到target main.o, 1.o進行編譯後再完成target all # SSH 先去辦一個工作站帳號出來 `ssh 學號@linux[1~15].csie.ntu.edu.tw` ## Ref [1] https://i.imgur.com/GMEWeMu.png(https://i.imgur.com/GMEWeMu.png) [2] https://hackmd.io/@aJ0iOin3Q8aRY6TDzXaE8g/rJAU17INw(https://hackmd.io/@aJ0iOin3Q8aRY6TDzXaE8g/rJAU17INw)