關機
1. 數據同步寫入磁盤 sync
為了加快對磁盤上文件的讀寫速度,位于內存中的文件數據不會立即同步到磁盤上,因此關機之前需要先進行 sync 同步操作。
2. shutdown
# /sbin/shutdown [-krhc] [時間] [警告訊息]
-k : 不會關機,只是發送警告訊息,通知所有在線的用戶
-r : 將系統的服務停掉后就重新啟動
-h : 將系統的服務停掉后就立即關機
-c : 取消已經在進行的 shutdown 指令內容
3. 其它關機指令
reboot、halt、poweroff。
運行等級
0:關機模式 1:單用戶模式(可用于破解root密碼) 2:無網絡支持的多用戶模式 3:有網絡支持的多用戶模式(文本模式,工作中最常用的模式) 4:保留,未使用 5:有網絡支持的 X-windows 支持多用戶模式(桌面) 6:重新引導系統,即重啟
BIOS
BIOS 是開機的時候計算機執行的第一個程序,這個程序知道可以開機的磁盤,并讀取磁盤第一個扇區的 MBR,由 MBR 執行其中的開機管理程序,這個開機管理程序的會加載操作系統的核心文件。
?
MBR 中的開機管理程序提供以下功能:選單、載入核心文件以及轉交其它開機管理程序。轉交這個功能可以用來實現了多重引導,只需要將另一個操作系統的開機管理程序安裝其它分區的啟動扇區上,在啟動 MBR 中的開機管理程序時,就可以選擇啟動當前的操作系統或者轉交給其它開機管理程序從而啟動另一個操作系統。
?
指令搜索順序
1.??? 以絕對或相對路徑來執行指令,例如 /bin/ls 或者 ./ls ;
2.??? 由別名找到該指令來執行;
3.??? 由 Bash 內建的指令來執行;
4.??? 按 $PATH 變量指定的搜索路徑的順序找到第一個指令來執行。
數據流重定向
重定向有5種方式,分別是: 輸出重定向、輸入重定向、錯誤重定向、追加重定向以及同時實現輸出和錯誤的重定向。
?
重定向就是使用文件代替標準輸入、標準輸出和標準錯誤輸出。
?
標準輸入 (stdin)????? :代碼為 0 ,使用 < 或 << ;
標準輸出 (stdout)??? :代碼為 1 ,使用 > 或 >> ;
標準錯誤輸出(stderr):代碼為 2 ,使用 2> 或 2>> ;
其中,有一個箭頭的表示以覆蓋的方式重定向,而有兩個箭頭的表示以追加的方式重定向。
?
可以將不需要的標準輸出以及標準錯誤輸出重定向到 /dev/null ,相當于扔進垃圾箱。
?
如果需要將標準輸出以及標準錯誤輸出同時重定向到一個文件,需要將某個輸出轉換為另一個輸出,例如 2>&1 表示將標準錯誤輸出轉換為標準輸出。
?
$ find /home -name .bashrc > list 2>&1
靜態鏈接庫和動態鏈接庫的區別
靜態連接庫就是把(lib)文件中用到的函數代碼直接鏈接進目標程序,程序運行的時候不再需要其它的庫文件;動態鏈接就是把調用的函數所在文件模塊(DLL)和調用函數在文件中的位置等信息鏈接進目標程序,程序運行的時候再從DLL中尋找相應函數代碼,因此需要相應DLL文件的支持。
?
靜態鏈接庫與動態鏈接庫都是共享代碼的方式,如果采用靜態鏈接庫,則無論你愿不愿意,lib 中的指令都全部被直接包含在最終生成的 EXE 文件中了。但是若使用 DLL,該 DLL 不必被包含在最終 EXE 文件中,EXE 文件執行時可以“動態”地引用和卸載這個與 EXE 獨立的 DLL 文件。靜態鏈接庫和動態鏈接庫的另外一個區別在于靜態鏈接庫中不能再包含其他的動態鏈接庫或者靜態庫,而在動態鏈接庫中還可以再包含其他的動態或靜態鏈接庫。動態庫就是在需要調用其中的函數時,根據函數映射表找到該函數然后調入堆棧執行。如果在當前工程中有多處對dll文件中同一個函數的調用,那么執行時,這個函數只會留下一份拷貝。但是如果有多處對lib文件中同一個函數的調用,那么執行時,該函數將在當前程序的執行空間里留下多份拷貝,而且是一處調用就產生一份拷貝。
?
孤兒進程和僵死進程
孤兒進程
一個父進程退出,而它的一個或多個子進程還在運行,那么那些子進程將成為孤兒進程。孤兒進程將被 init 進程(進程號為 1)所收養,并由 init 進程對它們完成狀態收集工作。由于孤兒進程會被 init 進程收養,所以孤兒進程不會對系統造成危害
?
僵尸進程
一個子進程的進程描述符在子進程退出時不會釋放,只有當父進程通過 wait 或 waitpid 獲取了子進程信息后才會釋放。如果子進程退出,而父進程并沒有調用 wait 或 waitpid,那么子進程的進程描述符仍然保存在系統中,這種進程稱之為僵死進程。
?
僵死進程通過 ps 命令顯示出來的狀態為 Z。
?
系統所能使用的進程號是有限的,如果大量的產生僵死進程,將因為沒有可用的進程號而導致系統不能產生新的進程。
?
要消滅系統中大量的僵死進程,只需要將其父進程殺死,此時所有的僵死進程就會變成孤兒進程,從而被 init 所收養,這樣 init 就會釋放所有的僵死進程所占有的資源,從而結束僵死進程。