Linux, Ubuntu,

使用文字界面與Linux溝通

如果我們要與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計算行數)