如果我們要與Linux對話,就必須學習shell,而shell是一支程式,提供方便的文字介面使我們能與作業系統溝通。
- 查看系統中有哪些shell可用
~$ cat /etc/shells
- 查看目前使用的shell
~$ echo $0
- 改變預設使用的(登入時的)shell(change shell)
~$ chsh <shell name>
常用基本指令
- 協助資訊:whatis, man, info, help
- 檔案與資料夾操作:cd, pwd, mkdir, rmdir, rm, cp, mv, ls
- 檢視檔案內容:cat, less, more, head ,tail, wc
- 開關機:shutdown, halt, sync, reboot
- 帳號管理:adduser, deluser, sudo, su
- 系統狀態資訊:uname, date, who, w, top, free, dmesg, ps
- 安裝/移除套件:apt-get, aptitude
系統狀態資訊
w:顯示使用者登入的狀況
who:顯示所有登入者的資訊
whoami:顯示使用者名稱
uname:顯示作業系統核心資訊
-a:系統所有相關的資訊
-m:系統的硬體名稱
-r:核心版本
date:顯示或變更日期
top:顯示系統中使用較多資源的執行程序
ps:顯示目前作業系統中所有的執行程序
-a:顯示同一終端下的所有程式
-A:顯示所有程序
-u [使用者名稱]:顯示特定用戶資訊
-au:顯示較詳細的資訊
-aux:顯示所有包含其他使用者的程序
R :該程式目前正在運作或是可被運作
S :該程式目前正在睡眠,但可被訊號 (signal) 喚醒。
T :該程式目前正在偵測或停止
Z :該程式已經終止,但是其主程式無法正常終止子程序,造成 zombie (疆屍) 的狀態
free:顯示作業系統的記憶體使用量
-g:以GB為單位顯示記憶體使用情況
-m:以MB為單位顯示記憶體使用情況
-k:以KB為單位顯示記憶體使用情況
-s [間隔秒數]:持續觀察記憶體使用狀況
dmesg:系統開機過程的檢測紀錄檔
協助資訊
whatis:指令、手冊的簡要說明
~$ whatis [指令名稱]
man:Linux線上參考手冊(manual)介面,查詢指令用法(man為manual的簡寫,有操作說明之意)
~$ man [指令名稱]
info:線上手冊文件
~$ info [指令名稱]
help:列出系統可用指令
~$ help
which:顯示指令路徑
~$ which [指令名稱]
檔案與資料夾操作
cd:變更工作目錄
pwd:顯示工作目錄
ls:列出資料夾內容
-s:
-a:顯示隱藏檔
-l :詳細列出檔案詳細資料
-al:同時顯示隱藏檔與詳細資料
mv:移動(重新命名)檔案或資料夾
cp:複製檔案
-r:複製整個資料夾(含所有下層檔案與資料夾)
rm:刪除檔案
-i:每個檔案刪除前會再次確認
-f:刪除時不做二次確認,直接刪除
-r:刪除整個資料夾(含所有下層檔案與資料夾)
刪除所在位置的全部檔案
~$ rm *
mkdir:建立資料夾
rmdir:刪除一個空資料夾
檢視檔案內容
cat: 列出檔案內容(適用檔案小)
~$ cat [某檔案或資料夾名稱]
-n [行數] : 指定顯示前面幾行
more: 根據畫面大小,以分頁顯示內容(不允許前後翻頁)
~$ more [某檔案或資料夾名稱]
less: 根據畫面大小,以分頁顯示內容(適用單行內容短、文件篇幅長之檔案,允許前後翻頁)
~$ less [某檔案或資料夾名稱]
head:顯示檔案內容開頭幾行
~$ head [某檔案或資料夾名稱]
-n [行數]:指定顯示前面幾行
tail:從檔案尾端查看內容(預設倒數十行)
~$ tail [某檔案或資料夾名稱]
-n [行數]:指定顯示倒數幾行
-f:自動更新檔案內容(用來追蹤修改,隨時查看更改,適合查看log訊息或多人修訂時使用)
touch:建立一個無內容的新檔案或改變目錄與檔案建立的時間
~$ touch [某檔案或資料夾名稱]
-a:僅改變存取時間。
-m:僅改變修改時間。
-t:自訂時間而非目前時間。格式為 [年份][月份][日期][小時][分鐘].[秒]。
-c:不要建立檔案。
-d:用字串的方式表示時間。
wc : 計算行數、字數與字元數
~$ wc [某檔案或資料夾名稱]
-l :僅列出行
-w:僅列出多少字(英文單字)
-m:多少字元;
gedit:文字編輯軟體(僅限於圖形介面)
alias 別名設置(使用者環境變數)(下次登入即消失)
~$ alias 原名='別名'
若要取消設置
~$ unalias 別名
若要每次登入自動載入別名的設置,可加在下列四個檔案其中之一:
1./etc/profile :系統共用的使用者設定檔,在使用者登入時被讀取
2./etc/bashrc :系統公用的bash設定檔,在bash被執行時被讀取
3.~/.profile :使用者私有的設定檔,位於每個使用者的家目錄底下
4.~/.bashrc :使用者私有的bash設定檔,位於每個使用者的家目錄底下
基本上,自己的喜好別人不見得會喜歡,所以都是編輯私有設定檔為主(若沒有可直接新增),直接在檔案裡打上指令即可。
Tmux(分割視窗軟體) – 須另外安裝(~$ sudo apt-get install tmux)
- ctrl+b % – 水平分割
- ctrl+b “ – 垂直分割
- ctrl+b CRL不放+方向鍵 – 改變視窗大小
製作硬式連結
~$ ln [原始檔案案或目錄][目標檔案或目錄]
製作軟式連結
~$ ln -s [原始檔案案或目錄][目標檔案或目錄]
find : 尋找檔案
~$ find [路徑] -name [檔名]
或許你會覺得終端機裡呈現的內容很亂
因此你可以這樣做…
~$ find [路徑] -name [檔名] 1>success.log 2>error.log
此段指令一樣是尋找檔案,但符合尋找結果會導向到success.log,結果不符則導向到error.log
當然你也可以直接在終端機顯示符合尋找結果的訊息,但捨棄結果不符的訊息
~$ find [路徑] -name [檔名] 2>&-
標準I/O控制
- 標準輸入/輸出/錯誤輸出(stdin/stdout/stderr)
- I/O重定向
> (用法:[指令]>[檔案]) : 將[指令]的輸出結果儲存到[檔案]裡
< (用法:[指令]<[檔案]) : 將[檔案]的內容導向成為[指令]的”輸入”資料
>>(用法:[指令]>>[檔案]) : 將[指令]的輸出結果附加到[檔案]裡
有時,我們會有需要一次用到兩個指令去達成我們的目的,需要一個符號用來連結命令的輸出與輸入,就是「|」(管線命令 pipe commands)
例如: ls | wc -l (先查看檔案,並將結果輸入給wc -l計算行數)