1.02 Linux 操作系統
什麼是Linux系統?
Linux 是一種開放原始碼作業系統,最初是 Linus Torvalds 出於自身愛好,於 1991 年利用 GNU 的 GCC、GNU Emacs 等工具,在他的 80386 電腦上,創作了一套類 UNIX (UNIX-like)系統的作業系統核心並且在 GPL下釋出,人稱 Linux(即 Linus’ Unix )。
隨著時代的演進, Linux 作業系統也在全球工程師的努力貢獻之下,也與時俱進,跟著電腦硬體的進步而進步,並且在資訊的領域內開枝展葉,在許多的領域中成為出色的作業系統,小至手機、嵌入式系統,大至研究等級的超級電腦,都有非常大量的佔有率。
由於它的原始碼是開放的,也就是說任何人都可以執行、研究、共享和修改它,並在遵循相同的授權條款下再度發行,甚至出售。
一些常用的Linux指令
文件 / 目錄管理
切換目錄 | cd // 接絕對路徑or相對路徑 |
查看目前所在文件位置 | pwd |
若目錄不存在,直接新增 | mkdir -p 目錄 |
新增母/子目錄 | mkdir -p 母目錄/子目錄 |
刪除目錄(非空白) | rm -r 目錄路徑 |
刪除目錄(空白) | rmdir 目錄路徑 |
新增文件 | touch 文件名稱 |
刪除文件 | rm 文件名稱 |
顯示當前目錄包含的内容 | ls |
顯示當前目錄包含的内容(含隱藏文件) | ls -a |
詳列當前目錄包含的内容 | ls -l // 或直接打ll |
更改文件權限 | chmod 777 文件名 |
更改文件擁有者 | chown UserName: FileName |
使用者 / 用戶組
查看目前使用者 | whoami |
查看目前使用者(詳細資訊) | id |
查看所有使用者 | cat /etc/passwd |
新增使用者 | useradd 使用者名稱 |
移除使用者 | userdel 使用者名稱 |
修改使用者名稱資訊 | usermod |
設定密碼 | passwd 使用者名稱 |
切換使用者 | su - 使用者名稱(不加使用者名稱=root ) |
以系统管理員身份執行指令 | sudo 具體指令 |
查看目前用戶組 | groups |
查看所有用戶組 | cat /etc/group |
新增用戶組 | groupadd |
移除用戶組 | groupdel |
修改用户組資訊 | groupmod |
進程管理
顯示當前終端運行的進程 | ps |
顯示所有使用者的所有進程(包括系统進程) | ps -aux |
終止指定PID進程 | kill PID |
強制終止PID進程 | kill -9 PID |
套件管理
顯示所有可更新的套件清單 | apt update |
套件升級 | apt upgrade |
安裝指定的套件 | apt install <package_name> |
刪除指定的套件 | apt remove <package_name> |
顯示所有已安裝的 | apt list --installed |
顯示所有已安裝套件的版本資訊 | apt list --all-versions |
Shell Scripts
「Shell」是指能夠操作應用程式介面的程式,狹義的 Shell 指的是指令列方面的軟體,包括 bash 等,我們需要透過 Shell 將我們輸入的指令與 Kernel 溝通,好讓 Kernel 可以控制硬體來正確無誤的工作。 廣義的 Shell 則包括圖形介面的軟體,因為圖形介面也能夠操作各種應用程式來呼叫核心工作。
Linux 的 Shell 種類有很多,常見的有:
Bourne Shell(/usr/bin/sh或/bin/sh) — (已經被 /bin/bash 所取代)
Bourne Again Shell(/bin/bash) — (就是 Linux 預設的 shell)
C Shell(/bin/csh) — (已經被 /bin/tcsh 所取代)
Turbo C Shell(/bin/tcsh) — (整合 C Shell,提供更多的功能)
K Shell(/bin/ksh)
Shell for Root(/sbin/sh)
Shell Scripts 撰寫
[kami@kami ~]$ mkdir bin; cd bin
[kami@kami bin]$ vim hello.sh
#!/bin/bash
# Program:
# This program shows "Hello World!" in your screen.
# History:
# 2025/05/8 YOOAIO First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World! \a \n"
exit 0
第一行 #!/bin/bash 在宣告這個 script 使用的 shell 名稱:
因為使用的是 bash ,所以要以『 #!/bin/bash 』來宣告這個檔案內的語法使用 bash 的語法。當這個程式被執行時,他就能夠載入 bash 的相關環境設定檔 (一般來說就是 non-login shell 的 ~/.bashrc), 並且執行 bash 來使我們底下的指令能夠執行。(在很多狀況中,如果沒有設定好這一行, 那麼該程式很可能會無法執行,因為系統可能無法判斷該程式需要使用什麼shell來執行)
程式內容的說明:
整個 script 當中,除了第一行的『 #!
』是用來宣告 shell 的之外,其他的 #
都是『註解』用途! 所以上面的程式當中,第二行以下就是用來說明整個程式的基本資料。
一般來說, 建議一定要養成說明該 script 的:1. 內容與功能; 2. 版本資訊; 3. 作者與聯絡方式; 4. 版權宣告方式;5. 歷史紀錄 等等。
此外,若 script 內有較特殊的指令,要使用『絕對路徑』的方式來下達,而在較為特殊的程式碼部分,要加上註解說明。
(撰寫 script 的工具最好使用 vim 而不是 vi ,因為 vim 會有額外的語法檢驗機制,能夠在第一階段撰寫時就發現語法方面的問題)
(程式碼的撰寫最好使用巢狀方式,在包覆的內部程式碼最好能以 [tab]
按鍵的空格向後推, 這樣你的程式碼會顯的非常的漂亮與有條理!在查閱與 debug 上會較為有效率)
主要環境變數的宣告:
建議務必要將一些重要的環境變數設定好, PATH 與 LANG (如果有使用到輸出相關的資訊時) 是當中最重要的,這樣當程式在進行時,可以直接下達一些外部指令,而不必寫絕對路徑。
主要程式部分
就將主要的程式寫好即可,在這個例子當中,就是 echo 那行。
執行成果告知 (定義回傳值)
這裡可以利用 exit 這個指令來讓程式中斷,並且回傳一個數值給系統。在這個例子中使用的是 exit 0 ,代表離開 script 並且回傳一個 0 給系統, 所以當執行完這個 script 後,若接著下達 echo $? 則可得到 0 的值。