linux系統工程師面試題

第一套
1.查看Linux系統當前單個共享內存段的最大值(命令)
ipcs -m
ipcs -a
2.用什麼命令查詢指定IP地址的服務器端口
題意應該是 nmap 和nbtscan 命令來掃吧。
3.crontab中用什麼命令定義某個程序執行的優先級別
nice/renice:進程執行優先級
概念:
進程優先級:系統按進程優先級的不一樣分配CPU時間,優先級高的進程會獲得更多的CPU使用時間,以提升速度,縮短總的執行時間。
進程優先級範圍:-20至19
最高等級:-20
最低等級:19
系統管理員有權將進程優先級設置爲-1至-20,而普通用戶只能設置0至19。
進程運行的默認等級爲0。
用nice執行的進程其默認等級爲10(即nice <程序名>,不指定等級時)。
格式:
nice <程序名>
nice -<等級> <程序名>
如:(命令後加&表示之後臺運行)
vi & 優先等級0,默認等級。
nice vi & 優先等級10,使用nice執行程序時的默認等級。
nice -50 vi & 優先等級19,-號表示選項,等級50超過最低等級19,所以系統以等級19執行。
nice -18 vi & 優先等級18。
nice --50 vi & 優先等級-20,選項值爲-50,超過最高等級-20,所以系統以等級-20執行。
nice --18 vi & 優先等級-18。
經過ps -l可查看以上命令的執行狀況(注意查看各vi進程NI值的不一樣)。
從新調整正在執行的進程的優先級:
調整指定PID進程的等級
renice <等級> <PID>
注意:<等級>是參數,不是選項,沒有前綴-號。
調整指定用戶的全部進程的等級
renice <等級> <用戶名1> <用戶名2> ...
調整指定組的全部用戶的全部進程的等級
renice <等級> -g <組名1>
4.如何讓history命令顯示具體時間
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
expect HISTTIMEFORMAT
從新開機後會還原,能夠寫/etc/profile
5.查看Linux系統當前指定用戶的郵件隊列
mailq 命令
打印兩種類型的列表:
mailq 命令列出以下所示的郵件隊列:
Mail Queue(1 request)
---QID---- --Size-- -----Q-Time----- ------Sender/Recipient-----
AA02508 3 Thu Dec 17 10:01 root
(User unknown)
bad_user
mailq -v 命令列出以下所示的郵件隊列:
Mail Queue (1 request)
---QID---- --Size-- -Priority- ---Q-Time--- --Sender/Recipient--
AA02508 3 1005 Dec 17 10:01 root
(User unknown)
bad_user
6.查看Linux系統當前加載的庫文件
lsof
7.Ext3文件系統如何恢復RM命令刪除文件
(1).Ext3文件系統結構的簡單介紹
在 Linux所用的Ext3文件系統中,文件是以塊爲單位存儲的,默認狀況下每一個塊的大小是1K,不一樣的塊以塊號區分。每一個文件還有一個節點,節點中包含有文件全部者,讀寫權限,文件類型等信息。對於一個小於12個塊的文件,在節點中直接存儲文件數據塊的塊號。若是文件大於12個塊,那麼節點在12個塊號以後存儲一個間接塊的塊號,在這個間接塊號所對應的塊中,存儲有256個文件數據塊的塊號(Ext2fs中每一個塊號佔用4字節,這樣一個塊中所能存儲的塊號就是1024/4=256)。若是有更大的文件,那麼還會在節點中出現二級間接塊和三級間接塊。
(2).恢復被誤刪文件的方法
大多數Linux發行版都提供一個debugfs工具,能夠用來對Ext3文件系統進行編輯操做。不過在使用這個工具以前,還有一些工做要作。

