運維面試題集

2020-08-12 16:13:40

1部署過mongodb嗎?
部署過,沒有深入研究過,一般mongodb部署主從、或者mongodb分片叢集;建議3台或5台伺服器來部署。MongoDB分片的基本思想就是將集合切分成小塊。這些塊分散到若乾片裏面,每個片只負責總數據的一部分。 對於用戶端來說,無需知道數據被拆分了,也無需知道伺服器端哪個分片對應哪些數據。數據在分片之前需要執行一個路由進程,進程名爲mongos。這個路由器知道所有數據的存放位置,知道數據和片的對應關係。對用戶端來說,它僅知道連線了一個普通的mongod,在請求數據的過程中,通過路由器上的數據和片的對應關係,路由到目標數據所在的片上,如果請求有了迴應,路由器將其收集起來回送給用戶端。

2.如何發佈和回滾,用jenkins又是怎麼實現?

筆者回答:發佈:jenkins設定好程式碼路徑(SVN或GIT),然後拉程式碼,打tag。需要編譯就編譯,編譯之後推播到發佈伺服器(jenkins裏面可以調指令碼),然後從分發伺服器往下分發到業務伺服器上。

回滾:按照版本號到發佈伺服器找到對應的版本推播。

3.Tomcat工作模式?

筆者回答:Tomcat是一個JSP/Servlet容器。其作爲Servlet容器,有三種工作模式:獨立的Servlet容器、進程內的Servlet容器和進程外的Servlet容器。

進入Tomcat的請求可以根據Tomcat的工作模式分爲如下兩類:

Tomcat作爲應用程式伺服器:請求來自於前端的web伺服器,這可能是Apache, IIS, Nginx等;

Tomcat作爲獨立伺服器:請求來自於web瀏覽器;

4.監控用什麼實現的?

筆者回答:現在公司的業務都跑在阿裡雲上,我們首選的監控就是用阿裡雲監控,阿裡雲監控自帶了ECS、RDS等服務的監控模板,可結合自定義報警規則來觸發監控項。上家公司的業務是託管在IDC,用的是zabbix監控方案,zabbix圖形介面豐富,也自帶很多監控模板,特別是多個分割區、多個網絡卡等自動發現並進行監控做得非常不錯,不過需要在每臺客戶機(被監控端)安裝zabbix agent。

5.你是怎麼備份數據的,包括數據庫備份?

筆者回答:在生產環境下,不管是應用數據、還是數據庫數據首先在部署的時候就會有主從架構、或者叢集,這本身就是屬於數據的熱備份;其實考慮冷備份,用專門一臺伺服器做爲備份伺服器,比如可以用rsync+inotify配合計劃任務來實現數據的冷備份,如果是發版的包備份,正常情況下有台發佈伺服器,每次發版都會儲存好發版的包。

6.筆者回答:這個問題我覺得面試官司沒問好,正常都會這麼問「LVS有哪些負載均衡技術和排程演算法?"。我回答就是按我說的這種問法回答的,反正他也頻繁點頭,當然,筆者回答的可能沒有下面 下麪我整理出來的那麼詳細,大概意思我都說明白了。

LVS是Liunx虛擬伺服器的簡稱,利用LVS提供的負載均衡技術和linux操作系統可實現高效能、高可用的伺服器叢集,一般LVS都是位於整個集羣系統的最前端,由一臺或者多臺負載排程器(Director Server)組成,分發給應用伺服器(Real Server)。它是工作在4層(也就是TCP/IP中的傳輸層),LVS是基於IP負載均衡技術的IPVS模組來實現的,IPVS實現負載均衡機制 機製有三種,分別是NAT、TUN和DR,詳述如下:

 VS/NAT: 即(Virtual Server via Network Address Translation)

也就是網路地址翻譯技術實現虛擬伺服器,當使用者請求到達排程器時,排程器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標埠也改成選定的Real Server的相應埠,最後將報文請求發送到選定的Real Server。在伺服器端得到數據後,Real Server返回數據給使用者時,需要再次經過負載排程器將報文的源地址和源埠改成虛擬IP地址和相應埠,然後把數據發送給使用者,完成整個負載排程過程。

