目錄
1.shell中定義區域變數
2.在執行腳本時bash和source的區別
3.哪些方式可以將標準輸出和錯誤輸出重定向到檔案?
4.正則運算式符號*、+、?、[]、[^]、{n} 分別代表什么含義?
5.日志切割腳本
6.利用shell開發rsync服務啟動、停止腳本,并通過chkconfifig 進行開關機管理
7.撰寫一個shell腳本,添加100個新用戶,并設定密碼
8.取出某個檔案的第三列,以冒號分割
9.查看access.log檔案中某個時間段的日志
10.查看 Apache并發請求數及其TCP連接狀態
11.通過APACHE訪問日志access.log統計IP和每個地址訪問的次數,列出訪問量前10名的IP地址,寫出具體命令
12.撰寫腳本實作將/usr/local/test目錄下大于100K檔案,將它拷貝到/tmp目錄下
13.如何獲取一個檔案每一行第三個元素?
14.使用awk統計httpd訪問日志中每個客戶端IP出現的次數?
15.撰寫腳本,用戶輸入密碼,腳本判斷密碼是否正確,輸入正確則提示正確,連續輸入錯誤密碼3次,則報警?
16.撰寫腳本,自動生成一個8位隨機密碼
17.統計ip訪問情況,要求分析nginx訪問日志,找出訪問頁面數量在前十位的ip
18.怎么查看當前系統中每個IP的連接數:
19.python多執行緒的局限性
20.python的基本資料型別
1.shell中定義區域變數
定義區域變數可以使用local,多在函式中應用
1)shell中定義的變數都是global的,其作用域從被定義的地方開始,到shell結束或被顯示洗掉的地方為止
2)函式定義的變數是可以被定義成local的,其作用域只限于函式內
2.在執行腳本時bash和source的區別
1、source命令用法:
source 檔案名
作用:在當前bash環境下讀取并執行FileName中的命令,該fifilename檔案可以無"執行權限"
注:該命令通常用命令“.”來替代,
source(或點)命令通常用于重新執行剛修改的初始化檔案,
source命令(從 C Shell 而來)是bash shell的內置命令,
點命令,就是個點符號,(從Bourne Shell而來),
source的程式主體是bash,腳本中的$0變數的值是bash,而且由于作用于當前bash環境,腳本中set的變數將直接起效
2、sh,bash的命令用法:
sh/bash 檔案名
作用:打開一個子shell來讀取并執行FileName中命令,該fifilename檔案可以無"執行權限"
注:運行一個shell腳本時會啟動另一個命令解釋器.
每個shell腳本有效地運行在父shell(parent shell)的一個子行程里.
這個父shell是指在一個控制終端或在一個xterm視窗中給你命令指示符的行程.
shell腳本也可以啟動他自已的子行程.這些子shell(即子行程)使腳本并行地,有效率地地同時運行腳本內的多個子任務. 在ubuntu中sh只是bash的一個鏈接,由于是在子shell中執行,腳本設定的變數不會影響當前shell,
3、./的命令用法:
./檔案名
作用:打開一個子shell來讀取并執行FileName中命令,該fifilename檔案需要"執行權限"
注:運行一個shell腳本時會啟動另一個命令解釋器.
每個shell腳本有效地運行在父shell(parent shell)的一個子行程里.
這個父shell是指在一個控制終端或在一個xterm視窗中給你命令指示符的行程.
shell腳本也可以啟動他自已的子行程.
這些子shell(即子行程)使腳本并行地,有效率地地同時運行腳本內的多個子任務.由于是在子shell中執行,腳本設定的變數不會影響當前shell,
3.哪些方式可以將標準輸出和錯誤輸出重定向到檔案?
命令 &> 檔案名
命令 > 檔案名1 2> 檔案名2
命令 > 檔案名 2>&1
命令 &>> 檔案名命令 >> 檔案名1 2>> 檔案名2
命令 >> 檔案名 2>&1
4.正則運算式符號*、+、?、[]、[^]、{n} 分別代表什么含義?
* 表示匹配的前面的字符出現了任意次(包括0次)
表示匹配的前面的字符出現了至少1次(1次或多次)
? 表示匹配前面的字符出現了0次或1次
[] 表示集合,匹配集合中的任意單個字符
[^] 表示對集合取反
{n} 表示精確匹配前面的字符出現了n次
5.日志切割腳本
[root@localhost ~]# vim /usr/local/nginx/logbak.sh #新建腳本名為
logbak.sh
\#!/bin/bash #解釋器
date=`date +%Y%m%d` #自定義date變數,值等于當前日期
logpath=/usr/local/nginx/logs #自定義logpath變數,值等于
Nginx日志所在路徑
mv $logpath/access.log $logpath/access-$date.log #把當前access日志重命名
mv $logpath/error.log $logpath/error-$date.log #把當前error日志重命名
kill -USR1 $(cat $logpath/nginx.pid) #向nginx主行程發USR1信
號,重新打開生成日志檔案,如不發送USR1,Nginx將會繼續寫入改名之后的日志
接下來把寫好的腳本寫入計劃任務,自動執行,
[root@localhost ~]# crontab -e #打開計劃任務表
01 02 * * 6 /usr/local/nginx/logbak.sh #每周六凌晨2:01運行腳本進行
日志切割
6.利用shell開發rsync服務啟動、停止腳本,并通過chkconfifig 進行開關機管理
[root@localhost ~]# vim RSstart.sh
#!/bin/bash
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
配置開關機管理
然后在腳本最前面加上以下內容
\# chkconfig: 2345 21 99
\# description: chkconfig rsync service
具體自己測驗下,也有可能這個啟動,關閉序號有沖突,需要修改
7.撰寫一個shell腳本,添加100個新用戶,并設定密碼
#!/bin/bash
for name in $(cat $1) # 存放用戶的檔案串列
do
useradd $name &> /dev/null
stty -echo
echo "0123456" | passwd --stdin $name
stty echo
echo "$1 用戶創建成功"
done
8.取出某個檔案的第三列,以冒號分割
awk -F ':' '{print $3}' 檔案名 | sort -n | uniq -C
9.查看access.log檔案中某個時間段的日志
sed -n '起始時間 , 結束時間/p' access.log
10.查看 Apache并發請求數及其TCP連接狀態
查看Apache的并發請求數及其TCP連接狀態:
Linux命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
11.通過APACHE訪問日志access.log統計IP和每個地址訪問的次數,列出訪問量前10名的IP地址,寫出具體命令
awk ‘{print $1}’ access.log|uniq -c|sort -rn |head -10
12.撰寫腳本實作將/usr/local/test目錄下大于100K檔案,將它拷貝到/tmp目錄下
[root@localhost ~]# vim test_cp.sh
#!/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
13.如何獲取一個檔案每一行第三個元素?
awk '{print $3}' 檔案名
awk支持按列輸出,通過內置變數 2,$3...可以顯示任意列,默認列是一空格或Tab縮進為分隔符,也可以使用-F選項指定其他分隔符
14.使用awk統計httpd訪問日志中每個客戶端IP出現的次數?
awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log
定義陣列,陣列名為ip,數字下標為日志檔案的第一列(也就是客戶端的IP地址),++目的在于對客戶端進行統計計數,客戶端IP出現一次計數器就加一.END中的指令在讀取完檔案后執行,通過回圈將所有的統計資訊輸出
15.撰寫腳本,用戶輸入密碼,腳本判斷密碼是否正確,輸入正確則提示正確,連續輸入錯誤密碼3次,則報警?
[root@test ~]# vim test.sh
#!/bin/bash
init=123456
for i in {1..3}
do
read -p "請輸入密碼:" pass
if [ init ];then
echo "密碼正確"
exit
fi
done
echo "警告:密碼輸入錯誤"
[root@repo ~]# bash test.sh
請輸入密碼:789456
請輸入密碼:4857
請輸入密碼:46584
警告:密碼輸入錯誤
[root@repo ~]# bash test.sh
請輸入密碼:123456
密碼正確
16.撰寫腳本,自動生成一個8位隨機密碼
[root@repo ~]# vim test1.sh#!/bin/bash
str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
pass=""
for i in {1..8}
do
num= {#str}]
tmp=${str:num:1}
pass+=$tmp
done
echo $pass
[root@repo ~]# bash test1.sh
fI55Qcr0
[root@repo ~]# bash test1.sh
iTmEyE9Q
[root@repo ~]# bash test1.sh
wy0PvcHa
[root@repo ~]# bash test1.sh
nk6AC9VT
17.統計ip訪問情況,要求分析nginx訪問日志,找出訪問頁面數量在前十位的ip
cat access.log | awk ‘{print $1}’ | uniq -c | sort -rn | head -10
18.怎么查看當前系統中每個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 為分界符,取出第一個:之前的資料
19.python多執行緒的局限性
Python代碼的執行由Python虛擬機(解釋器)來控制,Python在設計之初就考慮要在主回圈
中,同時只有一個執行緒在執行,就像單CPU的系統中運行多個行程那樣,記憶體中可以存放多個程式,但任意時刻,只有一個程式在CPU中運行,同樣地,雖然Python解釋器可以運行多個執行緒,只有一個執行緒在解釋器中運行,
對Python虛擬機的訪問由全域解釋器鎖(GIL)來控制,正是這個鎖能保證同時只有一個執行緒在運行,在多執行緒環境中,Python虛擬機按照以下方式執行,
1.設定GIL,
2.切換到一個執行緒去執行,
3.運行,
4.把執行緒設定為睡眠狀態,
5.解鎖GIL,
6.再次重復以上步驟,
20.python的基本資料型別
數字 字串 串列 元組 字典
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/305633.html
標籤:其他
上一篇:監控zabbix面試題