首先以只讀方式從新掛載被誤刪的文件所在分區。使用以下命令:(假設文件在/usr分區)
mount -r -n -o remount /usr
-r表示只讀方式掛載;-n表示不寫入/etc/mtab,若是是恢復/etc上的文件,就加上這個參數。若是系統說xxx partion busy,能夠用fuser命令查看一下是哪些進程使用這個分區上的文件:
fuser -v -m /usr
若是沒有什麼重要的進程,用如下命令停掉它們:
fuser -k -v -m /usr
而後就能夠從新掛載這些文件系統了。
如 果是把全部的文件統一安裝在一個大的/分區當中,能夠在boot提示符下用linux single進入單用戶模式,儘可能減小系統進程向硬盤寫入數據的機會,要不乾脆把硬盤掛在別的機器上。另外,恢復出來的數據不要寫到/上面,避免破壞那些有用的數據。若是機器上有dos/windows,能夠寫到這些分區上面:
mount -r -n /dev/hda1 /mnt/had
而後就能夠執行debugfs:(假設Linux在 /dev/hda5)
#debugfs /dev/hda5
就會出現debugfs提示符debugfs:
使用lsdel命令能夠列出不少被刪除的文件的信息:
debugfs:lsdel
debugfs: 2692 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001
…………………………………………………………………………………
36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001
196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001
debugfs:
列出的文件有不少(這裏找到2692個),第一字段是文件節點號,第二字段是文件全部者,第三字段是讀寫權限,接下來是文件大小,佔用塊數,刪除時間。而後就能夠根據文件大小和刪除日期判斷那些是咱們須要的。好比咱們要恢復節點是196829的文件:
能夠先看看文件數據狀態:
debugfs:stat
Inode: 196829 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 0 Group: 0 Size: 149500
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 38
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 -- Mon May 27 13:52:04 2001
atime: 0x31a21dd1 -- Tue May 21 20:47:29 2001
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 2001
dtime: 0x31a9a574 -- Mon May 27 13:52:04 2001
BLOCKS:
594810 594811 594814 594815 594816 594817 ………………………………….
TOTAL: 38
而後就能夠用dump指令恢復文件:
debugfs:dump /mnt/hda/01.sav
這樣就把文件恢復出來了。退出debugfs:
debugfs:quit
另外一種方法是手工編輯inode:
debugfs:mi
Mode [0100644]
User ID [0]
Group ID [0]
Size [149500]
Creation time [0x31a9a574]
Modification time [0x31a9a574]
Access time [0x31a21dd1]
Deletion time [0x31a9a574] 0
Link count [0] 1
Block count [38]
File flags [0x0]
Reserved1 [0]
File acl [0]
Directory acl [0]
Fragment address [0]
Fragment number [0]
Fragment size [0]
Direct Block #0 [594810]
…………………………….
Triple Indirect Block [0]
使用mi指令後每次顯示一行信息以供編輯,其它行能夠直接按回車表示確認,把deletion time改爲0(未刪除),Link count改爲1。改好後退出debugfs:
debugfs:quit
而後用fsck檢查/dev/hda5
fsck /dev/hda5
程序會說找到丟失的數據塊,放在lost+found裏面。
8.查看當前系統某一硬件的驅動版本。好比網卡
dmidecode
9.DNS服務器有哪三種類型
主 從 緩存
10.apache目錄訪問身份驗證的實施步驟(用htpasswd設置)
htpasswd -c /目錄 user
alias /目錄
11.使用tcpdump監聽主機IP爲192.168.1.1,tcp端口爲80的數據,寫出相應命令
tcpdump tcp port 80 host 192.168.1.1
12.簡述IDS做用和實現原理
***檢測,設備放在intelnet進來的第一臺路由後面。對進入路由的全部的包進行檢測,若是有異常就報警。
13.用sed修改test.txt的23行test爲tset;
sed ‘23s/test/tset/g ’ test.txt

第二套

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有什麼不一樣,應用事例有那些?
3.包過濾防火牆與代理應用防火牆有什麼區別,能列舉幾種相應的產品嗎?
4.iptables是否支持time時間控制用戶行爲,若有請寫出具體操做步驟
5.說出你知道的幾種linux/unix發行版本
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目錄下

    1. #/bin/sh
    2. #Programm :
    3. # Using for move currently directory to /tmp
    4. for FileName in `ls -l |awk ‘$5>10240 {print $9}’`
    5. do
    6. mv $FileName /tmp
    7. done
    8. ls -al    /tmp
    9. echo 「Done! 「

複製代碼

