一、題目
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、調用此函數;並通過接收函數執行的返回值來判斷其執行情況,並將信息顯示出來;