可以看出,在NAT方式下,使用者請求和響應報文都必須經過Director Server地址重寫,當使用者請求越來越多時,排程器的處理能力將稱爲瓶頸。

 VS/TUN :即(Virtual Server via IP Tunneling)

也就是IP隧道技術實現虛擬伺服器。它的連線排程和管理與VS/NAT方式一樣,只是它的報文轉發方法不同,VS/TUN方式中,排程器採用IP隧道技術將使用者請求轉發到某個Real Server,而這個Real Server將直接響應使用者的請求,不再經過前端排程器,此外,對Real Server的地域位置沒有要求,可以和Director Server位於同一個網段,也可以是獨立的一個網路。因此,在TUN方式中,排程器將只處理使用者的報文請求,集羣系統的吞吐量大大提高。

 VS/DR: 即(Virtual Server via Direct Routing)

也就是用直接路由技術實現虛擬伺服器。它的連線排程和管理與VS/NAT和VS/TUN中的一樣,但它的報文轉發方法又有不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載排程機制 機製中效能最高最好的,但是必須要求Director Server與Real Server都有一塊網絡卡連在同一物理網段上。

回答負載排程演算法,IPVS實現在八種負載排程演算法,我們常用的有四種排程演算法(輪叫排程、加權輪叫排程、最少鏈接排程、加權最少鏈接排程)。一般說了這四種就夠了,也不會需要你詳細解釋這四種演算法的。你只要把上面3種負載均衡技術講明白麪試官就對這道問題很滿意了。接下來你在簡單說下與nginx的區別:

LVS的優點:

抗負載能力強、工作在第4層僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟體裡的效能最強的;無流量,同時保證了均衡器IO的效能不會受到大流量的影響;

工作穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat;

應用範圍比較廣,可以對所有應用做負載均衡;

設定性比較低,這是一個缺點也是一個優點,因爲沒有可太多設定的東西,所以並不需要太多接觸,大大減少了人爲出錯的機率。

LVS的缺點:

軟體本身不支援正則處理,不能做動靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優勢。

如果網站應用比較龐大,LVS/DR+Keepalived就比較複雜了,特別是後面有Windows Server應用的機器,實施及設定還有維護過程就比較麻煩,相對而言,Nginx/HAProxy+Keepalived就簡單一點

Nginx的優點:

工作在OSI第7層,可以針對http應用做一些分流的策略。比如針對域名、目錄結構。它的正則比HAProxy更爲強大和靈活;

Nginx對網路的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在;

Nginx安裝和設定比較簡單,測試起來比較方便;

可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的併發量;

Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點;

Nginx不僅僅是一款優秀的負載均衡器/反向代理軟體,它同時也是功能強大的Web應用伺服器。LNMP現在也是非常流行的web環境,大有和LAMP環境分庭抗禮之勢,Nginx在處理靜態頁面、特別是抗高併發方面相對apache有優勢;

Nginx現在作爲Web反向加速快取越來越成熟了,速度比傳統的Squid伺服器更快,有需求的朋友可以考慮用其作爲反向代理加速器;

Nginx的缺點:

Nginx不支援url來檢測。

Nginx僅能支援http和Email,這個它的弱勢。

Nginx的Session的保持,Cookie的引導能力相對欠缺。

7.redis叢集的原理,redis分片是怎麼實現的,你們公司redis用在了哪些環境?

筆者回答:reids叢集原理:

其實它的原理不是三兩句話能說明白的,redis 3.0版本之前是不支援叢集的,官方推薦最大的節點數量爲1000,至少需要3(Master)+3(Slave)才能 纔能建立叢集,是無中心的分佈式儲存架構,可以在多個節點之間進行數據共用,解決了Redis高可用、可延伸等問題。叢集可以將數據自動切分(split)到多個節點,當叢集中的某一個節點故障時,redis還可以繼續處理用戶端的請求。

redis分片:

