1. 程式人生 > >Linux系統運維常見面試簡答題系列(一)(15題)

Linux系統運維常見面試簡答題系列(一)(15題)

本文所有內容均來自網路,由運維派編輯整理,如內容有不正之處,煩請給予指正,謝謝!

1、請描述下linux 系統的開機啟動過程
開機加電BIOS自檢———–>MBR引導———–>grub引導選單———–>載入核心———–>啟動init程序———–>讀取inittab檔案———–>啟動mingetty程序———–>登入系統

2、權威DNS和遞迴DNS含義,智慧DNS的實現原理
權威DNS是經上一級授權對域名進行解析的DNS伺服器,同時它可以把解析授權轉授給其他伺服器;

遞迴DNS負責接受使用者對任何域名的查詢,並返回結果給使用者,它可以快取結果避免使用者再向上查詢;

智慧DNS就是將對使用者發起的查詢進行判斷出是哪個運營商的使用者查詢,然後將請求轉發給相應的運營商IP處理,減少跨運營訪問的時間,提高訪問速度。

3、通過APACHE訪問日誌access.log統計IP和每個地址訪問的次數,列出訪問量前10名的IP地址,寫出具體命令
awk ‘{print $1}’ access.log|uniq -c|sort -rn |head -10

4、編寫指令碼實現將/usr/local/test目錄下大於100K檔案,將它拷貝到/tmp目錄下

1
2
3
4
5
6
7
8
9
#!/bin/bash
for file in `ls /usr/local/test`
do
if [ -
f $file ];then if [ `ls -l $file`|awk '{print $5}' -gt 10000];then mv $file /tmp/ fi fi done

5、將本地的80埠的請求轉發到8080埠,本機地址10.0.0.254,寫出命令
iptables -t nat -A PRETOUTING -d 10.0.0.254 -p tcp –dprot 80 -j DNAT –to-destination 10.0.0.254:8080

6、如何實現nginx代理的節點訪問日誌記錄的是真實訪客的IP,不是代理的IP
配置nginx.conf配置檔案增加下同的標記內容

1
2
3
4
5
6
7
8
server{
                   listen 80;
                   server_name blog.text.com;
                   location / {
                   proxy_pass http://test_servers;
                   proxy_set_header Host $host;
                   proxy_set_headerX-Forwarded-For $remote_addr;

修改完成後,重新載入nginx即可:/application/nginx/sbin/nginx -s reload

7、MYSQL 一主多從,主庫宕機,如何合理切換到從庫,其它從庫如何處理?
1)登陸所有從庫檢視post資訊,使用POST最大的做為新的主庫,然後將從為提升為新的主庫,登陸從庫(新的主庫)執行stop slave,
2)修改my.cnf配置檔案,開啟log-bin並重新啟動資料庫服務,登陸資料庫執行restet master ,show master status\G;檢視主庫資訊,最後建立授權同步使用者與許可權和網站使用資料庫的使用者與許可權,同步所有機器的/etc/hosts檔案(這時就體現了之前全網用域名則不是用IP的作用了,不然還得修改網站程式切換到新主庫伺服器IP上,否則無法連線到資料庫);
3)登陸其它從庫,執行change master操作,檢視同步狀態。

8、誤操作drop語句導致資料庫資料破壞,請給出恢復的實際大體步驟
所有資料恢復的基礎都在於備份,必須要有完整的備份,否則恢復無從談起,誤操作導致的資料庫破壞需要使用增量恢復的方法進行恢復資料庫,具體步驟如下:

1)檢視備份與binlog檔案

2)重新整理並備份binlog檔案
mysqladmin -uroot -pmysql123 -S /data/mysql.sockflush-logs

3)將binlog檔案恢復成sql語句
mysqlbinlog –no-defaults mysql-bin.000061 mysql-bin.000062 >bin.sql

4)將其中誤操作的語句刪除(就是drop的動作)

5)解壓全備檔案,恢復全備檔案
gzip -d mysql_backup_2016-10-12.sql.gz
mysql -uroot -pmysql123 -S/data/3306/mysql.sock < mysql_backup_2016-10-12.sql
如果有對錶的操作,恢復資料時需要接表名

6)恢復誤操作前的binlog檔案記錄的sql語句
mysql -uroot -pmysql123 -S/data/3306/mysql.sock < bin.sql
最後登陸資料庫,檢視資料是否恢復成功,如果有確定的誤操作時間,就直接恢復這段時間的資料即可。

9、列舉一個實際生產的例子,網站訪問速度慢是因為資料庫訪問慢導致的

問題情況描述:
突然有一天,有同事反應,網站訪問速度很慢,有時候會出現打不開網站的情況,重新整理等待好長時間後又正常開啟。

