--- tags : liunx title : liunx Ubuntu 筆記 --- # Ubuntu 筆記 :::spoiler 關於 apt-get :::success apt-get 通常是對某些套件進行操作,可能是安裝或移除等等行為 (下載及安裝) 基本格式:apt-get [選項] [命令] [套件名稱1, 套件名稱2, …] :::info apt-cache 通常是用來取得套件的資訊 基本格式:apt-cache [命令] [套件名稱1, 套件名稱2, …] 參考資料:[apt-get 指令一覽](https://b9532026.wordpress.com/2010/03/30/apt-get-%E6%8C%87%E4%BB%A4%E4%B8%80%E8%A6%BD-2/) ::: :::spoiler 關於軟連結與硬連結 1.使用方式: ln [參數] source_file dist_file :::success ln -s test.txt test_softlink.txt (這樣就會建立一個 test_softlink.txt 軟連結檔,指向 test.txt 這個檔案。) ln test.txt test_hardlink.txt (這樣就會建立一個 test_hardlink.txt 硬連結檔,指向 test.txt 這個檔案。) -f 建立時,將同檔案名刪除。 -i 刪除前進行詢問。 2.軟連結與硬連結的區別(通俗): 硬連結可認為是一個檔案擁有兩個檔名,而軟連結則是系統新建一個連結檔案,此檔案指向其所要指的檔案。 :::warning 1.軟連線可以對一個不存在的檔名進行連線 。 2.軟連線可以對目錄進行連線。 3.硬連結檔是直接使用相同的 inode,所以不管是用相對路徑或絕對路徑,效果都相同。 4.軟連結的 inode 就會跟原始的檔案不相同。 5.硬連結會跟原來的檔案有相同的 inode。 :::info 參考來源:[ubuntu下的軟連結和硬連結](https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/429151/) 參考來源:[Linux 建立連結檔 ln 指令教學與範例](https://blog.gtwang.org/linux/linux-ln-command-tutorial-examples/) ::: :::spoiler 關於systemd :::success 如果要立即啟動服務: systemctl start 服務名稱.servic 如果要立即停止服務: systemctl stop 服務名稱.servic (課本104) ::: ## BSAH 內建指令介紹 :::spoiler alias : 定義指令及參數的別名 allias=[-p] [別名] [=指令] :::success allias=[-p] [別名] [=指令] EX:$alias='./hello' alias -p 列出目前所有的別名設定 unalias [參數][別名] unalias -a 移除所有已定義的別名 ::: :::spoiler cd : 切換目錄 :::success EX : 切換目錄到/opt $cd /opt EX : 切換目錄到上層 $cd ../ ::: :::spoiler declare : 宣告shell變數 declare [參數] name[=value] :::success declare[參數]name[=value] 顯示幕前的shell變數 declare 顯示所有的環境變數 declare -x ::: :::spoiler enable : 啟動或關閉shell的內建指令 enable [-a] enable [-n] 指令 :::success 顯示幕前shell內建的指令 enable -a 關閉shell內建的指令cd enable -n cd cd從shell內建指令中移除後,就無法執行改指令。 若要將cd加回shell enable cd ::: :::spoiler exit : 離開目前的shell exit 簡單來說就是你多開終端機用exit就會關掉你所在的,也可以把終端機關掉。 ::: :::spoiler export : 宣告環境變數 export [參數]變數名稱[=變數設定值] :::success ##### 宣告DOG變數的內容為yubi yubi EX:export DOG=yubiyubi echo $DOG 輸出:yubiyubi 設定變數名稱為某一函數名稱 export -f 移除變數名稱 export -n 列出shell上的環境變數 export -p或不加 ::: :::spoiler help : shell內建指令說明 help (shell內建指令) :::success $help exit ::: :::spoiler history : 列出使用過的指令 history [欲查詢最近使用過的指令個數][參數] :::success 清除之前history的紀錄。 help -c 刪除history紀錄中指定編號的那一項。 history -d 編號 讀取尚未讀到的歷史紀錄。 history -n 歷史檔案 讀取history檔案,不會加上紀錄。 history -r 歷史檔案 複寫原有的history檔案。 history -w 歷史檔案 列出最近五個使用過的指令 EX:history 5 ::: :::spoiler unset : 移除變數設定 unset [參數] 變數 :::success 僅將函數移除。 unset -f 僅將變數移除。 unset -v 移除變數num的設定 EX:unset num ::: ## 檔案管理指令 :::spoiler du : 顯示目錄或是檔案大小 du [參數] [檔案] :::success 顯示目前目錄的使用狀況。 $ du 顯示/var目錄下所有檔案的容量,僅顯示總計,並以KB為單位。 $ du -sk /var/* ::: :::spoiler file : 顯示檔案類型 file [參數] 列出/var下的檔案。 $ ls /etc 列出目前目下的檔案,包含隱藏檔。 $ ls -a 以色彩表示檔案的屬性,並以長列表來表示。 $ ls -l --color=tty 以字母相反的順序表示。 $ ls -r 列出inodes的數目。 $ ls -i [關於inodes]("https://www.itread01.com/content/1542281710.html") ::: :::spoiler stat : 顯示檔案或檔案系統的狀態 stat [參數] 檔案或檔案系統 :::success 顯示檔案系統,而非單獨的檔案。 $ stat -f 顯示連結檔案。 $ stat -L 以簡單的模式列出資訊。 $ stat -t 顯示檔案report.txt的狀態。 $ stat report.txt 顯示檔案系統/dev/sdal的狀態。 $ stat -f /dev/sdal ::: :::spoiler mkdir : 新增目錄 mkdir [參數] 目錄 :::success 在目前下新增一個名為data的子目錄。 $ mkdir data 新增一個目錄/data/www/test。 $ mldir /data/www/test 加上-p的參數,可以自動幫我們產生所有不存在的上層目錄。 $ mkdir -p /data/www/test ::: :::spoiler touch : 更改檔案的時間標記 touch [參數] 檔案名稱 :::success 更改檔案被存取的時間。 $ touch -a 不要新增檔案。 $ touch -c 更改檔案被修改的時間。 $ touch -m 時間格式為MMDDhhmm。 $ touch -t 時間 新增一個名為test1的檔案。 $ touch test1 更改已存在檔案/ect/mail/access的時間標記。 ::: :::spoiler cp : 複製檔案或目錄 cp [參數] 檔案名稱或目錄 檔案名稱或目錄 /路徑 :::success 覆蓋時會先備份,備份檔案會在字尾加~。 $ cp -b 強迫複製。 cp -f 交談模式,覆蓋檔案前會詢問使用者。 $ cp -i 保留原有檔案的屬性。 $ cp -p 遞迴處理,保留特殊檔案的屬性 $ cp -R 僅複製時間差異的檔案 $ cp -u 將檔案testfile複製為testfile1。 $ cp testfile testfile1 將/tmp目錄複製到目前的目錄之下。 $ cp -r /tmp ./ 複製檔案時,保留原檔案的所有屬性。 $ cp -p /usr/bin/passwd ./ ::: :::spoiler mv : 移動或更名檔案或目錄 mv [參數] 來源檔或目錄 來源檔或目錄 :::success 若目的檔存在,在覆蓋時會將舊有檔案備份(在檔名後加上~)。 $ mv -b 強迫執行,若目的檔存在,則會強迫覆蓋。 $ mv -f 交談模式,覆蓋就檔時會先詢問使用者。 $ mv -i 在移動或是變更檔名時,若目的檔已經存在且檔案更新時間比來源新,則不會執行。 $ mv -u 列出詳細的過程。 $ mv -u 將檔案file1更名為file2。 $ mv file file2 將檔案file1移動到/tmp之下。 $ mv file1 /tmp/ 將目錄/home/dir1更名為/home/dir2。 $ mv dir1 dir2 ::: :::spoiler rm : 刪除檔案或目錄 rm [參數] 檔案或目錄 :::success 直接刪除目錄,而不刪除目錄下的檔案。(暴力刪除法,詳細請閱062頁)。 $ rm -d 強制刪除檔案或是目錄。 $ rm -f 在刪除檔案或目錄之前,會先詢問使用者。 $ rm -i 將該檔案或是目錄底下的所有檔案與子目錄一併處理。 $ rm -r 顯示完整的執行過程。 $ rm -v 以交談模式刪除檔案。 $ rm -i abc* 強制刪除test這個目錄與目錄下的檔案與子目錄(若正確刪除,則不會有任何的輸出) $ rm -rf test/ ::: :::spoiler diff : 比較並顯示檔案差異的部分 diff [參數] 檔案1 檔案2 :::success 比對file1與file2的不同。 $ diff file1 file2 比對file1與file2,並列出前後一行的異同 $ diff -c file1 file2 比對file1與file2,並以並列顯示。 $ diff -y file1 file2 ::: :::spoiler cat : 列出檔案內容 cat [參數] 檔案名稱 ::: success 顯示/etc/hosts.allow的內容。 $ cat /etc/hosts.allow 顯示/etc/hosts.allow的內容,並在非空白列上標示編號。 $ cat -b /etc/hosts.allow ::: :::spoiler tac : 將檔案內容由尾到頭的顯示 tac [參數] [檔案名稱] :::success 將檔案由尾到頭相反的顯示。 $ tac aaa ::: :::spoiler head : 輸出檔案內容最前面的部分 head [參數] 檔案名稱 :::success 顯示1.txt的前三行。 $ head -n 3 hosts.allow 顯示hosts.allow的前25個bytes。 $ head -c 25 1.txt ::: :::spoiler less : 顯示檔案內容 less [參數][檔案名稱] 參考課本067頁 :::success $ less vsftpd.conf ::: :::spoiler more : 顯示檔案內容 more [參數] [檔案名稱] :::success 瀏覽/etc/samba/smb.conf,每次顯示10行。 $ more -10 /etc/samba.conf ::: :::spoiler nl : 加上檔案中的行列編號 pg [參數] [檔案名稱] :::success 使用不同的編號位置。 $ nl /etc/hosts -w 2 編號每次增加3,並且在編號後面加上符號=。 $ nl /etc/hosts -i 3 -s= ::: :::spoiler tail : 顯示檔案最後面的部份 tail [參數] [檔案名稱] :::success 顯示/var/log/message的最後10行。 $ tail -n 10 /var/log/message 持續的監控/var/log/maillog這個檔案。 $ tail -f /var/log/maillog ::: :::spoiler tee : 同時輸出到畫面與檔案中 tee [參數] [檔案名稱] :::success 使用tee新增一個檔案aaa。 $ tee aaa (參考課本071頁) 同時輸出一列文字到檔案與畫面上。 $ echo "This is a test line" |tee test.txt ::: ## 文書編輯 ### vi編輯器 :::success 1. 輸入vi進入編輯環境。 2. 一開始入的是命令模式,在任何模式裡按下esc鍵就會回到命令模式。 3. 按下i進入插入模式。(簡單來說就是可以編輯了) 4. 在命令模式輸入[:]進入底線模式。 :::info 底線模式指令 處存並離開。 :wq 存檔。 :w 強迫存檔,如果要寫入唯讀檔,則必須是檔案的擁有者。 :w! 令存檔名為name的新檔。 :wname 離開vi。 :q 強迫離開vi(捨棄變更)。 :q! 編輯名稱為name的檔案。 e name 再編輯,捨棄原先的邊更。 e! 編輯下一個檔。若使用 vi file1 file2,在編輯完file1後使用此指令,即可編輯file 2。 n 顯示目前的檔名,游標所在的行數以及比例。 f ::: ### nano編輯器 ###### tags: 待施工 ## 在Liunx Ubuntu 使用C :::spoiler 安裝C編譯器 :::success 首先打開終端機,安裝前先更新一下: $ sudo apt-get update $ sudo apt-get upgrade 安裝編譯器與vim: $ sudo apt-get install vim $ sudo apt-get install build-essential $ sudo apt-get install libc6-dev 安裝man page---查詢指令的時候可以使用 $ sudo apt-get install manpages $ sudo apt-get install manpages-posix $ sudo apt-get install manpages-posix-dev $ sudo apt-get install manpages-dev 參考網站:[在Ubuntu上的第一支C語言程式](https://hanmajor.blogspot.com/2013/10/ubuntuc.html) ::: :::spoiler 關於編輯C ### 開啟編輯 $ vim hello.c or $ nano hello.c :::success ### Hello.c ```cpp= #include<stdio.h> int main(){ printf("Hello\n"); return 0; } ``` :::info ### 編譯 hello.c $gcc hello.c -o hello 將 hello.c 的內容編譯到 hello 成可以執行的檔案 ### 執行 hello.c $ ./hello ::: ## 訊號管理 :::info 要了解所有的訊號,可執行kill -1 or trap -1來看系統有哪些signal。 需要記住的只有終止程序六個: :::success SIGHUP -1 掛斷訊號。 SIGINT -2 如同Ctrl+c的作用。 SIGKILL -9 強制中止。 SIGTERM -15 預設中止訊號。 SIGUSR1 -10 使用者自訂的訊號。 SIGUSR2 -12 使用者自訂的訊號。 :::info 要強制中止程序。我們要先知道程序的PID為何,在利用指令中止該程序。 如:某程序為akua kill -SIGKILL akua or kill -s -SIGKILL akua or kill -9 akua ::: danger 如果不家參數直接kill aqua等同於傳遞SIGTERM的訊號 ::: ## 檔案與目錄結構 ### ls -l :::success 我們可以藉由第一個值去了解該檔案或是目錄的種類。 * [-] 一般檔案 * d 目錄 * l 連結 * b block special * c character special * s socket ::: ## 帳號與權限 UID 是User ID的簡稱,為帳號識別碼。UID位於/etc/passwd的第三欄位。 ### 帳號管理 #### 新增帳號指令 :::success useradd [-u UID][-g GID][-c 註解][-s shell][-m] 帳號名稱 :::info * c 備註 被祝文在加在/etc/passwd中第五欄位置。 * d 根目錄 指定使用者登入石所進入的目錄,並賦予使用者對該目錄的完全控制全。 * D 變更建立帳號的預設值。 -b 根目錄;-e有效日期;-f緩衝日數;-g主群組;-G次群組;-s shell * e 有效日期 格式YYYY-MM-DD,將儲存在/etc/shadow。 * g 主群組。 * G 次群組。 * m 建立使用者的根目錄,並將/etc/skel當中的檔案複製到使用者根目錄下。 * o 允許建立相同uid使用者。 * p 密碼 * s shell * u uid ::: #### 修改帳號指令 :::success usermod [-u UID][-g GID][-c 註解][-s shell][-m] 帳號名稱 :::info 修改參數與新增帳號相同。 ::: #### 刪除帳號指令 :::success userdel [-r] 帳號名稱 :::info 不加-r會保留帳號的加目錄,加上會連同家目錄一起刪除。 ::: #### 群組管理 :::success - 新增群組指令:groupadd - groupadd[-g GID] 群組名稱 - 管理群組成員指令:gpasswd - 將使用者user加入群組group1:gpasswd -a user group1 - 將使用者user移除群組group1:gpasswd -d user group1 - 刪除群組指令:groupdel - groupdel 群組名稱 ::: #### /etc/passwd 是一個文字檔,包含帳號的相關資訊。 :::info 帳號:密碼:UID:GID:備註:目錄:shell ::: #### /etc/shadow 是一個文字檔,包含帳號的相關資訊。 :::info 登入名稱:加密密碼:上次密碼變更日其:密碼最短使用期限:密碼過期警告期限:密碼暫停使用期限:保留欄位 ::: #### /etc/group 是一個文字檔,定義群組名稱、GID以及帳號的對應。 :::info group_name:passwd:GID:user_list ::: ##### 新增使用者帳號並在新增時指定經典的預設值 請新增一個使用者帳號 該帳號的shell必須為BASH,且有屬於它自己的家目錄。 請在新增後,切換為該使用者,並用cd回到他的家目錄。 :::success ![](https://imgur.com/7Hf3uyj.jpg) :::