Linux最帥版主所經歷的面試題

、題目
1、Linux掛載Winodws共享文件夾
mount -t cifs -o username=administrator,password=jjhang //192.168.5.1/zjbb2014730 /mnt/win/

2、查看http的併發請求數及其TCP連接狀態:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

3、用tcpdump嗅探80端口的訪問看看誰最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20

4、統計/var/log/下文件個數
find / -type f | wc -l
5、查看當前系統每IP連接數
netstat -n | awk '/^tcp/ {print $5}'| awk -F: '{print $1}' | sort | uniq -c | sort -rn
6、shell下32位隨機密碼生成
tr -dc \~\`\!@#\$\%\^\&\*\(\)\-\_\+\=\|\\\?\/\.\>\,\<A-Za-z0-9_ < /dev/urandom|head -c 32|xargs

7、統計出apache的access.log中訪問量最多的5個IP
cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|sort -rn |head -n 5
8、如何查看二進制文件的內容
 [root@new55 ~]# echo /etc/passwd | hexdump -C      <== 規範的十六進制和ASCII碼顯示(Canonical hex+ASCII display )
9、ps aux 中VSZ代表什麼意思 RSS代表什麼  
 aux
     a 顯示所有與終端相關的進程,由終端發起的.
     x 顯示所有與終端無關的進程.
     u 顯示用戶導向的用戶列表.
VSZ 虛擬內存集,進程佔用的虛擬內存空間
RSS     物理內存集,進程戰用實際物理內存空間.
S 可中斷的睡眠態
R 運行態
D 不可中斷的睡眠態
T 停止態
Z 僵死態
10、檢測並修復/dev/hda5
e2fsck -p /dev/hda5

11、Linux開機啓動順序
啓動順序:
POST(加電自檢)-->由BIOS決定啓動設備次序-->MBR(bootloader)-->解壓kernel,加載Kernel到內存-->加載init進程(/etc/inittab)
12、符號鏈接和硬鏈接的區別
硬鏈接:不同路徑的文件指定的是同一個inode
     硬鏈接不能跨分區存在
     硬鏈接不能鏈接到目錄(要避免循環引用)
     刪除硬鏈接只會減少文件被硬鏈接的次數,源文件不會動.
軟鏈接:是一個獨立的文件,有自己獨立的inode
     引用的是路徑本身,不是inode
     刪除軟鏈接,跟源文件沒任何關係
     軟鏈接沒有存儲任何數據,只是存儲了訪問文件的另一種路徑.
     軟鏈接可以對目錄創建,也可以跨分區
     源文件被刪除,軟連接將不可用.

13、保存當前磁盤分區的分區表
# sfdisk -d /dev/sdb >/etc/sdbpar.bak 保存分區表
# sfdisk /dev/sdb 
14、檢測並自動修復文件系統
e2fsck - check a Linux ext2/ext3 file system
     -B     指定塊大小
     -f     強制檢測.
     -p     自動修復文件系統
15、手動安裝grub
手動安裝grub
# grub-install --root-directory=(指定boot目錄) DEVICE
或者
grub
grub>root (hd0,0)
grub>setup (hd0)
16、改內核參數
# sysctl
     -p     不用重啓系統,讓內核重讀/etc/sysctl.conf文件
     -a     顯示所有內核參數及其正在使用的值.
     -w     臨時設置/etc/sysctl.conf參數     sysctl -w net.ipv4.ip_froward=0
17、在1-39內取隨機數
在指定範圍內取隨機
echo $[$RANDOM%39] 對39進行取餘,餘數肯定是39以內的數字.
18、限定apache每秒鐘連接數爲1,峯值爲3
# iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second --limit-burst 3 -j ACCEPT
19、FTP主動與被動模式
主動模式
    1. 任何大於1024的端口到FTP服務器的21端口。(客戶端初始化的連接) 
    2. FTP服務器的21端口到大於1024的端口。 (服務器響應客戶端的控制端口)
    3. FTP服務器的20端口到大於1024的端口。(服務器端初始化數據連接到客戶端的數據端口)
    4. 大於1024端口到FTP服務器的20端口(客戶端發送ACK響應到服務器的數據端口) 
被動模式
    1. 從任何大於1024的端口到服務器的21端口(客戶端初始化的連接) 
    2. 服務器的21端口到任何大於1024的端口(服務器響應到客戶端的控制端口的連接)
    3. 從任何大於1024端口到服務器的大於1024端口(客戶端初始化數據連接到服務器指定的任意端口)
    4. 服務器的大於1024端口到遠程的大於1024的端口(服務器發送ACK響應和數據到客戶端的數據端口)

客戶端與服務端建立連接,經過TCP三次握手,連接建立完成之後,客戶端就可以通過建立的連接通道向服務器發送命令了,服務器根據客戶端的命令,

向客戶端發送數據,發送數據的時候,服務端會再跟客戶端建立一個TCP連接,用於專門的傳輸數據,這個連接就是數據連接。
數據連接有兩種工作模式:主動模式和被動模式
主動模式指的是服務器是主動的
被動模式指的是服務器是被動的
主動模式:
服務器端自動打開20號端口,即數據傳輸端口。主動的去連接客戶端的命令端口+1的端口。當數據傳輸完成後,數據連接自動斷開。
被動模式:
服務器端向客戶端通知自己打開的端口,通知客戶端來連接自己的數據端口,客戶端使用命令端口+1的端口,去連接服務器端的數據端口。
被動模式下,服務器的數據連接端口使用的是一個隨機端口。主動模式服務端使用的是20端口。
20、顯示/etc/inittab中以#開頭,且後面跟一個或多個空白字符,而後又跟了任意非空白字符的行;
# grep "^\#[[:space:]]\{1,\}.\{1,\}" /etc/inittab
21、顯示/etc/inittab中包含了:一個數字:(即兩個冒號中間一個數字)的行;
# grep "\:[0-9]\{1\}\:" /etc/inittab

22、怎麼把自己寫的腳本添加到服務裏面,即可以使用service命令來調用
#!/bin/bash
# chkconfig: - 90 10
# description: just a test
echo "Hello,$1"

# mv test /etc/init.d/
# chmod +x /etc/init.d/test
# chkconfig --add test
# service test start        //可以看到Hello,start表示成功
23、寫一個腳本,實現批量添加20個用戶,用戶名爲user1-20,密碼爲user後面跟5個隨機字符
#!/bin/bash
for i in {1..20}; do
    pass=$(tr -dc \~\`\!@#\$\%\^\&\*\(\)\-\_\+\=\|\\\?\/\.\>\,\<a-za-z0-9_ <="" dev="" urandom|head="" -c="" 5)
    useradd user${i}
    echo $pass | passwd user${i} --stdin
    echo "user${i} <=============> $pass" >> ./userlist.out
done
echo 'Sucess,passwd is in userlist.out'
24、寫一個腳本,實現判斷192.168.1.0/24網絡裏,當前在線的IP有哪些,能ping通則認爲在線
#!/bin/bash
ips="192.168.1."
for i in {1..254}; do
    ping -W 1 -c 1 ${ips}${i} &>/dev/null && echo "${ips}${i} is up" | tee -a uplog || echo "${ips}${i} is down"
done
echo "Please read uplog to know which host is online. "
25、寫一個腳本,判斷一個指定的腳本是否是語法錯誤;如果有錯誤,則提醒用戶鍵入Q或者q無視錯誤並退出其它任何鍵可以通過vim打開這個指定的腳本;
[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 to edit]" answer
                case $answer in
                        q | Q)
                                exit 0
                                ;;
                        vim)
                                vim $file
                                ;;
                         *)

exit 0



                                ;;
                esac

        fi
else
        echo "$file not exist"
        exit 1
fi


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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章