解決步驟:
登陸資料庫執行show full processlist 看到有很多相同的查詢動作且徵對同一張表,因此確定網站打不開的原因是這個,故將此IP禁止訪問。日常工作中避免此類問題發生解決方法如下:可以將資料庫讀寫分離;安裝資料快取伺服器,儘量將大部分的請求不直接對接資料庫。

10、一個shell 指令碼手工可以執行,放入定時任務後不能執行,可能的原因?
手工可以執行,表明指令碼本身不存在邏輯上的問題,可能原因有以下幾點
1)定時任務書寫有錯誤導致,執行的指令碼沒有寫絕對路徑,找不到指令碼
2)環境變數問題導致。

11、利用shell開發rsync服務啟動、停止指令碼,並通過chkconfig 進行開關機管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@mysql-1 download]# vi RSstart.sh
#!/bin/sh
##create by mingongge at 2017-01-10
. /etc/init.d/functions
case "$1" in
start)
      rsync --daemon
      if [ $? -eq 0 ];then
        action "rsync is started" /bin/true
     else
        action "rsync is started" /bin/false
     fi
;;
stop)
     pkill rsync
     sleep 2
     if [ `ps -ef|grep rsync|grep -v grep |wc -l` -eq 0 ];then
         action "rsync is stoped " /bin/true
     else
         action "rsync is stoped " /bin/false
     fi
;;
restart)
    pkill rsync
    sleep 2     
    if [ `ps -ef|grep rsync|grep -v grep |wc -l` -eq 0 ];then
       rsync --daemon
       if [ $? -eq 0 ];then
          action "rsync is restarted" /bin/true
       fi
    fi
;;
*)
   echo "USAGE :{start|stop|restart}"
;;
esac

“RSstart.sh” [New] 36L, 731C written
[[email protected] download]# chmod +x RSstart.sh
[[email protected] download]# sh RSstart.sh
USAGE :{start|stop|restart}
[[email protected] download]# sh RSstart.sh start
rsync is started [ OK ]
[[email protected] download]# ps -ef|grep rsync
root 1088 1 0 Jan09 ? 00:00:00 rsync –daemon
root 3527 2869 0 03:54 pts/0 00:00:00 grep rsync
[[email protected] download]# sh RSstart.sh stop
rsync is stoped [ OK ]
[[email protected] download]# ps -ef|grep rsync
root 3540 2869 0 03:54 pts/0 00:00:00 grep rsync
[[email protected] download]# sh RSstart.sh start
rsync is started [ OK ]
[[email protected] download]# sh RSstart.sh restart
rsync is restarted [ OK ]
[[email protected] download]# ps -ef|grep rsync
root 3558 1 0 03:54 ? 00:00:00 rsync –daemon
root 3564 2869 0 03:55 pts/0 00:00:00 grep rsync

配置開關機管理
然後在指令碼最前面加上以下內容
# chkconfig: 2345 21 99
# description: chkconfig rsync service
具體自己測試下,也有可能這個啟動,關閉序號有衝突,需要修改。

12、請描述OSI7層模型各層名字及功能,並舉例在不同層對應的協議
第一層:物理層,利用傳輸介質為資料提供物理連線, 對應的協議:ARP
第二層:資料鏈路層:建立和管理各節點間的連結鏈路 對應的協議:PPTP、CDP
第三層:網路層,是控制資料鏈路層與上傳輸層之間的資訊轉發、建立與維持對應的協議:IP、路由協議
第四層:傳輸層,提供會話傳輸服務,確保資料正確傳送對應的協議:TCP UDP
第五層:會話層,提供建立會話管理,支援資料交換
第六層:表示層,處理資料(資料格式、編碼、加密等),按一定的格式傳送至會話層
第七層:應用層,為使用者提供各類應用服務(檔案、列印、郵件等服務)對應協議:HTTP、FTP、SMTP、POP3

13、linux系統環境下如何檢視系統運行了多長時間?

執行系統命令uptime,其中第三個欄位,如下的2:32處則表示系統從上次啟動開始已運行了多長時間。
[[email protected] download]#uptime
02:05:22 up 2:32, 2 users, load average: 0.00, 0.00, 0.00

14、linux系統中新增路由的方法

主機路由
route add -host 192.168.197.100 dev eth0
閘道器路由
route add default gw 192.168.197.1
網路路由
route ad -net 192.168.1.0 netmask 255.255.255.0 deveth1
route ad -net 192.168.1.0 netmask 255.255.255.0 gw192.168.197.1

15、已知test.txt檔案內容如下,請取出檔案的5-15行內容
[[email protected] ~]# cat test.txt
1
2
3
4
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
16
17nnnnnn

方法一:[[email protected] ~]# grep 15bbbbbb -B 10 test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb

方法二:[[email protected] ~]# sed -n ‘5,15p’ test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb

方法三:[[email protected]~]# awk ‘{if(NR4) print $1}’ test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb

原文來自微信公眾號:友侃有笑