traplinux
linux中有trap命令可以攔截到ctrl+c信號並忽略它:
使用命令kill -l可以列出系統的信號名稱,通常我們需要忽略的信號有四個,即:HUP, INT, QUIT, TSTP,也就是信號1, 2, 3, 24;
QUIT即信號3就是表示操作CTRL+C;
trap的使用格式為:
trap 操作 信號名稱
例如: trap "echo iuioooo" 3 表示捕獲到信號3(ctrl+c)時並不會退出而是會 執行命令echo iuioooo;
同樣可以trap "" 3 表示什麼也不操作。
使用 trap 3 來使其恢復默認設置。
⑵ 黑客網路新手指南翻譯大全 黑客網路Hacknet新手怎麼玩
黑客網路Hacknet你會玩了嗎?小夥伴們是不是正在為看不懂英文而煩惱呢,不要煩惱,今日小編為大家帶來最全的新手指南,全中文翻譯哦,感興趣的玩家趕緊來看看吧!
Basic Tips 基礎竅門
***IMPORTANT*** Some computers/servers may have different names on them, but what you need to do should be the same. Just follow the steps, you will be fine.
***非常重要*** 有些電腦/伺服器可能有不同的名字,但你所要做的應該相同。遵循如下步驟,您就不會有問題。
DON'T abandon any missions atm!! It will most likey cause serious problems and make you unable to finish the game!
眼下,***請勿***放棄任何任務!!這很可能導致嚴重問題並最終無法完成游戲,毀掉您的存檔!
1, Type commands as soon as possible.
2, Delete logs when you disconnect.
3, You need to reply almost every time you finish a mission.
4, Always use "Scan Network" option when you successfully hack a computer.
5, Don't delete/rename files unnecessarily. <-This is important!!
6, Use auto-complete for commands and file names. (Tab key)
7, Always use "admin" "alpine" to log in to any eos devices.
1.盡速輸入指令。(譯者:更要善用Tab)
2.斷線前別忘了刪log。(譯者:雖然我不刪也沒有什麼麻煩……)
3.不要忘了完成任務時回復郵件。(極少數情況不需要)
4.成功駭入電腦時總掃描一遍主機。(譯者:★★★★★推薦)
5.無必要時不要刪除/重命名任何文件!<—十分重要。
6.使用「自動拼寫」(Tab鍵)輸入指令及文件名。
7.不要忘了「admin」「alpine」這神奇的eos設備賬戶。
譯者:即使你希望獨立完成游戲,我也非常推薦您閱讀這些提示,它們非常有用。另外我在此補充幾條。
(但願我沒記錯……)
1.SQL的入侵工具和KBT,即104埠入侵工具可以忽視Proxy和Firewall。
2.Firewall和Proxy的破解是獨立的,你可以一邊破解proxy一邊analysis。更有甚者,用Tracekill可以允許您慢悠悠地破解完Firewall,再攻破proxy。
3.在shell里按overload破解proxy,對吧?然而如果內存不足,這些窗口會折疊,並在內存足夠時展開。(如果我說的不清楚,可以試著在您的電腦上運行一堆shell並點按trap,然後關掉其中一個窗口。)除了略有點壯觀以外,這是個「儲存」足夠多shell的小技巧。
4.不過,5~7個shell一般夠了。
5.在幾次analyze後彈出的幾行文字里應該會各有一個字元,如果某一行里全是」0」怎麼辦?有時這意味著所對應的代碼就是0。例如:(只是示範)
0 0 0 0 0 0 0 0 0 0 2 0 0 0
0 0 0 0 0 5 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
結果就是250。(我才不是250呢!)
Troubleshooting Common Problems
Q, I don't get an email to start a new mission!! What do I do now!?
A, Make sure to check following things:
1, Your previous mission has finished. (Click "Reply" in the email for it and see if "Mission Incomplete" message shows up.)
2, You don't have any available missions in your current faction's contracts server. (Or the message board if you're working on /el missions.)
3, Restart your game and your problem is still there.
常見問題解決方案。(疑難雜症)
Q:我得不到開始新任務的郵件!!我該怎麼辦!
A:出門檢查您的郵筒(劃掉)。請確認您已檢查過以下條件。
1.你上一個的任務已完成。[嘗試點按郵件中的「Reply」(回復)看會不會出現「Mission incomplete」(任務未完成)。]
2.在您現在所處的派系(Entropy,CSEC,…)沒有可用的任務,或者
在/el任務里信息板上沒有任務。
3.重啟游戲問題仍存在。
For "gg wp" from Naix, you need to revenge Naix BEFORE you start any new Entropy mission. Details in "Naix Missions" section below.
對於Naix的「友善問好」,你要在完成Entropy任務***之前***對Naix報仇。下面的「Naix任務」一欄會給您幫助。
If none of these helps you, you might have had a critical bug... The devs are working on an update to fix many bugs, so wait for it... Meanwhile, you still can try 2 options:
1, Editing your save data (Here's the link: http:// http://steamcommunity.com/sharedfiles/filedetails/?id=500893610 Be super careful with your savedata.)
2, Start a new session (This is much easier... You also can work on achievements that you missed.)
若以上幾條都不起作用,您已無葯可救了(劃掉)。您可能遇到了一個嚴重的bug(您不會連bug也不知道吧?)。開發者們(們?)在致力於更新游戲以修正bug。所以只能等了。
在此時,您可以嘗試以下方法。
1.編輯您的存檔。(敬參閱{鏈接已刪除}請特別小心對待您的存檔)
2.再開個存檔。(不僅簡單多了,還可以去做您以前忽略的成就。)
Q, I don't have the necessary exe file to do this mission!! UGGHHHH
A, Here is the list of exe files, and in which mission you can find them. Use "CTRL+F" on this guide and search for them.
Q.我怎麼沒有做任務所需的工具!!啊啊啊!!
A.這是exe文件列表及其來源,用"CTRL+F"在這指南里搜索一下。
SecurityTracer.exe - "First Contact", or on "Credit Server" after you finish the game.
SSHcrack.exe (for port 22) - "Getting Some tools together"
ftpBounce.exe (for port 21) - "Welcome"
eosDeviceScan.exe (for finding eos device) - "eOS Device Scanning"
SMTPoverflow.exe (for port 25) - "Aggression must be punished"
WebServerWorm.exe (for port 80) - "***Revenging Naix***", or "CSEC Invitation"
SQLBufferOverflow.exe (for port 1433) - "-Shrine of Polar Star-"
SQL_MemCorrupt.exe (for port 1433) - "CSEC Invitation - Congratulations"
Decypher.exe (for decrypting files) - "Ghosting the Vault"
DECHead.exe (for analyzing .dec files) - "Through the Spyglass"
KBT_PortTest.exe (for port 104) - "Project Junebug"
TraceKill.exe (for freezing traces) - "Bit -- Foundation"
Sequencer.exe (for the final hacking) - "Bit -- Termination"
Clock.exe (Um...just a clock app) - Read "-Finding Clock.exe-"
SecurityTracer.exe(安全追蹤程序) -來自 "First Contact"(第一次溝通), 或在完成游戲時的"Credit Server" (榮譽伺服器)上。
SSHcrack.exe (ssh協議破解器)(適用埠 22) - "Getting Some tools together"(收集些工具)
FTPBounce.exe (ftp「跳轉攻擊」破解器)(適用埠21) - "Welcome"(歡迎)
eosDeviceScan.exe(eos設備搜尋器) (適用尋找eos設備) - "eOS Device Scanning"(搜尋eos設備)
SMTPoverflow.exe(郵件過載破解器) (適用埠25) - "Aggression must be punished"(侵略者必將受懲處)
WebServerWorm.exe (網路蠕蟲破解器)(適用埠80) - "***Revenging Naix***"(向Naix復仇 譯者:這不是一個官方給出的任務名,我沒記錯的話。), or "CSEC Invitation"(CSEC誠邀您到來)
SQLBufferOverflow.exe (SQL內存緩沖區過載破解器)(適用埠1433) - "-Shrine of Polar Star-"(北極星聖地)
SQL_MemCorrupt.exe(SQL_內存錯誤破解器) (for port 1433) - "CSEC Invitation - Congratulations"(CSEC邀請-祝賀!)
(譯者:根據另一個指南,這兩個SQL破解器完全一樣。)
Decypher.exe (解密器)(適用解密文件) - "Ghosting the Vault"[拱頂鬼神(?)]
DECHead.exe (十六進制文件頭查看器/加密文件查看器?)(適用分析加密文件) - "Through the Spyglass"(通過望遠鏡)
KBT_PortTest.exe[KBT埠測試器(其實也是破解器。)] (適用埠104) - "Project Junebug"(Junebug項目)
TraceKill.exe(阻止追蹤) (適用凍結追蹤) - "Bit -- Foundation"(Bit-支柱)
Sequencer.exe(排序器) (適用最後駭入) - "Bit -- Termination"(Bit-終局)
Clock.exe (鍾)(Hmm…只是個鍾的軟體) - Read "-Finding Clock.exe-"(敬參閱「尋找『Clock.exe』」)
For KBT_PortTest.exe, you can try this method if you don't get "Project Junebug" unlocked, or mistakenly abandoned it. Thank you, Elsarild!
對於KBT_PortTest.exe,若您沒有解鎖「Junebug項目」,或失誤取消了這個任務,可以試試這個方法。謝謝您,Elsarild!
http:// http://steamcommunity.com/sharedfiles/filedetails/?id=500893610
Q, I can't use this command somehow!! Fuuuuuuuuuuuuuuu
A, Make sure to check if you already have the necessary exe for the command, then try typing commands like below:
Q,由於某種原因我沒法用這命令!(根據相關法律法規和政策,該信息不予公布)
A,確認您已具備所需的軟體,然後根據以下範例輸入命令。
譯者:Hacknet的命令似乎更接近Linux。
Command Template - Example
命令 樣板 - 範例
scp [the file's name] - scp index.html
connect [the IP address] - connect 103.33.8.643
cd [the folder path] - cd /log
replace [the file's name] "[target words]" "[your words]" - replace template.txt "[FIRST_NAME]" "John"
(If you use "cat" and open the file, you can use 'replace "[FIRST_NAME]" "John" ' instead. Use the full command above if you get "Assuming active flag file" error.)
Decypher [the file's name] [its password] - Decypher naix_secrets.dec D1CKS
DECHead [the file's name] - DECHead naix_private_photos.dec
mv [target's name] [new name] - mv template.txt Boorman_John[111]
scp (文件傳輸)[the file's name(文件名)] - scp index.html
connect(連接) [the IP address(IP地址)] - connect 103.33.8.643
cd (改變目錄)[the folder path(文件地址)] - cd /log
replace(替換) [the file's name(文件名)] "[target words(文件中目標文字)]" "[your words(你想要替代它的文字)]" - replace template.txt "[FIRST_NAME]" "John"
[若您使用cat打開文件,你可以使用以下命令:「replace "[FIRST_NAME]" "John"」,若得到"Assuming active flag file"(譯者:我對這句實在沒轍……抱歉……)錯誤則打全整條命令。]
Decypher [the file's name(文件名)] [its password(其密碼,有時沒有)] - Decypher naix_secrets.dec D1CKS
mv(移動) [target's name(目標文件名)] [new name(新名)] - mv template.txt Boorman_John[111]
http://jiahao..com/s?id=1562388024263764&wfr=spider&for=pc
⑶ Linux內核調試工具KGDB
內核工具KGDB調試環境需要為Linux 內核加上 kgdb補丁,補丁實現GDB遠程調試所需要的功能,包括命令處理、陷阱處理及串口通信3個主要的部分。KGDB補丁的主要作用是在Linux 內核中添加了一個調試Stub。調試Stub是Linux 內核中的一小段代碼,是運行GDB的開發機和所調試內核之間的一個媒介。GDB和調試stub之間通過GDB串列協議進行通信。GDB串列協議是-種基於消息的ASCII 碼協議,包含了各種調試命令。當設置斷點時,KGDB將斷點的指令替換為一條 trap指令,當執行到斷點時控制權就轉移到調試 stub中去。此時,調試stub 的任務就是使用遠程串列通信協議將當前環境傳送給GDB,然後從GDB處接收命令。GDB命令告訴stub 下一步該做什麼,當stub收到繼續執行的命令時,將恢復程序的運行環境,把對 CPU的控制權重新交還給內核。KGDB補丁給內核添加以下3個部件:
(1 ) GDB stub
GDB stub被稱為調試插樁(簡稱為stub),是KGDB調試器的核心。它是Linux內核中的一小段代碼,用來處理主機上: GDB發來的各種請求;並且在內核處於被調試狀態時,控制目標機板上的處理器。
(2)修改異常處理函數
當這個異常發生時,內核將控制權交給KGDB調試器,程序進入KGDB提供的異常處理函數中。在裡面,可以分析程序的各種情況。
(3)串口通信
GDB和 stub之間通過GDB串列協議進行通信。它是一種基於消息的ASCII 碼協議,包含了各種調試命令。除串口外,也可以使用網卡進行通信。以設置內核斷點為例說明KGDB與GDB之間的工作過程。設置斷點時,KGDB修改內核代碼,將斷點位置的指令替換成一條異常指令(在ARM中這是一條未定義的指令)。當執行到斷點時發生異常,控制權轉移到stub 的異常處理函數中。此時,stub的任務就是使用GDB串列通信協議將當前環境傳送給GDB,然後從GDB處接收命令,GDB命令告訴stub下一步該做什麼。當stub收到繼續執行的命令時,將恢復原來替換的指令、恢復程序的運行環境,把對CPU的控制權重新交還給內核。
⑷ linux中系統定義的64種信號分別什麼意思
編號為1 ~ 31的信號為傳統UNIX支持的信號,是不可靠信號(非實時的),編號為32 ~ 63的信號是後來擴充的,稱做可靠信號(實時信號)。不可靠信號和可靠信號的區別在於前者不支持排隊,可能會造成信號丟失,而後者不會。
下面我們對編號小於SIGRTMIN的信號進行討論。
1) SIGHUP
本信號在用戶終端連接(正常或非正常)結束時發出, 通常是在終端的控制進程結束時, 通知同一session內的各個作業, 這時它們與控制終端不再關聯。
登錄Linux時,系統會分配給登錄用戶一個終端(Session)。在這個終端運行的所有程序,包括前台進程組和後台進程組,一般都屬於這個Session。當用戶退出Linux登錄時,前台進程組和後台有對終端輸出的進程將會收到SIGHUP信號。這個信號的默認操作為終止進程,因此前台進程組和後台有終端輸出的進程就會中止。不過可以捕獲這個信號,比如wget能捕獲SIGHUP信號,並忽略它,這樣就算退出了Linux登錄,wget也能繼續下載。
此外,對於與終端脫離關系的守護進程,這個信號用於通知它重新讀取配置文件。
2) SIGINT
程序終止(interrupt)信號, 在用戶鍵入INTR字元(通常是Ctrl-C)時發出,用於通知前台進程組終止進程。
3) SIGQUIT
和SIGINT類似, 但由QUIT字元(通常是Ctrl-\)來控制. 進程在因收到SIGQUIT退出時會產生core文件, 在這個意義上類似於一個程序錯誤信號。
4) SIGILL
執行了非法指令. 通常是因為可執行文件本身出現錯誤, 或者試圖執行數據段. 堆棧溢出時也有可能產生這個信號。
5) SIGTRAP
由斷點指令或其它trap指令產生. 由debugger使用。
6) SIGABRT
調用abort函數生成的信號。
7) SIGBUS
非法地址, 包括內存地址對齊(alignment)出錯。比如訪問一個四個字長的整數, 但其地址不是4的倍數。它與SIGSEGV的區別在於後者是由於對合法存儲地址的非法訪問觸發的(如訪問不屬於自己存儲空間或只讀存儲空間)。
8) SIGFPE
在發生致命的算術運算錯誤時發出. 不僅包括浮點運算錯誤, 還包括溢出及除數為0等其它所有的算術的錯誤。
9) SIGKILL
用來立即結束程序的運行. 本信號不能被阻塞、處理和忽略。如果管理員發現某個進程終止不了,可嘗試發送這個信號。
10) SIGUSR1
留給用戶使用
11) SIGSEGV
試圖訪問未分配給自己的內存, 或試圖往沒有寫許可權的內存地址寫數據.
12) SIGUSR2
留給用戶使用
13) SIGPIPE
管道破裂。這個信號通常在進程間通信產生,比如採用FIFO(管道)通信的兩個進程,讀管道沒打開或者意外終止就往管道寫,寫進程會收到SIGPIPE信號。此外用Socket通信的兩個進程,寫進程在寫Socket的時候,讀進程已經終止。
14) SIGALRM
時鍾定時信號, 計算的是實際的時間或時鍾時間. alarm函數使用該信號.
15) SIGTERM
程序結束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程序自己正常退出,shell命令kill預設產生這個信號。如果進程終止不了,我們才會嘗試SIGKILL。
17) SIGCHLD
子進程結束時, 父進程會收到這個信號。
如果父進程沒有處理這個信號,也沒有等待(wait)子進程,子進程雖然終止,但是還會在內核進程表中佔有表項,這時的子進程稱為僵屍進程。這種情況我們應該避免(父進程或者忽略SIGCHILD信號,或者捕捉它,或者wait它派生的子進程,或者父進程先終止,這時子進程的終止自動由init進程來接管)。
18) SIGCONT
讓一個停止(stopped)的進程繼續執行. 本信號不能被阻塞. 可以用一個handler來讓程序在由stopped狀態變為繼續執行時完成特定的工作. 例如, 重新顯示提示符
19) SIGSTOP
停止(stopped)進程的執行. 注意它和terminate以及interrupt的區別:該進程還未結束, 只是暫停執行. 本信號不能被阻塞, 處理或忽略.
20) SIGTSTP
停止進程的運行, 但該信號可以被處理和忽略. 用戶鍵入SUSP字元時(通常是Ctrl-Z)發出這個信號
21) SIGTTIN
當後台作業要從用戶終端讀數據時, 該作業中的所有進程會收到SIGTTIN信號. 預設時這些進程會停止執行.
22) SIGTTOU
類似於SIGTTIN, 但在寫終端(或修改終端模式)時收到.
23) SIGURG
有"緊急"數據或out-of-band數據到達socket時產生.
24) SIGXCPU
超過CPU時間資源限制. 這個限制可以由getrlimit/setrlimit來讀取/改變。
25) SIGXFSZ
當進程企圖擴大文件以至於超過文件大小資源限制。
26) SIGVTALRM
虛擬時鍾信號. 類似於SIGALRM, 但是計算的是該進程佔用的CPU時間.
27) SIGPROF
類似於SIGALRM/SIGVTALRM, 但包括該進程用的CPU時間以及系統調用的時間.
28) SIGWINCH
窗口大小改變時發出.
29) SIGIO
文件描述符准備就緒, 可以開始進行輸入/輸出操作.
30) SIGPWR
Power failure
31) SIGSYS
非法的系統調用。
在以上列出的信號中,程序不可捕獲、阻塞或忽略的信號有:SIGKILL,SIGSTOP
不能恢復至默認動作的信號有:SIGILL,SIGTRAP
默認會導致進程流產的信號有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
默認會導致進程退出的信號有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
默認會導致進程停止的信號有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
默認進程忽略的信號有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH
此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在進程掛起時是繼續,否則是忽略,不能被阻塞
⑸ 各位師傅:求教 1.linux下怎麼統計網站的訪問量2.linux下怎樣設置snmp的trap目標
Linux使用的文件系統是ext2/ext3,你在xp下當然看不到。
如果需要在linux下可以共享xp的磁碟,就看你的xp分區磁碟是什麼文件系統了。
如果是fat32,那麼在linux下:
mkdir /xpdisk
mount -t vfat /dev/hdax /xpdisk
Linux下分區表示法如下,比如hda是第一個IDE的master,那麼hda1就是該介面的第一個分區。所以按照這種情況針對你的電腦類推。
若能夠掛載,則cd /xpdisk訪問該分區。
訪問完成記得umount /xpdisk
如果你的xp文件系統是ntfs,那麼恐怕只能編譯內核和藉助第三方軟體了。
⑹ 求教linux下如何配置snmp trap
安裝snmp服務
CentOS/RedHat下可以只用yum命令進行安裝。
$ yum –y install net-snmp net-snmp-devel
若要使用snmpwalk進行安裝檢測,則還需要安裝net-snmp-utils包
$ yum –y install net-snmp-utils
Ubuntu可以通過apt-get install snmp snmpd 進行安裝
設置安全的驗證方式
將SNMP代理程序暴露給網路上的所有主機是很危險的,為了防止其它主機訪問您的SNMP代理程序,我們需要在SNMP代理程序上加入身份驗證機制。SNMP支持不同的驗證機制,這取決於不同的SNMP協議版本,雲監控目前支持v2c和v3兩個版本,其中v2c版本的驗證機制比較簡單,它基於明文密碼和授權IP來進行身份驗證,而v3版本則通過用戶名和密碼的加密傳輸來實現身份驗證,我們建議使用v3,當然,只要按照以下的介紹進行配置,不論是v2c版本還是v3版本,都可以保證一定的安全性,您可以根據情況來選擇。
注意一點,SNMP協議版本和SNMP代理程序版本是兩回事,剛才說的v2c和v3是指SNMP協議的版本,而Net-SNMP是用來實現SNMP協議的程序套件,目前它的最新版本是剛才提到的5.4.2.1。
v2c
先來看如何配置v2c版本的SNMP代理,我們來創建snmpd的配置文件,默認情況下它是不存在的,我們來創建它,如下:
sdo:~ # vi /usr/local/snmp/share/snmp/snmpd.conf
然後我們需要創建一個只讀帳號,也就是read-only community,在snmpd.conf中添加以下內容:
rocommunity sdomonitor 114.80.132.9 rocommunity sdomonitor 58.215.169.26 rocommunity sdomonitor 58.215.169.27
如果想要檢測服務是否成功開啟,則還需要在snmpd.conf中添加:
rocommunity sdomonitor 127.0.0.1
注意,這里的"rocommunity"表示這是一個只讀的訪問許可權,雲監控只可以從您的伺服器上獲取信息,而不能對伺服器進行任何設置。
緊接著的"sdomonitor"相當於密碼,很多平台喜歡使用"public"這個默認字元串。這里的"sdomonitor"只是一個例子,您可以設置其它字元串作為密碼。
最右邊的"60.195.249.83"代表指定的監控點IP,這個IP地址是雲監控專用的監控點,這意味著只有雲監控有許可權來訪問您的SNMP代理程序。
所以,以上這段配置中,只有"sdomonitor"是需要您進行修改的,同時在雲監控上添加伺服器的時候,需要提供這個字元串。
v3
當然,我們建議您使用v3版本來進行身份驗證。對於一些早期版本的Linux分發版,其內置的SNMP代理程序可能並不支持v3,所以我們建議您按照前邊介紹的方法,編譯和安裝最新的Net-Snmp。
v3支持另一種驗證方式,需要創建一個v3的帳號,我們同樣修改以下配置文件:
sdo:~ # vi /usr/local/snmp/share/snmp/snmpd.conf
然後添加一個只讀帳號,如下:
rouser sdomonitor auth
可以看到,在v3中,"rouser"用於表示只讀帳號類型,隨後的"sdomonitor"是指定的用戶名,後邊的"auth"指明需要驗證。
接下來,我們還要添加"sdomonitor"這個用戶,這就是v3中的特殊機制,我們打開以下配置文件:
sdo:~ # vi /var/net-snmp/snmpd.conf
這個文件會在snmpd啟動的時候被自動調用,我們需要在它里邊添加創建用戶的指令,如下:
createUser sdomonitor MD5 mypassword
這行配置的意思是創建一個名為"sdomonitor"的用戶,密碼為"mypassword",並且用MD5進行加密傳輸。這里要提醒的是:
密碼至少要有8個位元組
這是SNMP協議的規定,如果小於8個位元組,通信將無法進行。
值得注意的是,一旦snmpd啟動後,出於安全考慮,以上這行配置會被snmpd自動刪除,當然,snmpd會將這些配置以密文的形式記錄在其它文件中,重新啟動snmpd是不需要再次添加這些配置的,除非您希望創建新的用戶。
以上配置中的用戶名、密碼和加密方式,在雲監控添加伺服器的時候需要添加。
啟動snmp服務
$ service snmpd start
用以下命令檢查服務是否啟動成功
$ snmpwalk -v 2c -c sdomonitor 127.0.0.1 system
如果要關閉,則可以直接kill這個進程,如下:
$ killall -9 snmpd 或者$ service snmpd stop
⑺ linux驅動中斷,程序運行幾個小時後系統崩潰
中斷與定時器:
中斷的概念:指CPU在執行過程中,出現某些突發事件急待處理,CPU暫停執行當前程序,轉去處理突發事件
,處理完後CPU又返回原程序被中斷的位置繼續執行
中斷的分類:內部中斷和外部中斷
內部中斷:中斷源來自CPU內部(軟體中斷指令、溢出、觸發錯誤等)
外部中斷:中斷源來自CPU外部,由外設提出請求
屏蔽中斷和不可屏蔽中斷:
可屏蔽中斷:可以通過屏蔽字被屏蔽,屏蔽後,該中斷不再得到響應
不可平布中斷:不能被屏蔽
向量中斷和非向量中斷:
向量中斷:CPU通常為不同的中斷分配不同的中斷號,當檢測到某中斷號的中斷到來後,就自動跳轉到與該中斷號對應的地址執行
非向量中斷:多個中斷共享一個入口地址。進入該入口地址後再通過軟體判斷中斷標志來識別具體哪個是中斷
也就是說向量中斷由軟體提供中斷服務程序入口地址,非向量中斷由軟體提供中斷入口地址
/*典型的非向量中斷首先會判斷中斷源,然後調用不同中斷源的中斷處理程序*/
irq_handler()
{
...
int int_src = read_int_status();/*讀硬體的中斷相關寄存器*/
switch(int_src){//判斷中斷標志
case DEV_A:
dev_a_handler();
break;
case DEV_B:
dev_b_handler();
break;
...
default:
break;
}
...
}
定時器中斷原理:
定時器在硬體上也以來中斷,PIT(可編程間隔定時器)接收一個時鍾輸入,
當時鍾脈沖到來時,將目前計數值增1並與已經設置的計數值比較,若相等,證明計數周期滿,產生定時器中斷,並
復位計數值。
如下圖所示:
Linux中斷處理程序架構:
Linux將中斷分為:頂半部(top half)和底半部(bottom half)
頂板部:完成盡可能少的比較緊急的功能,它往往只是簡單的讀取寄存器中的中斷狀態並清除中斷標志後就進行
「登記中斷」(也就是將底半部處理程序掛在到設備的底半部執行隊列中)的工作
特點:響應速度快
底半部:中斷處理的大部分工作都在底半部,它幾乎做了中斷處理程序的所有事情。
特點:處理相對來說不是非常緊急的事件
小知識:Linux中查看/proc/interrupts文件可以獲得系統中斷的統計信息。
如下圖所示:
第一列是中斷號 第二列是向CPU產生該中斷的次數
介紹完相關基礎概念後,讓我們一起來探討一下Linux中斷編程
Linux中斷編程:
1.申請和釋放中斷
申請中斷:
int request_irq(unsigned int irq,irq_handler_t handler,
unsigned long irqflags,const char *devname,void *dev_id)
參數介紹:irq是要申請的硬體中斷號
handler是向系統登記的中斷處理程序(頂半部),是一個回調函數,中斷發生時,系統調用它,將
dev_id參數傳遞給它
irqflags:是中斷處理的屬性,可以指定中斷的觸發方式和處理方式:
觸發方式:IRQF_TRIGGER_RISING、IRQF_TRIGGER_FALLING、IRQF_TRIGGER_HIGH、IRQF_TRIGGER_LOW
處理方式:IRQF_DISABLE表明中斷處理程序是快速處理程序,快速處理程序被調用時屏蔽所有中斷
IRQF_SHARED表示多個設備共享中斷,dev_id在中斷共享時會用到,一般設置為NULL
返回值:為0表示成功,返回-EINVAL表示中斷號無效,返回-EBUSY表示中斷已經被佔用,且不能共享
頂半部的handler的類型irq_handler_t定義為
typedef irqreturn_t (*irq_handler_t)(int,void*);
typedef int irqreturn_t;
2.釋放IRQ
有請求當然就有釋放了
void free_irq(unsigned int irq,void *dev_id);
參數定義與request_irq類似
3.使能和屏蔽中斷
void disable_irq(int irq);//等待目前中斷處理完成(最好別在頂板部使用,你懂得)
void disable_irq_nosync(int irq);//立即返回
void enable_irq(int irq);//
4.屏蔽本CPU內所有中斷:
#define local_irq_save(flags)...//禁止中斷並保存狀態
void local_irq_disable(void);//禁止中斷,不保存狀態
下面來分別介紹一下頂半部和底半部的實現機制
底半部機制:
簡介:底半部機制主要有tasklet、工作隊列和軟中斷
1.底半部是想方法之一tasklet
(1)我們需要定義tasklet機器處理器並將兩者關聯
例如:
void my_tasklet_func(unsigned long);/*定義一個處理函數*/
DECLARE_TASKLET(my_tasklet,my_tasklet_func,data);
/*上述代碼定義了名為my_tasklet的tasklet並將其餘
my_tasklet_func()函數綁定,傳入的參數為data*/
(2)調度
tasklet_schele(&my_tasklet);
//使用此函數就能在是當的時候進行調度運行
tasklet使用模板:
/*定義tasklet和底半部函數並關聯*/
void xxx_do_tasklet(unsigned long);
DECLARE_TASKLET(xxx_tasklet,xxx_do_tasklet,0);
/*中斷處理底半部*/
void xxx_do_tasklet(unsigned long)
{
...
}
/*中斷處理頂半部*/
irqreturn_t xxx_interrupt(int irq,void *dev_id)
{
...
tasklet_schele(&xxx_tasklet);//調度地板部
...
}
/*設備驅動模塊載入函數*/
int __init xxx_init(void)
{
...
/*申請中斷*/
result = request_irq(xxx_irq,xxx_interrupt,
IRQF_DISABLED,"xxx",NULL);
...
return IRQ_HANDLED;
}
/*設備驅動模塊卸載函數*/
void __exit xxx_exit(void)
{
...
/*釋放中斷*/
free_irq(xxx_irq,xxx_interrupt);
...
}
2.底半部實現方法之二---工作隊列
使用方法和tasklet類似
相關操作:
struct work_struct my_wq;/*定義一個工作隊列*/
void my_wq_func(unsigned long);/*定義一個處理函數*/
通過INIT_WORK()可以初始化這個工作隊列並將工作隊列與處理函數綁定
INIT_WORK(&my_wq,(void (*)(void *))my_wq_func,NULL);
/*初始化工作隊列並將其與處理函數綁定*/
schele_work(&my_wq);/*調度工作隊列執行*/
/*工作隊列使用模板*/
/*定義工作隊列和關聯函數*/
struct work_struct(unsigned long);
void xxx_do_work(unsigned long);
/*中斷處理底半部*/
void xxx_do_work(unsigned long)
{
...
}
/*中斷處理頂半部*/
/*中斷處理頂半部*/
irqreturn_t xxx_interrupt(int irq,void *dev_id)
{
...
schele_work(&my_wq);//調度底半部
...
return IRQ_HANDLED;
}
/*設備驅動模塊載入函數*/
int xxx_init(void)
{
...
/*申請中斷*/
result = request_irq(xxx_irq,xxx_interrupt,
IRQF_DISABLED,"xxx",NULL);
...
/*初始化工作隊列*/
INIT_WORK(&my_wq,(void (*)(void *))xxx_do_work,NULL);
}
/*設備驅動模塊卸載函數*/
void xxx_exit(void)
{
...
/*釋放中斷*/
free_irq(xxx_irq,xxx_interrupt);
...
}
⑻ 在linux下,開發trap時,終端運行時出現read_config_store open failure on /var/net-snmp/snmpapp.conf
缺少軟體的配置文件snmpapp.conf,這個配置文件他原始目錄下應該有個配置文件模板,把內容按你自己的需求改下然後文件名改成這個就行了,有的可能要手工建立,這要求你知道他配置文件的內容然後vi創建
⑼ Linux系統開機時啟動內核步驟是什麼
實模式,並開始執行位於地址0xFFFF0處
的代碼,也就是ROM-BIOS起始位置的代碼。BIOS先進行一系列的系統自檢,然後初始化位
於地址0的中斷向量表。最後BIOS將啟動盤的第一個扇區裝入到0x7C00,並開始執行此處
的代碼。這就是對內核初始化過程的一個最簡單的描述。
最初,linux核心的最開始部分是用8086匯編語言編寫的。當開始運行時,核心將自
己裝入到絕對地址0x90000,再將其後的2k位元組裝入到地址0x90200處,最後將核心的其餘
部分裝入到0x10000。
當系統裝入時,會顯示Loading...信息。裝入完成後,控制轉向另一個實模式下的匯
編語言代碼boot/Setup.S。Setup部分首先設置一些系統的硬體設備,然後將核心從
0x10000處移至0x1000處。這時系統轉入保護模式,開始執行位於0x1000處的代碼。
接下來是內核的解壓縮。0x1000處的代碼來自於文件Boot/head.S,它用來初始化寄
存器和調用decompress_kernel( )程序。decompress_kernel( )程序由Boot/inflate.c,
Boot/unzip.c和Boot../misc.c組成。解壓縮後的數據被裝入到了0x100000處,這也是
linux不能在內存小於2M的環境下運行的主要原因。
解壓後的代碼在0x1010000處開始執行,緊接著所有的32位的設置都將完成: IDT、
GDT和LDT將被裝入,處理器初始化完畢,設置好內存頁面,最終調用start_kernel過程。
這大概是整個內核中最為復雜的部分。
[系統開始運行]
linux kernel 最早的C代碼從匯編標記startup_32開始執行
startup_32:
start_kernel
lock_kernel
trap_init
init_IRQ
sched_init
softirq_init
time_init
console_init
#ifdef CONFIG_MODULES
init_moles
#endif
kmem_cache_init
sti
calibrate_delay
mem_init
kmem_cache_sizes_init
pgtable_cache_init
fork_init
proc_caches_init
vfs_caches_init
buffer_init
page_cache_init
signals_init
#ifdef CONFIG_PROC_FS
proc_root_init
#endif
#if defined(CONFIG_SYSVIPC)
ipc_init
#endif
check_bugs
smp_init
rest_init
kernel_thread
unlock_kernel
cpu_idle
・startup_32 [arch/i386/kernel/head.S]
・start_kernel [init/main.c]
・lock_kernel [include/asm/smplock.h]
・trap_init [arch/i386/kernel/traps.c]
・init_IRQ [arch/i386/kernel/i8259.c]
・sched_init [kernel/sched.c]
・softirq_init [kernel/softirq.c]
・time_init [arch/i386/kernel/time.c]
・console_init [drivers/char/tty_io.c]
・init_moles [kernel/mole.c]
・kmem_cache_init [mm/slab.c]
・sti [include/asm/system.h]
・calibrate_delay [init/main.c]
・mem_init [arch/i386/mm/init.c]
・kmem_cache_sizes_init [mm/slab.c]
・pgtable_cache_init [arch/i386/mm/init.c]
・fork_init [kernel/fork.c]
・proc_caches_init
・vfs_caches_init [fs/dcache.c]
・buffer_init [fs/buffer.c]
・page_cache_init [mm/filemap.c]
・signals_init [kernel/signal.c]
・proc_root_init [fs/proc/root.c]
・ipc_init [ipc/util.c]
・check_bugs [include/asm/bugs.h]
・smp_init [init/main.c]
・rest_init
・kernel_thread [arch/i386/kernel/process.c]
・unlock_kernel [include/asm/smplock.h]
・cpu_idle [arch/i386/kernel/process.c]
start_kernel( )程序用於初始化系統內核的各個部分,包括:
*設置內存邊界,調用paging_init( )初始化內存頁面。
*初始化陷阱,中斷通道和調度。
*對命令行進行語法分析。
*初始化設備驅動程序和磁碟緩沖區。
*校對延遲循環。
最後的function'rest_init' 作了以下工作:
・開辟內核線程'init'
・調用unlock_kernel
・建立內核運行的cpu_idle環, 如果沒有調度,就一直死循環
實際上start_kernel永遠不能終止.它會無窮地循環執行cpu_idle.
最後,系統核心轉向move_to_user_mode( ),以便創建初始化進程(init)。此後,進程0開始進入無限循環。
初始化進程開始執行/etc/init、/bin/init 或/sbin /init中的一個之後,系統內核就不再對程序進行直接控制了。之後系統內核的作用主要是給進程提供系統調用,以及提供非同步中斷事件的處理。多任務機制已經建立起來,並開始處理多個用戶的登錄和fork( )創建的進程。
[init]
init是第一個進程,或者說內核線程
init
lock_kernel
do_basic_setup
mtrr_init
sysctl_init
pci_init
sock_init
start_context_thread
do_init_calls
(*call())-> kswapd_init
prepare_namespace
free_initmem
unlock_kernel
execve
[目錄]
--------------------------------------------------------------------------------
啟動步驟
系統引導:
涉及的文件
./arch/$ARCH/boot/bootsect.s
./arch/$ARCH/boot/setup.s
bootsect.S
這個程序是linux kernel的第一個程序,包括了linux自己的bootstrap程序,
但是在說明這個程序前,必須先說明一般IBM PC開機時的動作(此處的開機是指
"打開PC的電源"):
一般PC在電源一開時,是由內存中地址FFFF:0000開始執行(這個地址一定
在ROM BIOS中,ROM BIOS一般是在FEOOOh到FFFFFh中),而此處的內容則是一個
jump指令,jump到另一個位於ROM BIOS中的位置,開始執行一系列的動作,包
括了檢查RAM,keyboard,顯示器,軟硬磁碟等等,這些動作是由系統測試代碼
(system test code)來執行的,隨著製作BIOS廠商的不同而會有些許差異,但都
是大同小異,讀者可自行觀察自家機器開機時,螢幕上所顯示的檢查訊息。
緊接著系統測試碼之後,控制權會轉移給ROM中的啟動程序
(ROM bootstrap routine),這個程序會將磁碟上的第零軌第零扇區讀入
內存中(這就是一般所謂的boot sector,如果你曾接觸過電腦病
毒,就大概聽過它的大名),至於被讀到內存的哪裡呢? --絕對
位置07C0:0000(即07C00h處),這是IBM系列PC的特性。而位在linux開機
磁碟的boot sector上的正是linux的bootsect程序,也就是說,bootsect是
第一個被讀入內存中並執行的程序。現在,我們可以開始來
看看到底bootsect做了什麼。
第一步
首先,bootsect將它"自己"從被ROM BIOS載入的絕對地址0x7C00處搬到
0x90000處,然後利用一個jmpi(jump indirectly)的指令,跳到新位置的
jmpi的下一行去執行,
第二步
接著,將其他segment registers包括DS,ES,SS都指向0x9000這個位置,
與CS看齊。另外將SP及DX指向一任意位移地址( offset ),這個地址等一下
會用來存放磁碟參數表(disk para- meter table )
第三步
接著利用BIOS中斷服務int 13h的第0號功能,重置磁碟控制器,使得剛才
的設定發揮功能。
第四步
完成重置磁碟控制器之後,bootsect就從磁碟上讀入緊鄰著bootsect的setup
程序,也就是setup.S,此讀入動作是利用BIOS中斷服務int 13h的第2號功能。
setup的image將會讀入至程序所指定的內存絕對地址0x90200處,也就是在內存
中緊鄰著bootsect 所在的位置。待setup的image讀入內存後,利用BIOS中斷服
務int 13h的第8號功能讀取目前磁碟的參數。
第五步
再來,就要讀入真正linux的kernel了,也就是你可以在linux的根目錄下看
到的"vmlinuz" 。在讀入前,將會先呼叫BIOS中斷服務int 10h 的第3號功能,
讀取游標位置,之後再呼叫BIOS 中斷服務int 10h的第13h號功能,在螢幕上輸
出字串"Loading",這個字串在boot linux時都會首先被看到,相信大家應該覺
得很眼熟吧。
第六步
接下來做的事是檢查root device,之後就仿照一開始的方法,利用indirect
jump 跳至剛剛已讀入的setup部份
第七步
setup.S完成在實模式下版本檢查,並將硬碟,滑鼠,內存參數寫入到 INITSEG
中,並負責進入保護模式。
第八步
操作系統的初始化。
⑽ Linux命令行大全的目錄
《linux命令行大全》
第一部分學習shell
第1章shell是什麼3
1.1終端模擬器3
1.2第一次鍵盤輸入4
1.2.1命令歷史記錄4
1.2.2游標移動4
1.3幾個簡單的命令5
1.4結束終端會話6
第2章導航7
2.1理解文件系統樹7
2.2當前工作目錄8
2.3列出目錄內容9
2.4更改當前工作目錄9
2.4.1絕對路徑名9
2.4.2相對路徑名9
2.4.3一些有用的快捷方式10
第3章linux系統13
3.1ls命令的樂趣13
3.1.1選項和參數14
.3.1.2進一步了解長列表格式15
3.2使用file命令確定文件類型16
3.3使用less命令查看文件內容16
3.4快速瀏覽18
3.5符號鏈接20
第4章操作文件與目錄23
4.1通配符24
4.2mkdir——創建目錄26
4.3cp——復制文件和目錄26
4.4mv——移除和重命名文件27
4.5rm——刪除文件和目錄28
4.6ln——創建鏈接29
4.6.1硬鏈接29
4.6.2符號鏈接30
4.7實戰演練30
4.7.1創建目錄30
4.7.2復制文件31
4.7.3移動和重命名文件31
4.7.4創建硬鏈接32
4.7.5創建符號鏈接33
4.7.6移除文件和目錄34
4.8本章結尾語35
第5章命令的使用37
5.1究竟什麼是命令38
5.2識別命令38
5.2.1type——顯示命令的類型38
5.2.2which——顯示可執行程序的位置39
5.3獲得命令文檔39
5.3.1help——獲得shell內置命令的幫助文檔39
5.3.2help——顯示命令的使用信息40
5.3.3man——顯示程序的手冊頁40
5.3.4apropos——顯示合適的命令41
5.3.5whatis——顯示命令的簡要描述42
5.3.6info——顯示程序的info條目42
5.3.7readme和其他程序文檔文件43
5.4使用別名創建自己的命令43
5.5溫故以求新45
第6章重定向47
6.1標准輸入、標准輸出和標准錯誤48
6.1.1標准輸出重定向48
6.1.2標准錯誤重定向50
6.1.3將標准輸出和標准錯誤重定向到同一個文件50
6.1.4處理不想要的輸出51
6.1.5標准輸入重定向51
6.2管道53
6.2.1過濾器53
6.2.2uniq——報告或忽略文件中重復的行54
6.2.3wc——列印行數、字數和位元組數54
6.2.4grep——列印匹配行54
6.2.5head/tail——輸出文件的開頭部分/結尾部分55
6.2.6tee——從stdin讀取數據,並同時輸出到stdout和文件56
6.3本章結尾語57
第7章透過shell看世界59
7.1擴展59
7.1.1路徑名擴展60
7.1.2波浪線擴展61
7.1.3算術擴展61
7.1.4花括弧擴展62
7.1.5參數擴展63
7.1.6命令替換64
7.2引用65
7.2.1雙引號65
7.2.2單引號67
7.2.3轉義字元67
7.3本章結尾語68
第8章高級鍵盤技巧69
8.1編輯命令行69
8.1.1游標移動70
8.1.2修改文本70
8.1.3剪切和粘貼(killing and yanking)文本71
8.2自動補齊功能71
8.3使用歷史命令73
8.3.1搜索歷史命令73
8.3.2歷史記錄擴展75
8.4本章結尾語76
第9章許可權77
9.1所有者、組成員和其他所有用戶78
9.2讀取、寫入和執行79
9.2.1chmod——更改文件模式81
9.2.2採用gui設置文件模式84
9.2.3umask——設置默認許可權85
9.3更改身份87
9.3.1su——以其他用戶和組id的身份來運行shell88
9.3.2sudo——以另一個用戶的身份執行命令89
9.3.3chown——更改文件所有者和所屬群組90
9.3.4chgrp——更改文件所屬群組91
9.4許可權的使用91
9.5更改用戶密碼93
第10章進程95
10.1進程如何工作96
10.1.1使用ps命令查看進程信息96
10.1.2使用top命令動態查看進程信息98
10.2控制進程100
10.2.1中斷進程100
10.2.2使進程在後台運行101
10.2.3使進程回到前台運行101
10.2.4停止(暫停)進程102
10.3信號102
10.3.1使用kill命令發送信號到進程103
10.3.2使用killall命令發送信號給多個進程105
10.4更多與進程相關的命令105
第二部分配置與環境
第11章環境109
11.1環境中存儲的是什麼109
11.1.1檢查環境110
11.1.2一些有趣的變數111
11.2環境是如何建立的112
11.2.1login和non-login shell112
11.2.2啟動文件中有什麼113
11.3修改環境114
11.3.1用戶應當修改哪些文件114
11.3.2文本編輯器115
11.3.3使用文本編輯器115
11.3.4激活我們的修改117
11.4本章結尾語118
第12章vi簡介119
12.1為什麼要學習vi119
12.2vi背景120
12.3啟動和退出vi120
12.4編輯模式121
12.4.1進入插入模式122
12.4.2保存工作122
12.5移動游標123
12.6基本編輯124
12.6.1添加文本124
12.6.2插入一行125
12.6.3刪除文本126
12.6.4剪切、復制和粘貼文本127
12.6.5合並行128
12.7查找和替換128
12.7.1行內搜索128
12.7.2搜索整個文件129
12.7.3全局搜索和替換129
12.8編輯多個文件130
12.8.1切換文件131
12.8.2載入更多的文件132
12.8.3文件之間的內容復制132
12.8.4插入整個文件133
12.9保存工作134
第13章定製提示符135
13.1提示符的分解135
13.2嘗試設計提示符137
13.3添加顏色138
13.4移動游標140
13.5保存提示符141
13.6本章結尾語141
第三部分常見任務和主要工具
第14章軟體包管理145
14.1軟體包系統146
14.2軟體包系統工作方式146
14.2.1軟體包文件146
14.2.2庫147
14.2.3依賴關系147
14.2.4高級和低級軟體包工具147
14.3常見軟體包管理任務148
14.3.1在庫裡面查找軟體包148
14.3.2安裝庫中的軟體包148
14.3.3安裝軟體包文件中的軟體包149
14.3.4刪除軟體包149
14.3.5更新庫中的軟體包150
14.3.6更新軟體包文件中的軟體包150
14.3.7列出已安裝的軟體包列表150
14.3.8判斷軟體包是否安裝151
14.3.9顯示已安裝軟體包的相關信息151
14.3.10查看某具體文件由哪個軟體包安裝得到151
14.4本章結尾語152
第15章存儲介質155
15.1掛載、卸載存儲設備156
15.1.1查看已掛載的文件系統列表157
15.1.2確定設備名稱160
15.2創建新的文件系統162
15.2.1用fdisk命令進行磁碟分區162
15.2.2用mkfs命令創建新的文件系統164
15.3測試、修復文件系統165
15.4格式化軟盤166
15.5直接從/向設備轉移數據166
15.6創建cd-rom映像167
15.6.1創建一個cd-rom文件映像副本167
15.6.2從文件集合中創建映像文件168
15.7向cd-rom寫入映像文件168
15.7.1直接掛載iso映像文件168
15.7.2擦除可讀寫cd-rom169
15.7.3寫入映像文件169
15.8附加認證169
第16章網路171
16.1檢查、監測網路172
16.1.1ping——向網路主機發送特殊數據包172
16.1.2traceroute——跟蹤網路數據包的傳輸路徑173
16.1.3netstat——檢查網路設置及相關統計數據174
16.2通過網路傳輸文件175
16.2.1ftp——採用ftp(文件傳輸協議)傳輸文件175
16.2.2lftp——更好的ftp(文件傳輸協議)177
16.2.3wget——非互動式網路下載工具177
16.3與遠程主機的安全通信178
16.3.1ssh——安全登錄遠程計算機178
16.3.2scp和sftp——安全傳輸文件181
第17章文件搜索183
17.1locate——較簡單的方式查找文件184
17.2find——較復雜的方式查找文件185
17.2.1test選項186
17.2.2action選項190
17.2.3返回到playground文件夾194
17.2.4option選項196
第18章歸檔和備份197
18.1文件壓縮198
18.1.1gzip——文件壓縮與解壓縮198
18.1.2bzip2——犧牲速度以換取高質量的數據壓縮200
18.2文件歸檔201
18.2.1tar——磁帶歸檔工具201
18.2.2zip——打包壓縮文件205
18.3同步文件和目錄207
18.3.1rsync——遠程文件、目錄的同步207
18.3.2在網路上使用rsync命令209
第19章正則表達式211
19.1什麼是正則表達式211
19.2grep——文本搜索212
19.3元字元和文字213
19.4任意字元214
19.5錨214
19.6中括弧表達式和字元類215
19.6.1否定216
19.6.2傳統字元范圍216
19.6.3posix字元類217
19.7 posix基本正則表達式和擴展正則表達式的比較220
19.8或選項221
19.9限定符222
19.9.1?——匹配某元素0次或1次222
19.9.2*——匹配某元素多次或零次222
19.9.3+——匹配某元素一次或多次223
19.9.4{}——以指定次數匹配某元素223
19.10正則表達式的應用224
19.10.1用grep命令驗證號碼簿224
19.10.2用find查找奇怪文件名的文件225
19.10.3用locate查找文件226
19.10.4利用less和vim命令搜索文本226
19.11本章結尾語227
第20章文本處理229
20.1文本應用程序230
20.1.1文件230
20.1.2網頁230
20.1.3電子郵件230
20.1.4列印機輸出231
20.1.5程序源代碼231
20.2溫故以求新231
20.2.1cat——進行文件之間的拼接並且輸出到標准輸出231
20.2.2sort——對文本行進行排序232
20.2.3uniq——通知或省略重復的行238
20.3切片和切塊239
20.3.1cut——刪除文本行中的部分內容239
20.3.2paste——合並文本行242
20.3.3join——連接兩文件中具有相同欄位的行243
20.4文本比較245
20.4.1comm——逐行比較兩個已排序文件245
20.4.2diff——逐行比較文件246
20.4.3patch——對原文件進行diff操作248
20.5非互動式文本編輯249
20.5.1tr——替換或刪除字元249
20.5.2sed——用於文本過濾和轉換的流編輯器251
20.5.3aspell——互動式拼寫檢查工具258
20.6本章結尾語260
20.7附加項261
第21章格式化輸出263
21.1簡單的格式化工具264
21.1.1nl——對行進行標號264
21.1.2fold——將文本中的行長度設定為指定長度266
21.1.3fmt——簡單的文本格式化工具267
21.1.4pr——格式化列印文本270
21.1.5printf——格式化並列印數據270
21.2文檔格式化系統273
21.2.1roff和tex家族274
21.2.2groff——文檔格式化系統274
21.3本章結尾語279
第22章列印281
22.1列印操作簡史282
22.1.1灰暗時期的列印282
22.1.2基於字元的列印機282
22.1.3圖形化列印機283
22.2linux方式的列印284
22.3准備列印文件284
22.3.1pr——將文本文件轉換為列印文件285
22.4向列印機發送列印任務285
22.4.1lpr——列印文件(berkeley類型)286
22.4.2lp——列印文件(system v類型)287
22.4.3另外一個參數選項:a2ps287
22.5監測和控制列印任務290
22.5.1lpstat——顯示列印系統狀態290
22.5.2lpq——顯示列印隊列狀態291
22.5.3lprm與cancel——刪除列印任務291
第23章編譯程序293
23.1什麼是編譯294
23.2是不是所有的程序都需要編譯295
23.3編譯一個c程序295
23.3.1獲取源代碼296
23.3.2檢查源代碼樹297
23.3.3生成程序298
23.3.4安裝程序302
23.4本章結尾語302
第四部分編寫shell腳本
第24章編寫第一個shell腳本305
24.1什麼是shell腳本305
24.2怎樣寫shell腳本306
24.2.1腳本文件的格式306
24.2.2可執行許可權307
24.2.3腳本文件的位置307
24.2.4腳本的理想位置308
24.3更多的格式訣竅309
24.3.1長選項名309
24.3.2縮進和行連接309
24.5本章結尾語310
第25章啟動一個項目311
25.1第一階段:最小的文檔311
25.2第二階段:加入一點數據313
25.3變數和常量314
25.3.1創建變數和常量314
25.3.2為變數和常量賦值316
25.4 here文檔317
25.5本章結尾語319
第26章自頂向下設計321
26.1shell函數322
26.2局部變數325
26.3保持腳本的運行326
26.4本章結尾語328
第27章流控制:if分支語句329
27.1使用if330
27.2退出狀態330
27.3使用test命令332
27.3.1文件表達式332
27.3.2字元串表達式334
27.3.3整數表達式335
27.4更現代的test命令版本336
27.5(( ))——為整數設計338
27.6組合表達式339
27.7控制運算符:另一種方式的分支341
27.8本章結尾語342
第28章讀取鍵盤輸入343
28.1read——從標准輸入讀取輸入值344
28.1.1選項346
28.1.2使用ifs間隔輸入欄位347
28.2驗證輸入349
28.3菜單350
28.4本章結尾語351
28.5附加項352
第29章流控制:while和until循環353
29.1循環353
29.2while354
29.3跳出循環356
29.4until357
29.5使用循環讀取文件358
29.6本章結尾語358
第30章故障診斷359
30.1語法錯誤359
30.1.1引號缺失360
30.1.2符號缺失冗餘360
30.1.3非預期的展開361
30.2邏輯錯誤362
30.2.1防禦編程363
30.2.2輸入值驗證364
30.3測試364
30.3.1樁365
30.3.2測試用例365
30.4調試366
30.4.1找到問題域366
30.4.2追蹤366
30.4.3運行過程中變數的檢驗368
30.5本章結尾語369
第31章流控制:case分支371
31.1case371
31.1.1模式373
31.1.2多個模式的組合374
31.2本章結尾語375
第32章位置參數377
32.1訪問命令行377
32.1.1確定實參的數目378
32.1.2shift——處理大量的實參379
32.1.3簡單的應用程序380
32.1.4在shell函數中使用位置參數381
32.2處理多個位置參數381
32.3更完整的應用程序383
32.4本章結尾語386
第33章流控制:for循環389
33.1for:傳統shell形式389
33.2for:c語言形式392
33.3本章結尾語393
第34章字元串和數字395
34.1參數擴展(parameter expansion)395
34.1.1基本參數396
34.1.2空變數擴展的管理396
34.1.3返回變數名的擴展397
34.1.4字元串操作398
34.2算術計算和擴展400
34.2.1數字進制401
34.2.2一元運算符401
34.2.3簡單算術401
34.2.4賦值402
34.2.5位操作404
34.2.6邏輯操作405
34.3bc:一種任意精度計算語言407
34.3.1bc的使用407
34.3.2腳本例子408
34.4本章結尾語409
34.5附加項409
第35章數組411
35.1什麼是數組411
35.2創建一個數組412
35.3數組賦值412
35.4訪問數組元素413
35.5數組操作414
35.5.1輸出數組的所有內容415
35.5.2確定數組元素的數目415
35.5.3查找數組中使用的下標416
35.5.4在數組的結尾增加元素416
35.5.5數組排序操作416
35.5.6數組的刪除417
35.6本章結尾語418
第36章其他命令419
36.1組命令和子shell419
36.1.1執行重定向420
36.1.2進程替換420
36.2trap422
36.3非同步執行425
36.4命名管道426
36.4.1設置命名管道427
36.4.2使用命名管道427
36.5本章結尾語428