對Linux的shell腳本基本概念進行簡單的講解,列舉了一些常見的linux指令 ...
關於Shell
在電腦科學中,Shell俗稱殼(用來區別於核),是指“為使用者提供操作界面”的軟體(命令解析器)。它類似於DOS下的command.com和後來的cmd.exe。它接收用戶命令,然後調用相應的應用程式。
shell分類:
一:圖形界面shell(Graphical User Interface shell 即 GUI shell)
例如:應用最為廣泛的 Windows Explorer (微軟的windows系列操作系統),還有也包括廣為人知的 Linux shell,其中linux shell 包括 X window manager (BlackBox和FluxBox),以及功能更強大的CDE、GNOME、KDE、 XFCE。
二:命令行式shell(Command Line Interface shell ,即CLI shell)
例如:
在Unix/linux中主要有:
Bourne shell (包括 sh,ksh,and bash)
Bourne shell ( sh)
Korn shell ( ksh)
Bourne Again shell ( bash)
POSIX shell ( sh)
C shell (包括 csh and tcsh)
TENEX/TOPS C shell ( tcsh)
MS-DOS系統:
cmd.exe/ 命令提示字元(Windows NT 系統)
Windows PowerShell(支持 .NET Framework 技術的 Windows NT 系統)
傳統意義上的shell指的是命令行式的shell,以後如果不特別註明,shell是指命令行式的shell。
互動式與非互動式shell
shell提供了你與操作系統之間通訊的方式。這種通訊可以以交互方式(從鍵盤輸入,並且可以立即得到響應),或者以shell script(非交互)方式執行。shell script是放在文件中的一串shell和操作系統命令,它們可以被重覆使用。本質上,shell script是命令行命令簡單的組合到一個文件裡面。
互動式模式就是shell等待你的輸入,並且執行你提交的命令。這種模式被稱作互動式是因為shell與用戶進行交互。這種模式也是大多數用戶非常熟悉的:登錄、執行一些命令、簽退。當你簽退後,shell也終止了。
shell也可以運行在另外一種模式:非互動式模式。在這種模式下,shell不與你進行交互,而是讀取存放在文件中的命令,並且執行它們。當它讀到文件的結尾,shell也就終止了。
常用指令:
文件管理
用於連接文件並列印到標準輸出設備上
cat [-AbeEnstTuv] [--help] [--version] fileName
ex:把 textfile1 和 textfile2 的文檔內容加上行號(空白行不加)之後將內容附加到 textfile3 文檔里:
cat -b textfile1 textfile2 >> textfile3
類似的命令:echo僅用於輸出命令後面的字元串到標準輸出設備上。
用於比較文件的差異,以逐行的方式,比較文本文件的異同處。如果指定要比較目錄,則diff會比較目錄中相同文件名的文件,但不會比較其中子目錄。
diff [-abBcdefHilnNpPqrstTuvwy][-<行數>][-C <行數>][-D <巨集名稱>][-I <字元或字元串>][-S <文件>][-W <寬度>][-x <文件或目錄>][-X <文件>][--help][--left-column][--suppress-common-line][文件或目錄1][文件或目錄2]
用來為文件或目錄改名、或將文件或目錄移入其它位置。
mv [options] source dest
mv [options] source... directory
參數說明:
- -i: 若指定目錄已有同名文件,則先詢問是否覆蓋舊文件;
- -f: 在 mv 操作要覆蓋某已有的目標文件時不給任何指示;
用於刪除一個文件或者目錄。
rm [options] name...
參數:
- -r 將目錄及以下之檔案亦逐一刪除。
直接刪除當前目錄下的所有文件及目錄,命令行為:
rm -rf *
主要用於複製文件或目錄。
cp [options] source dest
或
cp [options] source... directory
磁碟管理
用於切換當前工作目錄至 dirName(目錄參數)。
其中 dirName 表示法可為絕對路徑或相對路徑。若目錄名稱省略,則變換至使用者的 home 目錄 (也就是剛 login 時所在的目錄)。
另外,"~" 也表示為 home 目錄 的意思,"." 則是表示目前所在的目錄,".." 則表示目前目錄位置的上一層目錄。
cd [dirName]
- dirName:要切換的目標目錄。
用於顯示目錄或文件的大小。
du會顯示指定的目錄或文件所占用的磁碟空間。
ex:以以K,M,G為單位,顯示test文件的大小(--human-readable)
du -h test
用於建立名稱為 dirName 之子目錄。
mkdir [-p] dirName
參數說明:
- -p 確保目錄名稱存在,不存在的就建一個。
刪除空的目錄。
rmdir [-p] dirName
參數:
- -p 是當子目錄被刪除後使它也成為空目錄的話,則順便一併刪除。
用於以樹狀圖列出目錄的內容。
執行tree指令,它會列出指定目錄下的所有文件,包括子目錄里的文件。
tree [-aACdDfFgilnNpqstux][-I <範本樣式>][-P <範本樣式>][目錄...]
用於顯示指定工作目錄下之內容(列出目前工作目錄所含之文件及子目錄)。
ls [-alrtAFR] [name...]
系統管理
可以用來進行關機程式,並且在關機以前傳送訊息給所有使用者正在執行的程式,shutdown 也可以用來重開機。
使用許可權:系統管理者。
shutdown [-t seconds] [-rkhncfF] time [message]
參數說明:
- -t seconds : 設定在幾秒鐘之後進行關機程式。
- -k : 並不會真的關機,只是將警告訊息傳送給所有使用者。
- -r : 關機後重新開機。
- -h : 關機後停機。
- -n : 不採用正常程式來關機,用強迫的方式殺掉所有執行中的程式後自行關機。
- -c : 取消目前已經進行中的關機動作。
- -f : 關機時,不做 fcsk 動作(檢查 Linux 檔系統)。
- -F : 關機時,強迫進行 fsck 動作。
- time : 設定關機的時間。
- message : 傳送給所有使用者的警告訊息。
用於變更為其他使用者的身份,除 root 外,需要鍵入該使用者的密碼。
使用許可權:所有使用者。
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
參數說明:
- -f 或 --fast 不必讀啟動檔(如 csh.cshrc 等),僅用於 csh 或 tcsh
- -m -p 或 --preserve-environment 執行 su 時不改變環境變數
- -c command 或 --command=command 變更為帳號為 USER 的使用者並執行指令(command)後再變回原來使用者
- -s shell 或 --shell=shell 指定要執行的 shell (bash csh tcsh 等),預設值為 /etc/passwd 內的該使用者(USER) shell
- --help 顯示說明文件
- --version 顯示版本資訊
- - -l 或 --login 這個參數加了之後,就好像是重新 login 為該使用者一樣,大部份環境變數(HOME SHELL USER等等)都是以該使用者(USER)為主,並且工作目錄也會改變,如果沒有指定 USER ,內定是 root
- USER 欲變更的使用者帳號
- ARG 傳入新的 shell 參數
變更帳號為 clsung 並改變工作目錄至 clsung 的家目錄(home dir)(不加 - 則不改變環境)
su - clsung
以系統管理者的身份執行指令,也就是說,經由 sudo 所執行的指令就好像是 root 親自執行。
使用許可權:在 /etc/sudoers 中有出現的使用者。
用於顯示當前進程 (process) 的狀態。
ps [options] [--help]
ex:顯示當前全部進程
ps -A 顯示進程信息
用於刪除執行中的程式或工作。
kill可將指定的信息送至程式。預設的信息為SIGTERM(15),可將指定程式終止。若仍無法終止該程式,可使用SIGKILL(9)信息嘗試強制刪除程式。程式或工作的編號可利用ps指令或jobs指令查看。
kill [-s <信息名稱或編號>][程式] 或 kill [-l <信息編號>]
系統設置
用來更改使用者的密碼
passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]
必要參數:
- -d 刪除密碼
- -S 顯示密碼信息
修改用戶信息
$ passwd runoob //設置runoob用戶的密碼
Enter new UNIX password: //輸入新密碼,輸入的密碼無回顯
Retype new UNIX password: //確認密碼
passwd: password updated successfully
#
用於設置或顯示環境變數。
在 shell 中執行程式時,shell 會提供一組環境變數。export 可新增,修改或刪除環境變數,供後續執行的程式使用。export 的效力僅限於該次登陸操作。
export [-fnp][變數名稱]=[變數設置值]
參數說明:
- -f 代表[變數名稱]中為函數名稱。
- -n 刪除指定的變數。變數實際上並未刪除,只是不會輸出到後續指令的執行環境中。
- -p 列出所有的shell賦予程式的環境變數。
set 用來顯示本地變數
env 用來顯示環境變數
export 用來顯示和設置環境變數
備份壓縮
用於壓縮文件。
gzip是個使用廣泛的壓縮程式,文件經它壓縮過後,其名稱後面會多出".gz"的擴展名。
gzip [-acdfhlLnNqrtvV][-S <壓縮字尾字元串>][-<壓縮效率>][--best/fast][文件...]
gzip [-acdfhlLnNqrtvV][-S <壓縮字尾字元串>][-<壓縮效率>][--best/fast][目錄]
參數:
- -q 不顯示指令執行過程。
- -r 遞歸處理,將指定目錄下的所有文件和子目錄一併處理。
- -v 顯示指令執行過程或顯示版本信息。
- -d或--decompress或----uncompress 解開壓縮文件。
用於備份文件。
tar是用來建立,還原備份文件的工具程式,它可以加入,解開備份文件內的文件。
tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <區塊數目>][-C <目的目錄>][-f <備份文件>][-F <Script文件>][-K <文件>][-L <媒體容量>][-N <日期時間>][-T <範本文件>][-V <捲冊名稱>][-X <範本文件>][-<設備編號><存儲密度>][--after-date=<日期時間>][--atime-preserve][--backuup=<備份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<範本樣式>][--force-local][--group=<群組名稱>][--help][--ignore-failed-read][--new-volume-script=<Script文件>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<用戶名稱>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<區塊數目>][--recursive-unlink][--remove-files][--rsh-command=<執行指令>][--same-owner][--suffix=<備份字尾字元串>][--totals][--use-compress-program=<執行指令>][--version][--volno-file=<編號文件>][文件或目錄...]
參數:
- -x或--extract或--get 從備份文件中還原文件。
- -c或--create 建立新的備份文件。
- -t或--list 列出備份文件的內容。
- -z或--gzip或--ungzip 通過gzip指令處理備份文件。
- -v或--verbose 顯示指令執行過程。
- -f<備份文件>或--file=<備份文件> 指定備份文件。
ex:
壓縮文件 非打包
$ touch a.c
tar -czvf test.tar.gz a.c //壓縮 a.c文件為test.tar.gz
a.c
列出壓縮文件內容
$ tar -tzvf test.tar.gz
-rw-r--r-- root/root 0 2010-05-24 16:51:59 a.c
解壓文件
$ tar -xzvf test.tar.gz
a.c
用於壓縮文件。
zip 是個使用廣泛的壓縮程式,壓縮後的文件尾碼名為 .zip。
zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目錄>][-ll][-n <字尾字元串>][-t <日期時間>][-<壓縮效率>][壓縮文件][文件...][-i <範本樣式>][-x <範本樣式>]
用於解壓縮zip文件
unzip為.zip壓縮文件的解壓縮程式。
unzip [-cflptuvz][-agCjLMnoqsVX][-P <密碼>][.zip文件][文件][-d <目錄>][-x <文件>] 或 unzip [-Z]
總結
本文僅簡單解釋shell和記錄部分常見的互動式命令,詳細信息請參考如下引文:
[1] 菜鳥教程-Linux命令
[2] 菜鳥教程-Shell
[3] 百度百科-Shell