導航:首頁 > 操作系統 > linux經典面試題

linux經典面試題

發布時間:2022-09-08 09:39:32

❶ 一道linux shell面試題:如何用shell命令統計排序網站域名的訪問量。

第一個「|」 後面緊跟的是awk命令
這個命令含義是:將前面log中文件按「空格」或「製表符」分割,然後再以「/」分割第7個域,存入數組「D」中,這個域應該是網址,網址的格式一般是「http://..com/question/210746146.html」,所以以「/」分割後得到的第三個域 D[3] 就是「..com」,將這個字元串作為 key 存入數組 A 中,並且遇到相同的字元串時,A[key] 就加1,這樣在awk 的END 段遍歷數組A 就可以得到 key 和 key的計數(A[key]) 了
下一個「|」後面跟的命令 sort -nr 是指 按自然數大小(-n)和反序(-r) 排列
最後個「|」後面跟的命令 head 就是看輸出的前10行

❷ 面試 linux 文件系統怎樣io到底層

前言:本文主要講解LinuxIO調度層的三種模式:cfp、deadline和noop,並給出各自的優化和適用場景建議。IO調度發生在Linux內核的IO調度層。這個層次是針對Linux的整體IO層次體系來說的。從read()或者write()系統調用的角度來說,Linux整體IO體系可以分為七層,它們分別是:VFS層:虛擬文件系統層。由於內核要跟多種文件系統打交道,而每一種文件系統所實現的數據結構和相關方法都可能不盡相同,所以,內核抽象了這一層,專門用來適配各種文件系統,並對外提供統一操作介面。文件系統層:不同的文件系統實現自己的操作過程,提供自己特有的特徵,具體不多說了,大家願意的話自己去看代碼即可。頁緩存層:負責真對page的緩存。通用塊層:由於絕大多數情況的io操作是跟塊設備打交道,所以Linux在此提供了一個類似vfs層的塊設備操作抽象層。下層對接各種不同屬性的塊設備,對上提供統一的BlockIO請求標准。IO調度層:因為絕大多數的塊設備都是類似磁碟這樣的設備,所以有必要根據這類設備的特點以及應用的不同特點來設置一些不同的調度演算法和隊列。以便在不同的應用環境下有針對性的提高磁碟的讀寫效率,這里就是大名鼎鼎的Linux電梯所起作用的地方。針對機械硬碟的各種調度方法就是在這實現的。塊設備驅動層:驅動層對外提供相對比較高級的設備操作介面,往往是C語言的,而下層對接設備本身的操作方法和規范。塊設備層:這層就是具體的物理設備了,定義了各種真對設備操作方法和規范。有一個已經整理好的[LinuxIO結構圖],非常經典,一圖勝千言:我們今天要研究的內容主要在IO調度這一層。它要解決的核心問題是,如何提高塊設備IO的整體性能?這一層也主要是針對機械硬碟結構而設計的。眾所周知,機械硬碟的存儲介質是磁碟,磁頭在碟片上移動進行磁軌定址,行為類似播放一張唱片。這種結構的特點是,順序訪問時吞吐量較高,但是如果一旦對碟片有隨機訪問,那麼大量的時間都會浪費在磁頭的移動上,這時候就會導致每次IO的響應時間變長,極大的降低IO的響應速度。磁頭在碟片上尋道的操作,類似電梯調度,實際上在最開始的時期,Linux把這個演算法命名為Linux電梯演算法,即:如果在尋道的過程中,能把順序路過的相關磁軌的數據請求都「順便」處理掉,那麼就可以在比較小影響響應速度的前提下,提高整體IO的吞吐量。這就是我們為什麼要設計IO調度演算法的原因。目前在內核中默認開啟了三種演算法/模式:noop,cfq和deadline。嚴格算應該是兩種:因為第一種叫做noop,就是空操作調度演算法,也就是沒有任何調度操作,並不對io請求進行排序,僅僅做適當的io合並的一個fifo隊列。目前內核中默認的調度演算法應該是cfq,叫做完全公平隊列調度。這個調度演算法人如其名,它試圖給所有進程提供一個完全公平的IO操作環境。註:請大家一定記住這個詞語,cfq,完全公平隊列調度,不然下文就沒法看了。cfq為每個進程創建一個同步IO調度隊列,並默認以時間片和請求數限定的方式分配IO資源,以此保證每個進程的IO資源佔用是公平的,cfq還實現了針對進程級別的優先順序調度,這個我們後面會詳細解釋。查看和修改IO調度演算法的方法是:cfq是通用伺服器比較好的IO調度演算法選擇,對桌面用戶也是比較好的選擇。但是對於很多IO壓力較大的場景就並不是很適應,尤其是IO壓力集中在某些進程上的場景。因為這種場景我們需要的滿足某個或者某幾個進程的IO響應速度,而不是讓所有的進程公平的使用IO,比如資料庫應用。deadline調度(最終期限調度)就是更適合上述場景的解決方案。deadline實現了四個隊列:其中兩個分別處理正常read和write,按扇區號排序,進行正常io的合並處理以提高吞吐量。因為IO請求可能會集中在某些磁碟位置,這樣會導致新來的請求一直被合並,可能會有其他磁碟位置的io請求被餓死。另外兩個處理超時read和write的隊列,按請求創建時間排序,如果有超時的請求出現,就放進這兩個隊列,調度演算法保證超時(達到最終期限時間)的隊列中的請求會優先被處理,防止請求被餓死。不久前,內核還是默認標配四種演算法,還有一種叫做as的演算法(Anticipatoryscheler),預測調度演算法。一個高大上的名字,搞得我一度認為Linux內核都會算命了。結果發現,無非是在基於deadline演算法做io調度的之前等一小會時間,如果這段時間內有可以合並的io請求到來,就可以合並處理,提高deadline調度的在順序讀寫情況下的數據吞吐量。其實這根本不是啥預測,我覺得不如叫撞大運調度演算法,當然這種策略在某些特定場景差效果不錯。但是在大多數場景下,這個調度不僅沒有提高吞吐量,還降低了響應速度,所以內核乾脆把它從默認配置里刪除了。畢竟Linux的宗旨是實用,而我們也就不再這個調度演算法上多費口舌了。1、cfq:完全公平隊列調度cfq是內核默認選擇的IO調度隊列,它在桌面應用場景以及大多數常見應用場景下都是很好的選擇。如何實現一個所謂的完全公平隊列(CompletelyFairQueueing)?首先我們要理解所謂的公平是對誰的公平?從操作系統的角度來說,產生操作行為的主體都是進程,所以這里的公平是針對每個進程而言的,我們要試圖讓進程可以公平的佔用IO資源。那麼如何讓進程公平的佔用IO資源?我們需要先理解什麼是IO資源。當我們衡量一個IO資源的時候,一般喜歡用的是兩個單位,一個是數據讀寫的帶寬,另一個是數據讀寫的IOPS。帶寬就是以時間為單位的讀寫數據量,比如,100Mbyte/s。而IOPS是以時間為單位的讀寫次數。在不同的讀寫情境下,這兩個單位的表現可能不一樣,但是可以確定的是,兩個單位的任何一個達到了性能上限,都會成為IO的瓶頸。從機械硬碟的結構考慮,如果讀寫是順序讀寫,那麼IO的表現是可以通過比較少的IOPS達到較大的帶寬,因為可以合並很多IO,也可以通過預讀等方式加速數據讀取效率。當IO的表現是偏向於隨機讀寫的時候,那麼IOPS就會變得更大,IO的請求的合並可能性下降,當每次io請求數據越少的時候,帶寬表現就會越低。從這里我們可以理解,針對進程的IO資源的主要表現形式有兩個:進程在單位時間內提交的IO請求個數和進程佔用IO的帶寬。其實無論哪個,都是跟進程分配的IO處理時間長度緊密相關的。有時業務可以在較少IOPS的情況下佔用較大帶寬,另外一些則可能在較大IOPS的情況下佔用較少帶寬,所以對進程佔用IO的時間進行調度才是相對最公平的。即,我不管你是IOPS高還是帶寬佔用高,到了時間咱就換下一個進程處理,你愛咋樣咋樣。所以,cfq就是試圖給所有進程分配等同的塊設備使用的時間片,進程在時間片內,可以將產生的IO請求提交給塊設備進行處理,時間片結束,進程的請求將排進它自己的隊列,等待下次調度的時候進行處理。這就是cfq的基本原理。當然,現實生活中不可能有真正的「公平」,常見的應用場景下,我們很肯能需要人為的對進程的IO佔用進行人為指定優先順序,這就像對進程的CPU佔用設置優先順序的概念一樣。所以,除了針對時間片進行公平隊列調度外,cfq還提供了優先順序支持。每個進程都可以設置一個IO優先順序,cfq會根據這個優先順序的設置情況作為調度時的重要參考因素。優先順序首先分成三大類:RT、BE、IDLE,它們分別是實時(RealTime)、最佳效果(BestTry)和閑置(Idle)三個類別,對每個類別的IO,cfq都使用不同的策略進行處理。另外,RT和BE類別中,分別又再劃分了8個子優先順序實現更細節的QOS需求,而IDLE只有一個子優先順序。另外,我們都知道內核默認對存儲的讀寫都是經過緩存(buffer/cache)的,在這種情況下,cfq是無法區分當前處理的請求是來自哪一個進程的。只有在進程使用同步方式(syncread或者syncwirte)或者直接IO(DirectIO)方式進行讀寫的時候,cfq才能區分出IO請求來自哪個進程。所以,除了針對每個進程實現的IO隊列以外,還實現了一個公共的隊列用來處理非同步請求。當前內核已經實現了針對IO資源的cgroup資源隔離,所以在以上體系的基礎上,cfq也實現了針對cgroup的調度支持。總的來說,cfq用了一系列的數據結構實現了以上所有復雜功能的支持,大家可以通過源代碼看到其相關實現,文件在源代碼目錄下的block/cfq-iosched.c。1.1cfq設計原理在此,我們對整體數據結構做一個簡要描述:首先,cfq通過一個叫做cfq_data的數據結構維護了整個調度器流程。在一個支持了cgroup功能的cfq中,全部進程被分成了若干個contralgroup進行管理。每個cgroup在cfq中都有一個cfq_group的結構進行描述,所有的cgroup都被作為一個調度對象放進一個紅黑樹中,並以vdisktime為key進行排序。vdisktime這個時間紀錄的是當前cgroup所佔用的io時間,每次對cgroup進行調度時,總是通過紅黑樹選擇當前vdisktime時間最少的cgroup進行處理,以保證所有cgroups之間的IO資源佔用「公平」。當然我們知道,cgroup是可以對blkio進行資源比例分配的,其作用原理就是,分配比例大的cgroup佔用vdisktime時間增長較慢,分配比例小的vdisktime時間增長較快,快慢與分配比例成正比。這樣就做到了不同的cgroup分配的IO比例不一樣,並且在cfq的角度看來依然是「公平「的。選擇好了需要處理的cgroup(cfq_group)之後,調度器需要決策選擇下一步的service_tree。service_tree這個數據結構對應的都是一系列的紅黑樹,主要目的是用來實現請求優先順序分類的,就是RT、BE、IDLE的分類。每一個cfq_group都維護了7個service_trees,其定義如下:其中service_tree_idle就是用來給IDLE類型的請求進行排隊用的紅黑樹。而上面二維數組,首先第一個維度針對RT和BE分別各實現了一個數組,每一個數組中都維護了三個紅黑樹,分別對應三種不同子類型的請求,分別是:SYNC、SYNC_NOIDLE以及ASYNC。我們可以認為SYNC相當於SYNC_IDLE並與SYNC_NOIDLE對應。idling是cfq在設計上為了盡量合並連續的IO請求以達到提高吞吐量的目的而加入的機制,我們可以理解為是一種「空轉」等待機制。空轉是指,當一個隊列處理一個請求結束後,會在發生調度之前空等一小會時間,如果下一個請求到來,則可以減少磁頭定址,繼續處理順序的IO請求。為了實現這個功能,cfq在service_tree這層數據結構這實現了SYNC隊列,如果請求是同步順序請求,就入隊這個servicetree,如果請求是同步隨機請求,則入隊SYNC_NOIDLE隊列,以判斷下一個請求是否是順序請求。所有的非同步寫操作請求將入隊ASYNC的servicetree,並且針對這個隊列沒有空轉等待機制。此外,cfq還對SSD這樣的硬碟有特殊調整,當cfq發現存儲設備是一個ssd硬碟這樣的隊列深度更大的設備時,所有針對單獨隊列的空轉都將不生效,所有的IO請求都將入隊SYNC_NOIDLE這個servicetree。每一個servicetree都對應了若干個cfq_queue隊列,每個cfq_queue隊列對應一個進程,這個我們後續再詳細說明。cfq_group還維護了一個在cgroup內部所有進程公用的非同步IO請求隊列,其結構如下:非同步請求也分成了RT、BE、IDLE這三類進行處理,每一類對應一個cfq_queue進行排隊。BE和RT也實現了優先順序的支持,每一個類型有IOPRIO_BE_NR這么多個優先順序,這個值定義為8,數組下標為0-7。我們目前分析的內核代碼版本為Linux4.4,可以看出,從cfq的角度來說,已經可以實現非同步IO的cgroup支持了,我們需要定義一下這里所謂非同步IO的含義,它僅僅表示從內存的buffer/cache中的數據同步到硬碟的IO請求,而不是aio(man7aio)或者linux的native非同步io以及lio機制,實際上這些所謂的「非同步」IO機制,在內核中都是同步實現的(本質上馮諾伊曼計算機沒有真正的「非同步」機制)。我們在上面已經說明過,由於進程正常情況下都是將數據先寫入buffer/cache,所以這種非同步IO都是統一由cfq_group中的async請求隊列處理的。那麼為什麼在上面的service_tree中還要實現和一個ASYNC的類型呢?這當然是為了支持區分進程的非同步IO並使之可以「完全公平」做准備嘍。實際上在最新的cgroupv2的blkio體系中,內核已經支持了針對bufferIO的cgroup限速支持,而以上這些可能容易混淆的一堆類型,都是在新的體系下需要用到的類型標記。新體系的復雜度更高了,功能也更加強大,但是大家先不要著急,正式的cgroupv2體系,在Linux4.5發布的時候會正式跟大家見面。我們繼續選擇service_tree的過程,三種優先順序類型的service_tree的選擇就是根據類型的優先順序來做選擇的,RT優先順序最高,BE其次,IDLE最低。就是說,RT里有,就會一直處理RT,RT沒了再處理BE。每個service_tree對應一個元素為cfq_queue排隊的紅黑樹,而每個cfq_queue就是內核為進程(線程)創建的請求隊列。每一個cfq_queue都會維護一個rb_key的變數,這個變數實際上就是這個隊列的IO服務時間(servicetime)。這里還是通過紅黑樹找到servicetime時間最短的那個cfq_queue進行服務,以保證「完全公平」。選擇好了cfq_queue之後,就要開始處理這個隊列里的IO請求了。這里的調度方式基本跟deadline類似。cfq_queue會對進入隊列的每一個請求進行兩次入隊,一個放進fifo中,另一個放進按訪問扇區順序作為key的紅黑樹中。默認從紅黑樹中取請求進行處理,當請求的延時時間達到deadline時,就從紅黑樹中取等待時間最長的進行處理,以保證請求不被餓死。這就是整個cfq的調度流程,當然其中還有很多細枝末節沒有交代,比如合並處理以及順序處理等等。1.2cfq的參數調整理解整個調度流程有助於我們決策如何調整cfq的相關參數。所有cfq的可調參數都可以在/sys/class/block/sda/queue/iosched/目錄下找到,當然,在你的系統上,請將sda替換為相應的磁碟名稱。我們來看一下都有什麼:這些參數部分是跟機械硬碟磁頭尋道方式有關的,如果其說明你看不懂,請先補充相關知識:back_seek_max:磁頭可以向後定址的最大范圍,默認值為16M。back_seek_penalty:向後定址的懲罰系數。這個值是跟向前定址進行比較的。以上兩個是為了防止磁頭尋道發生抖動而導致定址過慢而設置的。基本思路是這樣,一個io請求到來的時候,cfq會根據其定址位置預估一下其磁頭尋道成本。設置一個最大值back_seek_max,對於請求所訪問的扇區號在磁頭後方的請求,只要定址范圍沒有超過這個值,cfq會像向前定址的請求一樣處理它。再設置一個評估成本的系數back_seek_penalty,相對於磁頭向前定址,向後定址的距離為1/2(1/back_seek_penalty)時,cfq認為這兩個請求定址的代價是相同。這兩個參數實際上是cfq判斷請求合並處理的條件限制,凡事復合這個條件的請求,都會盡量在本次請求處理的時候一起合並處理。fifo_expire_async:設置非同步請求的超時時間。同步請求和非同步請求是區分不同隊列處理的,cfq在調度的時候一般情況都會優先處理同步請求,之後再處理非同步請求,除非非同步請求符合上述合並處理的條件限制范圍內。當本進程的隊列被調度時,cfq會優先檢查是否有非同步請求超時,就是超過fifo_expire_async參數的限制。如果有,則優先發送一個超時的請求,其餘請求仍然按照優先順序以及扇區編號大小來處理。fifo_expire_sync:這個參數跟上面的類似,區別是用來設置同步請求的超時時間。slice_idle:參數設置了一個等待時間。這讓cfq在切換cfq_queue或servicetree的時候等待一段時間,目的是提高機械硬碟的吞吐量。一般情況下,來自同一個cfq_queue或者servicetree的IO請求的定址局部性更好,所以這樣可以減少磁碟的定址次數。這個值在機械硬碟上默認為非零。當然在固態硬碟或者硬RAID設備上設置這個值為非零會降低存儲的效率,因為固態硬碟沒有磁頭定址這個概念,所以在這樣的設備上應該設置為0,關閉此功能。group_idle:這個參數也跟上一個參數類似,區別是當cfq要切換cfq_group的時候會等待一段時間。在cgroup的場景下,如果我們沿用slice_idle的方式,那麼空轉等待可能會在cgroup組內每個進程的cfq_queue切換時發生。這樣會如果這個進程一直有請求要處理的話,那麼直到這個cgroup的配額被耗盡,同組中的其它進程也可能無法被調度到。這樣會導致同組中的其它進程餓死而產生IO性能瓶頸。在這種情況下,我們可以將slice_idle=0而group_idle=8。這樣空轉等待就是以cgroup為單位進行的,而不是以cfq_queue的進程為單位進行,以防止上述問題產生。low_latency:這個是用來開啟或關閉cfq的低延時(lowlatency)模式的開關。當這個開關打開時,cfq將會根據target_latency的參數設置來對每一個進程的分片時間(slicetime)進行重新計算。這將有利於對吞吐量的公平(默認是對時間片分配的公平)。關閉這個參數(設置為0)將忽略target_latency的值。這將使系統中的進程完全按照時間片方式進行IO資源分配。這個開關默認是打開的。我們已經知道cfq設計上有「空轉」(idling)這個概念,目的是為了可以讓連續的讀寫操作盡可能多的合並處理,減少磁頭的定址操作以便增大吞吐量。如果有進程總是很快的進行順序讀寫,那麼它將因為cfq的空轉等待命中率很高而導致其它需要處理IO的進程響應速度下降,如果另一個需要調度的進程不會發出大量順序IO行為的話,系統中不同進程IO吞吐量的表現就會很不均衡。就比如,系統內存的cache中有很多臟頁要寫回時,桌面又要打開一個瀏覽器進行操作,這時臟頁寫回的後台行為就很可能會大量命中空轉時間,而導致瀏覽器的小量IO一直等待,讓用戶感覺瀏覽器運行響應速度變慢。這個low_latency主要是對這種情況進行優化的選項,當其打開時,系統會根據target_latency的配置對因為命中空轉而大量佔用IO吞吐量的進程進行限制,以達到不同進程IO佔用的吞吐量的相對均衡。這個開關比較合適在類似桌面應用的場景下打開。target_latency:當low_latency的值為開啟狀態時,cfq將根據這個值重新計算每個進程分配的IO時間片長度。quantum:這個參數用來設置每次從cfq_queue中處理多少個IO請求。在一個隊列處理事件周期中,超過這個數字的IO請求將不會被處理。這個參數只對同步的請求有效。slice_sync:當一個cfq_queue隊列被調度處理時,它可以被分配的處理總時間是通過這個值來作為一個計算參數指定的。公式為:time_slice=slice_sync+(slice_sync/5*(4-prio))。這個參數對同步請求有效。slice_async:這個值跟上一個類似,區別是對非同步請求有效。slice_async_rq:這個參數用來限制在一個slice的時間范圍內,一個隊列最多可以處理的非同步請求個數。請求被處理的最大個數還跟相關進程被設置的io優先順序有關。1.3cfq的IOPS模式我們已經知道,默認情況下cfq是以時間片方式支持的帶優先順序的調度來保證IO資源佔用的公平。高優先順序的進程將得到的時間片長度,而低優先順序的進程時間片相對較小。當我們的存儲是一個高速並且支持NCQ(原生指令隊列)的設備的時候,我們最好可以讓其可以從多個cfq隊列中處理多路的請求,以便提升NCQ的利用率。此時使用時間片的分配方式分配資源就顯得不合時宜了,因為基於時間片的分配,同一時刻最多能處理的請求隊列只有一個。這時,我們需要切換cfq的模式為IOPS模式。切換方式很簡單,就是將slice_idle=0即可。內核會自動檢測你的存儲設備是否支持NCQ,如果支持的話cfq會自動切換為IOPS模式。另外,在默認的基於優先順序的時間片方式下,我們可以使用ionice命令來調整進程的IO優先順序。進程默認分配的IO優先順序是根據進程的nice值計算而來的,計算方法可以在manionice中看到,這里不再廢話。2、deadline:最終期限調度deadline調度演算法相對cfq要簡單很多。其設計目標是:在保證請求按照設備扇區的順序進行訪問的同時,兼顧其它請求不被餓死,要在一個最終期限前被調度到。我們知道磁頭對磁碟的尋道是可以進行順序訪問和隨機訪問的,因為尋道延時時間的關系,順序訪問時IO的吞吐量更大,隨機訪問的吞吐量小。如果我們想為一個機械硬碟進行吞吐量優化的話,那麼就可以讓調度器按照盡量復合順序訪問的IO請求進行排序,之後請求以這樣的順序發送給硬碟,就可以使IO的吞吐量更大。但是這樣做也有另一個問題,就是如果此時出現了一個請求,它要訪問的磁軌離目前磁頭所在磁軌很遠,應用的請求又大量集中在目前磁軌附近。導致大量請求一直會被合並和插隊處理,而那個要訪問比較遠磁軌的請求將因為一直不能被調度而餓死。deadline就是這樣一種調度器,能在保證IO最大吞吐量的情況下,盡量使遠端請求在一個期限內被調度而不被餓死的調度器。

