當前位置:才華齋>IT認證>Linux認證>

linux shell程式設計的簡介

Linux認證 閱讀(2.61W)

從程式設計師的角度來看, Shell本身是一種用C語言編寫的程式,從使用者的角度來看,Shell是使用者與Linux作業系統溝通的橋樑。使用者既可以輸入命令執行,又可以利用 Shell指令碼程式設計,完成更加複雜的操作。在Linux GUI日益完善的今天,在系統管理等領域,Shell程式設計仍然起著不可忽視的作用。深入地瞭解和熟練地掌握Shell程式設計,是每一個Linux使用者的必修功課之一。

linux shell程式設計的簡介

Linux的Shell種類眾多,常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell語言的語法有所不同,所以不能交換使用。每種Shell都有其特色之處,基本上,掌握其中任何一種就足夠了。在本文中,我們關注的重點是Bash,也就是Bourne Again Shell,由於易用和免費,Bash在日常工作中被廣泛使用;同時,Bash也是大多數Linux系統預設的Shell。在一般情況下,人們並不區分 Bourne Shell和Bourne Again Shell,所以,在下面的文字中,我們可以看到#!/bin/sh,它同樣也可以改為#!/bin/bash。

利用vi等文字編輯器編寫Shell指令碼的格式是固定的,如下:

#!/bin/sh

#comments

Your commands go here

首行中的符號#!告訴系統其後路徑所指定的程式即是解釋此指令碼檔案的Shell程式。如果首行沒有這句話,在執行指令碼檔案的時候,將會出現錯誤。後續的部分就是主程式,Shell指令碼像高階語言一樣,也有變數賦值,也有控制語句。除第一行外,以#開頭的行就是註釋行,直到此行的結束。如果一行未完成,可以在行尾加上",這個符號表明下一行與此行會合併為同一行。

#號開頭的語句是注視行。與C程式設計中的//一樣。

編輯完畢,將指令碼存檔為,檔名字尾sh表明這是一個Bash指令碼檔案。執行指令碼的時候,要先將指令碼檔案的屬性改為可執行的:

chmod +x

執行指令碼的方法是:

./

下面我們從經典的“hello world”入手,看一看最簡單的Shell指令碼的模樣。

#!/bin/sh

#print hello world in the console window

a = "hello world"

echo $a

  Linux認證常用命令及技巧

  一. 通用命令:

1. date :print or set the system date and time

2. stty -a: 可以檢視或者列印控制字元(Ctrl-C, Ctrl-D, Ctrl-Z等)

3. passwd: print or set the system date and time (用passwd -h檢視)

4. logout, login: 登入shell的登入和登出命令

5. pwd: print or set the system date and time

6. more, less, head tail: 顯示或部分顯示檔案內容.

7. lp/lpstat/cancel, lpr/lpq/lprm: 列印檔案.

8. 更改檔案許可權: chmod u+x...

9. 刪除非空目錄:rm -fr dir

10.拷貝目錄: cp -R dir

11. fg jobid :可以將一個後臺程序放到前臺。

Ctrl-z 可以將前臺程序掛起(suspend), 然後可以用bg jobid 讓其到後臺執行。

job & 可以直接讓job直接在後臺執行。

12. kill 的作用: send a signal to a process. eg: kill -9 傳送的是SIG_KILL訊號。。。 具體傳送什麼訊號 可以通過 man kill 檢視。

13. ps 的用法, ps -e 或 ps -o pid,ppid,session,tpgid, comm (其中session顯示的sessionid, tpgid顯示前臺程序組id, comm顯示命令名稱。)

  二 tu常用命令:

1. dpkg: package manager for Debian

* 安裝: dpkg -i package

* 解除安裝: dpkg -r package

* 解除安裝並刪除配置檔案: dpkg -P |--purge package

* 如果安裝一個包時。說依賴某些庫。 可以先 apt-get install somelib...

* 檢視軟體包安裝內容 :dpkg -L package

* 檢視檔案由哪個軟體包提供: dpkg -S filename

* 另外 dpkg還有 dselect和aptitude 兩個frontend.

2. apt

* 安裝: apt-get install packs

* apt-get update : 更新源

* apt-get upgrade: 升級系統。

* apt-get dist-upgrade: 智慧升級。安裝新軟體包,刪除廢棄的軟體包

* apt-get -f install : -f == --fix broken 修復依賴

* apt-get autoremove: 自動刪除無用的軟體

* apt-get remove packages :刪除軟體

