由於本人筆試練習的正確率實在慘不忍睹,於是有了【筆試總結】這個系列,預計會更新至秋招找到工作==
unix中進程通訊方法
(1)管道(Pipe):管道可用於具有親緣關係進程間的通訊,允許一個進程和另一個與它有共同祖先的進程之間進行通訊。
(2)具名管道(named pipe):具名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係進程間的通訊。具名管道在檔案系統中有對應的檔案名稱。具名管道通過命令mkfifo或系統調用mkfifo來建立。
(3)訊號(Signal):訊號是比較複雜的通訊方式,用於通知接受進程有某種事件發生,除了用於處理序間通訊外,進程還可以發送訊號給進程本身;linux除了支援Unix早期訊號語義函數sigal外,還支援語義符合Posix.1標準的訊號函數sigaction(實際上,該函數是基於BSD的,BSD為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函數重新實現了signal函數)。
(4)訊息(Message)隊列:訊息佇列是訊息的連結資料表,包括Posix訊息佇列system V訊息佇列。有足夠許可權的進程可以向隊列中添加訊息,被賦予讀許可權的進程則可以讀走隊列中的訊息。訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺
(5)共用記憶體:使得多個進程可以訪問同一塊記憶體空間,是最快的可用IPC形式。是針對其他通訊機制運行效率較低而設計的。往往與其它通訊機制,如訊號量結合使用,來達到進程間的同步及互斥。
(6)記憶體映射(mapped memory):記憶體映射允許任何多個處理序間通訊,每一個使用該機制的進程通過把一個共用的檔案對應到自己的進程地址空間來實現它。
(7)訊號量(semaphore):主要作為進程間以及同一進程不同線程之間的同步手段。
(8)套介面(Socket):更為一般的處理序間通訊機制,可用於不同機器之間的處理序間通訊。起初是由Unix系統的BSD分支開發出來的,但現在一般可以移植到其它類Unix系統上:Linux和System V的變種都支援通訊端。
相對比的
windows有:進程間:管道,訊號,訊息佇列,共用記憶體,訊號量,套介面。 線程間:臨界區,互斥量,訊號量,套介面。 linux 中各個日誌記錄內容
/var/log/messages — 包括整體系統資訊,其中也包含系統啟動期間的日誌。此外,mail,cron,daemon,kern和auth等內容也記錄在var/log/messages日誌中。 /var/log/dmesg — 包含核心緩衝資訊(kernel ring buffer)。在系統啟動時,會在螢幕上顯示許多與硬體有關的資訊。可以用dmesg查看它們。 /var/log/auth.log — 包含系統授權資訊,包括使用者登入和使用的許可權機制等。 /var/log/boot.log — 包含系統啟動時的日誌。 /var/log/daemon.log — 包含各種系統後台守護進程日誌資訊。 /var/log/dpkg.log – 包括安裝或dpkg命令清除軟體包的日誌。 /var/log/kern.log – 包含核心產生的日誌,有助於在定製核心時解決問題。 /var/log/lastlog — 記錄所有使用者的最近資訊。這不是一個ASCII檔案,因此需要用lastlog命令查看內容。 /var/log/maillog /var/log/mail.log — 包含來著系統運行電子郵件伺服器的日誌資訊。例如,sendmail日誌資訊就全部送到這個檔案中。 /var/log/user.log — 記錄所有等級使用者資訊的日誌。 /var/log/Xorg.x.log — 來自X的日誌資訊。 /var/log/alternatives.log – 更新替代資訊都記錄在這個檔案中。 /var/log/btmp – 記錄所有失敗登入資訊。使用last命令可以查看btmp檔案。例如,”last -f /var/log/btmp | more“。 /var/log/cups — 涉及所有列印資訊的日誌。 /var/log/anaconda.log — 在安裝Linux時,所有安裝資訊都儲存在這個檔案中。 /var/log/yum.log — 包含使用yum安裝的軟體包資訊。 /var/log/cron — 每當cron進程開始一個工作時,就會將相關資訊記錄在這個檔案中。 /var/log/secure — 包含驗證和授權方面資訊。例如,sshd會將所有資訊記錄(其中包括失敗登入)在這裡。 /var/log/wtmp或/var/log/utmp — 包含登入資訊。使用wtmp可以找出誰正在登陸進入系統,誰使用命令顯示這個檔案或資訊等。 /var/log/faillog – 包含使用者登入失敗資訊。此外,錯誤登入命令也會記錄在本檔案中。
除了上述Log檔案以外, /var/log還基於系統的具體應用程式套件含以下一些子目錄: /var/log/httpd/或/var/log/apache2 — 包含伺服器access_log和error_log資訊。 /var/log/lighttpd/ — 包含light HTTPD的access_log和error_log。 /var/log/mail/ – 這個子目錄包含郵件伺服器的額外日誌。 /var/log/prelink/ — 包含.so檔案被prelink修改的資訊。 /var/log/audit/ — 包含被 Linux audit daemon儲存的資訊。 /var/log/samba/ – 包含由samba儲存的資訊。 /var/log/sa/ — 包含每日由sysstat軟體包收集的sar檔案。 /var/log/sssd/ – 用於守護進程安全服務。 網路相關指令
2. nestat應該是netstat:
3. route:
4. tracert是windows的,traceroute是linux的:
ifconfig命令用來來檢測和設定原生網路介面
Android dvm的進程和Linux的進程,應用程式的進程
每一個DVM都是在Linux 中的一個進程
先來概念: 我們來看看每個android進程如何產生的, 下面來對Zygote進程孵化新進程的過程做進一步瞭解: Zygote進程調用fork()函數建立出Zygote' 子進程, 子進程Zygote' 共用父進程Zygote的代碼區與串連資訊。 如下圖所示,Fork()橙色箭頭左邊是Zygote進程,右邊是建立出的Zygote‘子進程;然後Zygote’ 子進程將執行流程交給應用程式A,Android程式開始運行。 新產生的應用程式A會使用已有Zygote父進程的庫與資源的串連資訊,所以運行速度很快。
另外,對於上圖,Zygote啟動後,初始並運行DVM,而後將需要的類與資源載入到記憶體中。隨後調用fork()建立出Zygote' 子進程,接著子進程動態載入並運行應用程式A。 啟動並執行應用程式A會使用Zygote已經初始化並啟動啟動並執行DVM代碼,通過使用已載入至記憶體中的類與資源來加快運行速度。
我們來看看Android進程模型
Linux通過調用start_kernel函數來啟動核心,當核心啟動模組啟動完成後,將啟動使用者空間的第一個進程——Init進程,下圖為Android系統的進程模型圖:
從上圖可以看出,Linux核心在啟動過程中,建立一個名為Kthreadd的核心進程,PID=2,用於建立核心空間的其他進程;同時建立第一個使用者空間Init進程,該進程PID = 1,用於啟動一些本地進程,比如Zygote進程,而Zygote進程也是一個專門用於孵化Java進程的本地進程,上圖清晰地描述了整個Android系統的進程模型 Nagle演算法的規則: (1)如果包長度達到MSS,則允許發送; (2)如果該包含有FIN,則允許發送; (3)設定了TCP_NODELAY選項,則允許發送; (4)未設定TCP_CORK選項時,若所有發出去的小資料包(包長度小於MSS)均被確認,則允許發送; (5)上述條件都未滿足,但發生了逾時(一般為200ms),則立即發送。
Nagle演算法只允許一個未被ACK的包存在於網路,它並不管包的大小,因此它事實上就是一個擴充的停-等協議,只不過它是基於包停-等的,而不是基於位元組停-等的。Nagle演算法完全由TCP協議的ACK機制決定,這會帶來一些問題,比如如果對端ACK回複很快的話,Nagle事實上不會拼接太多的資料包,雖然避免了網路擁塞,網路總體的利用率依然很低。 Nagle演算法是silly window syndrome(SWS)預防演算法的一個半集。SWS演算法預防發送少量的資料,Nagle演算法是其在發送方的實現,而接收方要做的是不要通告緩衝空間的很小增長,不通知小視窗,除非緩衝區空間有顯著的增長。這裡顯著的增長定義為完全大小的段(MSS)或增長到大於最大視窗的一半。
注意:BSD的實現是允許在空閑連結上發送大的寫操作剩下的最後的小段,也就是說,當超過1個MSS資料發送時,核心先依次發送完n個MSS的資料包,然後再發送尾部的小資料包,其間不再延時等待。(假設網路不阻塞且接收視窗足夠大) 舉個例子,比如之前的blog中的實驗,一開始client端調用socket的write操作將一個int型資料(稱為A塊)寫入到網路中,由於此時串連是閒置(也就是說還沒有未被確認的小段),因此這個int型資料會被馬上發送到server端,接著,client端又調用write操作寫入‘\r\n’(簡稱B塊),這個時候,A塊的ACK沒有返回,所以可以認為已經存在了一個未被確認的小段,所以B塊沒有立即被發送,一直等待A塊的ACK收到(大概40ms之後),B塊才被發送。整個過程如圖所示: 這裡還隱藏了一個問題,就是A塊資料的ACK為什麼40ms之後才收到。這是因為TCP/IP中不僅僅有nagle演算法,還有一個TCP確認延遲機制 。當Server端收到資料之後,它並不會馬上向client端發送ACK,而是會將ACK的發送延遲一段時間(假設為t),它希望在t時間內server端會向client端發送應答資料,這樣ACK就能夠和應答資料一起發送,就像是應答資料捎帶著ACK過去。在我之前的時間中,t大概就是40ms。這就解釋了為什麼'\r\n'(B塊)總是在A塊之後40ms才發出。
當然,TCP確認延遲40ms並不是一直不變的,TCP串連的延遲確認時間一般初始化為最小值40ms,隨後根據串連的重傳逾時時間(RTO)、上次收到資料包與本次接收資料包的時間間隔等參數進行不斷調整。另外可以通過設定TCP_QUICKACK選項來取消確認延遲。
關機與重啟
在linux命令中reboot是重新啟動,shutdown -r now是立即停止然後重新啟動,都說他們兩個是一樣的,其實是有一定的區別的。
shutdown命令可以安全地關閉或重啟Linux系統,它在系統關閉之前給系統上的所有登入使用者提示一條警告資訊。該命令還允許使用者指定一個時間參數,可以是一個精確的時間,也可以是從現在開始的一個時間段。
精確時間的格式是hh:mm,表示小時和分鐘,時間段由+ 和分鐘數表示。系統執行該命令後會自動進行資料同步的工作。
該命令的一般格式: shutdown [選項] [時間] [警告資訊]
命令中各選項的含義為:
- k 並不真正關機而只是發出警告資訊給所有使用者
- r 關機後立即重新啟動
- h 關機後不重新啟動
- f 快速關機重啟動時跳過fsck
- n 快速關機不經過init 程式
- c 取消一個已經啟動並執行shutdown
需要特別說明的是該命令只能由超級使用者使用。
例1,系統在十分鐘後關機並且馬上重新啟動: # shutdown –r +10
例2,系統馬上關機並且不重新啟動:# shutdown –h now
halt是最簡單的關機命令,其實際上是調用shutdown -h命令。halt執行時,殺死應用進程,檔案系統寫操作完成後就會停止核心。
halt命令的部分參數如下:
[-f] 沒有調用shutdown而強制關機或重啟
[-i] 關機或重新啟動之前,關掉所有的網路介面
[-p] 關機時調用poweroff,此選項為預設選項
reboot的工作過程與halt類似,其作用是重新啟動,而halt是關機。其參數也與halt類似。reboot命令重啟動系統時是刪除所有的進程,而不是平穩地終止它們。因此,使用reboot命令可以快速地關閉系統,但如果還有其它使用者在該系統上工作時,就會引起資料的丟失。所以使用reboot命令的場合主要是在單一使用者模式。
init是所有進程的祖先,其進程號始終為1。init用於切換系統的運行層級,切換的工作是立即完成的。init 0命令用於立即將系統運行層級切換為0,即關機;init 6命令用於將系統運行層級切換為6,即重新啟動 調入核心的函數:
fopen 和 exitfopen是開啟檔案的函數,檔案也可以看成是一個裝置,開啟一個裝置將導致給裝置所屬的驅動程式發送一個IRP,而與真實硬體相關的驅動程式都運行於核心.exit函數是結束進程的函數,結束進程需要訪問PCB(進程式控制制塊)和TCB(線程式控制制塊)等等一些資料結構,而這些資料都存在於核心中.原因很簡單memcpy 和 strlen 我們可以直接不調用任意函數寫出來這種函數肯定不會實現在核心的
限制Linux伺服器並發串連數
第一個,就是ip地址數,系統ip數越多,建立串連數越多。
第二個,記憶體。從設定檔角度說吧 用vim開啟設定檔: #vim /etc/sysctl.conf net.ipv4.tcp_mem[0]:低於此值,TCP沒有記憶體壓力。 net.ipv4.tcp_mem[1]:在此值下,進入記憶體壓力階段。 net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket。 上述記憶體單位是頁,而不是位元組。記憶體大小影響網路
第三個。其他,控制代碼最大數影響network 在vfs操作的上限。
sed命令: sed命令用於行的新增/刪除, 行的替換/顯示, 搜尋並替換, 直接修改檔案。 -n:使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的資料一般都會被列出到螢幕上。但如果加上 -n 參數後,則只有經過 sed 特殊處理的那一行才會被列出來。 p:列印,將某個選擇的資料印出來。通常 p 會與參數 sed -n 一起用 d:刪除 a:新增、、
fp=fopen("file","w"); 只能寫不能讀
Linux下多線程編程常用的pthread庫提供的函數名和意義
A pthread_create 建立一個線程 B pthread_join用來等待一個線程的結束 C pthread_mutex_init 初始化一個線程互斥鎖 D pthread_exit結束一個線程 pthread_join()函數等待線程指定的線程 終止。 如果線程已經終止,那麼pthread_join() 立即返回。 指定的線程必須可接合線程。
如果retval不是NULL,那麼pthread_join()退出狀態的副本目標線程(即。目標線程提供的價值pthread_exit(3))* retval所指向的位置。如果瀝青量線程被取消了,那麼PTHREAD_CANCELED放在* retval。
如果多個線程同時試圖加入相同的線程,結果是未定義的。如果線程調用pthread_join()取消,然後目標仍可接合線程(即。,它將不分離)。
該題考察Linux下的輸入/輸出重新導向
在Linux中,每個開啟的檔案被賦予一個檔案描述符(file descriptor),包括標準輸入(stdin),標準輸出(stdout)和標準錯誤輸出(stderr),由0,1,2分別描述。
A選項,command &> file 表示將標準輸出(stdout)和標準錯誤輸出(stderr)重新導向至指定的檔案file中。
B選項,語法錯誤。正確的文法是M >& N,M和N都是檔案描述符,M在不指定的情況下預設是檔案描述符1。
C選項,command > file 2>&1,是由兩部分組成。首先command>file表示將標準輸出(stdout)重新導向到檔案file中。接下來的2>&1表示將標準錯誤輸出(stderr)輸出到檔案描述符1指定的位置,即標準輸出(stdout)的位置,由於標準輸出已經沖定向到檔案file中,所以標準錯誤輸出也會重新導向到檔案file中。
D選項,command 2> file 1> file,也可看成是由兩部分組成。首先command 2> file,表示將標準錯誤輸出(stderr)重新導向到檔案file中;1> file,表示將標準輸出(stdout)重新導向到檔案file中。 最終的file中不會包含標準錯誤輸出(stderr)的資訊,因為會被之後的標準輸出(stdout)覆蓋。 大量刪除目前的目錄下尾碼名為.c的檔案
find . -name "*.c" -maxdepth 1 | xargs rm
rm *.c
rm *.c 關於Linux系統的負載(Load)
linux系統中的Load對當前CPU工作量的度量。簡單的說是進程隊列的長度。
Load Average 就是一段時間 (1 分鐘、5分鐘、15分鐘) 內平均 Load 。
通過系統命令"w"查看當前load average情況
e.g Load:2.5,1.3,1.1表示系統的負載壓力在逐漸減少(錯)原因:看網友解釋沒看懂,想了一種通俗的解釋方法,有不對望指正:前五分鐘的負載平均值是1.3,我們虛擬出一個叫做負載量的值=負載平均值x時間,前5分鐘的負載量=6.5,前十五分鐘的負載量=16.5 16.5-6.5是5到15分鐘的負載量 6.5-2.5是1到5分鐘的負載量。再求平均值,肯定不是減少的 關於ext2 ext3 ext4檔案系統
ext2與ext3
Linux ext2/ext3檔案系統使用索引節點來記錄檔案資訊,作用像windows的檔案配置表。索引節點是一個結構,它包含了一個檔案的長度、建立及修改時間、許可權、所屬關係、磁碟中的位置等資訊。一個檔案系統維護了一個索引節點的數組,每個檔案或目錄都與索引節點數組中的唯一一個元素對應。系統給每個索引節點分配了一個號碼,也就是該節點在數組中的索引號,稱為索引節點號。 linux檔案系統將檔案索引節點號和檔案名稱同時儲存在目錄中。所以,目錄只是將檔案的名稱和它的索引節點號結合在一起的一張表,目錄中每一對檔案名稱和索引節點號稱為一個串連。 對於一個檔案來說有唯一的索引節點號與之對應,對於一個索引節點號,卻可以有多個檔案名稱與之對應。因此,在磁碟上的同一個檔案可以通過不同的路徑去訪問它。
Linux之前預設情況下使用的檔案系統為Ext2,ext2檔案系統的確高效穩定。但是,隨著Linux系統在關鍵業務中的應用,Linux檔案系統的弱點也漸漸顯露出來了:其中系統預設使用的ext2檔案系統是非記錄檔系統。這在關鍵行業的應用是一個致命的弱點。本文向各位介紹Linux下使用ext3記錄檔系統應用。
Ext3檔案系統是直接從Ext2檔案系統發展而來,目前ext3檔案系統已經非常穩定可靠。它完全相容ext2檔案系統。使用者可以平滑地過渡到一個日誌功能健全的檔案系統中來。這實際上了也是ext3記錄檔系統初始設計的初衷。
然而:
inode分為內存中的inode和檔案系統中的inode,為了避免混淆,我們稱前者為VFS inode, 而後者以EXT2為代表,我們稱為Ext2 inode。下面分別對VFS inodee與Ext2 inode做一下簡單的描述: 1、VFS inode包含檔案訪問許可權、屬主、組、大小、產生時間、訪問時間、最後修改時間等資訊。它是linux管理檔案系統的最基本單位,也是檔案系統連接任何子目錄、檔案的橋樑。inode結構中的靜態資訊取自物理設備上的檔案系統,由檔案系統指定的函數填寫,它只存在於內存中,可以通過inode緩存訪問。雖然每個檔案都有相應的inode結點,但是只有在需要的時候系統才會在內存中為其建立相應的inode數據結構,建立的inode結構將形成一個鏈表,我們可以通過遍歷這個鏈表去得到我們需要的檔案結點,VFS也為已指派的inode構造緩存和雜湊表,以提 高系統效能。inode結構中的struct inode_operations *i_op為我們提供了一個inode巨集指令清單,通過這個列表提供的函數我們可以對VFS inode結點進行各種操作。每個inode結構都有一個i結點號i_ino,在同一個檔案系統中每個i結點號是唯一的。 2、EXT2 inode用來定義檔案系統的結構以及描述系統中每個檔案的管理資訊,每個檔案都有且只有一個inode,即使檔案中沒有數據,其索引結點也是存在的。每個檔案用一個單獨的Ext2 inode結構來描述,而且每一個inode都有唯一的標誌號。Ext2 inode為內存中的inode結構提供了檔案的基本資料,隨著內存中inode結構的變化,系統也將更新Ext2 inode中相應的內容。Ext2 inode對應的是Ext2_inode結構。
EXT2 inode不包含檔案的建立時間,ext3 inode包含
沒有存取權限的記錄。存取權限是根據所屬使用者的許可權而定的。
Ext3記錄檔系統的特點
1、高可用性
系統使用了ext3檔案系統後,即使在非順利關機後,系統也不需要檢查檔案系統。宕機發生後,恢複ext3檔案系統的時間只要數十秒鐘。
2、資料的完整性:
ext3檔案系統能夠極大地提高檔案系統的完整性,避免了意外宕機對檔案系統的破壞。在保證資料完整性方面,ext3檔案系統有2種模式可供選擇。其中之一就是“同時保持檔案系統及資料的一致性”模式。採用這種方式,你永遠不再會看到由於非順利關機而儲存在磁碟上的垃圾檔案。
3、檔案系統的速度:
儘管使用ext3檔案系統時,有時在儲存資料時可能要多次寫資料,但是,從總體上看來,ext3比ext2的效能還要好一些。這是因為ext3的日誌功能對磁碟的磁碟機讀寫頭進行了最佳化。所以,檔案系統的讀寫效能較之Ext2檔案系統並來說,效能並沒有降低。
4、資料轉換
由ext2檔案系統轉換成ext3檔案系統非常容易,只要簡單地鍵入兩條命令即可完成整個轉換過程,使用者不用花時間備份、恢複、格式化分區等。用一個ext3檔案系統提供的小工具tune2fs,它可以將ext2檔案系統輕鬆轉換為ext3記錄檔系統。另外,ext3檔案系統可以不經任何更改,而直接載入成為ext2檔案系統。
5、多種記錄模式
Ext3有多種記錄模式,一種工作模式是對所有的檔案資料及metadata(定義檔案系統中資料的資料,即資料的資料)進行日誌記錄(data=journal模式);另一種工作模式則是只對metadata記錄日誌,而不對資料進行日誌記錄,也即所謂data=ordered或者data=writeback模式。系統管理人員可以根據系統的實際工作要求,在系統的工作速度與檔案資料的一致性之間作出選擇。 ext3的優點
為什麼你需要從ext2遷移到ext3呢。以下有四個主要原因:可用性、資料完整性、速度、易於遷移。
最新的ext4
Linux kernel 自 2.6.28 開始正式支援新的檔案系統 Ext4。 Ext4 是 Ext3 的改進版,修改了 Ext3 中部分重要的資料結構,而不僅僅像 Ext3 對 Ext2 那樣,只是增加了一個日誌功能而已。Ext4 可以提供更佳的效能和可靠性,還有更為豐富的功能:
1. 與 Ext3 相容。 執行若干條命令,就能從 Ext3 線上遷移到 Ext4,而無須重新格式化磁碟或重新安裝系統。原有 Ext3 資料結構照樣保留,Ext4 作用於新資料,當然,整個檔案系統因此也就獲得了 Ext4 所支援的更大容量。
2. 更大的檔案系統和更大的檔案。 較之 Ext3 目前所支援的最大 16TB 檔案系統和最大 2TB 檔案,Ext4 分別支援 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的檔案系統,以及 16TB 的檔案。
3. 無限數量的子目錄。 Ext3 目前只支援 32,000 個子目錄,而 Ext4 支援無限數量的子目錄。
4. Extents。 Ext3 採用間接區塊對應,當操作大檔案時,效率極其低下。比如一個 100MB 大小的檔案,在 Ext3 中要建立 25,600 個資料區塊(每個資料區塊大小為 4KB)的映射表。而 Ext4 引入了現代檔案系統中流行的 extents 概念,每個 extent 為一組連續的資料區塊,上述檔案則表示為“該檔案資料儲存在接下來的 25,600 個資料區塊中”,提高了不少效率。
5. 多塊分配。 當寫入資料到 Ext3 檔案系統中時,Ext3 的資料區塊分配器每次只能分配一個 4KB 的塊,寫一個 100MB 檔案就要調用 25,600 次資料區塊分配器,而 Ext4 的多塊分配器“multiblock allocator”(mballoc) 支援一次調用分配多個資料區塊。
6. 延遲分配。 Ext3 的資料區塊分配策略是儘快分配,而 Ext4 和其它現代檔案作業系統的策略是儘可能地延遲分配,直到檔案在 cache 中寫完才開始分配資料區塊並寫入磁碟,這樣就能最佳化整個檔案的資料區塊分配,與前兩種特性搭配起來可以顯著提升效能。
7. 快速 fsck。 以前執行 fsck 第一步就會很慢,因為它要檢查所有的 inode,現在 Ext4 給每個組的 inode 表中都添加了一份未使用 inode 的列表,今後 fsck Ext4 檔案系統就可以跳過它們而只去檢查那些在用的 inode 了。
8. 日誌校正。 日誌是最常用的部分,也極易導致磁碟硬體故障,而從損壞的日誌中恢複資料會導致更多的資料損毀。Ext4 的日誌校正功能可以很方便地判斷日誌資料是否損壞,而且它將 Ext3 的兩階段日誌機制合并成一個階段,在增加安全性的同時提高了效能。
9. “無日誌”(No Journaling)模式。 日誌總歸有一些開銷,Ext4 允許關閉日誌,以便某些有特殊需求的使用者可以藉此提升效能。
10. 線上磁碟重組。 儘管延遲分配、多塊分配和 extents 能有效減少檔案系統片段,但片段還是不可避免會產生。Ext4 支援線上磁碟重組,並將提供 e4defrag 工具進行個別檔案或整個檔案系統的磁碟重組。
11. inode 相關特性。 Ext4 支援更大的 inode,較之 Ext3 預設的 inode 大小 128 位元組,Ext4 為了在 inode 中容納更多的擴充屬性(如納秒時間戳記或 inode 版本),預設 inode 大小為 256 位元組。Ext4 還支援快速擴充屬性(fast extended attributes)和 inode 保留(inodes reservation)。
12. 持久預分配(Persistent preallocation)。 P2P 軟體為了保證下載檔案有足夠的空間存放,常常會預先建立一個與所下載檔案大小相同的空檔案,以免未來的數小時或數天之內磁碟空間不足導致下載失敗。 Ext4 在檔案系統層面實現了持久預分配並提供相應的 API(libc 中的 posix_fallocate()),比應用軟體自己實現更有效率。
13. 預設啟用 barrier。 磁碟上配有內部緩衝,以便重新調整批量資料的寫操作順序,最佳化寫入效能,因此檔案系統必須在日誌資料寫入磁碟之後才能寫 commit 記錄,若 commit 記錄寫入在先,而日誌有可能損壞,那麼就會影響資料完整性。Ext4 預設啟用 barrier,只有當 barrier 之前的資料全部寫入磁碟,才能寫 barrier 之後的資料。(可通過 "mount -o barrier=0" 命令禁用該特性。) 轉:http://blog.csdn.net/macrossdzh/article/details/5973639
用什麼指令顯示目前的目錄
pwd 或者echo $(pwd) 都可以
$pwd是不可以的,因為$表示引用pwd的結果,但是沒有對這個結果做任何處理;echo $(pwd) 或者echo $PWD都可以,前者是表示引用pwd命令的輸出並且列印到螢幕;後者的PWD是一個環境變數;
使用shell時,預設的環境變數放在哪裡。
~/.profile
/etc/profile:此檔案為系統的為每個使用者佈建環境資訊,當使用者第一次登入時,該檔案被執行. 並從/etc/profile.d 目錄的設定檔中搜集shell的設定.
/etc/bashrc :為每一個運行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取.
~/.bash_profile :每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該
檔案僅僅執行一次!預設情況下,他設定一些環境變數,執行使用者的.bashrc檔案.
~/.bashrc :該檔案包含專用於你的bash shell的bash資訊,當登入時以及每次開啟新的shell時,該
該檔案被讀取.
~/.bash_logout :當每次退出系統(退出bash shell)時,執行該檔案.
bash_profile 、.bashrc 、和.bash_logout
上面這三個檔案是bash shell的使用者環境設定檔,位於使用者的主目錄下。 .bash_profile是最重要的一個設定檔,它在使用者每次登入系統時被讀取,裡面的所有 命令都會被bash執行。.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)兩個檔案是.bash_profile的同義字,目的是為了相容其它Shell。 在Debian中使用.profile檔案代 替.bash_profile檔案。 .bashrc 檔案會在bash shell調用另一個bashshell時讀取,也就是在shell中再鍵入bash命令啟動一個新shell時就會去讀該檔案。這樣可有效分離登入和子shell所需的環境。但一般 來說都會在.bash_profile裡調用.bashrc指令碼以便統一配置使用者環境。
.bash_logout 在退出shell時被讀取。所以我們可把一些清理工作的命令放到這檔案中。
登入Linux時,首先啟動 /etc/profile 檔案,然後再啟動使用者目錄下的 ~/.bash_profile、~/.bash_login或~/.profile檔案中的其中一個(根據不同的linux作業系統的不同,命名不一樣),執行的順序為:~/.bash_profile、~/.bash_login、 ~/.profile。
如果 ~/.bash_profile檔案存在的話,一般還會執行 ~/.bashrc檔案。