❸ Linux系統工程師面試題附答案

一、簡答題

1.如何將本地80埠的請求轉發到8080埠,當前主機IP為192.168.16.1,其中本地網卡eth0:

答:# iptables -t nat -A PREROUTING -d 192.168.16.1 -p tcp --dport 80 -j DNAT --to 192.168.16.1:8080

或 者:# iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

2.什麼是NAT,常見分為那幾種,DNAT與SNAT有什麼不同,應用事例有那些?

SNAT,DNAT,MASQUERADE都是NAT。

MASQUERADE是SNAT的一個特例。

SNAT是指在數據包從網卡發送出去的時候,把數據包中的源地址部分替換為指定的IP,這樣,接收方就認為數據包的來源是被替換的那個IP的主機。

MASQUERADE是用發送數據的網卡上的IP來替換源IP,因此,對於那些IP不固定的場合,比如撥號網路或者通過dhcp分配IP的情況下,就得用MASQUERADE。

DNAT,就是指數據包從網卡發送出去的時候,修改數據包中的目的IP,表現為如果你想訪問A,可是因為網關做了DNAT,把所有訪問A的數據包的目的IP全部修改為B,那麼,你實際上訪問的是B

因為,路由是按照目的地址來選擇的,因此,DNAT是在PREROUTING鏈上來進行的,而SNAT是在數據包發送出去的時候才進行,因此是在POSTROUTING鏈上進行的。