14.apache有幾種工做模式,分別介紹下其特色,並說明什麼狀況下采用不一樣的工做模式?
apache主要有兩種工做模式:prefork(apache的默認安裝模式)和worker(能夠在編譯的時候加參數–with-mpm-worker選擇工做模式)
prefork的特色是:(預派生)
1.這種模式能夠沒必要在請求到來時再產生新的進程,從而減少了系統開銷
2.能夠防止意外的內存泄漏
3.在服務器負載降低的時候會自動減小子進程數(prefork的詳細原理能夠看個人博客另一篇文章apache的性能優化)
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
方法一:

    1. #!/bin/bash
    2. #This script print ip and network
    3. file=」/etc/sysconfig/network-scripts/ifcfg-eth0″
    4. if [ -f $file ] ;then
    5. IP=`grep 「IPADDR」 $file|awk -F」=」 ‘{ print $2 }’`
    6. MASK=`grep 「NETMASK」 $file|awk -F」=」 ‘{ print $2 }’`
    7. echo 「$IP/$MASK」
    8. exit 1
    9. fi

複製代碼

方法二:

    1. #!/bin/bash
    2. #This programm will printf ip/network
    3. #
    4. IP=`ifconfig eth0 |grep ‘inet ‘ |sed ’s/^.*addr://g’|sed ’s/    Bcast.*$//g’`
    5. NETMASK=`ifconfig eth0 |grep ‘inet ‘|sed ’s/^.*Mask://g’`
    6. echo 「$IP/$NETMASK」
    7. exit

複製代碼

17.在命令行下發一郵件,發件人: 123@abc.com,收信人: abc@xyz.com
二簡述題:
1.linux下如何改IP,主機名,DNS
2.linux下如何添加路由
3.簡述linux下編譯內核的意義與步驟
4.簡述Linux啓動過程
5.簡述DDOS***的原理
6.簡述Tcp三次握手的過程
7.簡述×××,常見有哪幾種?
8.
三:設計題:
1.系統設計
請考慮如下系統的設計. 您能夠翻閱資料,查詢任何您有幫助的資料、指南等。
您有的資源:
8檯安裝Linux (2.6內核) 的雙網卡PC服務器以及相關開源軟件,交換機
Apache 2.2.x
Tomcat 5.5.X
數據庫系統
最多8個Internet IP地址,請您設計一個系統:
一、使用雙apache web server前端;
二、採用AJP鏈接後段的3臺Tomcat應用服務器,這些tomcat被配置成cluster, 所以須要考慮apache對後端的分配, 分配採用徹底平衡的方法

; 配置使用cookie來實現session stickness;
三、1臺數據庫服務器只有tomcat才須要鏈接,也不須要對Internet提供服務。
四、考慮系統的安全性和維護方便性;
五、經過rewrite規則配置把下屬URL規則改寫成友好的URL
http://server/webapp/getinfo?id=XXXX&name=YYYY –> http://server/getinfo/YYYY/XXXX

您須要提交

一、服務器規劃,包括:
* 網絡結構圖
* 每臺機器的IP地址分配
* 每臺機器上運行的關鍵軟件
* 您從安全性和維護性方面的考慮
二、Apache的如下配置文件給咱們:
* extra/http-proxy-ajp.conf
* extra/http-rewrite.conf

2.你能夠採起任何設備和不一樣操做系統服務器設計對兩臺WWW服務器和兩臺FTP服務器作負載均衡,用網絡拓撲圖表示並加以說明!(方法越多越好)

 這個面試已通過了快一個月了,前段時間沒有發上來,今天稍微整理了如下發上來了。原本是想寫感想那,可是從小學開始語文都很差。也不知道從那裏寫起。呵呵!
 
  這家公司挺大的,聽別人說和sina一個級別的。具體的就在這裏不說出來了。我從哪裏面試出來以後我就想這是面試的SA,好像不是項目經理吧,外企就是不同啊!
 
  還有就是他在問了問題以後,我答完以後就接着下一個,中間沒有任何什麼其餘的話,臉上也沒有表情。面試完以後完回到家裏靠本身的記憶記下了面試中的16道面試題。發給朋友看看,他們有的說變態,有的說這好像不是SA面試題吧。
 
  汗……仍是本身的能力不行啊。