* apt-get remove package --purge 刪除包並清除配置檔案

* 清除所以刪除包的殘餘配置檔案: dpkg -l |grep ^rc|awk '{print $2}' |tr ["/n"] [" "]|sudo xargs dpkg -P

* 安裝軟體時候包的臨時存放目錄 : /var/cache/apt/archives

* 清除該目錄: apt-get clean

* 清除該目錄的舊版本的軟體快取: apt-get autoclean

* 查詢軟體some的依賴包: apt-cache depends some

* 查詢軟體some被哪些包依賴: apt-get rdepends some

* 搜尋軟體: apt-cache search name|regexp

* 檢視軟體包的作用:apt-cache show package

* 檢視一個軟體的編譯依賴庫: apt-cache showsrc packagename|grep Build-Depends

* 下載軟體的原始碼 : apt-get source packagename (注: 中應該有 deb-src 源)

* 安裝軟體包原始碼的同時, 安裝其編譯環境 :apt-get build-dep packagename (有deb-src源)

* 如何將本地光碟加入安裝源列表: apt-cdrom add

3. 系統命令:

* 檢視核心版本: uname -a

* 檢視ubuntu 版本: cat /etc/issue

* 檢視網絡卡狀態 : ethtool eth0

* 檢視記憶體,cpu的資訊: cat /proc/meminfo ; cat /proc/cpuinfo

(/proc下面的有很多系統資訊)

* 列印檔案系統空間使用情況: df -h

* 檢視硬碟分割槽情況: fdisk -l

* 產看檔案大小: du -h filename;

* 檢視目錄大小: du -hs dirname ; du -h dirname是檢視目錄下所有檔案的大小

* 檢視記憶體的使用: free -m|-g|-k

* 檢視程序: ps -e 或ps -aux -->顯示使用者

* 殺掉程序: kill pid

* 強制殺掉: killall -9 processname

4. 網路相關:

* 配置 ADSL: sudo pppoeconf

* ADSL手工撥號: sudo pon dsl-provider

* 啟用 ADSL : sudo /etc/ppp/pppoe_on_boot

* 斷開 ADSL: sudo poff

* 根據IP查網絡卡地址: arping IP地址

* 產看本地網路資訊(包括ip等): ifconfig | ifconfig eth0

* 檢視路由資訊: netstat -r

* 關閉網絡卡: sudo ifconfig eth0 down

* 啟用網絡卡: sudo ifconfig eth0 up

* 新增一個服務: sudo update-rc.d 服務名 defaults 99

* 刪除一個服務: sudo update-rc.d 服務名 remove

* 臨時重啟一個服務: /etc/init.d/服務名 restart

* 臨時關閉一個服務: /etc/init.d/服務名 stop

* 臨時啟動一個服務: /etc/init.d/服務名 start

* 控制檯下顯示中文: sudo apt-get install zhcon

* 查詢某個檔案: whereis filename 或 find 目錄 -name 檔名

*通過ssh傳輸檔案

scp -rp /path/filename username@remoteIP:/path #將本地檔案拷貝到伺服器上

scp -rp username@remoteIP:/path/filename /path #將遠端檔案從伺服器下載到本地

5. 壓縮:

*解壓縮 : tar zxvf

*解壓縮 2: tar jxvf 2

*壓縮aaa bbb目錄為: tar zcvf aaa bbb

*壓縮aaa bbb目錄為2: tar jcvf 2 aaa bbb

6. Nautilus:

特殊 URI 地址

* computer:/// - 全部掛載的裝置和網路

* network:/// - 瀏覽可用的網路

* burn:/// - 一個燒錄 CDs/DVDs 的資料虛擬目錄

* smb:/// - 可用的 windows/samba 網路資源

* x-nautilus-desktop:/// - 桌面專案和圖示

* file:/// - 本地檔案

* trash:/// - 本地回收站目錄

* ftp:// - FTP 資料夾

* ssh:// - SSH 資料夾

* fonts:/// - 字型資料夾,可將字型檔案拖到此處以完成安裝

* themes:/// - 系統主題資料夾

* 顯示隱藏檔案: Ctrl+h

* 顯示位址列: Ctrl+l

* 檢視已安裝字型: 在nautilus的位址列裡輸入”fonts:///“,就可以檢視本機所有的fonts

7.補充部分:

* 檢視本地所有的tpc,udp監聽埠: netstat -tupln (t=tcp, u=udp, p=program, l=listen, n=numric)

* 通過man搜說相關命令: man -k keyword . eg: man -k user