3.包過濾防火牆與代理應用防火牆有什麼區別,能列舉幾種相應的產品嗎?

4.iptables是否支持time時間控制用戶行為,如有請寫出具體操作步驟。

5.說出你知道的幾種linux/unix發行版本。

Redhat、CentOS、Fedora、SuSE、Slackware、Gentoo、Debian、Ubuntu、FreeBSD、Solaris、SCO、AIX、HP…

6.列出linux常見打包工具並寫相應解壓縮參數(至少三種)

7.計劃每星期天早8點伺服器定時重啟,如何實現?

8.列出作為完整郵件系統的軟體,至少二類。

9,當用戶在瀏覽器當中輸入一個網站,說說計算機對dns解釋經過那些流程?註:本機跟本地dns還沒有緩存。

答:

a.用戶輸入網址到瀏覽器;

b.瀏覽器發出DNS請求信息;

c.計算機首先查詢本機HOST文件,看是否存在,存在直接返回結果,不存在,繼續下一步;

d.計算機按照本地DNS的順序,向合法dns伺服器查詢IP結果;

e.合法dns返回dns結果給本地dns,本地dns並緩存本結果,直到TTL過期,才再次查詢此結果;

f.返回IP結果給瀏覽器;

g.瀏覽器根據IP信息,獲取頁面;