第三套
 
  一、在同一個網站中,當客戶訪問的時候,會出現有的頁面訪問的速度快而有的慢,系統和服務徹底正常、網絡帶寬正常。這是那裏出現問題了那?
 
  二、你之前作過的項目中,單臺 服務器的最大併發量是多少?說下你硬件的配置?
 
  三、你之前在工做中遇到的,一個困難的技術問題是什麼,最後怎麼解決的 ?
 
  四、你說下你技術的強項和不足?
 
  五、在一個系統架構中,咱們爲了不單點故障,會怎麼作?
 
  六、apache2.x版本中兩個不一樣的運行模式是什麼,有什麼不一樣?
 
  七、若是給你不少臺 服務器,你該怎麼去管理?
 
  八、若是給你一個100人的團隊你怎麼帶好他們?
 
  八、如何優化 linux系統,說出命令和相應的回值?
 
  九、怎麼查看一個服務器運行正常?
 
  十、爲何有些公司會把本身的系統項目外包出去,而本身不招本身系統工程師,說說本身 的見解?
 
  十一、若是一個web服務器出現問題,你會怎麼作?
 
  十二、如何添加一個apache的rewirte模塊,rewirte模塊的原理是什麼?
 
  1三、你之前所在的公司接到項目的時候,人員是如何人分配的?
       1四、大家給客戶所作的項目,怎麼保證客戶系統的 安全
 
  1五、大家爲客戶提供什麼樣的後期服務?
 
  1六、相對web服務來講,大家怎麼知道當時客戶的系統已經不能知足需求,當不能知足需求的時候,大家就用什麼解決?
 
  以上就是我能記得的面試題了,還有幾個記不起來了。真是一個比一個各色。面對這麼各色的面試題,你能答出來多少?
 
  看完這個以後但願你們能把本身能打答出來的寫下來!

第四套

1,編寫shell腳本獲取本機的網絡地址。好比:本機的ip地址是:192.168.100.2/255.255.255.0,那麼它的網絡地址是192.168.100.1/255.255.255.0
2,當用戶在瀏覽器當中輸入一個網站,說說計算機對dns解釋通過那些流程?注:本機跟本地dns尚未緩存。
3,咱們都知道,dns既採用了tcp協議,又採用了udp協議,何時採用tcp協議?何時採用udp協議?爲何要這麼設計?
4,一個EXT3的文件分區,當使用touch test.file命令建立一個新文件時報錯,報錯的信息是提示磁盤已滿,可是採用df -h命令查看磁盤大小時,只使用了,60%的磁盤空間,爲何會出現這個狀況,說說你的理由。
5,咱們都知道FTP協議有兩種工做模式,說說它們的大概的一個工做流程?
1,#!/bin/sh
        LAN=eth0
        LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`
        LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|cut -f1 -d' '`
        LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK
2,a.用戶輸入網址到瀏覽器
        b.瀏覽器發出DNS請求信息
        c.計算機首先查詢本機HOST文件,看是否存在,存在直接返回結果,不存在,繼續下一步
        d.計算機按照本地DNS的順序,向合法dns服務器查詢IP結果,
        e.合法dns返回dns結果給本地dns,本地dns並緩存本結果,直到TTL過時,纔再次查詢此結果
        f.返回IP結果給瀏覽器
        g.瀏覽器根據IP信息,獲取頁面
3,這個題須要理解的東西比較的多,分一下幾個方面
        a,從數據包大小上分:UDP的最大包長度是65507個字節,響應dns查詢的時候數據包長度超過512個字節,而返回的只要前512個字節,這時名字解釋器一般使用TCP從發原來的請求。
        b,從協議自己來分:大部分的狀況下使用UDP協議,你們都知道UDP協議是一種不可靠的協議,dns不像其它的使用UDP的Internet應用 (如:TFTP,BOOTP和SNMP等),大部分集中在局域網,dns查詢和響應須要通過廣域網,分組丟失和往返時間的不肯定性在廣域網比局域網上更大,這就要求dns客戶端須要好的重傳和超時算法,這時候使用TCP
4,兩種狀況,一種是磁盤配額問題,另一種就是EXT3文件系統的設計不適合不少小文件跟大文件的一種文件格式,出現不少小文件時,容易致使inode耗盡了。
5,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能夠良好的工做。

第五套

1.假設Apache產生的日誌 文件名爲access_log,在apache正在運行時,執行 命令mv
access_log access_log.bak,執行完後,請問新的apache的日誌會打印到哪裏,爲何?
一、新的日誌會打印在access_log.bak中,由於apache啓動時會找到access_log文件,隨時準備向文件中加入日誌信息,
    雖然此時文件被更名,可是因爲服務正在運行,由於它的inode節點的位置沒有變,程序打開的fd仍然會指向原來那個inode,
    不會由於文件名的改變而改變。apache會繼續向已更名的文件中追加日誌,可是若重啓apache服務, 系統會檢查access_log
    文件是否存在,若不存在則建立。