分片(partitioning)就是將你的數據拆分到多個 Redis 範例的過程,這樣每個範例將只包含所有鍵的子集。當數據量大的時候,把數據分散存入多個數據庫中,減少單節點的連線壓力,實現海量數據儲存。分片部署方式一般分爲以下三種:

(1)在用戶端做分片;這種方式在用戶端確定要連線的redis範例,然後直接存取相應的redis範例;

(2)在代理中做分片;這種方式中,用戶端並不直接存取redis範例,它也不知道自己要存取的具體是哪個redis範例,而是由代理轉發請求和結果;其工作過程爲:用戶端先將請求發送給代理,代理通過分片演算法確定要存取的是哪個redis範例,然後將請求發送給相應的redis範例,redis範例將結果返回給代理,代理最後將結果返回給用戶端。

(3)在redis伺服器端做分片;這種方式被稱爲「查詢路由」,在這種方式中用戶端隨機選擇一個redis範例發送請求,如果所請求的內容不再當前redis範例中它會負責將請求轉交給正確的redis範例,也有的實現中,redis範例不會轉發請求,而是將正確redis的資訊發給用戶端,由用戶端再去向正確的redis範例發送請求。

redis用在了哪些環境:

java、php環境用到了redis,主要快取有登錄使用者資訊數據、裝置詳情數據、會員簽到數據等

7.你會怎麼統計當前存取的IP,並排序?

筆者回答:統計使用者的存取IP,用awk結合uniq、sort過濾access.log日誌就能統計並排序好。一般這麼回答就夠了,當然你還可以說出其它方式來統計,這都是你的加分項。

8.你會使用哪些虛擬化技術?

筆者回答:vmware vsphere及kvm,我用得比較多的是vmware vsphere虛擬化,幾本上生產環境都用的vmware vsphere,kvm我是用在測試環境中使用。vmware 是屬於原生架構虛擬化技術,也就是可直接在硬體上執行。kvm屬於寄居架構的虛擬化技術,它是依託在系統之上執行。vmware vcenter

管理上比較方便,圖形管理介面功能很強大,穩定性強,一般比較適合企業使用。KVM管理介面稍差點,需要管理人員花費點時間學習它的維護管理技術。

9.假如有人反應,調取後端介面時特別慢,你會如何排查?

筆者回答:其實這種問題都沒有具體答案,只是看你回答的內容與面試官契合度有多高,能不能說到他想要的點上,主要是看你排查問題的思路。我是這麼說的:問清楚反應的人哪個服務應用或者頁面調取哪個介面慢,叫他把頁面或相關的URL發給你,首先,最直觀的分析就是用瀏覽器按F12,看下是哪一塊的內容過慢(DNS解析、網路載入、大圖片、還是某個檔案內容等),如果有,就對症下藥去解決(圖片慢就優化圖片、網路慢就檢視內網情況等)。其次,看後端服務的日誌,其實大多數的問題看相關日誌是最有效分析,最好用tail -f 跟蹤一下日誌,當然你也要點選測試來存取介面日誌纔會打出來。最後,排除sql,,找到sql去mysql執行一下,看看時間是否很久,如果很久,就要優化SQL問題了,expain一下SQL看看索引情況啥的,針對性優化。數據量太大的能分表就分表,能分庫就分庫。如果SQL沒啥問題,那可能就是寫的邏輯程式碼的問題了,一行行審程式碼,找到耗時的地方改造,優化邏輯。

9.mysql數據庫用的是主從讀寫分離,主庫寫,從庫讀,假如從庫無法讀取了、或者從庫讀取特別慢,你會如何解決?

筆者回答:這個問題筆者覺得回答的不太好,對mysql比較在行的朋友希望能給點建議。以解決問題爲前提條件,先新增從庫數量,臨時把問題給解決,然後抓取slow log ,分析sql語句,該優化就優化處理。慢要不就是硬體跟不上,需要升級;要不就是軟體需要偵錯優化,等問題解決在細化。

10.cpu單核和多核有啥區別?