10,我們都知道,dns既採用了tcp協議,又採用了udp協議,什麼時候採用tcp協議?什麼時候採用udp協議?為什麼要這么設計?

答:這個題需要理解的東西比較的多,分一下幾個方面

a,從數據包大小上分:UDP的最大包長度是65507個位元組,響應dns查詢的時候數據包長度超過512個位元組,而返回的只要前512個位元組,這時名字 解釋器通常使用TCP從發原來的請求。

b,從協議本身來分:大部分的情況下使用UDP協議,大家都知道UDP協議是一種不可靠的協議,dns不像其它的使用UDP的Internet應用 (如:TFTP,BOOTP和SNMP等),大部分集中在區域網,dns查詢和響應需要經過廣域網,分組丟失和往返時間的不確定性在廣域網比區域網上更 大,這就要求dns客戶端需要好的重傳和超時演算法,這時候使用TCP。

11,一個EXT3的文件分區,當使用touch test.file命令創建一個新文件時報錯,報錯的信息是提示磁碟已滿,但是採用df -h命令查看磁碟大小時,只使用了,60%的磁碟空間,為什麼會出現這個情況,說說你的理由。

答:兩種情況,一種是磁碟配額問題,另外一種就是EXT3文件系統的設計不適合很多小文件跟大文件的一種文件格式,出現很多小文件時,容易導致inode 耗盡了。

12,我們都知道FTP協議有兩種工作模式,說說它們的大概的一個工作流程?

FTP兩種工作模式:主動模式(Active FTP)和被動模式(Passive FTP)

在主動模式下,FTP客戶端隨機開啟一個大於1024的埠N向伺服器的21號埠發起連接,然後開放N+1號埠進行監聽,並向伺服器發出PORT N+1命令。

伺服器接收到命令後,會用其本地的FTP數據埠(通常是20)來連接客戶端指定的埠N+1,進行數據傳輸。

在被動模式下,FTP客戶端隨機開啟一個大於1024的埠N向伺服器的21號埠發起連接,同時會開啟N+1號埠。然後向伺服器發送PASV命令,通 知伺服器自己處於被動模式。伺服器收到命令後,會開放一個大於1024的埠P進行監聽,然後用PORT P命令通知客戶端,自己的數據埠是P。客戶端收到命令後,會通過N+1號埠連接伺服器的埠P,然後在兩個埠之間進行數據傳輸。

總的來說,主動模式的FTP是指伺服器主動連接客戶端的數據埠,被動模式的.FTP是指伺服器被動地等待客戶端連接自己的數據埠。

被動模式的FTP通常用在處於防火牆之後的FTP客戶訪問外界FTp伺服器的情況,因為在這種情況下,防火牆通常配置為不允許外界訪問防火牆之後主機,而只允許由防火牆之後的主機發起的連接請求通過。

因此,在這種情況下不能使用主動模式的FTP傳輸,而被動模式的FTP可以良好的工作。

13.編寫個shell腳本將當前目錄下大於10K的文件轉移到/tmp目錄下

Q:主要是考察awk 這些的用法

#/bin/sh

#Programm :

# Using for move currently directory to /tmp

for FileName in `ls -l |awk ‘$5>10240 {print $9}’`

do

mv $FileName /tmp

done

ls -la /tmp

echo “Done! ”

14.apache有幾種工作模式,分別介紹下其特點,並說明什麼情況下採用不同的工作模式?

apache主要有兩種工作模式:prefork(apache的默認安裝模式)和worker(可以在編譯的時候加參數–with-mpm- worker選擇工作模式)

❹ linux運維工程師面試問不問面試題

1

mount.cifs //192.168.1.3/server /mnt/server -o user=administrator,pass=123456

linux 下的server需要自己手動建一個 後面的user與pass 是windows主機的賬號和密碼 注意空格 和逗號
2.查看http的並發請求數與其TCP連接狀態

Shell

1