* 或者用 apropos

* 統計檔案所佔用的實際磁碟空間: du (du - estimate file space usage)

* 統計檔案中的字元,位元組數: wc -c/-l/-w (wc - print the number of newlines, words, and bytes in files)

* 檢視檔案的內容: od -x/-c/.... (od - dump files in octal and other formats)

我認為od最有用的就是檔案的位元組流了: od -t x1 filename

檢視檔案的 Ascii 碼形式: od -t c filename (其中統計資訊最左邊的是: 位元組數)

* 查詢命令所在檔案的位置: which od 輸出: /usr/bin/od

檢視該檔案由哪個包提供: dpkg -S /usr/bin/od 輸出: coreutils: /usr/bin/od

再檢視coreutils包的'全部內容就知道了linux的核心命令: dpkg -L coreutils

然後 info coreutils 哈哈,認真學吧, 滿世界都是命令!

* 可以用man 命令產看某個命令的所有section 的解釋: man -a tty

然後用q,和next 轉換到下一個section的解釋

* bash 的好用的快捷鍵:

ctrl+a:游標移到行首。

ctrl+b:游標左移一個字母

ctrl+c:殺死當前程序。

ctrl+d:退出當前 Shell。

ctrl+e:游標移到行尾。

ctrl+h:刪除游標前一個字元,同 backspace 鍵相同。

ctrl+k:清除游標後至行尾的內容。

ctrl+l:清屏,相當於clear。

ctrl+r:搜尋之前打過的命令。會有一個提示,根據你輸入的關鍵字進行搜尋bash的history

ctrl+u: 清除游標前至行首間的所有內容。

ctrl+w: 移除游標前的一個單詞

ctrl+t: 交換游標位置前的兩個字元

ctrl+y: 貼上或者恢復上次的刪除

ctrl+d: 刪除游標所在字母;注意和backspace以及ctrl+h的區別,這2個是刪除游標前的字元

ctrl+f: 游標右移

ctrl+z : 把當前程序轉到後臺執行,使用’ fg ‘命令恢復。比如top -d1 然後ctrl+z ,到後臺,然後fg,重新恢復

* 快速貼上:先在一個地方選中文字,在欲貼上的地方按滑鼠 中鍵 即可。

* 等效中鍵:a 、按下滑輪等效於中鍵。b、同時按下滑鼠 左右鍵,等效於中鍵。

* 快速重啟X服務: 同時按下: Alt + Ctrl + Backspace 三個鍵。

* 開啟"執行"視窗: 同時按下 Alt + F2 鍵。

* 戴屏: a、全屏:直接按下 PrtScr 鍵。

b、當前視窗:同時按下 Alt + PrtScr 鍵。

c、延時戴屏:在 終端 或 "執行"視窗中輸入命令: gnome-screenshot --delay 3 ,將延時 3 秒後戴屏。

* 直接將 檔案管理器 中的檔案拖到 GNOME終端 中就可以在終端中得到完整的路徑名。 it

ulimit:顯示(或設定)使用者可以使用的資源的限制(limit),這限制分為軟限制(當前限制)和硬限制(上限),其中硬限制是軟限制的上限值,應用程式在執行過程中使用的系統資源不超過相應的軟限制,任何的超越都導致程序的終止。

ulimited 不限制使用者可以使用的資源,但本設定對可開啟的最大檔案數(max open files)

和可同時執行的最大程序數(max user processes)無效

-a 列出所有當前資源極限

-c 設定core檔案的最大值.單位:blocks

-d 設定一個程序的資料段的最大值.單位:kbytes

-f Shell 建立檔案的檔案大小的最大值,單位:blocks

-h 指定設定某個給定資源的硬極限。如果使用者擁有 root 使用者許可權,可以增大硬極限。任何使用者均可減少硬極限

-l 可以鎖住的實體記憶體的最大值

-m 可以使用的常駐記憶體的最大值,單位:kbytes

-n 每個程序可以同時開啟的最大檔案數

-p 設定管道的最大值,單位為block,1block=512bytes

-s 指定堆疊的最大值:單位:kbytes

-S 指定為給定的資源設定軟極限。軟極限可增大到硬極限的值。如果 -H 和 -S 標誌均未指定,極限適用於以上二者

-t 指定每個程序所使用的秒數,單位:seconds

-u 可以執行的最大併發程序數

-v Shell可使用的最大的虛擬記憶體,單位:kbytes

eg: ulimit -c 1000(可以先通過ulimit -c 檢視原來的值)