說明:如果您有任何疑問或想咨詢其他業(yè)務請撥打電話 400 685 0732
全網監(jiān)測海量數據按需發(fā)布監(jiān)測預警
實時把握輿情動態(tài)精準追溯信息源頭
一個系統(tǒng)當中操作系統(tǒng)就是一個系統(tǒng)資源的管理者和分配者,而這操作的過程當中就一定是要到一些程序,其中有一種包括具有輸入設備讀取命令作用的shell編程??墒莝hell編程到底是什么呢?接下來我們就一起來好好的了解一下吧。
shell編程——shell編程是什么
讀過操作系統(tǒng)概論的讀者們都知道操作系統(tǒng)是一個系統(tǒng)資源的管理者與分配者,當您有需求時,您得向系統(tǒng)提出;從操作系統(tǒng)的角度來看,它也必須防止使用者因為錯誤的操作而造成系統(tǒng)的傷害?眾所周知,對計算機下命令得通過命令(command)或是程序(program);程序有編譯器(compiler)將程序轉為二進制代碼,可是命令呢?
其實shell也是一支程序,它由輸入設備讀取命令,再將其轉為計算機可以了解的機械碼,然后執(zhí)行它。各種操作系統(tǒng)都有它自己的shell,以DOS為例,它的shell就是command.com文件。如同DOS下有NDOS,4DOS,DRDOS等不同的命令解譯程序可以取代標準的command.com,UNIX下除了Bourneshell(/bin/sh)外還有Cshell(/bin/csh)、Kornshell(/bin/ksh)、Bourneagainshell(/bin/bash)、TenexCshell(tcsh)等其它的shell。UNIX/linux將shell獨立于核心程序之外,使得它就如同一般的應用程序,可以在不影響操作系統(tǒng)本身的情況下進行修改、更新版本或是添加新的功能。
shell是計算機用來解釋你輸入的命令然后決定進行何種處理的程序。shell也可以在非交互模式下調用。舉個例子,可以把一些要輸入的命令預先存放在文本文件里(叫做shell腳本)然后執(zhí)行該文件??梢园裺hell看作是DOS下面的command.com(命令行解釋器),而shell腳本就象是DOS的批處理文件(*.bat)。和DOS相比較,shell的功能要先進和豐富得多。
shell編程中/dev和/proc目錄怎么用
dev目錄是系統(tǒng)中集中用來存放設備文件的目錄。除了設備文件以外,系統(tǒng)中也有不少特殊的功能通過設備的形式表現出來。設備文件是一種特殊的文件,它們實際上是驅動程序的接口。在Linux操作系統(tǒng)中,很多設備都是通過設備文件的方式為進程提供了輸入、輸出的調用標準,這也符合UNIX的“一切皆文件”的設計原則。所以,對于設備文件來說,文件名和路徑其實都不重要,最重要的使其主設備號和輔助設備號,就是用ls-l命令顯示出來的原本應該出現在文件大小位置上的兩個數字,比如下面命令顯示的8和0:
[zorro@zorrozou-pc0bash]$ls-l/dev/sda
brw-rw—-1rootdisk8,05月1210:47/dev/sda
設備文件的主設備號對應了這種設備所使用的驅動是哪個,而輔助設備號則表示使用同一種驅動的設備編號。我們可以使用mknod命令手動創(chuàng)建一個設備文件:
[zorro@zorrozou-pc0bash]$sudomknodharddiskb80
[zorro@zorrozou-pc0bash]$ls-lharddisk
brw-r–r–1rootroot8,05月1809:49harddisk
這樣我們就創(chuàng)建了一個設備文件叫harddisk,實際上它跟/dev/sda是同一個設備,因為它們對應的設備驅動和編號都一樣。所以這個設備實際上是跟sda相同功能的設備。
系統(tǒng)還給我們提供了幾個有特殊功能的設備文件,在bash編程的時候可能會經常用到:
/dev/null:黑洞文件??梢詫λ囟ㄏ蛉绾屋敵?。
/dev/zero:0發(fā)生器??梢援a生二進制的0,產生多少根使用時間長度有關。我們經常用這個文件來產生大文件進行某些測試,如:
[zorro@zorrozou-pc0bash]$ddif=/dev/zeroof=./bigfilebs=1Mcount=1024
1024+0recordsin
1024+0recordsout
1073741824bytes(1.1GB,1.0GiB)copied,0.3501s,3.1GB/s
dd命令也是我們在bash編程中可能會經常使用到的命令。
/dev/random:Linux下的random文件是一個根據計算機背景噪聲而產生隨機數的真隨機數發(fā)生器。所以,如果容納噪聲數據的熵池空了,那么對文件的讀取會出現阻塞。
/dev/urandom:是一個偽隨機數發(fā)生器。實際上在Linux的視線中,urandom產生隨機數的方法根random一樣,只是它可以重復使用熵池中的數據。這兩個文件在不同的類unix系統(tǒng)中可能實現方法不同,請注意它們的區(qū)別。
/dev/tcp&/dev/udp:這兩個神奇的目錄為bash編程提供了一種可以進行網絡編程的功能。在bash程序中使用/dev/tcp/ip/port的方式就可以創(chuàng)建一個scoket作為客戶端去連接服務端的ip:port。我們用一個檢查http協(xié)議的80端口是否打開的例子來說明它的使用方法:
[zorro@zorrozou-pc0bash]$cattcp.sh
#!/bin/bash
ipaddr=127.0.0.1
port=80
if!exec5<>/dev/tcp/$ipaddr/$port
then
exit1
fi
echo-e”GET/HTTP/1.0\n”>&5
cat<&5
ipaddr的部分還可以寫一個主機名。大家可以用此腳本分別在本機打開web服務和不打開的情況下分別執(zhí)行觀察是什么效果。
/proc是另一個我們經常使用的目錄。這個目錄完全是內核虛擬的。內核將一些系統(tǒng)信息都放在/proc目錄下一文件和文本的方式顯示出來,如:/proc/cpuinfo、/proc/meminfo。我們可以使用man5proc來查詢這個目錄下文件的作用。
以上就是有關shell編程的所有內容,那就只是shell編程一小部分的內容,如果大家還想要學習更多的可以去網絡上搜索更多的資料,或者是買一本專門學習該編程的書籍。如果大家對此想要有一個更深入的了解,歡迎關注我們文軍營銷的官網。
推薦閱讀
說明:如果您有任何疑問或想咨詢其他業(yè)務請撥打電話 400 685 0732