netstat -n | awk '/^tcp/ {++b[$NF]} END {for(a in b) print a, b[a]}'

還有ulimit -n 查看linux系統打開最大的文件描述符,這里默認1024,不修改這里web伺服器修改再大也沒用。若要用就修改很幾個辦法,這里說其中一個:
修改/etc/security/limits.conf

Shell

1
2

* soft nofile 10240
* hard nofile 10240

重啟後生效
3.用tcpmp嗅探80埠的訪問看看誰最高

Shell

1

tcpmp -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -5

4.查看當前系統每個IP的連接數

Shell

1

ls /var/log/ -lR| grep "^-" |wc -l

5.查看當前系統每個IP的連接數

Shell

1

netstat -n | awk '/^tcp/ {print $5}'| awk -F: '{print $1}' | sort | uniq -c | sort -rn

6.shell下32位隨機密碼生成

Shell

1

cat /dev/urandom | head -1 | md5sum | head -c 32 >> /pass

將生成的32位隨機數 保存到/pass文件里了
7.統計出apache的access.log中訪問量最多的5個IP

Shell

1

cat access_log | awk '{print $1}' | sort | uniq -c | sort -n -r | head -5

8.如何查看二進制文件的內容
我們一般通過hexmp命令 來查看二進制文件的內容。
hexmp -C XXX(文件名) -C是參數 不同的參數有不同的意義
-C 是比較規范的 十六進制和ASCII碼顯示
-c 是單位元組字元顯示
-b 單位元組八進制顯示
-o 是雙位元組八進制顯示
-d 是雙位元組十進制顯示
-x 是雙位元組十六進制顯示
等等等等
9.ps aux 中的VSZ代表什麼意思,RSS代表什麼意思
VSZ:虛擬內存集,進程佔用的虛擬內存空間
RSS:物理內存集,進程戰用實際物理內存空間
10.檢測並修復/dev/hda5
fsck用來檢查和維護不一致的文件系統。若系統掉電或磁碟發生問題,可利用fsck命令對文件系統進行檢查,用法:

11.Linux系統的開機啟動順序

載入BIOS–>讀取MBR–>Boot Loader–>載入內核–>用戶層init一句inittab文件來設定系統運行的等級(一般3或者5,3是多用戶命令行,5是界面)–>init進程執行rc.syninit–>啟動內核模塊–>執行不同級別運行的腳本程序–>執行/etc/rc.d/rc.local(本地運行服務)–>執行/bin/login,就可以登錄了。
12.符號鏈接與硬鏈接的區別
我們可以把符號鏈接,也就是軟連接 當做是 windows系統里的 快捷方式。
硬鏈接 就好像是 又復制了一份.
ln 3.txt 4.txt 這是硬鏈接,相當於復制,不可以跨分區,但修改3,4會跟著變,若刪除3,4不受任何影響。
ln -s 3.txt 4.txt 這是軟連接,相當於快捷方式。修改4,3也會跟著變,若刪除3,4就壞掉了。不可以用了。
13.保存當前磁碟分區的分區表
dd 命令是以個強大的命令,在復制的同時進行轉換

Shell

1

dd if=/dev/sda of=./mbr.txt bs=1 count=512

14..沒有14題,我自己來個簡單的,如何在文本裡面進行復制、粘貼,刪除行,刪除全部,按行查找和按字母查找。
以下操作全部在命令行狀態操作,不要在編輯狀態操作。
在文本里 移動到想要復制的行 按yy 想復制到哪就移動到哪,然後按P 就黏貼了
刪除行 移動到改行 按dd
刪除全部 dG 這里注意G一定要大寫
按行查找 :90 這樣就是找到第90行
按字母查找 /path 這樣就是 找到path這個單詞所在的位置,文本里可能存在多個,多次查找會顯示在不同的位置。
15.手動安裝grub

Shell

1

grub-install /dev/sda

16.修改內核參數
vi /etc/sysctl.conf 這里修改參數
sysctl -p 刷新後可用
17.在1-39內取隨機數

Shell

1

echo $[$RANDOM%39]

RANDOM 隨機數
%39 取余數
18.限制apache每秒新建連接數為1,峰值為3
每秒新建連接數 一般都是由防火牆來做,apache本身好像無法設置每秒新建連接數,只能設置最大連接:

Shell

1

iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second -j ACCEPT

硬體防火牆設置更簡單,有界面化,可以直接填寫數字。。。
最大連接 apache本身可以設置
MaxClients 3 ,修改apache最大連接 前提還是要修改系統默認tcp連接數。我博客里也說了,這就不說了。
19.FTP的主動模式和被動模式
FTP協議有兩種工作方式:PORT方式和PASV方式,中文意思為主動式和被動式。
PORT(主動)方式的連接過程是:客戶端向伺服器的FTP埠(默認是21)發送連接請 求,伺服器接受連接,建立一條命令鏈路。當需要傳送數據時,客戶端在命令鏈路上用PORT 命令告訴伺服器:「我打開了XX埠,你過來連接我」。於是伺服器從20埠向客戶端的 XX埠發送連接請求,建立一條數據鏈路來傳送數據。
PASV(被動)方式的連接過程是:客戶端向伺服器的FTP埠(默認是21)發送連接請 求,伺服器接受連接,建立一條命令鏈路。當需要傳送數據時,伺服器在命令鏈路上用PASV 命令告訴客戶端:「我打開了XX埠,你過來連接我」。於是客戶端向伺服器的XX埠 發送連接請求,建立一條數據鏈路來傳送數據。
從上面可以看出,兩種方式的命令鏈路連接方法是一樣的,而數據鏈路的建立方法就完 全不同。
20.顯示/etc/inittab中以#開頭,且後面跟了一個或者多個空白字元,而後又跟了任意非空白字元的行

Shell

1

grep "^# \{1,\}[^ ]" /etc/inittab

21.顯示/etc/inittab中包含了:一個數字:(即兩個冒號中間一個數字)的行

Shell

1

grep "\:[0-9]\{1\}\:" /etc/inittab

22.怎麼把腳本添加到系統服務里,即用service來調用
在腳本里加入

Shell

1
2
3

#!/bin/bash
# chkconfig: 345 85 15
# description: httpd

然後保存
chkconfig httpd –add 創建系統服務
現在就可以使用service 來 start or restart
23.寫一個腳本,實現批量添加20個用戶,用戶名為user1-20,密碼為user後面跟5個隨機字元

Shell

1
2
3
4
5
6

#!/bin/bash
#description: useradd
for i in `seq -f"%02g" 1 20`;do
useradd user$i
echo "user$i-`echo $RANDOM|md5sum|cut -c 1-5`"|passwd –stdinuser$i >/dev/null 2>&1
done

24.寫一個腳本,實現判斷192.168.1.0/24網路里,當前在線的IP有哪些,能ping通則認為在線

Shell

1
2
3
4
5
6
7
8
9
10
11
12
13

#!/bin/bash
for ip in `seq 1 255`
do
{
ping -c 1 192.168.1.$ip > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo 192.168.1.$ip UP
else
echo 192.168.1.$ip DOWN
fi
}&
done
wait

25.寫一個腳本,判斷一個指定的腳本是否是語法錯誤;如果有錯誤,則提醒用戶鍵入Q或者q無視錯誤並退出其它任何鍵可以通過vim打開這個指定的腳本

Shell

1
2
3
4
5
6
7
8
9
10
11
12

