
做運維以來,關注了很多關於互聯網技術,培訓等亂七八糟的公眾號,時不時的就會推一些各種公司的面試題過來。
大致看了一下,發現自己很多知識要么遺忘了,要么很難說出個所以然,所以這里對那些個人覺得很有意思的知識點做個匯總,偶爾再翻看一下,或許受益無窮。
當然,學習永遠是一個過程,這篇博客也正處於完善的過程 ...
【1】如何查看 HTTP 的並發請求數與其 TCP 連接狀態?
netstat -n | awk '/^tcp/ {++b[$NF]} END {for(a in b) print a,b[a]}'
顯示效果:

我這里是台測試機器,所以顯示的東西比較少,而且我也很少用這個功能,但是覺得還是很有意思。
另外值得一提的是 Linux 服務器打開文件數也是影響並發的重要一環,具體可以查看該文件配置:/etc/security/limits.conf
當然同級目錄下面的 limits.d 目錄下的的配置文件也需要關注,也可以使用 ulimit -n 查看當前的配置數量。
【2】查看每個 IP 地址的連接數:
netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn
效果如圖:

這個東西大致可以看出有沒有人在惡意訪問你的服務器!
【3】通過 tcpdump 查看 80 端口訪問量排前 10 的:
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -10
效果如圖:

注意自己機器的 網卡名稱 就行!
【4】統計 access.log 中訪問量前 10 的 IP:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n -r | head -10
效果如圖:

這個比較實用,我們可以通過這個操作判斷有些 非人為操作
【5】只查看 /var/log 這一級目錄下面的文件:
find /var/log -maxdepth 1 -type f
簡單的 find 命令考察,有意思的就是 -maxdepth 參數,如果不加默認會把該目錄下的其它目錄下的子文件也顯示
這個在用於我們按照時間點刪除某個目錄下面的文件的時候特別有用
【6】生成 32 位的隨機碼:
cat /dev/urandom | head -1 | md5sum | head -c 32
【7】如何查看二進制文件的內容?
一般通過 hexdump 命令查看,用法:hexdump -C 文件名,沒怎么用過!
-C 是比較規范的 十六進制和ASCII碼顯示
-c 是單字節字符顯示
-b 單字節八進制顯示
-o 是雙字節八進制顯示
-d 是雙字節十進制顯示
-x 是雙字節十六進制顯示
顯示樣式:

【8】ps aux 中的 VSZ 代表什么意思,RSS 代表什么意思?
VSZ:虛擬內存集,進程占用的虛擬內存空間
RSS:物理內存集,進程戰用實際物理內存空間
如圖:

【9】如何檢測並修復 /dev/hda1?
說明:fsck 命令
【10】Linux 系統的開機啟動順序:
加載 BIOS –> 讀取 MBR –> Boot Loader –> 加載內核 –> 用戶層 init (根據 inittab 設定系統運行的等級:一般 3 或 5)–> init 進程執行 rc.syninit –> 啟動內核模塊 –> 執行不同級別運行的腳本程序 –> 執行 /etc/rc.d/rc.local –> 執行 /bin/login
【11】軟連接和硬鏈接的區別:
軟連接(符號鏈接),類似 windows 系統里的快捷方式
硬鏈接,類似復制了一份,但是會跟着文件的改變而改變,但是不會因為刪除而影響另一個
【12】FTP 的主動模式和被動模式:
FTP 有兩種工作方式:PORT 方式和 PASV 方式
PORT(主動):
1. 客戶端向服務端的 FTP 端口(默認是 21)發送連接請求
2. 服務端接受連接,建立一條命令鏈路
3. 傳送數據時,客戶端在命令鏈路上用 PORT 命令告訴服務端自己打開的隨機端口
4. 服務端從 20 端口向收到的客戶端的隨機端口發送連接請求,建立一條數據鏈路來傳送數據
PASV(被動):
1. 客戶端向服務端的 FTP 端口(默認是21)發送連接請求,服務器接受連接
2. 建立一條命令鏈路,當傳送數據時,服務端通過命令鏈路自己打開隨機端口
3. 客戶端向服務端的隨機端口發送連接請求,建立一條數據鏈路來傳送數據
【12】顯示 /etc/inittab 中以 # 開頭,且后面跟了一個或者多個空白字符,而后又跟了任意非空字符的行
grep "^\#[[:space:]]\{1,\}.\{1,\}" /etc/inittab
效果:

說明:這個一般用於剔除注釋內容
【13】顯示 /tmp/1.txt 中包含了 :一個數字: 的行
grep :[0-9]: /tmp/1.txt
【14】顯示 /tmp/1.txt 文件中以一個數字開頭並以一個與開頭數字相同的數字結尾的行:
grep "^\([0-9]\).*\1$" /tmp/1.txt
說明:這個感覺很神奇
【15】 批量添加 10 個用戶,用戶名為 user01 - user10,密碼為 user 后面跟 5 個隨機字符:
#!/bin/bash for i in `seq -f "%02g" 1 10`;do useradd user$i echo "user$i`echo $RANDOM|md5sum|cut -c 1-5`" | passwd --stdin user$i >/dev/null 2>&1 done
說明:這里有幾點比較有意思,1 是產生 0 -10 的數並按照格式輸出,2 是產生密碼隨機數並截取,3 是命令行添加密碼
【16】判斷 192.168.1.0/24 網絡里,當前在線的 IP 有哪些,能 ping 通則認為在線:
#!/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
說明:這個需求有點意思,其實還是考察產生 1 - 255 的數字,這個腳本還是挺實用的
