Linux常用指令
阿新 • • 發佈:2020-12-27
一、awk
① 基本使用
[root@localhost ~]# cat /var/log/nginx/access.log | awk 'substr($9,1,3)!=200'
#檢視訪問日誌中,過濾非200狀態碼的日誌請求;
# substr($4,20) :表示從第四個欄位裡的第20個字元開始,一直到設定的分隔符 結束;
# substr($4,1,3) :表示從第四個欄位裡的第1個字元開始,擷取3個字元結束;
# substr($4,3,6) : 表示從第四個欄位裡的第3個字元開始,擷取6個字元結束;
[root@localhost ~]# awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 0 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core) 1 : CentOS Linux (0-rescue-732d2ab46c8c49608f5c11b59d037204) 7 (Core) # \':對單引號進行轉義,表示以單引號進行分隔; # $1=="menuentry:表示如果位置1變數的值是menuentry; # {print i++ " : " $2}:則列印$2的值,i++表示在輸出的資訊開頭增加序列號;
② awk查詢特定時間段的日誌
# 日誌格式如下
10.252.201.136 - - [27/Apr/2020:00:00:01 +0800] "POST /api-stkp/callback HTTP/1.1" 200 221 "-" "Java/1.8.0_77"
# 過濾2020年4月29日的7:00到10:30的日誌
$ cat access.log | awk '$4 >= "[29/Apr/2020:07:00:00" && $4 <= "[29/Apr/2020:10:30:35"' > nginx.log
③ 使用awk統計nginx日誌中每個獨立ip的訪問次數
$ awk '{print $1}' access.log | sort | uniq -c | sort -rn
二、getopts
getopts指定引數,獲取值。同樣還有一個作用類似的選項getopt,可以自行百度檢視其區別。
[root@localhost ~]# vim test.sh #!/bin/bash while getopts “:h:p:” optname;do case “$optname” in “h”) host_ip=$OPTARG ;; “p”) host_port=$OPTARG ;; “?” ) echo “不知道此選項” ;; “:”) echo “此選項沒有值” ;; “*”) echo “錯誤資訊” ;; esac done echo "IP是${host_ip},埠是${host_port}" [root@localhost ~]# sh test.sh -h 192.168.1.1 -p3306 IP是192.168.1.1,埠是3306
在上面的指令碼中,while後面的getopts關鍵字是必須的,引號中的h、p是可選自定義的,對應的是命令列-h、-p等指定的選項,optname也是自定義的,只要和case語句後引用的變數名稱對應即可。在case語句下,需要給哪些選項賦值,則寫多少就行,一般和getopts後面指定的選項對應。
三、sed
[root@localhost ~]# nslookup www.baidu.com | sed -n -e '4,$p' | awk '/Address/{print $2}
#獲取域名解析的ip地址
四、ss
[root@localhost ~]# ss -tan state time-wait | wc -l
#檢視timewait的連線數
五、獲取本機內網IP
[root@localhost ~]# ip addr | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1
六、顯示目錄各級的許可權
[root@localhost ~]# namei -om /var/log/messages
f: /var/log/messages
dr-xr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root log
-rw------- root root messages
七、dig
此工具和nslookup功能一樣,用於域名解析,但比nslookup要好用。
選項:
- @<伺服器地址>:指定進行域名解析的域名伺服器;
- -b<ip地址>:當主機具有多個IP地址,指定使用本機的哪個IP地址向域名伺服器傳送域名查詢請求;
- -f<檔名稱>:指定dig以批處理的方式執行,指定的檔案中儲存著需要批處理查詢的DNS任務資訊;
- -P:指定域名伺服器所使用埠號;
- -t<型別>:指定要查詢的DNS資料型別;
- -x<IP地址>:執行逆向域名查詢;
- -4:使用IPv4;
- -6:使用IPv6;
[root@localhost ~]# dig www.baidu.com
#使用 /etc/resolv.conf檔案指定的dns伺服器去解析baidu.com的記錄
[root@localhost ~]# dig www.baidu.com @114.114.114.114
#指定114.114.114.114作為dns伺服器去解析baidu.com
[root@localhost ~]# dig www.baidu.com -t cname @114.114.114.114
#這裡新增-t選項,只顯示cname記錄
八、使CPU使用率接近百分百
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done
九、yum下載某個服務所需的包檔案並安裝
此功能用於伺服器不能和外網通訊,安裝某個服務時需要先在能上外網的主機上下載rpm包,然後進行安裝。
# 在本機未安裝此服務時使用以下指令:
$ yum install --downloadonly --downloaddir=/tmp/httpd/ httpd
# 僅下載httpd服務所需的rpm包,而不安裝
# --downloaddir:指定下載的rpm包存放路徑
# 若本機已安裝此服務,則使用reinstall選項即可
$ yum reinstall --downloadonly --downloaddir=/tmp/httpd/ httpd
# 當rpm包下載後打包到其他主機上,可以使用以下指令安裝
$ yum -y localinstall /tmp/httpd/*
十、查詢佔用記憶體資源最多的前10個程序
$ ps -auxf | sort -nr -k 4 | head -10
# sort指令中的“-k”選項是以空格為間隔,要依據第幾列進行排序
十一、查詢佔用CPU資源最多的前10個程序
$ ps -auxf | sort -nr -k 3 | head -10
十二、fgrep
$ fgrep -c "hello" test.txt #顯示hello字元在test.txt檔案中匹配行的數目
$ fgrep -l "hello" test.txt #顯示匹配hello的檔名
十三、pkill
$ pkill -kill -t pts/1 #斷掉連線當前終端的使用者
十四、顯示目錄結構各級的許可權
$ namei -om /var/log/messages
十五、獲取阿里雲epel源
$ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
十六、檢視伺服器出口IP地址
$ curl ipconfig.io
十七、伺服器設定臨時IP、閘道器
$ ifconfig ens@196 192.168.207.47/24 # 設定臨時IP地址,不加子網掩碼,預設是32位
$ route add default gw 192.168.207.1 # 設定臨時閘道器