筆者回答:很少有面試官會問這樣的問題,即然問到了,也要老實回答。還好筆者之前瞭解過CPU,我是這麼說的:雙核CPU就是能處理多份任務,順序排成佇列來處理。單核CPU一次處理一份任務,輪流處理每個程式任務。雙核的優勢不是頻率,而是對付同時處理多件事情。單核同時只能幹一件事,比如你同時在後台BT下載,前臺一邊看電影一邊拷貝檔案一邊QQ。

11.機械磁碟和固態硬碟有啥區別?

筆者回答:我擦,啥年代了,還問磁碟的問題,這面試官有點逗啊。那也要回答啊:

HDD代表機械硬碟,SSD代表固態硬碟。首先,從效能方面來說,固態硬碟幾乎完勝機械硬碟,固態硬碟的讀寫速度肯定要快機械硬碟,因爲固態硬碟和機械硬碟的構造是完全不同的(具體的構造就沒必要解釋了)。其次,固態盤幾乎沒有噪音、而機械盤噪音比較大。還有就是,以目前的市場情況來看,一般機械盤容量大,價格低;固態盤容量小,價格偏高。但是企業還是首選固態盤。

12.說一下用過哪些監控系統?

筆者回答:這個監控的問題又問到了,筆者在2018年1月4號也被問到類似這樣的問題,筆者曾經用過zabbix、nagios、 cacit等。但是在這次面試中只說用過zabbix和nagios。說完了之後,面試官就讓我說一下這兩個監控有啥區別:

從web功能及畫圖來講:

Nagios簡單直觀,報警與數據都在同一頁面, 紅色即爲問題項。Nagios web端不要做任何設定。 Nagios需要額外安裝外掛,且外掛畫圖不夠美觀。

Zabbix監控數據與報警是分開的,檢視問題項需要看觸發器,檢視數據在最新數據檢視。而且zabbix有很多其它設定項, zabbix攜帶畫圖功能,且能手動把多個監控項集在一個圖中展示。

從監控服務來講:

Nagios自帶的監控項很少。對一些變動的如多個分割區、多個網絡卡進行監控時需要手動設定。

Zabbix自帶了很多監控內容,感覺zabbix一開始就爲你做了很多事,特別是對多個分割區、多個網絡卡等自動發現並進行監控時,那一瞬間很驚喜,很省心的感覺。

從批次設定和報警來講:

Nagios對於批次監控主機,需要用指令碼在server端新增host,並拷貝service檔案。 Nagios用指令碼來修改所有主機的services檔案,加入新增服務。

Zabbix在server端設定自動註冊規則,設定好規則後,後續新增client端不需要對server端進行操作。 Zabbix只需手動在模板中新增一監控項即可。

總體來講:

Nagios要花很多時間寫外掛,Zabbix要花很多時間探索功能。

Nagios更易上手,Nagios兩天弄會,Zabbix兩週弄會。

Zabbix畫圖功能比Nagios更強大

Zabbix對於批次監控與服務更改,操作更簡潔;Nagios如果寫好自動化指令碼後,也很簡單,問題在於寫自動化指令碼很費神。

11.給你一套環境,你會如何設計高可用、高併發的架構?

筆者回答:

如果這套環境是部署在雲端(比如阿裡雲),你就不用去考慮硬體設計的問題。可直接上阿裡雲的SLB+ECS+RDS這套標準的高可用、高併發的架構。對外服務直接上SLB負載均衡技術,由阿裡的SLB分發到後端的ECS主機;ECS主機部署多臺,應用拆分在不同的ECS主機上,儘量細分服務。數據庫用RDS高可用版本(一主一備的經典高可用架構)、或者用RDS金融版(一主兩備的三節點架構)。在結合阿裡其它的服務就完全OK,業務量上來了,主機不夠用了,直橫向擴容ECS主機搞定。