2.在Shell環境下,如何查看遠程 Linux系統運行了多少 時間?
二、監控主機執行: ssh user@被監控主機ip "uptime"
    這樣獲得了被監控主機的uptime
3.處理如下文件內容,將域名取出並進行計數排序,如處理:
http://www.baidu.com/index.html
http://www.baidu.com/1.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
http://www.baidu.com/3.html
http://post.baidu.com/2.html
獲得以下結果:
域名的出現的次數 域名
3 www.baidu.com
2 post.baidu.com
1 mp3.baidu.com
可使用bash/perl/php/c任意一種
三、[root@localhost shell]# cat file | sed -e ' s/http:\/\///' -e ' s/\/.*//' | sort | uniq -c | sort -rn
        3 www.baidu.com
        2 post.baidu.com
        1 mp3.baidu.com
[root@codfei4 shell]# awk -F/ '{print $3}' file |sort -r|uniq -c|awk '{print $1"\t",$2}'
          www.baidu.com
          post.baidu.com
          mp3.baidu.com

4.若是獲得隨機的字串,長度和字串中出現的字符表可定義,並將字串倒序顯示,如
把0123456789做爲基準的字串字符表,產生一個6位的字串642031,打印出的字串爲
130246,可以使用bash/perl/php/c任意一種.
四、 [root@localhost ~]#  awk -v count=6 'BEGIN {srand();str="0123456789";len=length(str);for(i=count;i>0;i--) marry =substr(str,int(rand()*len),1);for(i=count;i>0;i--) printf("%c",marry);printf("\n");for

