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