如果這套環境託管在IDC,那麼你就要從硬體、軟體(應用服務)雙面去考慮了。硬體要達到高可用、高併發公司必須買多套網路硬體裝置(比如負載裝置F5、防火牆、核心層交換、接入層交換)都必須要冗餘,由其是在網路設計上,裝置之間都必須有雙線連線。裝置如果都是跑的單機,其中一個裝置掛了,你整個網路都癱瘓了,就談不上高可用、高併發了。其次在是考慮應用服務了,對外服務我會採用成熟的開源方案LVS+Keepalived或者Nginx+Keepalived,快取層可以考慮redis叢集及Mongodb叢集,中介軟體等其它服務可以用kafka、zookeeper,圖片儲存可以用fastDFS或MFS,如果數據量大、又非常多,那麼可採用hadoop這一套方案。後端數據庫可採用 「主從+MHA」。這樣一套環境下來是絕對滿足高可用、高併發的架構。

12.mysql檢視從庫狀態,多表聯查,簡單介紹一下主從同步是如何進行的
show slave status\G 檢視從庫狀態
多表聯查使用join或者where
主從同步原理:
主庫授權給從庫許可權,主庫數據發生變化生成二進制檔案,從庫通過I/O請求檔案讀取主庫二進制檔案,然後存入從庫的中繼日誌檔案,從庫通過SQL語句讀取中繼日誌檔案來進行同步

13.nginx優化修改的檔案內容,簡述負載均衡需要修改的組態檔
nginx優化需要修改其nginx版本號,服務名稱
負載均衡主要修改upstream server{ server ip:port } #port後面可跟
weight=num設定權重

14.nginx怎麼優化來抗高併發?
worker_processes 8;nginx 進程數,建議按照cpu 數目來指定,一般爲它的倍數 (如,2個四核的cpu計爲8)。
worker_connections 65535;每個進程允許的最多連線數, 理論上每台nginx 伺服器的最大連線數爲worker_processes*worker_connections。 主要修改這些來抗高併發。

15.nginx與apache的區別?
nginx是非同步的,多個連線對應一個進程,apache是同步的,一個連線對應一個進程,nginx高度模組化,編寫模組對簡單,apache比較成熟,bug少,一般來說,需要效能的使用nginx,需要穩定的使用apache

16.日常用zabbix監控什麼?
CPU負載,記憶體使用,磁碟使用,埠,日誌,網路狀態,自定義監控項,服務,交換空間,mysql,nginx

17.日常用nagios來監控什麼?
網路,CPU負載,磁碟利用率

18.定時任務方面

          • sleep 30 && 命令路徑 參數 每30秒一次
            */5 * * * * 每5分鐘執行一次
            */1 * * * * 每分鐘執行一次
            0 */1 * * *每小時執行一次
            0 0 * * * 每天執行一次
            0 0 * * 0 每週執行一次
            0 0 1 * * 每月執行一次
            0 0 1 1 * 每年執行一次

18.如何把一個自定義服務加入到systemctl 或者開機執行一個指令碼
新增/usr/lib/systemd/system/以服務名.service結尾的檔案,檔案中有[unit]
[service] [install]
vim /etc/rc.local 將要執行的命令貼上至檔案下方即可開機執行一個指令碼

19.軟體發佈新版本到伺服器的大致步驟
備份,替換,重新啓動

20.mysql主從同步延遲過大可能是因爲什麼?
數據庫在業務上讀寫壓力太大,
CPU計算負荷大,
網絡卡負荷大,
硬碟隨機IO太高次要原因:讀寫binlog帶來的效能影響,
網路傳輸延遲

21.磁碟不能寫,怎麼排查
1.排查是否正常滿
2.inode滿了,大量的小檔案
3.空間滿,檔案沒有被徹底刪除

22.伺服器頻寬跑滿的原因?
1.病毒
2.網路攻擊
3.爬蟲
4.存在耗資源進程
5.網站存取量過大

23.舉例工作中遇到的問題以及怎麼處理的
問題:mysql導出數據亂碼
思路:先檢視粗略檢視一下檔案本身是否有亂碼,再檢視用戶端與伺服器端字元集是否相同
解決方法:統一字元集之後,將新建的表刪掉重新建立,如果表裏有數據,基本涼了