(i=0;i<=count;i++) printf("%c",marry );printf("\n")}'
838705
507838
5.如何查看當前Linux系統的狀態,如CPU使用,內存使用,負載狀況等.
五、Linux系統中「/proc」是個僞文件目錄,不佔用系統空間,及時的反應出內存如今使用的進程狀況......其中許多文件都保存系統運行狀態和相關信息
對於「/proc」中文件可以使用文件查看命令瀏覽其內容,文件中包含系統特定信息:
cpuinfo          主機CPU信息
filesystems       文件系統信息
meninfo          主機內存信息
version           Linux內存版本信息
diskstatus        磁盤負載狀況
另外top命令能夠動態的顯示當前系統進程用戶的使用狀況,並且是動態的顯示出來,尤爲是在該命令顯示出來的對上方對系統的狀況進行彙總.
free命令呢能夠查看真實使用的內存  通常用free -m
使用lsof 、ps -aux 能夠查看詳細的每一個進程的使用情況
dmesg 也是經常使用來查看系統性能的命令
#######################################################################################################################################################################
#題目:有10臺被監控主機、一臺監控機,在監控機上編寫腳本,一旦某臺被監控機器/分區適用率大於80%,就發郵件報警放到crontab裏面, 每10分鐘檢查一次
#測試機器:虛擬機Linux as 4
#1.首先創建服務器間的信任關係。拿兩臺機器作測試
本機ip:192.168.1.6
[root@codfei ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y (覺得我是第2次創建關係因此此處覆蓋原來的文件)
Enter passphrase (empty for no passphrase):(直接回車無須輸入密鑰)
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
04:37:13:2a:4b:10:af:c1:2b:03:3f:6b:27:ce:b9:62 root@codfei
[root@codfei ~]# cd .ssh/
[root@codfei .ssh]# ll
-rw-------  1 root root 883 Apr 25 17:51 id_rsa
-rw-r--r--  1 root root 221 Apr 25 17:51 id_rsa.pub
-rw-r--r--  1 root root 442 Apr 25 17:37 known_hosts
id_rsa是密鑰文件,id_rsa.pub是公鑰文件。
[root@codfei .ssh]# scp id_rsa.pub192.168.1.4:/root/.ssh/192.168.1.6
root@192.168.1.4's password:
id_rsa.pub                                    100%  221     0.2KB/s   00:00
這裏把公鑰文件取名爲本機的ip地址就是爲了之後和更多的機器創建信任關係不發生混淆。
如今登錄到192.168.1.4機器
[root@codfei ~]# cd .ssh/
[root@codfei .ssh]# cat 192.168.1.6 >> authorized_keys
而後回到192.168.1.6機器直接
[root@codfei .ssh]# ssh 192.168.1.4
Last login: Wed Aug  8 12:14:42 2007 from 192.168.1.6
這樣就能夠了,裏面偶爾涉及到權限問題。通常./ssh文件夾是755 authorized_keys爲600或者644


####腳本以下#######################

#!/bin/bash            
#SCRIPT:df_check.sh           
#Writeen by codfei Mon Sep  3 07:25:28 CST 2007        
#PURPOSE:This script is used to monitor for full filesystems.      
#######################Begining########################################
FSMAX="80"
remote_user='root'  #####徹底能夠不用root
remote_ip=(192.168.1.5 192.168.1.6 192.168.1.7 192.168.1.8 192.168.1.9 192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13 192.168.1.14  )
###這裏填寫你要監控的主機ip
ip_num='0'
while [ "$ip_num" -le "$(expr ${#remote_ip[@]} - 1)" ]
do      
read_num='1'      
ssh "$remote_user"@"${remote_ip[$ip_num]}" df -h > /tmp/diskcheck_tmp
grep '^/dev/*' /tmp/diskcheck_tmp|awk '{print $5}'|sed 's/\%//g' > /tmp/diskcheck_num_tmp         
         while [ "$read_num" -le $(wc -l < /tmp/diskcheck_num_tmp) ]      
  do
size=$(sed -n "$read_num"'p' /tmp/diskcheck_num_tmp)               
if [ "$size" -gt "$FSMAX" ]              
then               
$(grep '^/dev/*' /tmp/diskcheck_tmp|sed -n $read_num'p' > /tmp/disk_check_mail)
        $(echo ${remote_ip[$ip_num]} >> /tmp/disk_check_mail)               
$(mail -s "diskcheck_alert" admin < /tmp/disk_check_mail)               
fi      
read_num=$(expr $read_num + 1)      
done      
ip_num=$(expr $ip_num + 1)
done

#############over################################
################讓腳本每十分鐘執行一次#############
在cron表中加入
0/10 * * * * /home/codfei/diskcheck.sh 2>&1



##########################################################################
好比, ext2文件系統, 若是異常死機,開機如何修復文件系統?
若是異常關機,好比斷電,通知機房的人開機以後,
咱們須要遠程修復、檢查文件系統
除了/分區以外, 其餘的分區:
umount /home
fsck -y /home
/ 分區須要開機以後, 由機房的人來掃描
隨後咱們再登陸並掃描/home等其餘分區
如何查看一個進程所使用的文件句柄?
看這裏面 /proc/進程號/fd/
的個數就好了
簡單的好比如何查看apache進程數
[root@localhost fd]# ps -ef|grep httpd|wc -l
1
如何統計apache的每秒訪問數?
tail access_log  | awk '{print $1,$4}'
[root@localhost logs]# grep -c `date -d '3 second ago' +%T` access_log
0
#######################################################################################################################
#######################################################################################################################
一、/proc/sys 子目錄的做用
該子目錄的做用是報告各類不一樣的內核參數,並讓您能交互地更改其中的某些。與 /proc 中全部其餘文件不一樣,該目錄中的某些文件能夠寫入,不過這僅針對 root。

其中的目錄以及文件的詳細列表將佔據過多的篇幅,並且該目錄的內容是依賴於系統的,而大部分的文件也僅僅對某些特殊的應用程序有用。然而,如下是該子目錄的兩個最多見的用途:

容許路由:即使是 Mandrakelinux 默認的內核也是容許路由的,您必需顯式容許它這麼作。爲此,您只要以 root 身份鍵入如下命令:

$ echo 1 >/proc/sys/net/ipv4/ip_forward


若是您要禁用路由,請將上述命令中的 1 改成 0。

阻止 IP 欺騙:IP 欺騙會讓人認爲某個來自於外部的某個數據包是來自於它到達的那個接口。這一技術常被駭客(cracker)所使用。您可讓內核阻止這種***。請鍵入:

$ echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter


這樣,這種***就再也不可能了。

這些改變僅當系統運行時有效。在系統從新啓動以後,它們會改會它們的默認值。要在啓動時就改動這些值,您能夠將您在 shell 提示符後鍵入的命令添加到 /etc/rc.d/rc.local 中以避免每次都鍵入它們。另外一個方法是修改

/etc/sysctl.conf
二、將一個文本的奇數行和偶數行合併,第2行和第3行合併
[root@localhost bin]# cat 1
48      Oct     3bc1997 lpas    68.00   lvx2a   138
484     Jan     380sdf1 usp     78.00   deiv    344
483     nov     7pl1998 usp     37.00   kvm9d   644
320     aug     der9393 psh     83.00   wiel    293
231     jul     sdf9dsf sdfs    99.00   werl    223
230     nov     19dfd9d abd     87.00   sdiv    230
219     sept    5ap1996 usp     65.00   lvx2c   189
216     Sept    3zl1998 usp     86.00   kvm9e   234
[root@localhost bin]# sed '$!N;s/\n/  /g' 1
48      Oct     3bc1997 lpas    68.00   lvx2a   138  484     Jan     380sdf1 usp     78.00   deiv    344
483     nov     7pl1998 usp     37.00   kvm9d   644  320     aug     der9393 psh     83.00   wiel    293
231     jul     sdf9dsf sdfs    99.00   werl    223  230     nov     19dfd9d abd     87.00   sdiv    230
219     sept    5ap1996 usp     65.00   lvx2c   189  216     Sept    3zl1998 usp     86.00   kvm9e   234
[root@localhost bin]# sed -n -e 2p -e 3p 1|sed '$!N;s/\n/ /'
484     Jan     380sdf1 usp     78.00   deiv    344 483     nov     7pl1998 usp     37.00   kvm9d   644
三、read 命令5秒後自動退出
[root@localhost bin]# read -t 5
四、自動ftp上傳
#!/bin/sh
ftp -n<<END_FTP
open 192.168.1.4
user codfei duibuqi   //用戶名codfei 密碼duibuqi
binary
prompt off    //關閉提示
mput test    //上傳test
close
bye
END_FTP
   自動ssh登錄 從A到B而後再到c
#!/usr/bin/expect -f
set timeout 30
spawn ssh codfei@B
expect "password:"
send "pppppp\r"
expect "]*"
send "ssh codfei@C\r"
expect "password:"
send "pppppp\r"
interact

五、#打印第一個域
[root@localhost bin]# cat 3
eqeqedadasdD
eqeqdadfdfDD
fdsfdsfQWEDD
DSADASDSADSA
[root@localhost bin]#
[root@localhost bin]#
[root@localhost bin]# awk -F "" '{print $1}' 3
e
e
f
D
六、實現字符串翻轉
[root@localhost bin]# cat 8
qweqewqedadaddas
[root@localhost bin]# rev 8
saddadadeqweqewq
########################################第2次電面
七、sed awk grep哪一個最好
我答的是 哪一個掌握的精通,都很好,可是仍是問我哪一個最好,我只能說awk了,對於行操做和列操做均可以操做的很好。
八、grep -E -P 是什麼意思
我說的是-E, --extended-regexp 採用規則表示式去解釋樣式。 -P不太清楚
九、還問了我對運維這個工做的理解,和應該具有的素質。
…………


後記:百度面試的這些日子,很刻苦的學習了一個階段。腳本編寫能力有了很大的提升。可是仍是很遺憾,沒有去到那。打算在大連找個運維的工做,繼續個人理想。工做幾年以後,我還會繼續努力的。
3年前,我是個連電腦開機關機都不會的農村孩子,如今我感受本身已經對於Linux入門了,我頗有成就感,可是我仍是被百度通知,我沒有發展潛力。我是東軟的學生,我老是認爲計算機這個行業不看出身,只要有實力就能夠了。可是第一次電面我沒有被提早通知會電面,忽然打來的電話,當時正在睡覺,頭腦一片空白……進入到第2次面試的時候,沒有慌張準備的很充分,可是仍是沒有最終被錄取。面試的考官問我,你最失落的事是什麼,我說我最失落的事是我高考前意外受傷休學了,我如今才意識到,我當時應該回答他,我最失落的時刻應該是我得知被百度拒絕的那一刻。已經付出了努力,即便失敗也很坦然。
相關文章
相關標籤/搜索