Linux面試題總結,一小時搞懂!

Linux面試題總結

1、簡述Apache兩種工作模式,以及它們之間的區別。答:(1)prefork MPM使用多個子進程,每個子進程只有一個線程來處理一個http請求,直到這個TCP連接被釋放。root主進程在最初建立startserver個子進程後,等待1秒鐘,創建2個進程,再等待1秒鐘,再創建4個進程,直到滿足最小空閒進程的數量,這就是預派生的由來。這種模式可以不必在請求到來時再產生新的進程,從而提高了訪問效率。

(2)worker模式使用多個子進程,每個子進程負責接收請求,該進程下多個線程來處理請求。由於線程之間共享地址空間,所以內存消耗小,而且資源利用率高,但是一個線程的崩潰會牽連到其他線程,所以一個程序在運行時必須被系統識別為每個線程都是安全的。

(3)woker和prefork的切換,cd /usr/sbin ,mv httpd httpd.prefork,mv httpd.worker httpd,service http restart

2、用iptables添加一個規則允許192.168.0.123訪問本機3306端口

iptables -I INPUT -p tcp -s 192.168.0.123 -d 127.0.0.1 --dport 3306 -j ACCEPT

3、如何對一臺Linux服務器進行系統性能調優,列舉出參數。

答:主機的存活狀態、系統負載值、CPU的使用率、磁盤IO量,swap進出量,網絡流量,數據庫的主從複製狀態、LVS+keepalived的VIP。

4, DNS服務器的工作原理。

答:首先客戶機的應用進程將待解析的域名放在DNS請求報文中,以UDP用戶數據報方式發給本地域名服務器(使用UDP是因為它無連接,開銷小),本地域名服務器查看緩存是否對對應域名和IP地址的映射關係,如果有,直接返回IP地址給主機,如果沒有,就將向轉發器發出查詢請求,轉發器是網絡上的DNS服務器,目的是提高解析效率,如果連轉發器也沒有的話,就進行遞歸解析,轉發報文從根域名服務器-頂級域名服務器-二級域名服務器等一直找到完整的域名後,進行反向回溯給交本地域名服務器,緩存後再由本地域名服務器將對應的IP地址放在應答報文中,從而主機得到IP地址即可通信。

5、修改第一塊網卡的路徑是什麼。

/etc/sysconfig/network-scripts/ifcfg-eth 0

6、 簡述I節點是什麼,並說出Linux 文件系統通過i 節點把文件的邏輯結構和物理結構轉換的工作過程?

答:I節點是一個多級索引的數據結構,它的基本思想是給每個文件賦予一張成為I節點的小表,在這張小表中列出了文件屬性以及文件各數據塊中在磁盤中的地址。那麼它的工作工程:當需要訪問文件時,內核查看文件目錄項找到對象的文件名和I節點號,那麼再通過這個I節點號來找磁盤的地址,實現邏輯結構和物理結構的轉換,返回給數據給用戶顯示。


7、使用shell,建立classl用戶組,再批量建立stu 1--stu30的用戶,並指定用戶組為

classl。

答:vi yonghu.sh

#!/bin/bash

groupadd class1

for((i=1;i<=30;i=i+1))

do

useradd stu$i -G class1

done

8、日常監控都需要監控哪些?

1)硬件:CPU:cat /proc/cpuinfo,內存: cat /proc/meminfo,硬盤:fdisk -l(dmesg是用來查看硬件信息的)

2)系統:負載:cat /proc/loadavg, uptime查看實時load average、swap,虛擬內存:vmstat(參數一s; 2 4),vmstat 5 5(表示在5秒時間內進行5次採樣)。

系統日誌:tail -f /var/log/messages

logwatch一print一range Today一service SSHD一service pam_unix

3)網絡:Host_ Alive,Ping,端口,連接

9、如何將本地80端口的請求轉發到8080端口,當前主機IP為192.168.16.1,其中本地網卡eth0。

答:#iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.16.1--dport

80 -j REDIRECT --to-port 8080

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

答:①包過濾防火牆工作在網絡協議IP層,它只對IP包的源地址、目標地址及相應端口進行處理,因此速度比較快,能夠處理的併發連接比較多,缺點是對應用層的攻擊無能為力。②應用代理防火牆將收到的IP包解封裝成高層協議的通訊數據,比如http連接信息,因此能夠對基於高層協議的攻擊進行攔截。缺點是處理速度比較慢,能夠處理的併發數比較少。事實上還有狀態監測防火牆(ip_conntrack):狀態監測防火牆是在當今企業中部署最為常見的。他們建立在基於防火牆保持每個活動連接狀態信息的包過濾上。當有一個新的包到達防火牆時,過濾機制首先檢查這個包是否是當前活動連接(前面已經授權過的)的一部分。只有當這個包沒有出現在當前的活動連接列表裡時,防火牆才會以它的規則庫評估這個包。狀態監測防火牆之所以如此常見是因為:它們是效率最高、性價比最高的防火牆,並且廣泛適用於保護網絡的邊界。ASA、PIX、firewall

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

iptables -A INPUT -p ICMP --icmp-type 8 -m time --timestart 00:00:00 --timestop 23:59:59 --weekdays Mon -j DROP

限制在每個星期一的0點0分0秒到23點59分59秒這個時間段內,所有icmp協議報文的應答都會拒絕,