問題:存取nginx頁面403錯誤
思路:檢視檔案是否有錯誤,許可權問題
解決方法:如果沒有給nginx使用者授權存取web目錄檔案,授權nginx使用者許可權
nginx需要存取目錄,但autoindex被關閉,設定autoindex爲on
問題:存取nginx頁面403錯誤
思路:檢視檔案是否有錯誤,許可權問題
解決方法:如果沒有給nginx使用者授權存取web目錄檔案,授權nginx使用者許可權
nginx需要存取目錄,但autoindex被關閉,設定autoindex爲on

24.說一下對多執行緒,多進程的理解
執行緒在程式中是獨立的,併發的執行流,多執行緒的併發性高,多個執行緒共用記憶體,極大地提高了程式的執行效率,執行緒比進程具有更高的效能,建立進程需獨立的記憶體空間,所以多執行緒比多進程的效能高很多

25.redis適合用來做什麼
redis存取速度快,平時用來做快取,存取量大的網站首頁可以用redis來響應

26.什麼是Keepalived
Keepalived:Keepalived是一個保證叢集高可用的服務軟體,用來防止單點故障,使用VRRP協定實現。在master和backup之間通過master主動降低自己的權值或者backup檢測到master出現故障時,backup將會接管master的工作,繼續服務。

27.詳述MySQL主從複製原理及設定主從的完整步驟?

主從複製的原理如下:

主庫開啓binlog功能並授權從庫連線主庫,從庫通過change master得到主庫的相關同步資訊,然後連線主庫進行驗證,主庫IO執行緒根據從庫slave執行緒的請求,從master.info開始記錄的位置點向下開始取資訊,同時把取到的位置點和最新的位置與binlog資訊一同發給從庫IO執行緒,從庫將相關的sql語句存放在relay-log裏面,最終從庫的sql執行緒將relay-log裡的sql語句應用到從庫上,至此整個同步過程完成,之後將是無限重複上述過程

完整步驟如下:

1、主庫開啓binlog功能,並進行全備,將全備檔案推播到從庫伺服器上

2、show master status\G 記錄下當前的位置資訊及二進制檔名

3、登陸從庫恢復全備檔案

4、執行change master to 語句

5、執行start slave and show slave status\G

28.當一個網站存取慢時,你怎麼去優化

翻譯爲: 當一個網站存取慢時, 你都是怎麼去查詢問題,和解決問題以達到優化效果的

第一,用5分鐘排除網路因素,藉助工具(如pagespeed)分析頁面載入過程1. 某個元素或者圖片載入過慢: 具體原因具體分析
2. DNS解析時長問題: 可以通過購買解析服務, 來讓自己的域名在各地DNS更多快取
3. 網路頻寬瓶頸: 考慮增加頻寬
4. 網路線路波動: 考慮CDN,或者映象站第二,要考慮到伺服器問題1. 是否有伺服器過載: 考慮增加硬體
5. I/O操作:數據庫的頻繁讀寫,伺服器的頻繁請求(包括靜態檔案的讀取,圖片的讀取)等都屬於I/O問題。對於數據庫的問題,首先要優化SQL,儲存過程等。如果單表數據量過大要考慮做分割或者運用程式來控制分表。如果請求量過大,要考慮做叢集。對於伺服器(靜態)檔案的I/O問題,則可以考慮做CDN,這樣也可以解決地域性問題。對於動態檔案的存取,則涉及到程式碼優化及負載均衡兩項。
6. 具體應用優化: nginx針對存取量修改組態檔,調高Buffers 調低keep alive空連線時間等第三,安全方面1. 檢視web\mail等其它服務日誌,是否存在被攻擊現象: 針對安全方面加固
7. 是否有其它攻擊存在DDOS,WEB CC等

29.linux系統的啓動過程

1.載入BIOS

2.讀取MBR

3.Boot Loader

4.載入內核

5.使用者層init根據inittab檔案來設定執行級別

6.init進程執行rc.sysinit

7.啓動內核模組

8.執行不同執行級別的指令碼程式

9.執行/etc/rc.d/rc.local

10.執行/bi/login程式,進入登陸狀態

30.FTP的主動模式和被動模式