[root@localhost tmp]# cat checksh.sh
#!/bin/bash
read -p "please input check script->" file
if [ -f $file ]; then
sh -n $file > /dev/null 2>&1
if [ $? -ne 0 ]; then
read -p 「You input $file syntax error,[Type q to exit or Type vim toedit]」 answer
case $answer in
q | Q)
exit 0
;;
vim)

26、寫一個腳本:(26包括3個小題)
1、創建一個函數,能接受兩個參數:
1)第一個參數為URL,即可下載的文件;第二個參數為目錄,即下載後保存的位置;
2)如果用戶給的目錄不存在,則提示用戶是否創建;如果創建就繼續執行,否則,函數返回一個51的錯誤值給調用腳本;
3)如果給的目錄存在,則下載文件;下載命令執行結束後測試文件下載成功與否;如果成功,則返回0給調用腳本,否則,返回52給調用腳本;

Shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

[root@localhost tmp]# cat downfile.sh
#!/bin/bash
url=$1
dir=$2
download()
{
cd $dir >> /dev/null 2>&1
if [ $? -ne 0 ];then
read -p "$dir No such file or directory,create?(y/n)" answer
if [ "$answer" == "y" ];then
mkdir -p $dir
cd $dir
wget $url 1> /dev/null 2>&1
if [ $? -ne 0 ]; then
return "52"
fi
else
return "51"
fi
fi
}
download $url $dir
echo $?

27、寫一個腳本:(27包括2個小題)
1、創建一個函數,可以接受一個磁碟設備路徑(如/dev/sdb)作為參數;在真正開始後面步驟之前提醒用戶有危險,並讓用戶選擇是否繼續;而後將此磁碟設備上的所有分區清空(提示,使用命令dd if=/dev/zero of=/dev/sdb bs=512 count=1實現,注意其中的設備路徑不要寫錯了;
如果此步驟失敗,返回67給主程序;
接著在此磁碟設備上創建兩個主分區,一個大小為100M,一個大小為1G;如果此步驟失敗,返回68給主程序;
格式化此兩分區,文件系統類型為ext3;如果此步驟失敗,返回69給主程序;
如果上述過程都正常,返回0給主程序;
2、調用此函數;並通過接收函數執行的返回值來判斷其執行情況,並將信息顯示出來;

Shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

local Darray=(`ls /dev/sd[a-z]`)
for i in ${Darray};do
[[ "$i" == "$1" ]] && Sd=$i &&break
done
else
return66
fi
#當匹配成功,進入選擇,告訴用戶,是否繼續,輸錯的話進入無限循環,當用戶選擇Y,則清空目標分區,且跳出while循環
while :;do
read -p "Warning!!!This operation will clean $Sd data.Next=y,Quit=n [y|n]:" Choice
case $Choice in
y)
dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null &&break || return 67 ;;
n)
exit 88 ;;
*)
echo "Invalid choice,please choice again." ;;
esac
done

#使用echo傳遞給fdisk進行分區,如果此命令失敗,則跳轉出去,錯誤值68,需要注意的是,有時候這個返回值很詭異,筆者之前成功與否都是返回的1,後來重啟之後,就好了,如果慎重的話,可以對創建的分區,進行判斷,不過就需要使用其他工具截取相關欄位了,雖有些小麻煩,但無大礙

Shell

1

echo-e "n\np\n1\n\n+100M\nn\np\n2\n\n+1024M\nw\n"|fdisk /dev/sdb&> /dev/null || return 68

#格式化之前,讓內核重新讀取磁碟分區表,值得注意的是,有的系統版本,使用partprobe無效,譬如筆者的環境是rhel5.8,而rhel6.0以後,這個命令就很危險了,而使用partx -a /dev/sdb則效果更好…此項需慎重,如果格式化失敗,則告知把失敗的分區定義成變數,且跳出函數,並帶出錯誤值69

Shell

1
2
3
4
5
6
7

`partprobe`
Part=`fdisk -l /dev/$Sd|tail -2|cut -d」 」 -f1`
for M in ${Part};do
mke2fs -j $M &> /dev/null && ErrorPart=$M &&return 69
done
return 0
}

#下面代碼,調用函數,接收函數返回值,根據返回值進行判斷哪裡出錯。

Shell

1
2
3
4
5
6
7

Disk_Mod $1
Res=$?
[ $Res-eq 0 ] && exit 0
[ $Res-eq 66 ] && echo "Error! Invalid input."
[ $Res-eq 67 ] && echo "Error! Command -> dd <- Faild."
[ $Res-eq 68 ] && echo "Error! Command -> fdisk <- Faild."
[ $Res-eq 69 ] && echo "Error! Command -> mke2fs <- Faild."

❺ Linux系統工程師面試題附答案(2)

Linux系統工程師面試題(附答案)

prefork的特點是:(預派生)

1.這種模式可以不必在請求到來時再產生新的進程,從而減小了系統開銷

2.可以防止意外的內存泄漏

3.在伺服器負載下降的時候會自動減少子進程數

worker的特點是:支持混合的多線程多進程的多路處理模塊

如果對於一個高流量的HTTP服務 器,worker MPM是一個比較好的選擇,因為worker MPM佔用的內存要比prefork要小。

15.名詞解釋 HDLC,VTP,OSPF,RIP,DDOS,system V,GNU,netscreen,ssh,smartd,apache,WAIT_TIME 等等。

16.編寫shell腳本獲取本機的網路地址。比如:本機的ip地址是:192.168.100.2/255.255.255.0,那麼它的網路地址是

192.168.100.1/255.255.255.0

方法一:

#!/bin/bash

#This script print ip and network

file=”/etc/sysconfig/network-scripts/ifcfg-eth0″

if [ -f $file ] ;then

IP=`grep “IPADDR” $file|awk -F”=” ‘{ print $2 }’`

MASK=`grep “NETMASK” $file|awk -F”=” ‘{ print $2 }’`

echo “$IP/$MASK”

exit 1

fi

方法二:

#!/bin/bash

#This programm will printf ip/network

#

IP=`ifconfig eth0 |grep ‘inet ‘ |sed ‘s/^.*addr://g’|sed ‘s/ Bcast.*$//g’`

NETMASK=`ifconfig eth0 |grep ‘inet ‘|sed ‘s/^.*Mask://g’`

echo “$IP/$NETMASK”

exit

17.在命令行下發一郵件,發件人:[email protected], 收信人:[email protected]

二、簡述題:

1.linux下如何改IP,主機名,DNS

2.linux下如何添加路由

3.簡述linux下編譯內核的意義與步驟

4.簡述Linux啟動過程

5.簡述DDOS攻擊的原理

6.簡述Tcp三次握手的過程

7.簡述VPN,常見有哪幾種?

三、設計題:

1.系統設計

請考慮以下系統的設計. 您可以翻閱資料,查詢任何您有幫助的資料、指南等。

您有的資源:

8台安裝Linux (2.6內核) 的雙網卡PC伺服器以及相關開源軟體,交換機

Apache 2.2.x

Tomcat 5.5.X

資料庫系統

最多8個Internet IP地址,請您設計一個系統:

1、使用雙apache web server前端;

2、採用AJP連接後段的3台Tomcat應用伺服器,這些tomcat被配置成cluster, 因此需要考慮apache對後端的分配,分配採用完全平衡的方法;配置使用cookie來實現session stickness;

3、1台資料庫伺服器只有tomcat才需要連接,也不需要對Internet提供服務。

4、考慮系統的安全性和維護方便性;

5、通過rewrite規則配置把下屬URL規則改寫成友好的URL