12、Linux常見打包工具並寫相應解壓縮參數?

答:①用tar調用bzip2將file1,file2,file3生成壓縮包

tar -jcvf file.tar.bz2 file{1,2,3} 解壓:tar -jxvf file.tar.bz2

②用tar調用gzip將file1,file2,file3生成壓縮包

tar -zcvf file.tar.gz file{1,2,3} 解壓:tar -zxvf file.tar.gz

③.用tar調用xz將file1,file2,file3生成壓縮包

tar -Jcvf file.tar.xz file{1,2,3} 解壓:tar -Jxvf file.tar.xz

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

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

b.瀏覽器發出DNS請求報文

c.計算機首先查詢本機HOSTS文件,看是否存在,存在直接返回結果,不存在,繼續轉發請求報文

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

e.合法dns返回dns結果給本地dns,管理該域的本地dns服務器緩存本結果,直到緩存時間過期,才再次查詢此結果。

14、DNS什麼使用TCP,什麼時候使用UDP,為什麼這麼設計?

答:DNS在區域複製的使用TCP,因為主域名服務器傳輸數據到輔助域名服務器,必須得保證我們傳輸的數據是可靠的,是沒有差錯的;那麼在瀏覽器發出DNS請求報文的時候使用UDP,原因是為了減少它的開銷,無連接,把這個數據包扔了就走,什麼都不用管。

15、請解釋FTP控制連接的工作模式?

答:①在主動模式下,FTP客戶端隨機開啟一個大於1024的端口N向服務器的TCP 21號端口發起連接,然後開放N+1號端口進行監聽,並向服務器發出PORT N+1命令(用來告訴服務器連接它的哪個新端口)。服務器接收到命令後,會用其本地的FTP數據端口(通常是20)來連接客戶端指定的端口N+1,進行數據傳輸。

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

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

附:傳輸模式是二進制模式和ASCII文本模式,常用ftp命令有get、put、ls、dir

16、vi file