FTP協定有兩種工作方式:PORT方式和PASV方式,中文意思爲主動式和被動式。

PORT(主動)方式的連線過程是:用戶端向伺服器的FTP埠(預設是21)發送連線請 求,伺服器接受連線,建立一條命令鏈路。當需要傳送數據時,用戶端在命令鏈路上用PORT 命令告訴伺服器:「我打開了XX埠,你過來連線我」。於是伺服器從20埠向用戶端的 XX埠發送連線請求,建立一條數據鏈路來傳送數據。

PASV(被動)方式的連線過程是:用戶端向伺服器的FTP埠(預設是21)發送連線請 求,伺服器接受連線,建立一條命令鏈路。當需要傳送數據時,伺服器在命令鏈路上用PASV 命令告訴用戶端:「我打開了XX埠,你過來連線我」。於是用戶端向伺服器的XX埠 發送連線請求,建立一條數據鏈路來傳送數據。

從上面可以看出,兩種方式的命令鏈路連線方法是一樣的,而數據鏈路的建立方法就完 全不同。

31.top命令中每行有哪些欄位,都是什麼意思?(load average,Tasks…)
第一行:系統執行時間和平均負載
當前時間 系統已執行的時間 當前登錄使用者的數量
相應最近5、10和15分鐘內的平均負載
第二行:任務
系統現在共有多少個進程,其中處於執行中的有多少個,多少個在休眠(sleep),停止狀態的有幾個,殭屍狀態的有0個。
第三行:CPU狀態
顯示不同模式下所佔cpu時間百分比
第四、五行:記憶體使用
第一行是實體記憶體使用,第二行是虛擬記憶體使用(交換空間)。
第六行 :各個進程的狀態監控

當然ps,free等命令的欄位意思最好也查一查,看一看

32.centos開機過程中,服務(/etc/init.d中的)因故障卡住,不能開機,怎麼辦?

解決方法:
卡住之後重新啓動電腦(可按ctrl+alt+delete,如果這個被禁用了則想其他方法),然後進入開機啓動畫面按esc按鍵
進入之後按a,然後輸入1,單使用者啓動。(利用單使用者啓動基本上不會啓動任何守護行程的特性來跳過卡住的服務的啓動過程)
利用chkconfig --list 服務名 命令來檢視卡住的服務的錯誤原因並修復。如果短時間內無法修復,則先利用chkconfig 服務名 off 命令先關掉此服務開機啓動,然後正常啓動計算機
正常啓動後再慢慢尋找原因修復服務,先保證計算機能啓動並且提供其他的正常業務進行。

33.nginx中location匹配順序

https://segmentfault.com/a/1190000013267839
首先先檢查使用字首字元定義的location,選擇最長匹配的項並記錄下來。
如果找到了精確匹配的location,也就是使用了=修飾符的location,結束查詢,使用它的設定。
然後按順序查詢使用正則定義的location,如果匹配則停止查詢,使用它定義的設定。
如果沒有匹配的正則location,則使用前面記錄的最長匹配字首字元location。

34.編寫個shell 指令碼將/boot/grub/目錄下大於100K 的檔案轉移到/opt 目錄下

補充:find /boot/grub -size +100k -type f -exec mv {} /opt ;

#/bin/bash
cd /boot/grub
for file in `ls /boot/grub`;do
if [ -f $file ];then
 if [ `ls -l $file | awk '{print $5}'` -gt 102400 ];then
 mv $file /opt
 fi
fi
done

35.shell指令碼

  1. 編寫個shell指令碼將/logs目錄下3天前的檔案轉移到/tmp目錄下。

解答:

#!/bin/bash

#this is to move file 3 yearago from /logs to /tmp

#updated by yehaifeng

#qq:769358362

#define var

FILE_FROM=/logs

FILE_TO=/tmp

DAY_AGO=3

cd $FILE_FROM

for file in find $FILE_FROM-type f -mtime +3

do

          /bin/mv $FILE_FROM/$file $FILE_TO/$file

done

