實用小命令

1、實用小命令

1.一、cat

cat命令主要用來查看文件內容,建立文件,文件合併,追加文件內容等功能。
經常使用選項
-n :查看文本時顯示行號
-b :查看文本時顯示行號,有空白的行不計其內
-E :顯示是否換行,結尾以"$"結尾表示有換行
-A :顯示TAB是否有加鍵,一個"^I"表示一個TAB
-s :壓縮相鄰的空行爲一個php

(1)測試文件
[root@kube-master ~]# cat  F1
123
 456
789
123123

(2)-n :查看文本時顯示行號
[root@kube-master ~]# cat -n F1
         1  123
         2   456
         3  789
         4  123123
         5
         6

(3)-b :查看文本時顯示行號,有空白的行不計其內      
[root@kube-master ~]# cat -b F1
         1  123
         2   456
         3  789
         4  123123

(4)-E :顯示是否換行,結尾以"$"結尾表示有換行
[root@kube-master ~]# cat -E F1
123$
 456$
789  $
123123           $
$
$

(5) -A :顯示TAB是否有加鍵,一個"^I"表示一個TAB
[root@kube-master ~]# cat -A F1
123$
 456$
789  $
123123^I^I $
$
$

(6)-s :壓縮相鄰的空行爲一個
[root@kube-master ~]# cat -s  F1
123
 456
789
123123

(7)生成文件
[root@kube-master ~]# cat > F2
test
ctrl + d退出
[root@kube-master ~]# cat F2
test

(9)合併文件
[root@kube-master ~]# cat F1 F2 > F3
[root@kube-master ~]# cat F3
123
 456
789
123123

test

1.二、tac

將文本倒過來查看mysql

(1)將文本倒過來查看
[root@kube-master ~]# tac F1

123123
789
 456
123

1.三、rev

反向顯示nginx

(1)反向顯示內容
[root@kube-master ~]# echo "abcd" | rev
dcba
[root@kube-master ~]# rev < /etc/fstab
#
batsf/cte/ #
9102 24:54:90 13 naJ uhT no adnocana yb detaerC #
#
'ksid/ved/' rednu deniatniam era ,ecnerefer yb ,smetsyselif elbisseccA #
ofni erom rof )8(diklb ro/dna )8(tnuom ,)8(sfdnif ,)5(batsf segap nam eeS #
#
0 0        stluafed     sfx                       / toor-sotnec/reppam/ved/
0 0        stluafed     sfx                   toob/ 5fe0eaa3ec3f-6eb9-5234-0aee-21b8c81d=DIUU
0 0        stluafed    paws                    paws paws-sotnec/reppam/ved/

1.四、head

顯示頭幾行或者頭幾個字節
經常使用選項
-# :#表示數字,表示顯示前幾#行
-n # :#表示數字,表示顯示前幾#行,跟上面-#相似
-c # :#表示數字,表示顯示前幾個字節的數據git

(1)-# :#表示數字,表示顯示前幾#行
[root@kube-master ~]# head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

(2)-n # :#表示數字,表示顯示前幾#行,跟上面-#相似
[root@kube-master ~]# head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

(3)-c # :#表示數字,表示顯示前幾個字節的數據
[root@kube-master ~]# head -c 5 /etc/passwd
root:

1.五、tail

顯示倒數後幾行或倒數後幾個字節,固然tail使用起來更加豐富
經常使用選項
-# :顯示倒數後#行
-n # :跟-#同樣,顯示倒數後#行
-c # :顯示倒數後#字節
-f :實時顯示最後一行
-F :實時顯示最後一行,當文件不存在則顯示文件不存在web

(1)-# :顯示倒數後#行
[root@kube-master ~]# tail -5 /etc/passwd
gitlab-prometheus:x:993:990::/var/opt/gitlab/prometheus:/bin/sh
jenkins:x:992:989:Jenkins Automation Server:/var/lib/jenkins:/bin/false
ntp:x:38:38::/etc/ntp:/sbin/nologin
nginx:x:991:988:Nginx web server:/var/lib/nginx:/sbin/nologin
mysql:x:990:987::/home/mysql:/sbin/nologin

(2)-n # :跟-#同樣,顯示倒數後#行
[root@kube-master ~]# tail -n 5 /etc/passwd
gitlab-prometheus:x:993:990::/var/opt/gitlab/prometheus:/bin/sh
jenkins:x:992:989:Jenkins Automation Server:/var/lib/jenkins:/bin/false
ntp:x:38:38::/etc/ntp:/sbin/nologin
nginx:x:991:988:Nginx web server:/var/lib/nginx:/sbin/nologin
mysql:x:990:987::/home/mysql:/sbin/nologin

(3)-c # :顯示倒數後#字節
[root@kube-master ~]# tail -c 10 /etc/passwd
n/nologin

(4) -f :實時顯示最後一行, 默認狀況會打印後10行而且監控最後一行,當增長一行機會實時顯示數據出來
[root@kube-master ~]# tail -f F1
123
 456
789
123123
[root@kube-master ~]# echo "testline" >> F1
[root@kube-master ~]# tail -f F1
123
 456
789
123123

testline
實時監測只顯示最後一行
[root@squid ~]# tail -n 0  -f /etc/fstab   
tesst

(5) -F :實時顯示最後一行,當文件不存在則顯示文件不存在
[root@kube-master ~]# tail -F F1
123
 456
789
123123

testline
[root@kube-master ~]# rm -f F1
[root@kube-master ~]# tail -F F1
123
 456
789
123123

testline
tail: ‘F1’ has become inaccessible: No such file or directory

1.六、tailf

跟tail -f 同樣,可是性能更高,當文件發生變化才輸出內容,不實監測磁盤,省電,減小磁盤讀寫.sql

[root@kube-master ~]# tailf /var/log/nginx/access.log

1.七、tr

對標準輸入作文本的刪除,替換等
經常使用選項
-d :對標準輸入刪除指定內容
-s : 縮減連續重複的字符成指定的單個字符json

(1)測試文件
[root@kube-master ~]# cat > F1
123     34545
asdasdas
123  7878
ctrl + d退出
[root@kube-master ~]# cat F1
123     34545
asdasdas
123  7878

(2)刪除文件內容,刪除帶有"123"字眼的內容
[root@kube-master ~]# tr -d "123" < F1
         4545
asdasdas
    7878

(3)將小寫字母替換成大寫字母,標準輸出生成F3文件
[root@kube-master ~]# tr "a-z" "A-Z" < F1 > F3
[root@kube-master ~]# cat F3
123     34545
ASDASDAS
123  7878

(4)將多列空白壓縮成一列
[root@kube-master ~]# df
Filesystem              1K-blocks     Used Available Use% Mounted on
/dev/mapper/centos-root 120527360 54045264  66482096  45% /
devtmpfs                  1919508        0   1919508   0% /dev
tmpfs                     1931784        0   1931784   0% /dev/shm
tmpfs                     1931784    11968   1919816   1% /run
tmpfs                     1931784        0   1931784   0% /sys/fs/cgroup
/dev/sda1                 1038336   145300    893036  14% /boot
tmpfs                      386360        0    386360   0% /run/user/0
[root@kube-master ~]# df -h | tr -s " "
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 115G 52G 64G 45% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 142M 873M 14% /boot
tmpfs 378M 0 378M 0% /run/user/0

1.八、cut

對列切割
經常使用選項
-d :以什麼做爲分隔符
-c :取出第幾列
--output-delimeter="#" :輸出內容的時候以什麼做爲分隔符centos

(1)以/etc/passwd爲列子前5行爲列子
[root@kube-master ~]# cat /etc/passwd | head -5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

(2)取出第1列,用戶名
[root@kube-master ~]# cut -d : -f 1 /etc/passwd | head -5
root
bin
daemon
adm
lp

(3)取出第1和第3列
[root@kube-master ~]# cut -d : -f 1,3 /etc/passwd | head -5
root:0
bin:1
daemon:2
adm:3
lp:4

(4)取出第1列至第3列
[root@kube-master ~]# cut -d : -f 1-3 /etc/passwd | head -5
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4

(5)取出第1列至第3列,以|號爲分割符輸出
[root@kube-master ~]# cut --output-delimiter="|" -d : -f 1-3 /etc/passwd | head -5
root|x|0
bin|x|1
daemon|x|2
adm|x|3
lp|x|4

1.九、paste

將兩文件橫向合併,默認將第1個文件的第一行和第2個文件的第一行合併在一塊兒以此類推
經常使用選項
-d :合併中間輸出的分隔符,默認爲空格
-s :將每一個文件的全部行合併成1行,第1個文件全部內容合併成第一行,第2個文件的全部內容合併成第二行api

(1)你們若是用過ansible都知道,若是使用ansible批量發送SSH公鑰須要在/etc/ansible/hosts中
定義每一個主機的SSH用戶和密碼,通常在管理主機的時候咱們都會將密碼類的信息記錄在xls中,
這時候就排上用場了(假若有100臺主機,密碼都不同)將xls記錄的IP列複製到F1文件,不排除有
windwos的"^M"回車,使用dos2unix清除,下面F2,F3文件也同樣,固然ansible_ssh_user,
ansible_ssh_pss不是xls記錄內容,還須要先合併F1,F2這個我就不講了,下面會了就明白了。

文件1
[root@kube-master ~]# cat F1
[host]
10.1.1.1
10.1.1.2
10.1.1.3
10.1.1.4

文件2
[root@kube-master ~]# cat F2

ansible_ssh_user=root
ansible_ssh_user=root
ansible_ssh_user=root
ansible_ssh_user=root

文件3
[root@kube-master ~]# cat F3

ansible_ssh_pass=123
ansible_ssh_pass=456
ansible_ssh_pass=789
ansible_ssh_pass=910

合成文件,循序要F1,F2,F3
[root@kube-master ~]# paste   F1 F2 F3
[host]
10.1.1.1        ansible_ssh_user=root   ansible_ssh_pass=123
10.1.1.2        ansible_ssh_user=root   ansible_ssh_pass=456
10.1.1.3        ansible_ssh_user=root   ansible_ssh_pass=789
10.1.1.4        ansible_ssh_user=root   ansible_ssh_pass=910

(2)加上-d選項的效果
[root@kube-master ~]# paste -d :  F1 F2 F3
[host]::
10.1.1.1:ansible_ssh_user=root:ansible_ssh_pass=123
10.1.1.2:ansible_ssh_user=root:ansible_ssh_pass=456
10.1.1.3:ansible_ssh_user=root:ansible_ssh_pass=789
10.1.1.4:ansible_ssh_user=root:ansible_ssh_pass=910

(3)-s :將每一個文件的全部行合併成1行,第1個文件全部內容合併成第一行,第2個文件的全部內容合併成第二行
[root@kube-master ~]# paste -s  F1 F2 F3
[host]  10.1.1.1        10.1.1.2        10.1.1.3        10.1.1.4
                ansible_ssh_user=root   ansible_ssh_user=root   ansible_ssh_user=root   ansible_ssh_user=root
                ansible_ssh_pass=123    ansible_ssh_pass=456    ansible_ssh_pass=789    ansible_ssh_pass=910

2.0、wc

-l :統計多少行
-w :統計多少個單詞
-c :統計多少個字節
-m :統計多少個字符
-L :顯示文件中最長行的長度bash

(1)以這個爲列子
[root@kube-master ~]# cat F1
[host]
10.1.1.1
10.1.1.2
10.1.1.3
10.1.1.4

(2)默認不加任何選項表示爲,5行,5個單詞,43個字節數
[root@kube-master ~]# wc F1
 5  5 43 F1

(3)-l :統計多少行
[root@kube-master ~]# cat F1  | wc -l
5

(4)-w :統計多少個單詞
[root@kube-master ~]# cat F1  | wc -w
5

(5)-c :統計多少個字節
[root@kube-master ~]# cat F1  | wc -c
43

(6)-m :統計多少個字符
[root@kube-master ~]# cat F1  | wc -m
43

-L :顯示文件中最長行的長度
[root@kube-master ~]# cat F1  | wc -L
8

2.一、sort

對內容排序或者去重複等,默認以每行第一個字符排序
經常使用選項
-t :指定分隔符
-k :指定對哪一列排序,通常跟-t配合使用
-n :按數字排序,默認按升序排序,從小到大1,2,3,4,5,6
-r :倒序
-u :排序同時去掉重複的行,相鄰和不相鄰的重複行也會刪除
-f :忽略大小寫

(1)以/etc/passwd爲列子前5行爲列子
[root@kube-master ~]# cat /etc/passwd | head -5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

(2)默認狀況不加任何選項以每行第一個字符排序,adm,bin,daemon,lp,root
[root@kube-master ~]# cat /etc/passwd | head -5 | sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

(3)指定以第3列UID排序,而且以數字排序,升序
[root@kube-master ~]# cat /etc/passwd | head -5 | sort -t : -k 3 -n
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

(4)-r 倒排
[root@kube-master ~]# cat /etc/passwd | head -5 | sort -t : -k 3 -n -r
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

(5)去掉重複的行
[root@kube-master ~]# cat F1
11
11
2
3
4
5
22
22

[root@kube-master ~]# cat F1 | sort -u
11
2
22
3
4
5

2.二、uniq

去重複行或者對重複行統計
經常使用選項
-c :對連續重複以及不連續重複的行統計
-u :只顯示不連續重複的行
-d :只顯示相鄰而且連續重複的行

(1)以這個爲例子
[root@kube-master ~]# cat F1
11
11
2
3
4
5
22
22

(2)-c :對連續重複以及不連續重複的行統計
[root@kube-master ~]# cat F1 | uniq -c
  2 11
  1 2
  1 3
  1 4
  1 5
  2 22

(3) -u :只顯示不連續重複的行
[root@kube-master ~]# cat F1 | uniq -u
2
3
4
5

(4)-d :只顯示相鄰而且連續重複的行
[root@kube-master ~]# cat F1 | uniq -d
11
22

2.三、其餘

(1)生成隨機數取前30個字節
base64
openssl rand -base64 30 | head -c 30

16進制
openssl rand -hex 30 | head -c 30

隨機生成30個數字
tr -dc '[[:digit:]]' < /dev/urandom | head -c 30

隨機生成30個小寫字母
tr -dc '[[:lower:]]' < /dev/urandom | head -c 30

隨機生成30個大寫字母
tr -dc '[[:upper:]]' < /dev/urandom | head -c 30

2、簡單實操一下

1.一、UV

UV即用戶訪問量,通常統計以不重複的單個IP之和來衡量

(1)以這個nginx日誌文件爲例子
[root@kube-master ~]# cat access.log  | head -1
192.168.126.111 - - [20/Feb/2019:15:35:16 +0800] "GET / HTTP/1.1" 200 1482 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"

(2)先取出第1例,而後對他進行排序,排序完就去重複,而後統計
[root@kube-master ~]# cat access.log  | cut -d " " -f 1 | sort -n | sort -u | wc -l
4
[root@kube-master ~]# cat access.log  | cut -d " " -f 1 | sort -n | uniq | wc -l
4

1.二、PV

PV即頁面訪問量,每一個頁面的訪問量多少

(1)以這個nginx日誌文件爲例子
[root@kube-master ~]# cat access.log  | head -1
192.168.126.111 - - [20/Feb/2019:15:35:16 +0800] "GET / HTTP/1.1" 200 1482 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"

(2)首先取出URI第7列,而後按字符排序,而後uniq -c對重複或者不重複的進行統計,而後升序排序,找出頁面訪問最大的URI
[root@kube-master ~]# cat access.log  | cut -d " " -f 7 | sort  | uniq -c | sort -r -n
 60 /favicon.ico
  3 /zabbix
  3 /lnmp.gif
  3 /
  1 /zabbix/api_jsonrpc.php

一步一步來!!!!!!!!!!!!!!!!!!!!!!其實很簡單噠!!!!!!!!!!!!!!!!!!!!!

相關文章
相關標籤/搜索