http://server/webapp/getinfo?id=XXXX&name=YYYY –> http://server/getinfo/YYYY/XXXX

您需要提交

1、伺服器規劃,包括:

*網路結構圖

*每台機器的IP地址分配

*每台機器上運行的關鍵軟體

*您從安全性和維護性方面的考慮

2、Apache的以下配置文件給我們:

*extra/http-proxy-ajp.conf

*extra/http-rewrite.conf

2.你可以採取任何設備和不同操 作系統伺服器設計對兩台WWW伺服器和兩台FTP伺服器做負載均衡,用網路拓撲圖表示並加以說明!(方法越多越好)

第一種方法: DNS輪巡

www1 IN A 192.168.1.1

www2 IN A 192.168.1.2

www3 IN A 192.168.1.3

ftp1 IN A 192.1.1.4

ftp2 IN A 192.1.1.5

ftp3 IN A 192.1.1.6

www IN CNAME www1

www IN CNAME www2

www IN CNAME www3

ftp IN CNAME ftp1

ftp IN CNAME ftp2

ftp IN CNAME ftp3

;

❻ linux常用命令面試題有哪些

linux常用命令有:

1、cp命令,作用復制,參數如下:

-a:將文件的特性一起復制。

-p:連同文件的屬性一起復制,而非使用默認方式,與-a相似,常用於備份。

-i:若目標文件已經存在時,在覆蓋時會先詢問操作的進行。

-r:遞歸持續復制,用於目錄的復制行為。

-u:目標文件與源文件有差異時才會復制。

2、rm命令作用為刪除,參數:

-f:就是force的意思,忽略不存在的文件,不會出現警告消息。

-i:互動模式,在刪除前會詢問用戶是否操作。

-r:遞歸刪除,最常用於目錄刪除,它是一個非常危險的參數。

3、mv命令作用為移動文件:

-f:force強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋。

-i:若目標文件已經存在,就會詢問是否覆蓋。

-u:若目標文件已經存在,且比目標文件新,才會更新。

4、pwd命令,作用為查看」當前工作目錄「的完整路徑。

pwd-P#顯示出實際路徑,而非使用連接(link)路徑;pwd顯示的是連接路徑。

5、rmdir命令刪除目錄:

rmdir [選項]... 目錄...

-p:遞歸刪除目錄dirname,當子目錄刪除後其父目錄為空時,也一同被刪除。如果整個路徑被刪除或者由於某種原因保留部分路徑,則系統在標准輸出上顯示相應的信息。

-v:verbose顯示指令執行過程。

❼ 去面試linux嵌入式開發,好多都不懂,請有linux嵌入式軟體開發經驗的兄弟分享面試和學習經驗~

嵌入式linux軟體開發的面試都是C語言為基礎的。順帶會有一些驅動方面的東西。
面試前,你只需要把網上的那個經典的10道題搞懂就行了。第一題是宏定義一年中有多少秒。
你網路嵌入式開發面試試題。搞懂這幾道就基本OK,然後就是你的工作經驗了。

❽ 運維必須掌握的Linux面試題

1、解釋下什麼是GPL,GNU,自由軟體?
GPL:(通用公共許可證):一種授權,任何人有權取得、修改、重新發布自由軟體的權力。
GNU:(革奴計劃):目標是創建一套完全自由、開放的的操作系統。
自由軟體:是一種可以不受限制地自由使用、復制、研究、修改和分發的軟體。主要許可證有GPL和BSD許可證兩種。
2、linux系統里,buffer和cache如何區分?

buffer和cache都是內存中的一塊區域,
當CPU需要寫數據到磁碟時,由於磁碟速度比較慢,所以CPU先把數據存進buffer,
然後CPU去執行其他任務,buffer中的數據會定期寫入磁碟;

當CPU需要從磁碟讀入數據時,由於磁碟速度比較慢,
可以把即將用到的數據提前存入cache,CPU直接從Cache中拿數據要快的多。
3、描述Linux運行級別0-6的各自含義

0:關機模式
1:單用戶模式<==破解root密碼
2:無網路支持的多用戶模式
3:有網路支持的多用戶模式(文本模式,工作中最常用的模式)
4:保留,未使用
5:有網路支持的X-windows支持多用戶模式(桌面)
6: 重新引導系統,即重啟
4、描述Linux系統從開機到登陸界面的啟動過程

⑴開機BIOS自檢,載入硬碟。
⑵讀取MBR,MBR引導。
⑶grub引導菜單(Boot Loader)。
⑷載入內核kernel。
⑸啟動init進程,依據inittab文件設定運行級別
⑹init進程,執行rc.sysinit文件。
⑺啟動內核模塊,執行不同級別的腳本程序。
⑻執行/etc/rc.d/rc.local
⑼啟動mingetty,進入系統登陸界面。
5、描述Linux下軟鏈接和硬鏈接的區別

在Linux系統中,鏈接分為兩種,一種是硬鏈接(Hard link),另一種稱為符號鏈接或軟鏈接(Symbolic Link)。
①默認不帶參數的情況下,ln創建的是硬鏈接,帶-s參數的ln命令創建的是軟鏈接。
②硬鏈接文件與源文件的inode節點號相同,而軟鏈接文件的inode節點號,與源文件不同,
③ln命令不能對目錄創建硬鏈接,但可以創建軟鏈接。對目錄的軟鏈接會經常使用到。
④刪除軟鏈接文件,對源文件和硬鏈接文件無任何影響。
⑤刪除文件的硬鏈接文件,對源文件及軟鏈接文件無任何影響。
⑥刪除鏈接文件的源文件,對硬鏈接文件無影響,會導致其軟鏈接失效(紅底白字閃爍狀)。
⑦同時刪除源文件及其硬鏈接文件,整個文件才會被真正的刪除。
⑧很多硬體設備的快照功能,使用的就是類似硬鏈接的原理。
⑨軟鏈接可以跨文件系統,硬鏈接不可以跨文件系統。
6、shell腳本中「$?」標記的用途是什麼?

在寫一個shell腳本時,如果你想要檢查前一命令是否執行成功,在if條件中使用「 ?
0

如果結束狀態是0,說明前一個命令執行成功。
root@localhost:~# ls /usr/bin/share
ls: cannot access /usr/bin/share: No such file or directory

root@localhost:~# echo $?
2
如果結束狀態不是0,說明命令執行失敗。
7、如何讓history命令顯示具體時間?

$ HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S"

$ export HISTTIMEFORMAT

重新開機後會還原,可以寫/etc/profile
8、用shell統計ip訪問情況,要求分析nginx訪問日誌,找出訪問頁面數量在前10位的IP數。以下是nginx的訪問日誌節選
202.101.129.218- - [26/Mar/2006:23:59:55 +0800] "GET /online/stat_inst.php?pid=d065HTTP/1.1" 302 20-"-" "-" "Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1)"

1}' access.log |sort|uniq -c |head -n 10

31 202.101.129.218
21 123.93.29.11
11 13.92.19.31
9、將本地的80埠的請求轉發到8080埠,本機地址10.0.0.254,寫出命令
$ iptables -t nat -A PREROUTING -d 10.0.0.254 -p tcp --dprot 80 -j DNAT --to-destination 10.0.0.254:8080
10、Load過高的可能性有哪些?
排查思路:

