1.查找文件後綴是log的三天前的文件刪除和三天內沒修改過的文件前端
find / -name 」.log」 -mtime +3 -exec rm fr {} ; find /log ! -mtime -3python
2.寫一個腳本將目錄下大於100kb的文件移動到/tmp下mysql
fimd / -size +100k -exec mv {} /tmp ;linux
3.將數據庫備份並打包傳遞到遠程服務器192.168.1.1的/backup目錄下ios
mysqldump -u root -p database > database.sql ;tar -czvf database.tar.gz database.sql ; rsync -avP ./database.tar.gz root@192.168.1.1:/backupnginx
4.日誌以下統計訪問ip最多的前10個web
awk ’{print $1}’ *.log | sort | uniq -c | sort -nr | head -n正則表達式
5.把/usr/local/替換成其餘的目錄算法
sed -i ’s//usr/local//目錄/g’ 文件sql
6.查看服務器程序運行級別和修改運行級別,和服務的運行級別
查看:who -r 修改:etc/inittab 服務運行級別chkconfig –list vsftp 修改:chkconfig –level 345 vsftp on
7.用tcpdump截取本機ip 192.168.23.1 80端口的包
tcpdump tcp port 80 host 192.168.23.1
Tcpdump -w test host 192.168.1.1 and tcp port 80
8.用tcpdump截取ip 192.168.23.1訪問主機 ip 192.168.23.2 的80端口的包
tcpdump host 192.168.23.1 and 192.168.23.2 and dst port 80
9.用iptables將192.168.0.100的80端口映射到59.15.17.231的8080端口
iptables -t nat -A PREROUTINT -p tcp -d 192.168.0.100 –dport 80 -j DNAT –to-destination 59.15.17.231:8080
10.本機的80端口轉發到8080
iptables -t nat -A PREROUTING -p tcp –dport -j REDIRECT –to-ports 8080
11.禁止一個用戶登陸,但能夠使用ftp
修改etc/passwd 最後一個字段 改爲/bin/nologin
12.獲取1.txt中第二行第三列的數據,輸出到2.txt
cat 1.txt|awk ’NR==2{print $3}’ > 2.txt
13.查看Linux系統當前單個共享內存段的最大值
ipcs -a
14.用什麼命令查詢指定IP地址的服務器端口
nmap 127.0.0.1
15.如何讓history命令顯示具體時間
HISTTIMEFORMAT=」%Y-%m-%d %H:%M:%S 」
16.查看Linux系統當前加載的庫文件
lsof |grep /lib
17.查看當前系統某一硬件的驅動版本。好比網卡
ethtool –i eth0
18.DNS服務器有哪三種類型
主 從 轉發
19.查看3306端口被誰佔用
lsof -i:3306
20.查看佔用內存最大的5個進程
ps -aux|sort -k4nr|head -n 5
21.查看佔用內存最大的進程的PID和VSZ
ps -aux|sort -k5nr|awk ’BEGIN{print 」PID VSZ」}{print $2,$5}’|awk ’NR<3′
22. lsof -p 12 看進程號爲12的進程打開了哪些文件
23.同時執行a和b等a和b都執行完執行c
#!/bin/bash
./a.sh &
./b.sh &
wait
echo adf
24.snmpdf 經過SNMP監視遠程主機的磁盤空間
snmpdf -v 1 -c public localhost
獲取192.168.6.53的全部開放端口狀態
snmpnetstat -v 2c -c public -a 192.168.6.53
25.簡述編譯kernel的大致步驟
(1)下載解壓縮新版本的內核到/usr/src下
(2)將之前版本連接刪除,創建新的鏈接
(3)編譯內核,編譯模塊,安裝模塊
(4)修改grub.conf ,而後重啓
26.diff/patch的做用和用法
命令diff A B > C ,通常A是原始文件,B是修改後的文件,C稱爲A的補丁文件。
patch A C 就能獲得B, 這一步叫作對A打上了B的名字爲C的補丁
27.執行 bin/myprog 返回0 打印ok 1打印bad 2打印error 其餘打印 wrony
./bin/myprog
if [[ $? = 0 ]];then
echo」OK」
elif [[ $? =1 ]];then
echo」bad」
else
echo」error」
fi
28.求一組數的最大值和最小值
#!/bin/sh
min=$1
max=$1
sum=$1
shift
while [ $# -gt 0 ]
do
if [ $min -gt $1 ]
then
min=$1
fi
if [ $max -lt $1 ]
then
max=$1
fi
sum=`expr $sum +$1`
shift
done
sum=`echo 」$sum/5″`|bc -l
echo min=$min
echo max=$max
echo aver=$sum
28.執行可執行程序test並把輸出和錯誤寫到err.log
./test > & err.log
29.用telnet鏈接校內服務器mail.xiaonei.com 發一封信
mail -v -s 」hello」 root@192.168.23.1
30.添加路由表並查看
route add -net 203.208.39.104 netmask 255.255.255.255 gw 192.168.1.1
netstat –r
31.正則匹配ip
((25[0-5]|2[0-4]d|1dd|[1-9]d|d).){3}(25[0-5]|2[0-4]d|1dd|[1-9]d|[1-9])
###############################################################
1.如何判斷mysql主從是否同步?該如何使其同步?
Slave_IO_Running
Slave_SQL_Running;
2.mysql的innodb如何定位鎖問題,mysql如何減小主從複製延遲?
20 mysql的innodb如何定位鎖問題:
在使用 show engine innodb status檢查引擎狀態時,發現了死鎖問題
在5.5中,information_schema 庫中增長了三個關於鎖的表(MEMORY引擎):innodb_trx ## 當前運行的全部事務innodb_locks ## 當前出現的鎖innodb_lock_waits ## 鎖等待的對應關係
mysql如何減小主從複製延遲:
若是延遲比較大,就先確認如下幾個因素:
1. 從庫硬件比主庫差,致使複製延遲
2. 主從複製單線程,若是主庫寫併發太大,來不及傳送到從庫,就會致使延遲。更高版本的mysql能夠支持多線程複製
3. 慢SQL語句過多
4. 網絡延遲
5. master負載
主庫讀寫壓力大,致使複製延遲,架構的前端要加buffer及緩存層
6. slave負載
通常的作法是,使用多臺slave來分攤讀請求,再從這些slave中取一臺專用的服務器,只做爲備份用,不進行其餘任何操做.
另外, 2個能夠減小延遲的參數:
–slave-net-timeout=seconds 單位爲秒 默認設置爲 3600秒
#參數含義:當slave從主數據庫讀取log數據失敗後,等待多久從新創建鏈接並獲取數據
–master-connect-retry=seconds 單位爲秒 默認設置爲 60秒
#參數含義:當從新創建主從鏈接時,若是鏈接創建失敗,間隔多久後重試。
一般配置以上2個參數能夠減小網絡問題致使的主從數據同步延遲
MySQL數據庫主從同步延遲解決方案
最簡單的減小slave同步延時的方案就是在架構上作優化,儘可能讓主庫的DDL快速執行。還有就是主庫是寫,對數據安全性較高,好比
sync_binlog=1,
Mysql開啓bin-log日誌使用bin-log時,默認狀況下,並非每次執行寫入就與硬盤同步,這樣在服務器崩潰是,就可能致使bin-log最後的語句丟失。
能夠經過這個參數來調節,sync_binlog=N,使執行N次寫入後,與硬盤同步。1是最安全的,可是也是最慢的
innodb_flush_log_at_trx_commit= 1
之類的設置,而slave則不須要這麼高的數據安全,徹底能夠講sync_binlog設置爲0或者關閉binlog,innodb_flushlog也能夠設置爲0來提升sql的執行效率。另外就是使用比主庫更好的硬件設備做爲slave。
3.osi七層模型,tcp三次握手過程,tcp鏈接斷開過程,什麼狀況下tcp進入time_wait?
答:其餘問題答案略
什麼狀況下tcp進入time_wait?
當關閉一個 socket 鏈接時,主動關閉一端的 socket 將進入TIME_WAIT狀態,而被動關閉一方則轉入CLOSED狀態。
具體過程以下:一、 客戶端發送FIN報文段,進入FIN_WAIT_1狀態。二、 服務器端收到FIN報文段,發送ACK表示確認,進入CLOSE_WAIT狀態。三、 客戶端收到FIN的確認報文段,進入FIN_WAIT_2狀態。四、
服務器端發送FIN報文端,進入LAST_ACK狀態。五、 客戶端收到FIN報文端,發送FIN的ACK,同時進入TIME_WAIT狀態,啓動TIME_WAIT定時器,超時時間設爲2MSL。六、 服務器端收到FIN的ACK,進入CLOSED狀態。七、
客戶端在2MSL時間內沒收到對端的任何響應,TIME_WAIT超時,進入CLOSED狀態。
4.什麼是跨站腳本攻擊,有何危害,sql注入攻擊如何防範?
1 答:
通常說來,在Web安全領域,常見的攻擊方式大概有如下幾種:
一、SQL注入攻擊(程序命令和用戶數據(即用戶輸入)之間沒有作到涇渭分明。這使得攻擊者有機會將程序命令看成用戶輸入的數據提交給We程序,以發號施令,隨心所欲)
1採用預編譯語句集,它內置了處理SQL注入的能力,只要使用它的setXXX方法傳值便可。2使用正則表達式過濾傳入的參數3字符串過濾4.jsp中調用該函數檢查是否包函非法字符5.JSP頁面判斷代碼:
二、跨站腳本攻擊 – XSS(利用網站程序對用戶輸入過濾不足,輸入能夠顯示在頁面上對其餘用戶形成影響的HTML代碼,從而盜取用戶資料、利用用戶身份進行某種動做或者對訪問者進行病毒侵害的一種攻擊方式)
三、跨站僞造請求攻擊 - CSRF
四、文件上傳漏洞攻擊
五、分佈式拒絕服務攻擊 - DDOS
5.海量文件如何存儲?
1 答:使用分佈式存儲,如mfs、hadoop等
6.如何重置mysql root密碼?
16 答:1、 在已知MYSQL數據庫的ROOT用戶密碼的狀況下,修改密碼的方法:
一、 在SHELL環境下,使用mysqladmin命令設置:mysqladmin –u root –p password 「新密碼」 回車後要求輸入舊密碼
二、 在mysql>環境中,使用update命令,直接更新mysql庫user表的數據:
Update mysql.user set password=password(‘新密碼’) where user=’root’;
flush privileges;
注意:mysql語句要以分號」;」結束
三、 在mysql>環境中,使用grant命令,修改root用戶的受權權限。
grant all on *.* to root@’localhost’ identified by ‘新密碼’;
2、 如查忘記了mysql數據庫的ROOT用戶的密碼,又如何作呢?方法以下:
一、 關閉當前運行的mysqld服務程序:service mysqld stop(要先將mysqld添加爲系統服務)
二、 使用mysqld_safe腳本以安全模式(不加載受權表)啓動mysqld 服務
/usr/local/mysql/bin/mysqld_safe --skip-grant-table &
三、 使用空密碼的root用戶登陸數據庫,從新設置ROOT用戶的密碼
#mysql -u root
Mysql> Update mysql.user set password=password(‘新密碼’) where user=’root’;
Mysql> flush privileges;
7.把/data目錄及其子目錄下全部以擴展名.txt結尾的文件中包含oldgirl的字符串所有替換爲oldboy
1
2 答:
find /data/ -type f -name "*.txt" | xargs sed -i 's/oldgirl/oldboy/g'
8.建立目錄/data/oldboy,而且在該目錄下建立文件oldboy.txt,而後在文件「oldboy.txt」裏寫入內容「inet addr : 10.0.0.8 Bcast : 10.0.0.255 Mask : 255.255.255.0 」(不包含引號)
1
2 答:# mkdir -p /data/oldboy
# echo "inet addr: 10.0.0.8 Bcast: 10.0.0.255 Mask:255.255.255.0" >> /data/oldboy/oldboy.txt
9.腳本計算1+2+3…. +100=?
答:
[root@localhost ~]# cat sum.sh
#!/bin/bash
num=1
sum=0
while [ $num -le 100 ]
do
sum=$(expr $sum + $num)
let num++
done
echo "1+2+3...+100="$sum
[root@localhost ~]# sh sum.sh
1+2+3...+100=5050
eg2
#!/bin/bash
echo "please input number:"
read a
for ((i=0;i<=$a;i++))
do
let sum+=$i
done
echo $sum
sum - 計算文件的校驗和,以及文件佔用的塊數
1.Apache和MySQL 兩種服務可否裝在同一臺機器上,如何查看Apache和mysql端口和進程?
一、Windows平臺
在windows命令行窗口下執行:
C:\>netstat -aon|findstr "80"
端口被進程號爲2448的進程佔用,繼續執行下面命令:
C:\Users\Administrator>tasklist | findstr "1736"
360se.exe 1736 Console 1 205,832 K
若是你想殺死這個進程,你固然能夠用前面描述的那種方法,在任務管理器裏把它KILL了,但若是你喜歡高效一點,那麼用taskkill命令就能夠了。
taskkill /pid 3017
ps -ef | grep 3306
kill -9
httpd
mariadb
2.如何在一臺虛擬機上同時部署4個網站,訪問域名分別是 www.test1.net www.test2.net test1.jjwxc.net test2.jjwxc.net
打開Tomcat的conf目錄server.xml文件, 找到<host ..> ,這裏能夠配置多個host節點達到配置多個域名目錄
apache 找到配置文件httpd.conf
而後去掉「#Include conf/extra/httpd-vhosts.conf」這句話前面的"#"號,即取消對這句話的註釋,使得配置中包含對httpd-vhosts.conf這個文件的引用。
3.統計一下/var/log/nginx/access.log 日誌中訪問量最多的前十個IP?
cat access_log | awk ‘{print $1}’ | uniq -c|sort -rn|head -10
或
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr -k1 | head -n 10
uniq - 刪除排序文件中的重複行
sort對於文本進行排序
-l 按照當前環境排序.
-m 合併已經排序好的文件,不排序.
-n 按照字符串的數值順序比較,暗含-b
-r 顛倒比較的結果.
4.怎麼查看當前系統中每一個IP的鏈接數,怎麼查看當前磁盤的IO,怎麼查看當前網絡的IO?
答:
怎麼查看當前系統中每一個IP的鏈接數:
# netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c| sort –rn
sort命令:進行排序,-r 反向排序 -n 使用純數字進行排序
uniq 將重複的數據僅僅列出一個來顯示,uniq -c,進行計數
awk -F: '{print $1}' 以F 爲分界符,取出第一個:以前的數據
怎麼查看當前磁盤的IO:
1) iostat能夠提供豐富的IO狀態數據。
iostat 是 sysstat 工具集的一個工具,須要安裝。
[root@localhost ~]# iostat -d-k 1 10
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain) 03/23/2017 _x86_64_(2 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 16.60 597.83 29.44 384048 18909
scd0 0.03 0.10 0.00 66 0
dm-0 15.78 551.54 26.20 354311 16831
dm-1 0.22 1.97 0.00 1268 0
參數 -d 表示,顯示設備(磁盤)使用狀態;-k某些使用block爲單位的列強制使用Kilobytes爲單位;1 10表示,數據顯示每隔1秒刷新一次,共顯示10次。
tps:該設備每秒的傳輸次數。
kB_read/s:每秒從設備讀取的數據量;kB_wrtn/s:每秒向設備寫入的數據量;kB_read:讀取的總數據量;kB_wrtn:寫入 的總數量數據量;這些單位都爲Kilobytes。
-x 參數:使用-x參數咱們能夠得到更多統計信息。
iostat -d -x -k 1 10 #查看設備使用率(%util)、響應時間(%await)
await:每個IO請求的處理的平均時間(單位是微秒)。這裏能夠理解爲IO的響應時間,通常地系統IO響應時間應該低於5ms,若是大於10ms就比較大了。
%util:在統計時間內全部處理IO時間,除以總共統計時間。例如,若是統計間隔1秒,該 設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,因此該參數暗示了設備的繁忙程度。通常地,若是該參數是100%表示設備已經接近滿負荷運行了(固然若是是多磁盤,即便%util是100%,由於磁盤的併發能力,因此磁盤使用未必就到了瓶頸)。
2)使用iotop命令
要安裝iotop軟件包
iotop命令是一個用來監視磁盤I/O使用情況的top類工具。iotop具備與top類似的UI。Linux下的IO統計工具如iostat,nmon等大多數是隻能統計到per設備的讀寫狀況,若是你想知道每一個進程是如何使用IO的就比較麻煩,使用iotop命令能夠很方便的查看。
怎麼查看當前網絡的IO:
iftop 查看網絡帶寬狀況(必須從epel源安裝)
sar看看當前網絡流量 ,sar -n DEV1 999 表示取樣間隔爲1秒,取樣999次
5.寫一個腳本,實現批量添加20個用戶,用戶名爲:user1-20,密碼爲user後面跟着5個隨機字符或數字
答:
[root@localhost ~]# cat useradd.sh
#!/bin/bash
name="user"
for number in $(seq 1 20)
do
password=$(cat /dev/urandom | head -1 | md5sum | head -c 5)
useradd $name$number
echo "user$password" | passwd --stdin user$number &> /dev/null
echo "$name$number user$password" >> userinfo.txt
done
eg
[zat@localhost ~]$ seq 1 10
1
2
6.dmesg命令中看到ip-conntrack:table full,dropping packet,如何解決?
答:
線上web服務器在訪問量很大時,就會出現網絡鏈接丟包的問題,經過dmesg命令查看日誌,發現以下信息:
ip_conntrack: table full, dropping packet.
爲何會出現 ip_conntrack: table full, dropping packet 呢?這裏面關鍵的信息是"ip_conntrack: table full, dropping packet",從這裏能夠判斷出這跟iptables有關係了,由於iptables防火牆使用了ip_conntrack內核模塊實現鏈接跟蹤功能,全部的進出數據包都會記錄在鏈接跟蹤表中,包括tcp,udp,icmp等,一旦鏈接跟蹤表被填滿之後,就會發生丟包,致使網絡不穩定。當這張表滿了,就會在日誌裏面寫入該信息(執行命令dmesge | more查看)。
而當咱們的服務器確實打開了iptables防火牆,而且都是在網站流量很是高的時候常常會出現這個問題。這個問題的緣由是因爲web服務器收到了大量的鏈接,在啓用了iptables的狀況下,iptables會把全部的鏈接都作連接跟蹤處理,這樣iptables就會有一個連接跟蹤表,當這個表滿的時候,就會出現上面的錯誤。
查看當前鏈接數:
[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_count
0
iptables的連接跟蹤表最大容量配置文件以下:
[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
65536
注:
因爲nf_conntrack 工做在3層,支持IPv4和IPv6,而ip_conntrack只支持IPv4,所以nf_conntrack模塊在Linux的2.6.15內核中被引入,而ip_conntrack在Linux的2.6.22內核被移除(centos6.x版本),所以不一樣版本的系統,配置文件也就不盡相同了。目前大多的ip_conntrack_*已被 nf_conntrack_* 取代,不少ip_conntrack_*僅僅是個軟連接,原先的ip_conntrack配置目錄/proc/sys/net/ipv4/netfilter/ 仍然存在,可是新的nf_conntrack在/proc/sys/net/netfilter/中,這樣作是爲了可以向下的兼容。
這個問題該如何解決,解決方法通常有兩個:
方法1:
[root@localhost ~]# sysctl -w net.nf_conntrack_max=100000
net.nf_conntrack_max = 100000
[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
100000
sysctl-p
注:
嚴格來看重啓 iptables/ip6tables 會從新加載 nf_conntrack 相關的模塊, 引發參數恢復成默認值。
以避免重啓 iptables 引發參數失效. 也能夠在 /etc/sysconfig/iptables-config 文件中開啓選項 IPTABLES_SYSCTL_LOAD_LIST=」.nf_conntrack」, iptables 重啓後會進行 sysctl 操做.
方法2:
不使用ip_conntrack,nf_conntrack_ipv4,xt_state模塊
七、varnish nginx squid各自緩存的優缺點
要作cache服務的話,咱們確定是要選擇專業的cache服務,優先選擇squid和varnish。
Varnish
高性能、開源的反向代理服務器和內存緩存服務器。
優勢:
1. 高性能;
2. 多核支持;
3. 支持0-60秒的精確緩存時間。
缺點:
1. 不具有自動容錯和恢復功能,重啓後數據丟失;
2. 在線擴容比較難。
3. 32位機器上緩存文件大小爲最大2GB;
4. 不支持集羣。
應用場景:
併發要求不是很大的小型系統和應用
nginx
1不支持帶參數的動態連接
2Nginx緩存內部沒有緩存過時和清理的任何機制,這些緩存的文件會永久性地保存在機器上,若是要緩存的東西很是多,那就會撐暴整個硬盤空間。
3只能緩存200狀態碼,所以後端返回301/302/404等狀態碼都不會緩存,假如剛好有一個訪問量很大的僞靜態連接被刪除,那就會不停穿透致使後端承載不小壓力
4Nginx不會自動選擇內存或硬盤做爲存儲介質,一切由配置決定,固然在當前的操做系統裏都會有操做系統級的文件緩存機制,因此存在硬盤上也不須要過度擔憂大併發讀取形成的io性能問題。
Squid
Squid,很古老的反向代理軟件,擁有傳統代理、身份驗證、流量管理等高級功能,可是配置太複雜。它算是目前互聯網應用得最多的反向緩存代理服務器,工做於各大古老的cdn上
squid的優點在於完整的龐大的cache技術資料,和不少的應用生產環境
八、查詢DNS的深層結構
當 DNS 客戶機須要查詢程序中使用的名稱時,它會查詢本地DNS 服務器來解析該名稱。客戶機發送的每條查詢消息都包括3條信息,以指定服務器應回答的問題。
● 指定的 DNS 域名,表示爲徹底合格的域名 (FQDN) 。
● 指定的查詢類型,它可根據類型指定資源記錄,或做爲查詢操做的專門類型。
● DNS域名的指定類別。
對於DNS 服務器,它始終應指定爲 Internet 類別。例如,指定的名稱能夠是計算機的徹底合格的域名,如im.qq.com,而且指定的查詢類型用於經過該名稱搜索地址資源記錄。
DNS 查詢以各類不一樣的方式進行解析。客戶機有時也可經過使用從之前查詢得到的緩存信息就地應答查詢。DNS 服務器可以使用其自身的資源記錄信息緩存來應答查詢,也可表明請求客戶機來查詢或聯繫其餘 DNS 服務器,以徹底解析該名稱,並隨後將應答返回至客戶機。這個過程稱爲遞歸。
另外,客戶機本身也可嘗試聯繫其餘的 DNS 服務器來解析名稱。若是客戶機這麼作,它會使用基於服務器應答的獨立和附加的查詢,該過程稱做迭代,即DNS服務器之間的交互查詢就是迭代查詢。
DNS 查詢的過程以下圖所示。
一、在瀏覽器中輸入www.qq.com域名,操做系統會先檢查本身本地的hosts文件是否有這個網址映射關係,若是有,就先調用這個IP地址映射,完成域名解析。
二、若是hosts裏沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網址映射關係,若是有,直接返回,完成域名解析。
三、若是hosts與本地DNS解析器緩存都沒有相應的網址映射關係,首先會找TCP/ip參數中設置的首選DNS服務器,在此咱們叫它本地DNS服務器,此服務器收到查詢時,若是要查詢的域名,包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此解析具備權威性。
四、若是要查詢的域名,不禁本地DNS服務器區域解析,但該服務器已緩存了此網址映射關係,則調用這個IP地址映射,完成域名解析,此解析不具備權威性。
五、若是本地DNS服務器本地區域文件與緩存解析都失效,則根據本地DNS服務器的設置(是否設置轉發器)進行查詢,若是未用轉發模式,本地DNS就把請求發至13臺根DNS,根DNS服務器收到請求後會判斷這個域名(.com)是誰來受權管理,並會返回一個負責該頂級域名服務器的一個IP。本地DNS服務器收到IP信息後,將會聯繫負責.com域的這臺服務器。這臺負責.com域的服務器收到請求後,若是本身沒法解析,它就會找一個管理.com域的下一級DNS服務器地址(qq.com)給本地DNS服務器。當本地DNS服務器收到這個地址後,就會找qq.com域服務器,重複上面的動做,進行查詢,直至找到www.qq.com主機。
六、若是用的是轉發模式,此DNS服務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,上一級服務器若是不能解析,或找根DNS或把轉請求轉至上上級,以此循環。無論是本地DNS服務器用是是轉發,仍是根提示,最後都是把結果返回給本地DNS服務器,由此DNS服務器再返回給客戶機。
從客戶端到本地DNS服務器是屬於遞歸查詢,而DNS服務器之間就是的交互查詢就是迭代查詢。
九、lvs的三種模式
1、NAT模式(VS-NAT)
原理:就是把客戶端發來的數據包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,併發至此RS來處理,RS處理完成後把數據交給通過負載均衡器,負載均衡器再把數據包的原IP地址改成本身的IP,將目的地址改成客戶端IP地址便可期間,不管是進來的流量,仍是出去的流量,都必須通過負載均衡器
優勢:集羣中的物理服務器能夠使用任何支持TCP/IP操做系統,只有負載均衡器須要一個合法的IP地址。
缺點:擴展性有限。當服務器節點(普通PC服務器)增加過多時,負載均衡器將成爲整個系統的瓶頸,由於全部的請求包和應答包的流向都通過負載均衡器。當服務器節點過多時,大量的數據包都交匯在負載均衡器那,速度就會變慢!
2、IP隧道模式(VS-TUN)
原理:首先要知道,互聯網上的大多Internet服務的請求包很短小,而應答包一般很大。那麼隧道模式就是,把客戶端發來的數據包,封裝一個新的IP頭標記(僅目的IP)發給RS,RS收到後,先把數據包的頭解開,還原數據包,處理後,直接返回給客戶端,不須要再通過負載均衡器注意,因爲RS須要對負載均衡器發過來的數據包進行還原,因此說必須支持IPTUNNEL協議因此,在RS的內核中,必須編譯支持IPTUNNEL這個選項
優勢:負載均衡器只負責將請求包分發給後端節點服務器,而RS將應答包直接發給用戶。因此,減小了負載均衡器的大量數據流動,負載均衡器再也不是系統的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器可以爲不少RS進行分發。並且跑在公網上就能進行不一樣地域的分發。
缺點:隧道模式的RS節點須要合法IP,這種方式須要全部的服務器支持」IP Tunneling」(IP Encapsulation)協議,服務器可能只侷限在部分Linux系統上。
3、直接路由模式(VS-DR)
原理:負載均衡器和RS都使用同一個IP對外服務但只有DR對ARP請求進行響應,全部RS對自己這個IP的ARP請求保持靜默也就是說,網關會把對這個服務IP的請求所有定向給DR,而DR收到數據包後根據調度算法,找出對應的RS,把目的MAC地址改成RS的MAC(由於IP一致)並將請求分發給這臺RS這時RS收到這個數據包,處理完成以後,因爲IP一致,能夠直接將數據返給客戶,則等於直接從客戶端收到這個數據包無異,處理後直接返回給客戶端因爲負載均衡器要對二層包頭進行改換,因此負載均衡器和RS之間必須在一個廣播域,也能夠簡單的理解爲在同一臺交換機上
優勢:和TUN(隧道模式)同樣,負載均衡器也只是分發請求,應答包經過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現方式不須要隧道結構,所以能夠使用大多數操做系統作爲物理服務器。
缺點:(不能說缺點,只能說是不足)要求負載均衡器的網卡必須與物理網卡在一個物理段上。
十、lvs/nginx/haproxy優缺點
Nginx的優勢是:
一、工做在網絡的7層之上,能夠針對http應用作一些分流的策略,好比針對域名、目錄結構,它的正則規則比HAProxy更爲強大和靈活,這也是它目前普遍流行的主要緣由之一,Nginx單憑這點可利用的場合就遠多於LVS了。
二、Nginx對網絡穩定性的依賴很是小,理論上能ping通就就能進行負載功能,這個也是它的優點之一;相反LVS對網絡穩定性依賴比較大,這點本人深有體會;
三、Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌打印出來。LVS的配置、測試就要花比較長的時間了,LVS對網絡依賴比較大。
三、能夠承擔高負載壓力且穩定,在硬件不差的狀況下通常能支撐幾萬次的併發量,負載度比LVS相對小些。
四、Nginx能夠經過端口檢測到服務器內部的故障,好比根據服務器處理網頁返回的狀態碼、超時等等,而且會把返回錯誤的請求從新提交到另外一個節點,不過其中缺點就是不支持url來檢測。好比用戶正在上傳一個文件,而處理該上傳的節點恰好在上傳過程當中出現故障,Nginx會把上傳切到另外一臺服務器從新處理,而LVS就直接斷掉了,若是是上傳一個很大的文件或者很重要的文件的話,用戶可能會所以而不滿。
五、Nginx不只僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP也是近幾年很是流行的web架構,在高流量的環境中穩定性也很好。
六、Nginx如今做爲Web反向加速緩存愈來愈成熟了,速度比傳統的Squid服務器更快,能夠考慮用其做爲反向代理加速器。
七、Nginx可做爲中層反向代理使用,這一層面Nginx基本上無對手,惟一能夠對比Nginx的就只有lighttpd了,不過lighttpd目前尚未作到Nginx徹底的功能,配置也不那麼清晰易讀,社區資料也遠遠沒Nginx活躍。
八、Nginx也可做爲靜態網頁和圖片服務器,這方面的性能也無對手。還有Nginx社區很是活躍,第三方模塊也不少。
Nginx的缺點是:
一、Nginx僅能支持http、https和Email協議,這樣就在適用範圍上面小些,這個是它的缺點。
二、對後端服務器的健康檢查,只支持經過端口來檢測,不支持經過url來檢測。不支持Session的直接保持,但能經過ip_hash來解決。
LVS
LVS:使用Linux內核集羣實現一個高性能、高可用的負載均衡服務器,它具備很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
LVS的優勢是:
一、抗負載能力強、是工做在網絡4層之上僅做分發之用,沒有流量的產生,這個特色也決定了它在負載均衡軟件裏的性能最強的,對內存和cpu資源消耗比較低。
二、配置性比較低,這是一個缺點也是一個優勢,由於沒有可太多配置的東西,因此並不須要太多接觸,大大減小了人爲出錯的概率。
三、工做穩定,由於其自己抗負載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived,不過咱們在項目實施中用得最多的仍是LVS/DR+Keepalived。
四、無流量,LVS只分發請求,而流量並不從它自己出去,這點保證了均衡器IO的性能不會收到大流量的影響。
五、應用範圍比較廣,由於LVS工做在4層,因此它幾乎能夠對全部應用作負載均衡,包括http、數據庫、在線聊天室等等。
LVS的缺點是:
一、軟件自己不支持正則表達式處理,不能作動靜分離;而如今許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優點所在。
二、若是是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較複雜了,特別後面有Windows
Server的機器的話,若是實施及配置還有維護過程就比較複雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。
HAProxy
HAProxy的特色是:
一、HAProxy也是支持虛擬主機的。
二、HAProxy的優勢可以補充Nginx的一些缺點,好比支持Session的保持,Cookie的引導;同時支持經過獲取指定的url來檢測後端服務器的狀態。
三、HAProxy跟LVS相似,自己就只是一款負載均衡軟件;單純從效率上來說HAProxy會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的。
四、HAProxy支持TCP協議的負載均衡轉發,能夠對MySQL讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,你們能夠用LVS+Keepalived對MySQL主從作負載均衡。
五、HAProxy負載均衡策略很是多,HAProxy的負載均衡算法如今具體有以下8種:
①roundrobin,表示簡單的輪詢,這個很少說,這個是負載均衡基本都具有的;
② static-rr,表示根據權重,建議關注;
③leastconn,表示最少鏈接者先處理,建議關注;
④ source,表示根據請求源IP,這個跟Nginx的IP_hash機制相似,咱們用其做爲解決session問題的一種方法,建議關注;
⑤ri,表示根據請求的URI;
⑥rl_param,表示根據請求的URl參數’balance url_param’ requires an URL parameter name;
⑦hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
⑧rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。
十一、linux系統監控命令,查看cpu負載內存等狀況
top命令是Linux下經常使用的性能分析工具,好比cpu、內存的使用,可以實時顯示系統中各個進程的資源佔用情況,相似於Windows的任務管理器。 top顯示系統當前的進程和其餘情況,是一個動態顯示過程,便可以經過用戶按鍵來不斷刷新當前狀態.若是在前臺執行該命令,它將獨佔前臺,直到用戶終止該程序爲止.
比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最「敏感」的任務列表.該命令能夠按CPU使用.內存使用和執行時間對任務進行排序;並且該命令的不少特性均可以經過交互式命令或者在我的定製文件中進行設定。
top命令參數
d 指定每兩次屏幕信息刷新之間的時間間隔。固然用戶能夠使用s交互命令來改變之。
p經過指定監控進程ID來僅僅監控某個進程的狀態。
q該選項將使top沒有任何延遲的進行刷新。若是調用程序有超級用戶權限,那麼top將以儘量高的優先級運行。
S 指定累計模式
s 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。
i使top不顯示任何閒置或者僵死進程。
c 顯示整個命令行而不僅是顯示命令名
經常使用操做
top //每隔5秒顯式全部進程的資源佔用狀況
top -d2//每隔2秒顯式全部進程的資源佔用狀況
top -c//每隔5秒顯式進程的資源佔用狀況,並顯示進程的命令行參數(默認只有進程名)
top -p12345-p6789//每隔5秒顯示pid是12345和pid是6789的兩個進程的資源佔用狀況
top -d2-c-p123456//每隔2秒顯示pid是12345的進程的資源使用狀況,並顯式該進程啓動的命令行參數
3、查看網絡流量的命令
3 [root@localhost sbin]# ifstat ens33
2 sar -n DEV 1 2
1 watch -n 1 "/sbin/ifconfig ens33 | grep bytes"
4、docker四中網絡模式
1 host模式
衆所周知,Docker使用了Linux的Namespaces技術來進行資源隔離,如PID Namespace隔離進程,Mount
Namespace隔離文件系統,Network Namespace隔離網絡等。一個Network Namespace提供了一份獨立的網絡環境,包括網卡、路由、Iptable規則等都與其餘的Network Namespace隔離。一個Docker容器通常會分配一個獨立的Network
Namespace。但若是啓動容器的時候使用host模式,那麼這個容器將不會得到一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出本身的網卡,配置本身的IP等,而是使用宿主機的IP和端口。
例如,咱們在10.10.101.105/24的機器上用host模式啓動一個含有web應用的Docker容器,監聽tcp80端口。當咱們在容器中執行任何相似ifconfig命令查看網絡環境時,看到的都是宿主機上的信息。而外界訪問容器中的應用,則直接使用10.10.101.105:80便可,不用任何NAT轉換,就如直接跑在宿主機中同樣。可是,容器的其餘方面,如文件系統、進程列表等仍是和宿主機隔離的。
2 container模式
在理解了host模式後,這個模式也就好理解了。這個模式指定新建立的容器和已經存在的一個容器共享一個Network
Namespace,而不是和宿主機共享。新建立的容器不會建立本身的網卡,配置本身的IP,而是和一個指定的容器共享IP、端口範圍等。一樣,兩個容器除了網絡方面,其餘的如文件系統、進程列表等仍是隔離的。兩個容器的進程能夠經過lo網卡設備通訊。
3 none模式
這個模式和前兩個不一樣。在這種模式下,Docker容器擁有本身的Network Namespace,可是,並不爲Docker容器進行任何網絡配置。也就是說,這個Docker容器沒有網卡、IP、路由等信息。須要咱們本身爲Docker容器添加網卡、配置IP等。
4 bridge模式
bridge模式是Docker默認的網絡設置,此模式會爲每個容器分配Network Namespace、設置IP等,並將一個主機上的Docker容器鏈接到一個虛擬網橋上。下面着重介紹一下此模式。host模式
使用Docker run時使用–net=host指定 Docker使用的網絡實際上和宿主機同樣,在容器內看到的網卡ip是宿主機上的ip。
docker經常使用命令
1. docker version 查看docker的版本號,包括客戶端、服務端、依賴的Go等
2. docker info 查看系統(docker)層面信息,包括管理的images, containers數等
3. docker search <image>在docker index中搜索image
4. docker pull <image>從docker registry server 中下拉image
5. docker push <image|repository>推送一個image或repository到registry
6. docker push <image|repository>:TAG 同上,指定tag
7. docker inspect <image|container>查看image或container的底層信息
8. docker images 查看本機images
9. docker images –a 列出全部的images
10. dockerps默認顯示正在運行中的container
6、docker怎麼實現容器間的獨立
十二、實現高可用工具備哪些
hearbeat
keepalived
1三、mysql數據備份工具
mysqldump工具
Mysqldump是mysql自帶的備份工具,目錄在bin目錄下面:/usr/local/mysql/bin/mysqldump,支持基於innodb的熱備份。可是因爲是邏輯備份,因此速度不是很快,適合備份數據比較小的場景。Mysqldump徹底備份+二進制日誌能夠實現基於時間點的恢復。
基於LVM快照備份
在物理備份中,有基於文件系統的物理備份(LVM的快照),也能夠直接用tar之類的命令對整個數據庫目錄進行打包備份,可是這些只能進行泠備份,不一樣的存儲引擎備份的也不同,myisam自動備份到表級別,而innodb不開啓獨立表空間的話只能備份整個數據庫。
tar包備份
percona提供的xtrabackup工具
支持innodb的物理熱備份,支持徹底備份,增量備份,並且速度很是快,支持innodb存儲引發的數據在不一樣數據庫之間遷移,支持複製模式下的從機備份恢復備份恢復
,爲了讓xtrabackup支持更多的功能擴展,能夠設立獨立表空間,打開 innodb_file_per_table功能,啓用以後能夠支持單獨的表備份。
1四、awk和sed的區別
awk是一種程序語言,對文檔資料的處理具備很強的功能。awk擅長從格式化報文或從一個大的文本文件中抽取數據。
awk的命令格式爲:
awk [-F filed-separator] 「commands」 input-file(s)
awk將一行文字按分隔符(filed-separator)分爲多個域,依次記爲$ 1,$ 2 . . . $ n。$0表明全部域值。所以awk更適合於以域爲單位來處理文件。加之ARGIND等內置變量,使awk能處理多個文件。典型的應用爲查找一個文件中的某個字段是否在另外一個文件中出現
sed是一個精簡的、非交互式的編輯器。它能執行與編輯vi和emacs相同的編輯任務,但sed編輯器不提供交互使用方式,只能在命令行下輸入編輯命令。
sed的命令格式爲:
sed [options] 'command' file(s)
sed [options] -f scrīptfile file(s)
做爲編輯器,固然少不了插入(a/、i/)、刪除(d)、查找替換(s)等命令。
若是文件是格式化的,即由分隔符分爲多個域的,優先使用awk
awk適合按列(域)操做,sed適合按行操做
awk適合對文件的抽取整理,sed適合對文件的編輯。
1五、介紹CDN的做用
CDN加速簡單的來講,就是把原服務器上數據複製到其餘服務器上,用戶訪問時,那臺服務器近訪問到的就是那臺服務器上的數據。CDN加速優勢是成本低,速度快。能夠用CDN best的CDN進行加速,免費,可部署私有,公有CDN系統。能夠實現宕機檢測,自動切換ip,分線路,分組解析。也就是
CDN加速的主要做用就是保證網站的正常訪問,及加快網站訪問速度和響應速度,防止網站因黑客攻擊,DNS解析劫持故障等致使的網站服務器的宕機情況的出現。
1六、 keepalive的工做原理和如何作到健康檢查
keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。
虛擬路由冗餘協議,能夠認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其餘機器的默認路由爲該vip),master會發組播,當backup收不到vrrp包時就認爲master宕掉了,這時就須要根據VRRP的優先級來選舉一個backup當master。這樣的話就能夠保證路由器的高可用了。
keepalived主要有三個模塊,分別是core、check和vrrp。core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各類檢查方式。vrrp模塊是來實現VRRP協議的。
Keepalived健康檢查方式配置
HTTP_GET|SSL_GET
HTTP_GET | SSL_GET
{
url {
path /# HTTP/SSL 檢查的url能夠是多個
digest <STRING> # HTTP/SSL 檢查後的摘要信息用工具genhash生成
status_code 200# HTTP/SSL 檢查返回的狀態碼
}
connect_port 80 # 鏈接端口
bindto<IPADD>
connect_timeout 3 # 鏈接超時時間
nb_get_retry 3 # 重連次數
delay_before_retry 2 #鏈接間隔時間
}
1七、 squid的默認緩存大小是多少?
1 1024MB
1八、查看Linux系統的全部配置的命令(除了cpuinfo和meinfo)
查看主板的序列號: dmidecode | grep -i ’serial number’
用硬件檢測程序kuduz探測新硬件:service kudzu start ( or restart)
查看CPU信息:cat /proc/cpuinfo [dmesg | grep -i 'cpu'][dmidecode -t processor]
查看內存信息:cat /proc/meminfo [free -m][vmstat]
查看板卡信息:cat /proc/pci
查看顯卡/聲卡信息:lspci |grep -i ‘VGA’[dmesg | grep -i 'VGA']
查看網卡信息:dmesg | grep -i ‘eth’[cat /etc/sysconfig/hwconf | grep -i eth][lspci | grep -i 'eth'] www.2cto.com
<!--more-->
查看PCI信息:lspci (相比cat /proc/pci更直觀)
查看USB設備:cat /proc/bus/usb/devices
查看鍵盤和鼠標:cat /proc/bus/input/devices
查看系統硬盤信息和使用狀況:fdisk& disk – l &df
查看各設備的中斷請求(IRQ):cat /proc/interrupts
查看系統體系結構:uname -a
1九、用shell腳本或命令將/opt目錄下的大於15KB的文件都移到/tmp目錄下
find /opt -size +15k -exec mv {} /tmp/ \;
20、寫過哪些python腳本?
這個程序的做用是跳過最新的7*24個備份,刪除其餘的時間更長的
# -*- coding: cp936 -*-
import os #os是python自帶的一個擴展庫,用來進行跟系統相關的操做
skipNum = 24 * 7 #保留文件夾的數目(小時 * 天)
print '\n*************清除時間超過 ' + str(skipNum /24) + ' 天的自動備份文件**************\n\n'
backupDir = os.path.abspath(__file__) + '\\..\\..' + '\\servedatabase_autobackup'
for dir in os.listdir(backupDir): #os.listdir(xxx)函數返回的是一個文件列表
if dir[-4:] == '.map':
mapDir = backupDir + '\\' + dir
print '正在清除備份目錄:' + os.path.abspath(mapDir)
subDirs = os.listdir(mapDir) #獲取文件列表
subDirs.reverse() #逆序
i = 0
for subDir in subDirs:
i+=1
if i>skipNum:
print '正在清除備份: ' + subDir
os.system('rmdir ' + mapDir + '\\' + subDir + ' /s/q') #至關於執行控制檯命令
防僞碼:不要仰望別人,本身亦是風景。
一、寫一個腳本查找最後建立時間是三天前,後綴是*.log的文件並刪除
find .-ctime +3 -name '*.log' | rm -rf
二、統計ip訪問狀況,要求分析nginx訪問日誌,找出訪問頁面數量在前十位的ip
打印 去重 排序 統計cataccess.log | awk '{print $1}' | uniq -c | sort -rn | head -10
三、使用tcpdump監聽主機爲192.168.1.1,tcp端口爲80的數據,同時將輸出結果保存輸出
到tcpdump.log。
1 tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log
四、利用Python打印前一天的本地時間,格式爲'2016-03-29 13:58:34'
1 time.strftime('%y-%m-%d%H:%M%:%S' time.locatime(time.time() -86400))
五、用Python將‘123456’反轉爲‘654321’
1 ‘123456’[::-1]
六、利用Python執行shell命令並取得返回結果
>>> import subprocess
>>> a=subprocess.popen('ls',shell=True,stdout=subprocoss.PIPE,
stderr=subprocess.PIPE)
>>>stdout,sterr = a.communicate()
>>>print stdout
八、請用Python繼承process,並寫一個並行執行的類,並寫出使用過程。
import multiprocessing
import time
class ClockProcess(multiprocessing.Process):
def __init__(self, interval):
multiprocessing.Process.__init__(self)
self.interval = interval
def run(self):
n = 5
while n > 0:
print("the time is {0}".format(time.ctime()))
time.sleep(self.interval)
n -= 1
九、有文件file1
a、請用shell查詢file1 裏面空行的所在行號
1 #awk '$0 ~ /^$/ {print NR}' file1
或
1 grep -n "^$" file1
b、編寫ShellScript查詢file1 以abc結尾的行
1 grep "abc$" file1
或
1 sed -n '/abc$/ p' file1
c、打印出file1 文件第1 到第3 行
1 sed -n '1,3p' file1
十、如何將本地80 端口的請求轉發到8080 端口,當前主機IP 爲192.168.2.1
1 Iptables –t nat -A PREROUTING -d 192.168.2.1 -p tcp –dport 80 -j REDIRECT --to 8080
十一、在11 月分內,天天的早上6 點到12 點中,每隔2 小時執行一次/usr/bin/httpd.sh 怎麼
實現
0 6-12/2 * 11 * /usr/bin/httpd.sh
十二、編寫個shell 腳本將/usr/local/test 目錄下大於100K 的文件轉移到/tmp目錄下
1 find /usr/local/test -type f -size +100k -exec mv {} /tmp/
或
#!/bin/bash
filelist=$(ls /usr/local/test -l | grep "^-" | awk '{print $9}')
filepath="/usr/local/test"
for file in $filelist
do
filesize=$(du -s $filepath$file |awk '{print $1}')
if [ $filesize -gt 100]
then
mv $filepath$file /tmp/
fi
done
1三、簡述raid0 raid1 raid5 三種工做模式的工做原理及特色。
RAID 0:帶區卷,連續以位或字節爲單位分割數據,並行讀/寫於多個磁盤上,所以具備很高的數據傳輸率,但它沒有數據冗餘,
RAID 0 只是單純地提升性能,並無爲數據的可靠性提供保證,並且其中的一個磁盤失效將影響到全部數據。所以,RAID 0 不能應用於數據安全性要求高的場合。
RAID 1:鏡像卷,它是經過磁盤數據鏡像實現數據冗餘,在成對的獨立磁盤上產生互爲備份的數據,不能提高寫數據效率。當原始數據繁忙時,可直接從鏡像拷貝中讀取數據,所以RAID
1 能夠提升讀取性能。RAID 1 是磁盤陣列中單位成本最高的,鏡像卷可用容量爲總容量的1/2,但提供了很高的數據安全性和可用性。當一個磁盤失效時,系統能夠自動切換到鏡像磁盤上讀寫,而不須要重組失效的數據。
RAID5:至少由3塊硬盤組成,分佈式奇偶校驗的獨立磁盤結構,它的奇偶校驗碼存在於全部磁盤上,任何一個硬盤損壞,均可以根據其它硬盤上的校驗位來重建損壞的數據(最多容許1塊硬盤損壞)。因此raid5能夠實現數據冗餘,確保數據的安全性,同時raid5也能夠提高數據的讀寫性能。
1四、oracle 數據庫備份方式
從物理與邏輯的角度分類:
物理備份:對數據庫操做系統的物理文件(如數據文件、控制文件、日誌文件等)的備份,物理備份又分爲冷備份和熱備份,前者是在關閉數據庫的時候進行的,後者對正以歸檔日誌方式進行的數據庫備份,能夠使用RMAN進行數據庫的物理備份
邏輯備份:對數據庫邏輯組件(如表、表空間、存儲過程等數據庫對象)的備份邏輯備份的手段不少,如exp、數據泵expdp、數據庫閃回技術等
從數據庫的備份策略角度分類:
徹底備份:每次對數據庫進行完整備份
增量備份:只有那些在上次徹底備份或者增量備份後被修改的文件纔會被備份。
差別備份:備份那些自從上次徹底備份以後被修改過的文件。
1五、如何查看佔用端口8080 的進程
netstat -anpt | grep 8080
或
lsof -i :8080
8、請寫出apache2.X 版本的兩種工做模式,以及各自工做原理。如何查看apache 當前所支持的模塊,而且查看是工做在哪一種模式下?
prefork(多進程,每一個子進程產生一個線程)和worker(多進程多線程,每一個進程生成多個線程)
其主要工做方式是:當Apache服務器啓動後,mpm_prefork模塊會預先建立多個子進程(默認爲5個),每一個子進程只有一個線程,當接收到客戶端的請求後,mpm_prefork模塊再將請求轉交給子進程處理,而且每一個子進程同時只能用於處理單個請求。若是當前的請求數將超過預先建立的子進程數時,mpm_prefork模塊就會建立新的子進程來處理額外的請求。Apache老是試圖保持一些備用的或者是空閒的子進程用於迎接即將到來的請求。這樣客戶端的請求就不須要在接收後等候子進程的產生。
因爲在mpm_prefork模塊中,每一個請求對應一個子進程,所以其佔用的系統資源相對其餘兩種模塊而言較多。不過mpm_prefork模塊的優勢在於它的每一個子進程都會獨立處理對應的單個請求,這樣,若是其中一個請求出現問題就不會影響到其餘請求。Prefork在效率上要比Worker要高,可是內存使用大得多不擅長處理高併發的場景。
Worker模式(多線程多進程):
和prefork模式相比,worker使用了多進程和多線程的混合模式,worker模式也一樣會先預派生一些子進程,而後每一個子進程建立一些線程,同時包括一個監聽線程,每一個請求過來會被分配到一個線程來服務。線程比起進程會更輕量,由於線程是經過共享父進程的內存空間,所以,內存的佔用會減小一些,在高併發的場景下會比prefork有更多可用的線程,表現會更優秀一些;另外,若是一個線程出現了問題也會致使同一進程下的線程出現問題,若是是多個線程出現問題,也只是影響Apache的一部分,而不是所有。
總的來講,prefork方式速度要稍高於worker,然而它須要的cpu和memory資源也稍多於woker。
能夠經過命令httpd -M 或 httpd -l 能夠查看apache 當前的模塊
能夠經過命令httpd -V查看是工做在哪一種模式下
1六、你使用過監控軟件嗎?說說其特色
使用nagios對服務器進行監控,其特色側重於對檢測項的狀態監控,主要經過nrpe實現對遠程主機的監控,但也能夠經過snmp對設備(如路由器、交換機)進行監控,可實時實現手機短信、電子郵件、MSN、飛信報警。
使用cacti 對服務器進行監控,其特色側重性能和流量監控並經過圖表顯示,主要經過snmp協議收集監測項數據,可實時實現手機短信、電子郵件、
使用zabbix對服務器進行監控,zabbix是徹底開源的工具,整合了cacti和nagios等特性。
zabbix能夠對主機的性能監控、網絡設備性能監控、數據庫、FTP 等通用協議監控、多種告警方式、詳細的報表圖表繪製
支持自動發現網絡設備和服務器(能夠經過配置自動發現服務器規則來實現)
支持分佈式,能集中展現、管理分佈式的監控點,擴展性強
能夠本身開發完善各種監控(根據相關接口編寫程序實現),編寫插件容易,能夠自定義監控項,報警級別的設置。
數據收集,支持 snmp(包括 trapping and polling ),IPMI,JMX,SSH,TELNET;
1七、你對如今運維工程師的理解和以及對其工做的認識 運維工程師在公司當中責任重大,須要保證時刻爲公司及客戶提供最高、最快、最穩定、最安全的服務。運維工程師的一個小小的失誤,頗有可能會對公司及客戶形成重大損失,所以運維工程師的工做須要嚴謹及富有創新精神。
1八、第一部分 基礎題
a. 僅列出 /test目錄下的全部目錄,請寫出完整命令
1 ls /test -l | grep "^d"
b. umask 022 ,請描述該命令的含義
1 umask設置文件或目錄的缺省權限,umask 022表示目錄的缺省權限爲755,文件的缺省權限爲644
c. 在排除 /test/a目錄的條件下,歸檔並gzip壓縮整個/test目錄,請寫出完整的操做命令t
1 tar zcvf backup.tar.gz --exclude /test/a /test
d. 查詢並列出 test進程所打開的當前全部文件,請寫出完整的操做命令
1 lsof -c test
e. 查詢並列出test.rpm包裏所包含的全部文件,請寫出完整的操做命令
1
2 rpm -qpl
test.rpm
f. 將 /test/a目錄創建軟連接到 /test/b目錄,請寫出完整的操做命令
1 ln -s /test/a test/b
g. 設置當前用戶環境中 test變量爲 123並使之當即生效,請寫出完整操做命令
1 export test=123
h. 設置系統當前運行級別中 test服務狀態爲啓動時自動加載,請寫出完整操做命令
假設運行級別爲3級別
1 chkconfig --level 3 test on
k. 列出當前系統中全部的網絡鏈接(包含進程名),請寫出完整操做命令
netstat -antuple
(-a 顯示全部socket,包括正在監聽的。
-n 以網絡IP地址代替名稱,顯示出網絡鏈接情形。
-t 顯示TCP協議的鏈接狀況
-u 顯示UDP協議的鏈接狀況。
-p 顯示指定協議信息。
-l或--listening 顯示監控中的服務器的Socket。
-e 顯示以太網統計。此選項能夠與 -s 選項結合使用。
)
j. 實時抓取並顯示當前系統中tcp 80端口的網絡數據信息,請寫出完整操做命令
1 tcpdump -nn tcp port 80
1九、第二部分綜合應用
a. 請寫出5個你經常使用的系統或網絡維護工具的名稱
rhel centos ubuntu debian freebsd slackware archlinux opensuse
iotop用於檢查 I/O 的使用狀況
htop實質上是 top 的一個加強版本。它更容易對進程排序。
ping
traceroute
b.在nslookup使用中,請問如何查看test.com域中的MX記錄
#nslookup
>set type=mx
>test.comc. ftp ,ssh,smtp,pop3,https,請寫出這些服務的默認端口ftp:21
ssh:22
smtp:25
pop3:110
https:443.25G)
d. 請問如何用iptables工具阻斷來自 192.168.0.1的全部網絡鏈接
1 iptable -I INPUT -s 192.168.0.1 -j DROP
e. 請簡要描述Linux系統下源代碼編譯方式安裝軟件的大體步驟
tar釋放源碼包 -C 解壓目錄
cd 切換到解壓目錄
./configure 配置
make 編譯
make install 安裝
f. 請寫出Tomcat程序的主配置文件名
1 server.xml
g. Mysql客戶端工具中,請問如何查詢當前全部的鏈接進程信息
1
2 mysql -u user -p password
-e "show processlist"
20. 服務器開不了機怎麼解決一步步的排查
硬件有無報警燈提示
主面板液晶面板有沒有提示什麼報錯信息,例如raid錯誤的提示信息
先排除硬件仍是軟件問題
十四. Linux開機模式
0 - 表示關閉系統(千萬不要把默認設置成0哦!)1 - 單用戶模式2 - 多用戶模式,沒有NFS服務3 - 多用戶文本模式5 - 圖形模式6 - 系統從新啓動
過修改/etc/inittab,使系統在啓動時進入不一樣模式。
21. Linux系統中病毒怎麼解決
找到病毒文件而後刪除;中毒以後通常機器cpu、內存使用率會比較高,機器向外發包等異常狀況,排查方法:
linux服務器流量劇增,用iftop查看有鏈接外網的狀況。netstat鏈接的外網ip和端口。#top命令找到cpu使用率高的進程,通常病毒文件命名都比較亂#能夠用ps aux 查看是否有不明進程,找出病毒文件的位置#rm
-f 命令刪除病毒文件#檢查計劃任務、開機啓動項和病毒文件目錄有無其餘可疑文件等
chkconfig --list | grep 3:on
服務器啓動級別是3的,檢查一下了開機啓動項,沒有特別明顯的服務。而後檢查了一下開機啓動的一個文件,more /etc/rc.local
22. 發現一個病毒文件你刪了他又自動建立怎麼解決
1
2 ps axu一個個排查,方法是查看可疑的用戶和系統類似而又不是的進程找出進程可疑。
殺掉全部與病毒相關的進程,而後刪掉病毒這個可執行文件,最後刪除病毒建立的文件
十七. 日誌文件很大,怎麼把他們切分
針對這些日誌按每或每週進行分割,例如只保留一週的數據,用logrotate來實現日誌的輪替。或者編寫日誌文件大小監控腳本,按期檢查該日誌文件的大小,接近設定大小時,進行輪換。
若是日誌文件存在而且很大,能夠用Linux下的split進行文件分割:
模式一:指定分割後文件行數
Split:按指定的行數截斷文件格式: split [-n] file [name]參數說明:-n: 指定截斷的每一文件的長度,不指定缺省爲1000行file: 要截斷的文件name: 截斷後產生的文件的文件名的開頭字母,不指定,缺省爲x,即截斷後產生的文件的文件名爲xaa,xab....直到xzz
模式二:指定分割後文件大小
命令:split -b 10m server.log server_part_
其中server.log是要分割的文件,server_part_是分割文件的前綴。
對二進制文件咱們一樣也能夠按文件大小來分隔
23. tcp/ip七層模型
應用層 (Application):網絡服務與最終用戶的一個接口。
協議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示層(Presentation Layer):
數據的表示、安全、壓縮。(在五層模型裏面已經合併到了應用層)
格式有,JPEG、ASCll、DECOIC、加密格式等
會話層(Session Layer):
創建、管理、終止會話。(在五層模型裏面已經合併到了應用層)
對應主機進程,指本地主機與遠程主機正在進行的會話
傳輸層 (Transport):
定義傳輸數據的協議端口號,以及流控和差錯校驗。
協議有:TCP UDP,數據包一旦離開網卡即進入網絡傳輸層
網絡層 (Network):
進行邏輯地址尋址,實現不一樣網絡之間的路徑選擇。
協議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
數據鏈路層 (Link):
創建邏輯鏈接、進行硬件地址尋址、差錯校驗等功能。(由底層網絡定義協議)
將比特組合成字節進而組合成幀,用MAC地址訪問介質,錯誤發現但不能糾正。
物理層(Physical Layer):
24. 你經常使用的Nginx模塊,用來作什麼
rewrite模塊,實現重寫功能
access模塊:來源控制
ssl模塊:安全加密
ngx_http_gzip_module:網絡傳輸壓縮模塊
ngx_http_proxy_module 模塊實現代理
ngx_http_upstream_module模塊實現定義後端服務器列表
ngx_cache_purge實現緩存清除功能
2五、請列出你瞭解的web服務器負載架構。
Nginx
haproxy
keepalived
lvs
一、docker命令
容器生命週期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操做運維 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
鏡像倉庫 — docker [login|pull|push|search]
本地鏡像管理 — docker [images|rmi|tag|build|history|save|import]
其餘命令 — docker [info|version]
二、docker怎樣實現容器件的獨立
1)pid namespace
不一樣用戶的進程就是經過pid namespace 隔離開的,且不一樣 namespace 中能夠有相同pid。全部的LXC進程在docker中的父進程爲docker進程,每一個lxc進程具備不一樣的 namespace 。
2) net namespace
有了pid namespace, 每一個 namespace 中的pid可以相互隔離,可是網絡端口仍是共享 host 的端口。網絡隔離是經過 net namespace 實現的,每一個 net namespace 有獨立的 network devices, IP addresses, IP routing tables, /proc/net 目錄。這樣每一個 container 的網絡就能隔離開來。docker默認採用veth的方式將 container 中的虛擬網卡同 host 上的一個docker bridge: docker0 鏈接在一塊兒。
3) ipc namespace
container 中進程交互仍是採用linux常見的進程間交互方法 (interprocess communication - IPC),包括常見的信號量、消息隊列和共享內存。container 的進程間交互實際上仍是host 上具備相同pid namespace 中的進程間交互。
4) mnt namespace
相似chroot,將一個進程放到一個特定的目錄執行。mnt namespace 容許不一樣 namespace 的進程看到的文件結構不一樣,這樣每一個 namespace 中的進程所看到的文件目錄就被隔離開了。在container裏頭,看到的文件系統,就是一個完整的linux系統,有/etc、/lib 等,經過chroot實現。
5) uts namespace
UTS("UNIX Time-sharing System") namespace 容許每一個 container 擁有獨立的 hostname 和 domain name, 使其在網絡上能夠被視做一個獨立的節點而非 Host 上的一個進程。
6) user namespace
每一個 container 能夠有不一樣的 user 和 group id, 也就是說能夠在 container 內部用 container 內部的用戶執行程序而非 Host 上的用戶。
有了以上 6 種 namespace 從進程、網絡、IPC、文件系統、UTS和用戶角度的隔離,一個 container 就能夠對外展示出一個獨立計算機的能力,而且不一樣 container 從 OS 層面實現了隔離。然而不一樣 namespace 之間資源仍是相互競爭的,仍然須要相似ulimit來管理每一個 container 所能使用的資源 - -cgroup。
cgroups(Control groups)實現了對資源的配額和度量。
三、Linux如何掛載windows下的共享目錄
mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456
linux 下的server須要本身手動建一個 後面的user與pass 是windows主機的帳號和密碼 注意空格 和逗號
四、查看http的併發請求數與其TCP鏈接狀態
1 netstat -n | awk '/^tcp/ {++b[$NF]}' END {for(a in b) print a,b[a]}'
還有ulimit -n 查看linux系統打開最大的文件描述符,這裏默認1024,不修改這裏web服務器修改再大也沒用。若要用就修改很幾個辦法,這裏說其中一個:
修改/etc/security/limits.conf
* soft nofile 10240
* hard nofile 10240
重啓後生效
五、用tcpdump嗅探80端口的訪問看看誰最高。
1 tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4"."}' | sort |uniq -c | sort -nr | head-5
六、查看/var/log目錄下的文件數
1 ls /var/log/ -1R | grep "-" | wc -l
七、查看當前系統每一個ip的鏈接數
1 netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn
八、shell下32位隨機密碼生成。
cat /dev/urandom | head -1 | md5sum | head -c 32 >> /pass
用Shell生成隨機密碼 爲了保證系統的安全性,按期修改密碼是很是有必要的,或者有時爲新用戶開通某個服務時,須要設置一個隨機密碼。在Linux中有一個設備/dev/urandom是用來產生隨機數序列的。利用該設備咱們能夠根據在須要生成隨機字符串
九、統計出apache的access.log中訪問量最多的5個ip。
1 cat access.log | awk '{print $1}' | sort | uniq -c | sort -n -r | head -5
10.如何查看二進制文件的內容
咱們通常經過hexdump命令 來查看二進制文件的內容。
hexdump -C XXX(文件名) -C是參數 不一樣的參數有不一樣的意義
-C 是比較規範的 十六進制和ASCII碼顯示
-c 是單字節字符顯示
-b 單字節八進制顯示
-o 是雙字節八進制顯示
-d 是雙字節十進制顯示
-x 是雙字節十六進制顯示
... ...
11.ps aux 中的VSZ表明什麼意思,RSS表明什麼意思VSZ:虛擬內存集,進程佔用的虛擬內存空間
RSS:物理內存集,進程戰用實際物理內存空間
10.檢測並修復/dev/hda5
1 fsck用來檢查和維護不一致的文件系統。若系統掉電或磁盤發生問題,可利用fsck命令對文件系統進行檢查
12.Linux系統的開機啓動順序
加載BIOS–>讀取MBR–>Boot Loader–>加載內核–>用戶層init一句inittab文件來設定系統運行的等級(通常3或者
5,3是多用戶命令行,5是界面)–>init進程執行rc.syninit–>啓動內核模塊–>執行不一樣級別運行的腳本程序–>執行/etc/rc.d/rc.local(本地運行服務)–>
執行/bin/login,就能夠登陸了。
13.符號連接與硬連接的區別
咱們能夠把符號連接,也就是軟鏈接 當作是 windows系統裏的 快捷方式。
硬連接 就好像是 又複製了一份.
ln 3.txt 4.txt 這是硬連接,至關於複製,不能夠跨分區,但修改3,4會跟着變,若刪除3,4不受任何影響。
ln -s 3.txt 4.txt 這是軟鏈接,至關於快捷方式。修改4,3也會跟着變,若刪除3,4就壞掉了。不能夠用了。
14.保存當前磁盤分區的分區表
dd 命令是以個強大的命令,在複製的同時進行轉換
dd if=/dev/sda of=./mbr.txt bs=1 count=512
15.如何在文本里面進行復制、粘貼,刪除行,刪除所有,按行查找和按字母查找。
如下操做所有在命令行狀態操做,不要在編輯狀態操做。
在文本里 移動到想要複製的行 按yy 想複製到哪就移動到哪,而後按P 就黏貼了
刪除行 移動到改行 按dd
刪除所有 dG 這裏注意G必定要大寫
按行查找 :90 這樣就是找到第90行
按字母查找 /path 這樣就是 找到path這個單詞所在的位置,文本里可能存在多個,屢次查找會顯示在不一樣的位置。
16.手動安裝grub
1 grub-install /dev/sda
17.修改內核參數
vi /etc/sysctl.conf 這裏修改參數
sysctl -p 刷新後可用
18.在1-39內取隨機數
expr $[RANDOM%39] +1
RANDOM隨機數
%39取餘數範圍0-38
19.限制apache每秒新建鏈接數爲1,峯值爲3
每秒新建鏈接數 通常都是由防火牆來作,apache自己好像沒法設置每秒新建鏈接數,只能設置最大鏈接:
iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second -j ACCEPT
20.FTP的主動模式和被動模式
FTP協議有兩種工做方式:PORT方式和PASV方式,中文意思爲主動式和被動式。
PORT(主動)方式的鏈接過程是:客戶端向服務器的FTP端口(默認是21)發送鏈接請 求,服務器接受鏈接,創建一條命令鏈路。當須要傳送數據時,客戶端在命令鏈路上用PORT 命令告訴服務器:「我打開了XX端口,你過來鏈接我」。因而服務器從20端口向客戶端的 XX端口發送鏈接請求,創建一條數據鏈路來傳送數據。
PASV(被動)方式的鏈接過程是:客戶端向服務器的FTP端口(默認是21)發送鏈接請 求,服務器接受鏈接,創建一條命令鏈路。當須要傳送數據時,服務器在命令鏈路上用PASV 命令告訴客戶端:「我打開了XX端口,你過來鏈接我」。因而客戶端向服務器的XX端口 發送鏈接請求,創建一條數據鏈路來傳送數據。
從上面能夠看出,兩種方式的命令鏈路鏈接方法是同樣的,而數據鏈路的創建方法就完 全不一樣。
21.顯示/etc/inittab中以#開頭,且後面跟了一個或者多個空白字符,然後又跟了任意非空白字符的行。
1 grep "^#\{1,\}[^]" /etc/inittab
22.顯示/etc/inittab中包含了:一個數字:(即兩個冒號中間一個數字)的行
1 grep "\:[0-9]\{1\}:" /etc/inittab
23.怎麼把腳本添加到系統服務裏,即用service來調用
在腳本里加入
#!/bin/bash
# chkconfig: 345 85 15
# description: httpd
而後保存
chkconfig httpd –add 建立系統服務
如今就能夠使用service 來 start or restart
24.寫一個腳本,實現批量添加20個用戶,用戶名爲user01-20,密碼爲user後面跟5個隨機字符
#!/bin/bash
#description: useradd
for i in `seq -f"%02g" 1 20`;do
useradd user$i
echo "user$i-`echo $RANDOM|md5sum|cut -c 1-5`"|passwd –stdinuser$i >/dev/null 2>&1
done
25.寫一個腳本,實現判斷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
wait
26.寫一個腳本,判斷一個指定的腳本是不是語法錯誤;若是有錯誤,則提醒用戶鍵入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
2七、寫一個腳本:(26包括3個小題)
一、建立一個函數,能接受兩個參數:
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
else
return "51"
fi
fi
if [ $? -ne 0 ]; then
return "52"
fi
}
download $url $dir
echo $?
2八、寫一個腳本:(27包括2個小題)
一、建立一個函數,能夠接受一個磁盤設備路徑(如/dev/sdb)做爲參數;在真正開始後面步驟以前提醒用戶有危險,並讓用戶選擇是否繼續;然後將此磁盤設備上的全部分區清空(提示,使用命令dd if=/dev/zero of=/dev/sdb bs=512 count=1實現,注意其中的設備路徑不要寫錯了;
若是此步驟失敗,返回67給主程序;
接着在此磁盤設備上建立兩個主分區,一個大小爲100M,一個大小爲1G;若是此步驟失敗,返回68給主程序;
格式化此兩分區,文件系統類型爲ext3;若是此步驟失敗,返回69給主程序;
若是上述過程都正常,返回0給主程序;
二、調用此函數;並經過接收函數執行的返回值來判斷其執行狀況,並將信息顯示出來;
local Darray=(`ls /dev/sd[a-z]`)
for i in ${Darray};do
[[ "$i" == "$1" ]] && Sd=$i &&break
done
else
return66
fi
#當匹配成功,進入選擇,告訴用戶,是否繼續,輸錯的話進入無限循環,當用戶選擇Y,則清空目標分區,且跳出while循環
while :;do
read -p "Warning!!!This operation will clean $Sd data.Next=y,Quit=n [y|n]:" Choice
case $Choice in
y)
dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null &&break || return 67 ;;
n)
exit 88 ;;
*)
echo "Invalid choice,please choice again." ;;
esac
done
#使用echo傳遞給fdisk進行分區,若是此命令失敗,則跳轉出去,錯誤值68,須要注意的是,有時候這個返回值很詭異,筆者以前成功與否都是返回的1,後來重啓以後,就行了,若是慎重的話,能夠對建立的分區,進行判斷,不過就須要使用其餘工具截取相關字段了,雖有些小麻煩,但無大礙
1 echo-e "n\np\n1\n\n+100M\nn\np\n2\n\n+1024M\nw\n"|fdisk /dev/sdb&> /dev/null || || return 68
#格式化以前,讓內核從新讀取磁盤分區表,值得注意的是,有的系統版本,使用partprobe無效,譬如筆者的環境是rhel5.8,而rhel6.0之後,這個命令就很危險了,而使用partx -a /dev/sdb則效果更好…此項需慎重,若是格式化失敗,則告知把失敗的分區定義成變量,且跳出函數,並帶出錯誤值69
`partprobe`
Part=`fdisk -l /dev/$Sd|tail -2|cut -d」 」 -f1`
for M in ${Part};do
mke2fs -j $M &> /dev/null && ErrorPart=$M &&return 69
done
return 0
}
#下面代碼,調用函數,接收函數返回值,根據返回值進行判斷哪裏出錯。
Disk_Mod $1
Res=$?
[ $Res-eq 0 ] && exit 0
[ $Res-eq 66 ] && echo "Error! Invalid input."
[ $Res-eq 67 ] && echo "Error! Command -> dd <- Faild."
[ $Res-eq 68 ] && echo "Error! Command -> fdisk <- Faild."
[ $Res-eq 69 ] && echo "Error! Command -> mke2fs <- Faild."
2八、如何讓history命令顯示具體時間?
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S"
export HISTTIMEFORMAT
從新開機後會還原,能夠寫/etc/profile
蘋果電腦使用命令行sudo chown -R root .結果權限沒了,資料沒了,怎麼改回去啊以試下恢復命令 /bin/rm -rf /*