50 16 * * * rm -r /abc/* #每天下午4:40刪除

55 17 * * * umount /dev/hdc #卸載CDROM

0 8-18/1 * * * cut -f 1 /xyz/x1 >> /backup/bak01.txt

#每天的8:00-18:00時間段內每隔1小時,都會截取/xyz/x1的第一列(每行第一個域)的數據以追加的方式放入到/backup/bak01.txt文件中

50 5 * * 1 tar -zcvf backup.tar.gz /data 每週星期一的下午5:50將/data目錄下所有文件打包並壓縮

root@yhc#: crontab file #這樣也能進行定時任務而不用edit

17、linux啟動過程簡述:加載BIOS、讀取MBR、Boot Loader、加載內核、/sbin/init進程會讀取/etc/inittab文件,並依據此文件來進行初始化工作、init進程執行rc.sysinit(加載一系列配置信息)、啟動內核模塊、執行不同運行級別的腳本程序、執行/etc/rc.d/rc.local(用來用戶自定義啟動信息)、執行/bin/login程序,進入登錄狀態。

啟動第一步--加載BIOS

當你打開計算機電源,計算機會首先加載BIOS信息,BIOS信息是如此的重要,以至於計算機必須在最開始就找到它。這是因為BIOS中包含了CPU的相關信息、設備啟動順序信息、硬盤信息、內存信息、時鐘信息、PnP特性等等。在此之後,計算機心裡就有譜了,知道應該去讀取哪個硬件設備了。

啟動第二步--讀取MBR

眾所周知,硬盤上第0磁道第一個扇區被稱為MBR,也就是Master Boot Record,即主引導記錄,它的大小是512字節,別看地方不大,可裡面卻存放了預啟動信息、分區表信息。

系統找到BIOS所指定的硬盤的MBR後,就會將其複製到0×7c00地址所在的物理內存中。其實被複制到物理內存的內容就是Boot Loader,而具體到你的電腦,那就是lilo或者grub了。

啟動第三步--Boot Loader

Boot Loader 就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核做好一切準備。

Boot Loader有若干種,其中Grub、Lilo和spfdisk是常見的Loader。

我們以Grub為例來講解吧,畢竟用lilo和spfdisk的人並不多。

系統讀取內存中的grub配置信息(一般為menu.lst或grub.lst),並依照此配置信息來啟動不同的操作系統。

啟動第四步--加載內核

根據grub設定的內核映像所在路徑,系統讀取內存映像,並進行解壓縮操作。此時,屏幕一般會輸出“Uncompressing Linux”的提示。當解壓縮內核完成後,屏幕輸出“OK, booting the kernel”。

系統將解壓後的內核放置在內存之中,並調用start_kernel()函數來啟動一系列的初始化函數並初始化各種設備,完成Linux核心環境的建立。至此,Linux內核已經建立起來了,基於Linux的程序應該可以正常運行了。

啟動第五步--用戶層init依據inittab文件來設定運行等級

內核被加載後,第一個運行的程序便是/sbin/init,該文件會讀取/etc/inittab文件,並依據此文件來進行初始化工作。

其實/etc/inittab文件最主要的作用就是設定Linux的運行等級,其設定形式是“:id:5:initdefault:”,這就表明Linux需要運行在等級5上。Linux的運行等級設定如下:

0:關機

1:單用戶模式

2:無網絡支持的多用戶模式

3:有網絡支持的多用戶模式

4:保留,未使用

5:有網絡支持有X-Window支持的多用戶模式

6:重新引導系統,即重啟

關於/etc/inittab文件的學問,其實還有很多,在後序文章中設計到的,賣個關子,敬請期待,呵呵

啟動第六步--init進程執行rc.sysinit

在設定了運行等級後,Linux系統執行的第一個用戶層文件就是/etc/rc.d/rc.sysinit腳本程序,它做的工作非常多,包括設定PATH、設定網絡配置(/etc/sysconfig/network)、啟動swap分區、設定/proc等等。如果你有興趣,可以到/etc/rc.d中查看一下rc.sysinit文件,裡面的腳本夠你看幾天的

啟動第七步--啟動內核模塊

具體是依據/etc/modules.conf文件或/etc/modules.d目錄下的文件來裝載內核模塊。

啟動第八步--執行不同運行級別的腳本程序

根據運行級別的不同,系統會運行rc0.d到rc6.d中的相應的腳本程序,來完成相應的初始化工作和啟動相應的服務。

啟動第九步--執行/etc/rc.d/rc.local

你如果打開了此文件,裡面有一句話,讀過之後,你就會對此命令的作用一目瞭然:

# This>

# You can put your own initialization stuff in here if you don’t

# want to do the full Sys V style init stuff.

rc.local就是在一切初始化工作後,Linux留給用戶進行個性化的地方。你可以把你想設置和啟動的東西放到這裡。

啟動第十步--執行/bin/login程序,進入登錄狀態

此時,系統已經進入到了等待用戶輸入username和password的時候了,你已經可以用自己的帳號登入系統了。:

18、解釋I節點在文件系統中的作用?

答:I節點一種邏輯結構和物理結構進行轉換的多級索引文件結構。在Linux文件系統中,是以塊為單位存儲信息的,為了找到某個文件在存儲空間的位置,用i節點對一個文件進行索引。I節點描述了文件屬性和各數據塊在磁盤上位置的一張小表。文件屬性包括文件大小、創建時間、最後訪問時間、存取權限等保護信息。但是i節點是不保存文件名的。文件名是保存在一個文件目錄項中。每一個目錄項中都包含了文件名和i節點。

19、 什麼是符號鏈接,什麼是硬鏈接?符號鏈接與硬鏈接的區別是什麼?

答:鏈接分硬鏈接和符號鏈接。符號鏈接可以建立對於文件和目錄的鏈接。符號鏈接可以跨磁盤分區,符號鏈接的文件類型位是I,鏈接文件具有新的i節點;硬鏈接不可以跨磁盤分區。它只能建立對文件的鏈接,硬鏈接的文件類型位是-號,且硬鏈接文件的i節點同被鏈接文件的i節點相同。

20、簡述進程的啟動、終止的方式以及如何進行進程的査看。

在 Linux中啟動一個進程有手工啟動和調度啟動兩種方式: (1) 手工啟動

用戶在輸入端發出命令,直接啟動一個進程的啟動方式。可以分為:

①前臺啟動:直接在SHELL中輸入命令進行啟動。

②後臺啟動:啟動一個目前並不緊急的進程,如打印進程。

(2) 調度啟動

系統管理員根據系統資源和進程佔用資源的情況,事先進行調度安排,指定任務運行的時間和場合,到時候系統會自動完成該任務。

經常使用的進程調度命令為:at、batch、crontab。進程查看ps -aux | grep httpd,進程終止kill-9 進程號。

21、Linux硬盤分了多少個塊?

答:linux硬盤組織方式為:引導區、超級塊、索引結點、數據塊、目錄塊;其中超級塊中包含了關於該硬盤或分區上的文件系統的整體信息,如文件系統的大小等,超級決包含了i節點表和空閒塊表等的文件系統信息;超級塊後面的數據結構是索引結點,包含了針對某一個具體文件的幾乎全部信息,如文件的存取權、所有者、大小、建立時間以及對應的目錄塊和數據塊等:數據塊是真正存儲文件內蓉的位置。但是索引結點中不包括文件的名字,文件名是放在目錄塊裡的。目錄塊裡包含有文件的名字以及此文件的索引結點編號。

22、NTFS與FAT的區別?

答:NTFS的特性相比FAT有很多優點。①提供文件和文件夾的安全性,支持加密和設置權限②高可靠性,NTFS是一種可恢復的文件系統,並且支持壞簇映射,檢測出現錯誤的磁盤區域 ,標記並將數據存儲在其他區域③NTFS支持磁盤配額管理,另外支持對文件、文件夾以及分區的壓縮。④NTFS採用了更小的簇,4KB左右,避免了對磁盤空間的;浪費。那麼FAT記錄文件分配表的格式,缺點是僅用於單用戶系統,而且沒有防止碎片的措施,並且易受損害。

23、http://a.domain.com/1.html http://b.domain.com/1.html

http://c.domain.com/1.html http://a.domain.com/2.html

http://b.domain.com/2.html http://a.domain.com/3.html

統計網站出現的次數,並按數字由大到小進行排列?

答:awk ‘BEGIN{FS=”/”}{arr[$3]++}END{for (domain in arr){print arr[domain],domain}}’| sort -r

FS(Field separator)字符域分隔符表示操作的時候以什麼為分割符,$3就是域名,-r是按自然數從大到小反向排序。

輸出如下:

3 a.domain.com

2 b.domain.com

1 c.domain.com

24、如何用mysql 命令進行備份和恢復?,以test庫為例

答:mysqldump備份:mysqldump -u root -p 123456 -h 127.0.0.1 test > testbackup.sql // -p是password,前面都是連著寫的,輸出數據庫到test.sql文件中

mysqldump還原:mysql -u root -p 123456 -h 127.0.0.1 test< testbackup.sql //將test.sql文件輸入到mysql數據系統中,進行恢復,恢復的時候直接加mysql,不用dump。直接跟數據庫名稱即可

25、如何掛載windows共享的目錄?

答:mount -t cifs -o username=administrator,password=admin //192.168.1.1/share/ /windows/ #optional非強制的,可選的,CIFS是公共的或開放的SMB協議版本,Common Internet File System通用網絡文件系統,並由Microsoft使用,/windows/是我們的掛載點。

26、源目節點的網絡是互通的,最少列出五種傳輸文件的服務

答:NFS、FTP、Samba、通過雲盤服務訪問別人共享的文件相當於就使用http協議、rsync(remote synchronize)遠程同步服務器。

27、請介紹Bind的智能DNS的原理?

答:智能DNS的功能是可以智能的判斷訪問網站的用戶,然後根據不同的訪問者把域名分別解析成不同的地址。如訪問者是網通用戶,智能DNS服務器會把域名對應的網通IP地址解析給這個訪問者。如果電信用戶,智能DNS服務器會把域名對應的電信IP地址解析給這個訪問者。智能就體現在這兒。那麼基本的原理就是在配置文件中設定了 view,在每個view 都有客戶端的本地DNS負責的IP 地址段,bind 服務器根據請求解析客戶端的本地DNS,匹配不同的view,再根據該view 的配置,找到相應的配置文件進行查詢,將解析的IP地址結果返回給請求的客戶端,相當於一個二級索引結構。

28、如果得到隨機的字串,長度和字串中出現的字符表可定義,並將字串倒序顯示,如

把0123456789 作為基準的字串字符表,產生一個6 位的字串642031,打印出的字串為

130246,使用awk編程。

答:awk -v count=6 'BEGIN

{srand( );str="0123456789";len=length(str);for(i=count;i>0;i--)

marry[i]=substr(str,int(rand()*len),1);for(i=count;i>0;i--)

printf("%c",marry[i]);printf("\n");for

(i=0;i<=count;i++) printf("%c",marry[i]);printf("\n")}'

838705

507838

29、如何查看當前Linux 系統的狀態,如CPU 使用,內存使用,負載情況等.

答:Linux 系統中/proc是個偽文件目錄,不佔用系統空間,及時的反應出內存現在使用的進程情況......其中許多文件都保存系統運行狀態和相關信息

對於/proc中文件可使用文件查看命令瀏覽cat其內容,文件中包含系統特定信息:

cpuinfo 主機CPU 信息

filesystems 文件系統信息

meminfo 主機內存信息

version Linux 內存版本信息

diskstatus 磁盤負載情況

另外top 命令可以動態的顯示服務器健康狀況的使用情況. free 命令呢可以查看真實使用的內存 一般用free -m 。使用lsof (list open files)是一個列出當前系統打開文件的工具使用lsof -i:8080, -i 用以顯示符合條件的進程情況

ps -aux 可以查看詳細的每個進程的使用狀況,還有uptime查看負載命令

dmesg 也是常用來查看系統性能及硬件的命令

30、解釋top命令和vmstat命令

答:top命令:查看CPU狀態、內存狀態、進程狀態、交換分區狀態,系統啟動時間以及負載情況。vmstat 2 1現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況,2表示每個兩秒採集一次服務器狀態,1表示只採集一次。如果不加1就一直採集。

vmstat 5 6

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------r b swpd free buff cache si so bi bo in cs us sy id wa st0 0 0 3029876 199616 690980 0 0 0 2 3 2 0 0 100 0 0

31、用sed命令和cat將test.txt所有回車替換為空格?

答:cat test.txt | tr "\n" " " ;sed 's/\n/ /g' test.txt; route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 ;

sed '1c Hi' ab #第一行代替為Hi

sed '1,2c Hi' ab #第一行到第二行代替為Hi

sed s/\'//g 替換單引號為空

格式:sed 's/要替換的字符串/新的字符串/g' (要替換的字符串可以用正則表達式)

32、匹配ipv4的正則表達式?

答:?代表匹配前面的子表達式零次或一次,,{n},n是一個非負整數,匹配確定的n次,2[0-4]/d取值範圍是200-249,/d代表0-9的十進制,[01]代表0或1中的一個。

250——255,用正則可以寫成:25[0-5];

200——249可以這樣寫:2[0-4]/d;

0——199有些麻煩,不過可以繼續分拆,這樣寫起來更加簡單明瞭,0——9、10——99、100——199,這樣分開考慮,就得到了三個式子:/d、/d/d(有冗餘)、1/d/d,這三個式子我們可以像合併同類項一樣把它們合併到一起:[01]?/d?/d

這樣,一段地址的表達式就是:2[0-4]/d |25[0-5]| [01]?/d?/d意思就是這三大類地址選一個即可

(2[0-4][0-9]|25[0-5]|[0-1]?[0-9]?[0-9].) 這是一個IP地址加上小點的表達式,邏輯或語句代表前面可有可不有,只要有一個就算成功。

匹配這樣的地址有3個字段,最後一個字段不加小點

(2[0-4][0-9]|25[0-5]|[0-1]?[0-9]?[0-9].) {3}2[0-4][0-9]|25[0-5]|[0-1]?[0-9]?[0-9]

33、prefork和worker模式的切換?

答:1.將當前的prefork模式啟動文件改名mv httpd httpd.prefork2.將worker模式的啟動文件改名mv httpd.worker httpd3.修改Apache配置文件vi /usr/local/apache2/conf/extra/httpd-mpm.conf找到裡邊的如下一段,可適當修改負載等參數:StartServers 2MaxClients 150MinSpareThreads 25MaxSpareThreads 75ThreadsPerChild 25MaxRequestsPerChild 04.重新啟動服務/usr/local/apache2/bin/apachectl restart即可換成worker方式啟動apache2

34、請寫出apache2.X版本的兩種工作模式,以及各自工作原理。如何查看apache當前所支持的模塊,並且查看是工作在哪種模式下?

答案:prefork的工作原理是:用進程的一個線程響應用戶請求,控制進程在最初建立“StartServers”個子進程後,為了滿足MinSpareServers設置的需要創建一個進程,等待一秒鐘,繼續創建兩個,再等待一秒鐘,繼續創建四個……如此按指數級增加創建的進程數,最多達到每秒32個,直到滿足MinSpareServers設置的值為止。這種預派生的模式可以不必在請求到來時再產生新的進程,從而減小了系統開銷以增加性能。 worker是一個進程下多個線程來響應多個用戶請求的MPM。由於共享系統資源,所以內存消耗小,但是一個線程崩潰會牽連當前所有線程。可以通過命令httpd -l,可以查看apache當前的模塊,如果帶有worker.c就是工作在worker模式下,如果有prefork.c就是工作在prefork的模式下。

35、如何看到用戶登錄日誌?

答:more /var/log/secure是記錄了所有用戶登陸信息 ,who /var/log/wtmp可以幹了些什麼?root賬戶下輸入su - username,切換到username下輸入history,能看到這個用戶歷史命令,默認最近的1000條。還可以用last命令顯示自從文件第一次創建以來登錄過的用戶

35、Linux中utmp,wtmp,lastlog,messages各文件的作用

1、有關當前登錄用戶的信息記錄在文件utmp中;======who命令2、登錄進入和退出紀錄在文件wtmp中;========w命令3、最後一次登錄文件可以用lastlog命令察看;4、messages======從syslog中記錄信息

36、Apache nginx lighttpd 各優缺點,適合那些場合?

答:一般來說nginx主要用於負載均衡, 他對於處理靜態頁面比較好,其次,佔用內存低。lighttpd存在對Flash streaming和對fastcgi的支持,佔用內存也比較低,但是不如nginx那麼穩定,apache龐然大物一個,模塊化集成,功能強大,比較穩定。場合:Apache 後臺服務器(主要處理php及一些動態請求 ),Nginx 前端服務器(利用它佔用系統資源少得優勢來處理靜態頁面大量請求),Lighttpd 圖片服務器

37、RAID0,1,5,0+1的含義?

答:raid0 就是把多個(最少2個)硬盤合併成1個邏輯盤使用,數據讀寫時對各硬盤同時操作,不同硬盤寫入不同數據,速度快。 raid1就是同時對2個硬盤讀寫(同樣的數據)。強調數據的安全性。比較浪費。 raid5也是把多個(最少3個)硬盤合併成1個邏輯盤使用,數據讀寫時會建立奇偶校驗信息,並且奇偶校驗信息和相對應的數據分別存儲於不同的磁盤上。當RAID5的一個磁盤數據發生損壞後,利用剩下的數據和相應的奇偶校驗信息去恢復被損壞的數據。相當於raid0和raid1的綜合。 raid10就是raid1+raid0,比較適合速度要求高,又要完全容錯,最少需要4塊硬盤(注意:做raid10時要先作RAID1,再把數個RAID1做成RAID0,這樣比先做raid0,再做raid1有更高的可靠性)

38、dmesg命令中看到ip_conntrack:table full,dropping packet,如何解決?

答:原因是一些TCP連接從來就沒有釋放過,所以導致這種問題。首先 cat /proc/sys/net/ipv4/ip_conntrack_max(1): 加大ip_conntrack_max 值:

echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max,這個效果是暫時的, 如果要每次開機都使用新的數值, 需將上述指令寫入 /etc/rc.d/rc.local

(2)降低 ip_conntrack timeout 時間,

echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

39、常用命令實例:

(1)打印出含有空行的行號:grep -n ^$ b.bash |awk 'BEGIN{FS=":"}{print$1}'

其中分隔符等價於awk -F ":" '{print $1}’

(2)打印文件的第2行到第5行:sed -n '2,5p' b.bash

(3)把文件中第10行的sum改為yhc:sed '10s/sum/yhc/g' b.bash

(4)在匹配式樣“done”的行之後插入一空行:sed '/done/G' b.bash (G附加暫存空間到模式空間)

(5)在文件第10行首添加5個空格:sed '10s/^/ /g' b.bash

(6)從a.log文件中提取包含“warning”或者“fatal”,同時不包含“IGNOR”的行,然後提取“:”分割的第五個字段

egrep 'WARNING|FATAL' a.log | egrep -v 'IGNOR' | awk -F ":" '{print $5}'

40、在Shell環境下,如何查看遠程Linux系統運行了多少時間?

答:ssh user@被監控主機ip "uptime"

在每個月的第一天備份並壓縮/etc目錄下的所有內容,存放在/root/backup目錄下,文件名為yymmdd_etc,shell程序fileback.sh存放在/usr/bin目錄下?

#!/bin/bash

filename=`date +%y%m%d`_etc.tar.gz #date +%y%m%d直接就能輸出160612

cd /etc

tar -zcvf $filename *

mv $filename /root/backup/ #必須先要創建這個文件才行。

#echo * * 1 * * root ./fileback.sh & >>/etc/crontab

41、介紹下LVS負載模式和調度算法?

答:(1)DNAT模式:畫圖說明

(2)隧道模式:調度器在數據報文的頭部再添加一個IP地址的,類似於在VPN中, 公有IP封裝在外,私有IP在內,RS收到後再進行解封裝,這種情況主要用於遠程站點,比如說有臺服務器部署在美國,他要求調度器和RS都要支持隧道協議。

(3)DR直接路由模式,要求RS和調度器共享一個VIP,並且他們的真實IP都處於同一個網段,以便發出ARP請求,在調度器的出接口將目的MAC地址替換為RS的目的MAC地址並轉發出去,RS收到數據包處理後,直接返回客戶端,不經過調度器了。

調度算法分為靜態調度和動態調度,比如輪詢和加權最少連接。

42、linux上進程有5種狀態:1. 運行(正在運行或在運行隊列中等待)2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷髮生)4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放)5. 停止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行運行)

43、30道面試題

(1)、查看http的併發連接數與其TCP連接狀態

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

(2)、linux如何掛載windows的共享文件夾

mount -t cifs -o username=WindowsLogin,password=passwordinWindows//16.187.190.50/test /mnt/ (-o optional 可選的)

(3)統計出apache的access.log中訪問量最多的5個IP:

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

(uniq命令可以去除排序過的文件中的重複行,-c :進行計數,sort -n,你有沒有遇到過10比2小的情況。我反正遇到過。出現這種情況是由於排序程序將這些數字按字符來排序了,排序程序會先比較1和2,顯然1小,所以就將10放在2前面。我們如果想改變這種現狀,就要使用-n選項,來告訴sort,“要以數值來排序”,-r代表降序排序)

(4)ps aux 中的VSZ代表什麼意思,RSS代表什麼意思

VSZ:虛擬內存集,進程佔用的虛擬內存空間

RSS:物理內存集,進程佔用實際物理內存空間

a 顯示所有與終端相關的進程,由終端發起的.x 顯示所有與終端無關的進程.u 顯示用戶導向的用戶列表.

(5)Linux系統的開機啟動順序

加載BIOS–>讀取MBR–>Boot Loader–>加載內核–>用戶層init根據inittab文件來設定系統運行的等級(一般3或者5,3是多用戶命令行,5是界面)–>init進程執行rc.syninit–>啟動內核模塊–>執行不同級別運行的腳本程序–>執行/etc/rc.d/rc.local(本地運行服務)–>執行/bin/login,就可以登錄了。

(6)保存當前磁盤分區的分區表

dd 命令(diskcopy):指定大小的塊拷貝一個文件,在複製的同時進行轉換。

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

(7)符號鏈接與硬鏈接的區別

我們可以把符號鏈接,也就是軟連接 當做是 windows系統裡的 快捷方式。

硬鏈接 就好像是 又複製了一份.

ln 3.txt 4.txt 這是硬鏈接,相當於複製,不可以跨分區,但修改3,4會跟著變,若刪除3,4不受任何影響。

ln -s 3.txt 4.txt 這是軟連接,相當於快捷方式。修改4,3也會跟著變,若刪除3,4就壞掉了。不可以用了。

(8)如何查看二進制文件的內容

我們一般通過hexdump命令 來查看二進制文件的內容。

(9)在1-39內取隨機數

echo $[$RAMDOM %40] ,RANDOM 隨機數,%39 取餘數

(10)顯示/etc/inittab中以#開頭,且後面跟了一個或者多個空白字符,而後又跟了任意非空白字符的行

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

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

grep “\:[0-9]\{1\}}\:” /etc/inittab #{1}確定前面的匹配一次

(12)怎麼把自己寫的腳本添加到服務裡面,即可以使用service命令來調用?

mv test /etc/init.d/ chmod +x /etc/init.d/test chkconfig –add test service test start

寫一個腳本,命名為test,最後chkconfig test on所有等級運行時都開啟test服務

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

#!/bin/bash

#function:download a onefile

url=$1

dir=$2

download()

{

[ ! -d $dir ] && read -p "no such file,do you want to creat it?(y/n)" answer

if[ $answer eq "y"|"Y" ];then

mkdir ./dir/

else

exit 51

fi

cd $dir #進入該目錄就能自動保存文件

wget $1>&/dev/null

[ $? eq 0 ]&&exit 0 || exit 52

}

download $url $dir #調用此函數

[ $# -ne 2 ]&& echo "Usage:sh $0 URL,directory"

(14)、將文件file1的前20行、文件file2的最後15行合併成一個test?

head -20 file1>test && tail -15 file2 >> test

(15)、移動.txt文件,並按大小排序顯示

#!/bin/bash

for file in `ls ./*.txt`

do

mv $file /tmp/

done

ls -al /tmp/ | sort -nr -k5 key位置

(16)設置DNS、網關

echo "nameserver 202.16.53.68" >> /etc/resolv.conf

route add default gw 192.168.1.1

(17)比如兩個文件file1和file2,刪除兩個文件中共同的部分,留下兩個文件中獨自有的部分

第一種:grep -v -f file1 file2 && grep -v -f file2 file1 -v表示反向匹配invert match,前一部分輸出文件2中的內容,但是剔除包含在文件1中的內容,f指定範本文件,其內容有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式為每一列的範本樣式

第二種:awk '{print $0}' file1 file2|sort|uniq -u >1.txt表示依次讀取file1 file2,打印出每行,NR是行號,$0代表整行。命令uniq,進行報告或者忽略重複的行,參數-u,表示只是打印出唯一的行

第三種:comm -3 file1 file2 默認輸出有三列:只在file1中有的行、只在file2中有的行、在file1和file2中共有的行。有參數-1 -2 -3,分別來抑制輸出對應的列,解決一切疑難雜症

(18)獲取遠程服務器的主機名

ssh 192.168.1.1 cat /etc/sysconfig/network |awk -F “=”’/HOSTNAME/ {print $2}’

(19)刪除指定時間之前的文件

第一種:location=”/root/sqlback”,find $location -mtime +30 -type f |xrags rm -f刪除30天前的東西。再加入定時任務文件crontab -e :10 4 1 * * /bin/bash deletesqlback.sh

第二種:find /root/sqlback/ -mtime +30 -type f -name *.gz -exec rm -f {} \;

(20)取出兩個文件的並集(重複的行只保留一份)cat file1 file2 | sort | uniq取出兩個文件的交集(只留下同時存在於兩個文件中的文件)cat file1 file2 | sort | uniq -d(repeated只輸出重複的行)刪除交集,留下其他的行cat file1 file2 | sort | uniq –u(uniq只顯示唯一的行)

(21)通過apache訪問日誌access.log 統計IP和每個地址訪問的次數,按訪問量列出前10名。

cat /var/log/httpd/access_log |awk ‘{print $1}’|sort -r |head -10 |uniq -c

uniq -c :uniq本身具有輸出功能,並且-c選項對輸出結果相同行的次數統計

(22)、編寫IPTABLES使用內網某臺機器的80端口可以在公網訪問,假設公網IP為10.10.1.1 ,實現192.168.1.0/24段的NAT?

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 10.10.1.1

( 1.PREROUTING:可以在這裡定義進行目的NAT的規則,因為路由器進行路由時只檢查數據包的目的ip地址,所以為了使數據包得以正確路由,我們必須在路由之前就進行目的NAT; 2.POSTROUTING:可以在這裡定義進行源NAT的規則,系統在決定了數據包的路由以後在執行該鏈中的規則。)

44、你覺得服務器通常會出現哪些故障,請試著舉例說出解決思路?

答:(1)系統無法正常啟動

a、grub損壞(MBR損壞、grub配置文件丟失)

b、某文件系統無法正常掛載、驅動不兼容

c、因為某個自啟服務故障,從而導致無法啟動系統

d、用戶無法登陸系統(bash程序損壞)

e、開機發出滋滋滋的響聲(內存條接觸不好,硬盤扇區損壞)

(2)機器頻繁重啟、風扇故障、電源不供電

(3)外網無法訪問自己(涉及到路由交換、DNS、物理線路、防火牆策略問題)

解決思路:①觀察服務器故障現象,注意報錯消息②查看相應的系統日誌,排障由廣到深,

逐步縮小範圍③理解故障發生的原因最好的辦法是人為使其重現故障,涉及到修改文件時,必須備份原文件,或者將這個故障機器的文件與正常運作的機器的文件進行對比,最好還原為缺省配置。平時做的準備工作也很重要,不要經常更新為好,備份工作的習慣更是要深入到靈魂,條件反射。

45、你能說運維工程師主要做什麼工作嗎?

答:一是網絡基礎設施:保障物理上的安全,如機房、服務器、路由交換設備、用戶PC正常運作;二是網絡操作系統:防漏洞、防入侵、使用權限、密鑰管理;三是網絡服務:用戶身份認證、安裝配置、排障;四是用戶操作使用培訓教育;五是制定完善的網絡運營維護文檔、日誌管理;六是系統備份、數據災難恢復機制,這也是最難的一點。

46、有多臺服務器需部署相同應用文件,文件會持續更新,你用什麼方式實現不同服務器間的文件同步?

答:這個問題很常見,可是又沒有很完美的解決方案。最直觀的想法是寫入第三方雲平臺,只要聯網,知道用戶密碼,就能實現多點登錄這個賬號;第二個方案,參考一下DNS的主域名服務器和輔助域名服務器的區域複製功能,能不能有所想法。第三個方案,我想這個同步問題早就被人研究了,一定有其他大公司開發出了同步備份系統軟件,我們只需要去搜一下就可以去使用了,可能要花點租金,但是值得。比如filegee企業文件同步備份系統、rsync軟件。

47、64位和32位操作系統有何不同?

答:(1)很明顯,運算速度不同,即CPU處理能力64位比32位高一倍

(2)64位操作系統只能安裝在64位的計算機上,而32位操作系統既能安裝在32位計算機,又能安裝在64位的計算機上

(3)計算機的地址位寬會影響虛擬內存的大小和尋址能力

* 如果要對32位系統進行擴展內存,使用PAE物理地址擴展技

48、chroot /mnt/sysimage做何理解?有何作用?

答:將/mnt/sysimage作為根目錄,原有系統的根目錄都被掛載到了/mnt/sysimage目錄下。在經過 chroot 之後,在新根下將訪問不到舊系統的根目錄結構和文件,這樣就增強了系統的安全性。chroot 的作用就是切換系統的根位置,而這個作用最為明顯的是在系統初始引導磁盤的處理過程中使用,從初始 RAM 磁盤 (initrd) 切換系統的根位置並執行真正的 init。另外,當系統出現一些問題時,我們也可以使用 chroot 來切換到一個臨時的內存系統。

49、Nginx相對於Apache優點:

1)高併發響應性能非常好,官方Nginx處理靜態文件併發5w/s

2)反向代理性能非常好。(可用於負載均衡)

3)內存和cpu佔用率低。(為Apache的1/5-1/10。)

4)功能較Apache少(常用功能均有)

5)對php可使用cgi方式和fastcgi方式。

50、cgi和fastgcgi的區別?

答:首先CGI是用來web服務器進程和動態網頁程序交互的一種協議,fastcgi和其原理一樣,不同的是fastcgi處理完一個請求後不會終止整個進程,而是出於掛起狀態等待下一個請求的到來,這樣它就避免了像cgi那樣頻繁創建進程,從而提高它的訪問效率。

51、多進程與多線程,請問有什麼區別?

答:(1)進程:子進程是父進程的複製品。(2)線程:一個進程可以容納多個線程,相對進程而言,線程是一個更加接近與執行體的概念,它可以與同進程的其他線程共享資源,但擁有自己的棧空間,擁有獨立的執行序列。兩者都可以提高程序的併發度,提高程序運行效率和響應時間。同時,線程適合於在SMP機器上運行,而進程則可以跨機器遷移。根本區別就一點:用多進程每個進程有自己的地址空間(address space),線程則共享地址空間。所有其它區別都是由此而來的:(1)速度:線程產生的速度快,線程間的通訊快、切換快等,因為他們在同一個地址空間內。(2)資源利用率:線程的資源利用率比較好也是因為他們在同一個地址空間內。(3)同步問題:線程使用公共變量/內存時需要使用同步機制還是因為他們在同一個地址空間內。

52、time_filename.txt 改成filename_time.txt。例如20111111_me.txt改成me_201111111.txt要如何修改?

答:#! /bin/sh

for eachfile in `ls -l`

do

filename=${eachfile%.txt}

filehead=`echo $filename | awk -F _ '{print $1 }'`

filelast=`echo $filename | awk -F _ '{print $2 }'`

mv $filename.txt ${filelast}_$filehead.txt

done

53、線程的優缺點是什麼?什麼情況不用線程?什麼情況使用線程提高效率?

答:優點:相比進程,線程是一個更接近執行體的概念,一個進程內可以擁有多個線程,他們可以併發運行,共享地址空間,而且線程產生的速度快,線程調度之間切換也快,那麼因為共享地址空間體現的優點是:系統開銷小,資源率利用比較高。

缺點:線程之間的同步機制非常繁瑣,(互斥鎖、讀寫鎖、條件變量、線程信號),線程之間也會發生死鎖,一個線程崩潰的時候 ,會牽連到其他線程。

使用線程的情況:線程適合在對稱多處理機上運行

54、buffer和cache有何區別?

答:緩存是用來加速從硬盤中讀取數據的,一個程序讀取了一個數據,先放在緩存裡,下一個程序再來需要的時候,直接調用緩存即可,因為很顯然內存的存取速度要大於硬盤嘛,而緩衝是用來加速向硬盤寫入數據的,我保存數據到硬盤,不是立刻生效,而是在內存緩衝積累到一定程度後,再全部放入硬盤,避免硬盤被頻繁操作,從而影響系統的運行情況。他們二者本質都是內存,不能被進程調用,只能被Linux內核使用。

55、 有一web服務器,一天某用戶投訴上某個網站速度很慢,如果你是服務器的管理員,請問 你如何查找原因?

答:首先我自己要試一下訪問這個網站的速度如何?從而判斷是客戶端那邊有問題還是服務端有問題,因為客戶端涉及到網絡擁塞和DNS解析的問題。那麼我主要負責服務端這邊的問題,如果我這邊也不行的話,先從這臺主機的系統本身故障入手,先看日誌/var/log/messages,如果日誌沒什麼反應的話,我再去看web服務日誌的情況,看是不是有惡意訪問,比如DDOS攻擊,造成正常用戶無法得到應答,如果這邊也沒問題的話,就要涉及到PHP響應慢和MySQL響應慢的問題了。

我有夢,有遠方,我會為了它們奔跑,奮鬥,直到成為連我自己都佩服的人。


Linux面試題總結,一小時搞懂!


感謝支持!後臺私信我《Linux》獲取C++/Linux後臺開發進階視頻資料。


分享到:


相關文章: