1. 程式人生 > 實用技巧 >Linux常用指令

Linux常用指令

一、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         # 設定臨時閘道器