其他經驗:
cpu load的飆升,一方面可能和full gc的次數增大有關,一方面可能和死循環有關
11、描述/etc/fstab 文件中每個欄位的含義?
(1)第一列:將被載入的文件系統名;
(2)第二列:該文件系統的安裝點;
(3)第三列:文件系統的類型;
(4)第四列:設置參數;
(5)第五列:供備份程序確定上次備份距現在的天數;
(6)第六列:在系統引導時檢測文件系統的順序。
12、 如何在打包時排除指定目錄?
$ tar --exclude=/home/dmtsai --exclude= .tar -zcvf myfile.tar.gz /home/ /etc

mysql> update user set password=password(�') where user='root'

❾ 一道linux shell面試題:如何用shell命令統計排序網站域名的訪問量。怎麼辦呢

1、第一個「|」 後面緊跟的是awk命令
這個命令含義是:將前面log中文件按「空格」或「製表符」分割,然後再以「/」分割第7個域,存入數組「D」中,這個域應該是網址,網址的格式一般是「http://..com/question/1110663299553166899.html」,所以以「/」分割後得到的第三個域 D[3] 就是「..com」,將這個字元串作為 key 存入數組 A 中,並且遇到相同的字元串時,A[key] 就加1,這樣在awk 的END 段遍歷數組A 就可以得到 key 和 key的計數(A[key]) 了
2、下一個「|」後面跟的命令 sort -nr 是指 按自然數大小(-n)和反序(-r) 排列
3、最後個「|」後面跟的命令 head 就是看輸出的前10行

❿ linux認證面試題及答案(5)

0 1 * * * /bin/sh /usr/bin/fileback

7.有一普通用戶想在每周日凌晨零點零分定期備份/user/backup到/tmp目錄下,該用戶應如何做?

參考答案:(1)第一種方法:

用戶應使用crontab –e 命令創建crontab文件。格式如下:

0 0 * * sun cp –r /user/backup /tmp

(2)第二種方法:

用戶先在自己目錄下新建文件file,文件內容如下:

0 * * sun cp –r /user/backup /tmp

然後執行 crontab file 使生效。

8.設計一個Shell程序,在/userdata目錄下建立50個目錄,即user1~user50,並設置每個目錄的許可權,其中其他用戶的許可權為:讀;文件所有者的許可權

為:讀、寫、執行;文件所有者所在組的許可權為:讀、執行。

參考答案: 建立程序 Pro16如下:

#!/bin/sh

i=1

while [ i -le 50 ]

do

if [ -d /userdata ];then

mkdir -p /userdata/user$i

chmod 754 /userdata/user$i

echo "user$i"

let "i = i + 1" (或i=$(($i+1))

else

mkdir /userdata

mkdir -p /userdata/user$i

chmod 754 /userdata/user$i

echo "user$i"

let "i = i + 1" (或i=$(($i+1))

fi

done

五、多選題

1.關於硬鏈接的描述正確的(BE)。

A 跨文件系統 B不可以跨文件系統 D可以做目錄的連接

C 為鏈接文件創建新的i節點 E鏈接文件的i節點同被鏈接文件的i節點

2.在網站發布用戶wang的個人網頁時,需要創建用戶網頁目錄,假定用戶網頁目錄設定為web

(用戶目錄在/home目錄下),如下描述正確的是(BCE)

A 存放用戶網頁的絕對路徑/wang/web B存放用戶網頁的目錄~wang/

C 存放用戶網頁的絕對路徑/home/wang/web D存放用戶網頁的絕對路徑/home/web

E 在本機訪問用戶wang的個人網頁的URL地址http://localhost/~wang/

3.在一台WWW伺服器上將埠號設定為8000,默認的網頁文件index.html,伺服器網頁的根目錄/www。在本機訪問伺服器時,正確的用法是(BDE)

A 瀏覽器訪問該伺服器的URL地址http://localhost/

B 瀏覽器訪問該伺服器的URL地址http://localhost:8000/

C 瀏覽器訪問該伺服器的用戶li網頁URL地址http://localhost/~li

D 瀏覽器訪問該伺服器的用戶li網頁URL地址http://localhost:8000/~li

E 瀏覽器訪問該伺服器的URL地址localhost:8000/

4.在shell編程中關於$2的描述正確的是(CE)

A 程序後攜帶了兩個位置參數 B 宏替換 C 程序後面攜帶的第二個位置參數

D 攜帶位置參數的個數 E 用$2引用第二個位置參數

5.某文件的許可權是 - r w x r - - r- -,下面描述正確的是(CD)

A 文件的許可權值是755 B 文件的所有者對文件只有讀權 限

C 文件的許可權值是 744 D 其他用戶對文件只有讀許可權 E同組用戶對文件只有寫許可權

6.關於OpenSSH的作用的描述正確的是(ACE)

A 開放源代碼的安全加密程序 B OpenSSH常用於為http協議加密

C OpenSSH用於提高遠程登錄訪問的安全性 D 它和telnet實用同樣的埠號

E OpenSSH是免費下載的應程序

7.關於NFS伺服器描述正確的是(BC)

A 網路中實現Windows系統之間文件系統共享的應用軟體

B 網路中實現Linux系統之間文件系統共享的應用軟體

C 網路中實現Unix系統之間文件系統共享的應用軟體

D 網路中實現Windows系統和Unix之間文件系統共享的應用軟體

E 網路中實現Windows系統和Linux之間文件系統共享的應用軟體

8.關於sed描述正確的是(ABD)

A sed 是Linux系統中的流編輯器 B sed 是UNIX系統中的流編輯器

C sed 網路文件系統的類型

D 利用管道對標准輸入/標准輸入的數據進行編輯和組合

E sed是NFS的應用程序

9.關於限制磁碟限額,描述正確的是(ABD)

A 使用edquota可以監控系統所有用戶使用的磁碟空間,並在接近極限時提示用戶

B 用戶組的磁碟限額是用戶組內所有用戶予設磁碟空間總和

C 單個用戶的磁碟限額就是該用戶所在用戶組內所有磁碟限額的總合

D 在Linux系統下限制用戶使用的磁碟空間可以使用edquota

E 用戶組的磁碟限額就是該用戶組內擁有最大磁碟限額值的用戶的磁碟限額

10.關於建立系統用戶的正確描述是(ABD)

A 在Linux系統下建立用戶使用adser命令

B 每個系統用戶分別在/etc/passwd和/etc/shadow文件中有一條記錄

C 訪問每個用戶的工作目錄使用命令“cd /用戶名”

D 每個系統用戶在默認狀態下的工作目錄在/home/用戶名

E 每個系統用戶在/etc/fstab文件中有一條記錄

閱讀全文

與linux經典面試題相關的資料

熱點內容
壓縮空氣軟管製作方法 瀏覽:907
天河三號演算法 瀏覽:924
php隊列教程 瀏覽:632
洪水命令 瀏覽:529
安卓怎麼弄成蘋果在線 瀏覽:435
谷歌web伺服器地址 瀏覽:898
安卓鎖屏圖片如何刪除 瀏覽:719
python3多進程編程 瀏覽:714
證明代碼是程序員寫的 瀏覽:397
演算法錯誤發現辦法 瀏覽:410
河南省醫院掛號是哪個app 瀏覽:629
冬日戀歌哪個APP能看 瀏覽:673
委內瑞拉加密貨 瀏覽:10
程序員寫日記哪個軟體好 瀏覽:108
加密機操作手冊 瀏覽:860
dos命令自動關閉 瀏覽:328
心田花開app在哪裡評價 瀏覽:449
求索記錄頻道哪個app可以看 瀏覽:730
金梅瓶pdf下載 瀏覽:985
機器軟體用什麼編程 瀏覽:845