2.每天1:00備份/var/log目錄下前一天的日誌檔案並存放到當前目錄的btslog目錄中,並刪除15天前的log備份檔案,請使用shell指令碼完成。(日誌格式爲:btsvr.log.2016-01-01,打包備份檔案格式爲:btsvr.log.2016-01-01.tar.gz)

解答:

cat bak_logs.sh

#!/bin/bash

#this is to backup logs

#updated by yehaifeng

#qq:769358362

#define var

YESTERDAY=date +%F -d '-1 day'

LOG_DIR=/var/log

BAK_DIR=/var/log/btslog

LOG_FILE=btsvr.log

cd $LOG_DIR/

if [ -f LOGDIR/LOG_DIR/LOG_FILE.$YESTERDAY] ;then{

tar zcf LOGDIR/LOG_DIR/LOG_FILE.YESTERDAY.tar.gzYESTERDAY.tar.gzLOG_DIR/LOGFILE.LOG_FILE.YESTERDAY

/bin/mv LOGDIR/LOG_DIR/LOG_FILE.$YESTERDAY.tar.gz/BAK_DIR/

}

else

  echo 「the file is not exist.」

fi

使用定時任務每天1點執行該指令碼:0001 * * * /bin/bash bak_logs.sh

  1. 寫一個指令碼進行nginx日誌統計,得到存取ip最多的前10個(nginx日誌路徑:/nginx/default/access.log)

解答:

cat bak_logs.sh

#!/bin/bash

#this is to backup logs

#updated by yehaifeng

#qq:769358362

#define var

LOG_FILE=/nginx/default/access.log

awk ‘{print $1}’/application/nginx/logs/access.log |sort|uniq -c|sort -r|head -10>/tmp/ip_max.txt

echo /tmp/ip_max.txt

36.linux命令

1.使用find將目前目錄及字目錄所有擴充套件名是c 的列出來
find ./ -type f-name *.c
2.使用find 將當前目錄和字目錄所有一般檔案列出
find ./ -type f
  1. 使用find查詢/usr/最近7天修改過的檔案複製到/dir
    find /usr -type f -mtime -7 cp {} /dir ;
    4.使用grep找出/etc/passwd檔案中以root開頭以bash結尾的行,並顯示行號
    cat /etc/passwd | grep -n ^root.bash$
    5.使用grep匹配file檔案中etc那行及後5行
    grep -A 5 「etc」 file
    6.使用grep顯示etutxt檔案中不區分大小的s開頭行
    grep -i ^s. etutxt
    7.顯示/etc/inittab中包含了:一個數字:(即兩個冒號中間一個數字)的行;
    grep :[0-9]: /etc/inittab
    8 使用sed 修改test.txt 的23行abet爲etc
    sed 「23s/abet/etc/g」
    9 使用sed刪除檔案filetxt中所有帶有數位的行
    sed ‘/1/d’ filetxt
    10 使用sed 把etc.txt的第1-3行內容另存 testx.txt
    cat /etc/passwd| sed -n 1,3p> test,txt
    11使用sed把etx.txt的第二行替換爲hello
    sed ‘2c hello’ etx.txt
    12 使用在etx.txt的第二行的前一行,加2行內容hello和world
    sed -i ‘N;4a\helloword’ etx.txt
    13 使用sed在etc.txt 的第二行下一行加入hello
    sed -i ‘N;4i\helloword’ etx.txt
    14 使用sed 把etx.txt的所有abx改爲def
    sed ‘s/abc/def/g’ ext.txt
    15 使用awk查詢file abc結尾的行
    awk ‘/abc$’ file
    16 使用awk計算0-100的行

echo ‘’ | awk ‘BEGIN{sum=0} END{for(i=1;i<=100;i++){sum=sum+i};print sum}’
17 使用awk 取/etc/passwd 第一列數據

awk ‘{print $1}’ passwd
18 使用awk調換/etc/passwd 第一列和最後一列
awk -F 「:」 ‘NR==1{print $7":"$2":"$3":"$4":"$5":"$6":"KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 2: 1}̲’ /etc/passwd 1…NF]} END {for(w in y) print w, y[w]}’