日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm

發(fā)布時間:2023/11/28 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先用一個腳本,模擬創(chuàng)建 14 個測試文件:

#!/bin/bash
for ((i=1;i<=10;i++));
do
if [ $i -lt 3 ]
thentouch /home/mysql/test/test$i.shtouch /home/mysql/test/Phtest$i.shtouch /home/mysql/test/test$i.sh.bak
elif [ $i -lt 8 ]
thentouch /home/mysql/test/test$i.log
else touch /home/mysql/test/test$i.sql
fi
done

執(zhí)行上面的腳本之后,會在 /home/mysql/test/ 目錄下創(chuàng)建 14 個文件,文件名如下所示:

[mysql@mysql test]$ ll
總用量 8
-rwxrwxr-x 1 mysql mysql 278 12 月 28 15:04 create_file.sh
-rw-rw-r-- 1 mysql mysql  42 12 月 28 14:39 line.txt
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 Phtest1.sh
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 Phtest2.sh
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test10.sql
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test1.sh
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test1.sh.bak
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test2.sh
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test2.sh.bak
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test3.log
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test4.log
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test5.log
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test6.log
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test7.log
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test8.sql
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test9.sql

1. find 和 xargs

find 命令作用也是運維過程中,使用頻率非常高的操作命令,他的作用是幫助運維人員,查找對應(yīng)的文件,下面就來介紹一下最常用的 find 用法。

1.1 find 常用參數(shù)介紹

  • -exec:find 命令對匹配的文件執(zhí)行該參數(shù)所給出的 shell 命令,這個命令非常好用
  • -name:查找要匹配的文件名稱,name 可以用正則來匹配
  • -mtime -n +n:按文件更改時間來查找文件,-n 指 n 天以內(nèi),+n 指 n 天以前
  • -ctime -n +n:按文件創(chuàng)建時間來查找文件,-n 指 n 天以內(nèi),+n 指 n 天以前
  • -atime -n +n:按文件訪問時間來查,-n 指 n 天以內(nèi),+n 指 n 天以前
  • -type b/d/c/p/l/f:查找的文件分別對應(yīng)為塊設(shè)備、目錄、字符設(shè)備、管道、符號鏈接、普通文件
  • -size n[c]:查長度為 n 字節(jié)長度的文件,如果為+n,則是查找文件大小超過 n 個字節(jié)的文件列表
  • -mindepth -maxdepth:這兩個參數(shù)配合一起使用,可以限制 find 可以查找的文件目錄層次深度區(qū)間范圍

1.2 find 案例

1. 查找 /home/mysql/test 目錄下所有 sh 結(jié)尾的文件列表

[mysql@mysql test]$ find /home/mysql/test -name '*sh'  
/home/mysql/test/test1.sh
/home/mysql/test/test2.sh
/home/mysql/test/create_file.sh
/home/mysql/test/Phtest1.sh
/home/mysql/test/Phtest2.sh
/home/mysql/test/dir_01/test1.sh
/home/mysql/test/dir_01/test2.sh
/home/mysql/test/dir_01/dir_02/test7.sh
/home/mysql/test/dir_sh

2. 查找 /home/mysql/test 目錄下所有 sh 結(jié)尾的文件列表,并指定文件類型為文件

[mysql@mysql test]$ find /home/mysql/test -name '*sh' -type f
/home/mysql/test/test1.sh
/home/mysql/test/test2.sh
/home/mysql/test/create_file.sh
/home/mysql/test/Phtest1.sh
/home/mysql/test/Phtest2.sh
/home/mysql/test/dir_01/test1.sh
/home/mysql/test/dir_01/test2.sh
/home/mysql/test/dir_01/dir_02/test7.sh

3. 查找 /home/mysql/test 目錄下所有 sh 結(jié)尾的文件列表,并指定文件類型為文件,不查找 /home/mysql/test 目錄下的子目錄

[mysql@mysql test]$ find /home/mysql/test -mindepth 1 -maxdepth 1 -name '*sh' -type f 
/home/mysql/test/test1.sh
/home/mysql/test/test2.sh
/home/mysql/test/create_file.sh
/home/mysql/test/Phtest1.sh
/home/mysql/test/Phtest2.sh

4. 查找 /home/mysql/test 目錄下所有 sh 結(jié)尾的文件列表,并指定文件類型為文件,文件大小超過 100 字節(jié)

[mysql@mysql test]$ find /home/mysql/test -name '*sh' -type f -size +100c
/home/mysql/test/create_file.sh

在這里需要注意一下,如果寫成 -size 100c,只查找大小為 100 個字節(jié)的文件:

[mysql@mysql test]$ ls -l|grep -i create_file.sh
-rwxrwxr-x 1 mysql mysql 278 12 月 28 15:04 create_file.sh
[mysql@mysql test]$ 
[mysql@mysql test]$ find /home/mysql/test -name '*sh' -type f -size 278c
/home/mysql/test/create_file.sh
[mysql@mysql test]$ find /home/mysql/test -name '*sh' -type f -size 277c

5. 查找 /home/mysql/test 目錄下所有 sh 結(jié)尾的文件列表,并指定文件類型為文件,不查找 /home/mysql/test 目錄下的子目錄,并將查找到的文件添加 .bak 后綴
在這里有 2 中實現(xiàn)方法,第一種使用 -exec,第二種使用 xargs:

[mysql@mysql test]$ find /home/mysql/test -mindepth 1 -maxdepth 1 -name '*sh' -type f -exec mv {} {}.bak \;
[mysql@mysql test]$ 
[mysql@mysql test]$ ls -l|grep -i bak
-rwxrwxr-x 1 mysql mysql 278 12 月 28 15:04 create_file.sh.bak
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 Phtest1.sh.bak
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 Phtest2.sh.bak
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test1.sh.bak
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test2.sh.bak

xargs 方式實現(xiàn):

[mysql@mysql test]$ find /home/mysql/test -mindepth 1 -maxdepth 1 -name '*sh' -type f
/home/mysql/test/create_file.sh
/home/mysql/test/Phtest1.sh
/home/mysql/test/Phtest2.sh
/home/mysql/test/test1.sh
/home/mysql/test/test2.sh
[mysql@mysql test]$ 
[mysql@mysql test]$ find /home/mysql/test -mindepth 1 -maxdepth 1 -name '*sh' -type f|xargs -I file sh -c "mv file file.bak"
[mysql@mysql test]$ ls -l|grep -i bak
-rwxrwxr-x 1 mysql mysql 278 12 月 28 15:04 create_file.sh.bak
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 Phtest1.sh.bak
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 Phtest2.sh.bak
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test1.sh.bak
-rw-rw-r-- 1 mysql mysql   0 12 月 28 15:04 test2.sh.bak

**6. **查找查找 /home/mysql/test 目錄下所有 .bak 結(jié)尾的文件列表,并指定文件類型為文件,不查找 /home/mysql/test 目錄下的子目錄,并將查找到的文件直接刪除,這個操作,經(jīng)常用于清理應(yīng)用日志,也可以加上 -mtime,查找 N 天之前的文件進(jìn)行刪除。

[mysql@mysql test]$ find /home/mysql/test -mindepth 1 -maxdepth 1 -name '*.bak' -type f  
/home/mysql/test/create_file.sh.bak
/home/mysql/test/Phtest1.sh.bak
/home/mysql/test/Phtest2.sh.bak
/home/mysql/test/test1.sh.bak
/home/mysql/test/test2.sh.bak
[mysql@mysql test]$ 
[mysql@mysql test]$ find /home/mysql/test -mindepth 1 -maxdepth 1 -name '*.bak' -type f |xargs rm -rf 
[mysql@mysql test]$ ls -l|grep -i bak
[mysql@mysql test]$

2. awk

awk 的功能可以說是非常強大的,要是詳細(xì)介紹 awk,可以寫一本書,在這里,我就介紹一下常用的一些用法吧。
1. 指定打印 ls -l 輸出列

[mysql@mysql test]$ ls -l|grep -i test|awk '{print $9}'
test10.sql
test3.log
test4.log
test5.log
test6.log
test7.log
test8.sql
test9.sql

2. 字符串拼接

[mysql@mysql test]$ ls -l|grep -i test|awk '{print "rm -rf "$9}'
rm -rf test10.sql
rm -rf test3.log
rm -rf test4.log
rm -rf test5.log
rm -rf test6.log
rm -rf test7.log
rm -rf test8.sql
rm -rf test9.sql

3. 打印單引號、雙引號,這個功能在維護(hù)數(shù)據(jù)庫時,有時候非常有用,例如拼接 SQL

[mysql@mysql test]$ ls -l|grep -i test|awk '{print "'\''"$9"'\''"}'
'test10.sql'
'test3.log'
'test4.log'
'test5.log'
'test6.log'
'test7.log'
'test8.sql'
'test9.sql'
[mysql@mysql test]$ ls -l|grep -i test|awk '{print "\""$9"\""}'    
"test10.sql"
"test3.log"
"test4.log"
"test5.log"
"test6.log"
"test7.log"
"test8.sql"
"test9.sql"

3. sed

sed 在處理文件替換的時候是一把好手,非常好用的一個文件編輯利器。
在介紹 sed 案例之前,先準(zhǔn)備一個文件,文件內(nèi)容如下所示:

[mysql@mysql test]$ cat line.txt 
line1
line2
LINE3
line4
LIne5
line6
line7

1. 刪除 line.txt 文件中的空行

[mysql@mysql test]$ sed '/^ *$/d' line.txt    
line1
line2
LINE3
line4
LIne5
line6
line7
[mysql@mysql test]$ 
[mysql@mysql test]$ cat line.txt 
line1
line2
LINE3
line4
LIne5
line6
line7

從上面的結(jié)果可以看到,源文件 line.txt 的內(nèi)容并沒有發(fā)生改變,如果讓修改生效,可以加 -i 參數(shù),直接修改源文件內(nèi)容,如果不加,則不會修改源文件。

[mysql@mysql test]$ sed -i '/^ *$/d' line.txt 
[mysql@mysql test]$ cat line.txt 
line1
line2
LINE3
line4
LIne5
line6
line7

2. 將 line.txt 文件里,所有 line 字符串替換為 test

[mysql@mysql test]$ sed -i 's/line/test/g' line.txt        
[mysql@mysql test]$ cat line.txt 
test1
test2
LINE3
test4
LIne5
test6
test7

3. 刪除含有 LINE 字符串的行記錄

[mysql@mysql test]$ sed '/LINE/d' line.txt    
test1
test2
test4
LIne5
test6
test7

4. 查找 LINE 字符串上一行

[mysql@mysql test]$ cat line.txt 
test1
test2
LINE3
test4
LIne5
test6
test7
[mysql@mysql test]$ sed -n '/LINE3/{g;1!p;};h' line.txt
test2

5.查找 LINE 字符串下一行

[mysql@mysql test]$ cat line.txt 
test1
test2
LINE3
test4
LIne5
test6
test7
[mysql@mysql test]$ sed -n '/LINE3/{n;p}' line.txt 
test4

4. vi

vi 是 linux 系統(tǒng)非常強大的編輯命令,熟練掌握 vi 命令,對于運維人員來說,是一項必備的技能。
測試 line.txt 文件內(nèi)容

[mysql@mysql test]$ cat line.txt 
test1
test2
LINE3
test4
LIne5
test6
test7

1.顯示行號和關(guān)閉行號set nu 顯示行號 set nonu 關(guān)閉行號

1 test12 test23 LINE34 test45 LIne56 test67 test7:set nu

2.光標(biāo)跳轉(zhuǎn)到最后一行進(jìn)入編輯模式,敲擊 shift+g
3.光標(biāo)跳轉(zhuǎn)到第一行進(jìn)入編輯模式,敲擊 gg,光標(biāo)即可跳轉(zhuǎn)到首行
4.光標(biāo)跳轉(zhuǎn)到行首進(jìn)入編輯模式,敲擊 shift + ^
5.光標(biāo)跳轉(zhuǎn)到行尾進(jìn)入編輯模式,敲擊 shift + $
6.刪除操作進(jìn)入編輯模式,敲擊 dd 則刪除光標(biāo)所在行,敲擊 x,則刪除光標(biāo)所在字符
7.替換進(jìn)入編輯模式,先敲擊 shift + :,然后輸入%s/test/jim/g,進(jìn)行全局替換,如果輸入 s/test/jim/,則只替換光標(biāo)所在行
8.保存進(jìn)入編輯模式,先敲擊 shift +:,然后輸入 wq!,保存退出,如果不想保存,則可以輸入 q!,直接退出。

5. ps

ps 命令是展示操作系統(tǒng)進(jìn)程信息的一個命令。
4.查找最損耗內(nèi)存的前 10 的進(jìn)程

[root@192 ~]# ps aux|sort -nr -k4|head -10
root      50929  0.3  9.1 679612 91068 ?        Ssl  9 月 03   8:25 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
mysql     40333  0.4  7.9 1694620 79320 ?       Sl   9 月 02  16:52 /u02/mysql/bin/mysqld --defaults-file=/u02/conf/my3308.cnf --basedir=/u02/mysql --datadir=/u02/data/3308 --plugin-dir=/u02/mysql/lib/plugin --log-error=/u02/log/3308/error.log --open-files-limit=65535 --pid-file=/u02/run/3308/mysqld.pid --socket=/u02/run/3308/mysql.sock --port=3308
polkitd   95030  1.8  7.1 1587420 71132 ?       Ssl+ 9 月 04  27:57 mongod --bind_ip_all
root        957  0.0  1.1 499804 11904 ?        Ssl  8 月 31   4:45 /usr/bin/containerd
mysql     40532  0.0  0.6 163420  6416 pts/4    S+   06:26   0:00 /u02/mysql/bin/mysql -uroot -px xx --socket=/u02/run/3308/mysql.sock
root      43302  0.0  0.5 159396  5964 ?        Ss   07:20   0:00 sshd: jim [priv]
root      36507  0.0  0.5 159396  5964 ?        Ss   05:16   0:00 sshd: jim [priv]
root      33300  0.0  0.5 102896  5520 ?        S    04:21   0:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf /var/lib/NetworkManager/dhclient-97308c9f-82a6-4ab2-84a9-37bf5691a1e8-ens33.lease -cf /var/lib/NetworkManager/dhclient-ens33.conf ens33
root        706  0.0  0.4 628280  4528 ?        Ssl  8 月 31   0:39 /usr/sbin/NetworkManager --no-daemon
root      43419  0.0  0.4 241196  4628 pts/6    S    07:20   0:00 sudo su - root

5.查找最損耗 CPU 資源的前 10 名進(jìn)程

[root@192 ~]# ps aux|sort -nr -k3|head -10
polkitd   95030  1.8  7.1 1587420 71132 ?       Ssl+ 9 月 04  27:57 mongod --bind_ip_all
mysql     40333  0.4  7.9 1694620 79320 ?       Sl   9 月 02  16:52 /u02/mysql/bin/mysqld --defaults-file=/u02/conf/my3308.cnf --basedir=/u02/mysql --datadir=/u02/data/3308 --plugin-dir=/u02/mysql/lib/plugin --log-error=/u02/log/3308/error.log --open-files-limit=65535 --pid-file=/u02/run/3308/mysqld.pid --socket=/u02/run/3308/mysql.sock --port=3308
root      50929  0.3  9.1 679612 91068 ?        Ssl  9 月 03   8:25 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root      45144  0.1  0.0      0     0 ?        S    07:52   0:00 [kworker/0:1]
root      44873  0.1  0.0      0     0 ?        S    07:47   0:01 [kworker/0:3]
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        957  0.0  1.1 499804 11904 ?        Ssl  8 月 31   4:45 /usr/bin/containerd
root        956  0.0  0.0  53284   556 ?        Ss   8 月 31   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root        954  0.0  0.2 251796  2780 ?        Ssl  8 月 31   1:31 /usr/sbin/rsyslogd -n
root        953  0.0  0.0 112920   344 ?        Ss   8 月 31   0:01 /usr/sbin/sshd -D

6. lsof

lsof 是 Linux 操作系統(tǒng)中,展示當(dāng)前系統(tǒng)打開文件的工具,這個工具在運維過程中非常的有用
1.查看占用文件的進(jìn)程

[root@192 ~]# lsof /u02/run/3308/mysql.sock
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF   NODE NAME
mysqld  40333 mysql   19u  unix 0xffff9cb72ba24400      0t0 443745 /u02/run/3308/mysql.sock
mysqld  40333 mysql   23u  unix 0xffff9cb706041400      0t0 223567 /u02/run/3308/mysql.sock
mysqld  40333 mysql   26u  unix 0xffff9cb72ba24000      0t0 443760 /u02/run/3308/mysql.sock
mysqld  40333 mysql   86u  unix 0xffff9cb701f7e000      0t0 445068 /u02/run/3308/mysql.sock
mysqld  40333 mysql   87u  unix 0xffff9cb73724e000      0t0 445235 /u02/run/3308/mysql.sock

2.查看占用端口的進(jìn)程

[root@192 ~]# lsof -i :3308
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  40333 mysql   22u  IPv4 223566      0t0  TCP *:tns-server (LISTEN)

3.查看目錄被占用的進(jìn)程,這個在 umount 文件系統(tǒng)時,非常有用

[root@192 ~]# lsof +d /u02
COMMAND     PID  USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
bash      36536  root  cwd    DIR  253,0      169  1002658 /u02
mysqld_sa 39322 mysql  cwd    DIR  253,0       46 67426672 /u02/conf

4.查看目錄文件被占用的進(jìn)程

[root@192 ~]# lsof +D /u02
COMMAND     PID  USER   FD   TYPE             DEVICE   SIZE/OFF      NODE NAME
bash      36536  root  cwd    DIR              253,0        169   1002658 /u02
mysql     38711 mysql  txt    REG              253,0    8142016  36148646 /u02/mysql/bin/mysql
mysql     38720 mysql  txt    REG              253,0    8142016  36148646 /u02/mysql/bin/mysql
mysqld_sa 39322 mysql  cwd    DIR              253,0         46  67426672 /u02/conf
mysqld_sa 39322 mysql  255r   REG              253,0      28466  36258029 /u02/mysql/bin/mysqld_safe
mysqld    40333 mysql  cwd    DIR              253,0        267   1002659 /u02/data/3308
mysqld    40333 mysql  txt    REG              253,0  247739544  36258021 /u02/mysql/bin/mysqld
mysqld    40333 mysql    1w   REG              253,0     278458 105389068 /u02/log/3308/error.log
mysqld    40333 mysql    2w   REG              253,0     278458 105389068 /u02/log/3308/error.log
mysqld    40333 mysql    3u   REG              253,0         35 116292537 /u02/log/3308/binlog/binlog.index
mysqld    40333 mysql    4uW  REG              253,0  536870912   3341676 /u02/log/3308/iblog/ib_logfile0
mysqld    40333 mysql    9uW  REG              253,0  536870912   3341677 /u02/log/3308/iblog/ib_logfile1
mysqld    40333 mysql   10uW  REG              253,0  536870912   3341678 /u02/log/3308/iblog/ib_logfile2
mysqld    40333 mysql   11uW  REG              253,0  536870912   3341679 /u02/log/3308/iblog/ib_logfile3
mysqld    40333 mysql   12uW  REG              253,0   33554432   3341674 /u02/log/3308/iblog/ibdata1
mysqld    40333 mysql   13uW  REG              253,0   83886080   3341675 /u02/log/3308/iblog/ibdata2
mysqld    40333 mysql   15uW  REG              253,0   12582912   1002664 /u02/log/3308/iblog/ibtmp1

7. fuser

fuser 命令用于報告進(jìn)程使用的文件和網(wǎng)絡(luò)套接字,使用這個命令,可以非常方便的展示本地進(jìn)程的進(jìn)程號,什么本地進(jìn)程使用文件。
1.列舉所有訪問/u02/run/3308/mysql.sock 文件進(jìn)程號以及用戶名

[root@192 ~]# fuser -u /u02/run/3308/mysql.sock
/u02/run/3308/mysql.sock: 40333(mysql)

2.列舉所有訪問文件系統(tǒng)進(jìn)程號以及用戶名

[root@192 ~]# fuser -u -m /home
/home:               36511c(jim) 36534c(root) 37220c(mysql) 37252c(jim) 37279c(root) 37301c(mysql) 38710c(mysql) 38711c(mysql) 38719c(mysql) 38720c(mysql) 40289c(jim) 40314c(root) 40366c(mysql) 40392c(mysql) 40393c(mysql) 40463c(jim) 40486c(root) 40508c(mysql) 40531c(mysql) 40532c(mysql) 43306c(jim) 43329c(root) 43394c(jim) 43419c(root)

3.殺死所有訪問 tps_mysql.sh 文件進(jìn)程,并顯示被殺死的進(jìn)程號

[mysql@192 ~]$ fuser -ku /home/mysql/tps_mysql.sh 
/home/mysql/tps_mysql.sh: 46741(mysql)

8. rpm

rpm 命令 Linux 操作系統(tǒng) rpm 包管理工具
1.安裝 rpm 包

[mysql@192 ~]$ rpm -ivh percona-xtrabackup-24-2.4.2-1.el7.x86_64

2.卸載安裝包

[mysql@192 ~]$ rpm -e percona-xtrabackup-24-2.4.2-1.el7.x86_64

3.查詢 rpm 安裝情況

[mysql@192 ~]$ rpm -qa|grep -i percona
percona-xtrabackup-24-2.4.2-1.el7.x86_64
percona-toolkit-3.1.0-2.el7.x86_64

4.查看 rpm 包文件安裝目錄

[mysql@192 ~]$ rpm -ql percona-toolkit-3.1.0-2.el7.x86_64
/usr/bin/pt-align
/usr/bin/pt-archiver
/usr/bin/pt-config-diff
/usr/bin/pt-deadlock-logger
/usr/bin/pt-diskstats
/usr/bin/pt-duplicate-key-checker
/usr/bin/pt-fifo-split
/usr/bin/pt-find
/usr/bin/pt-fingerprint
/usr/bin/pt-fk-error-logger
/usr/bin/pt-heartbeat
/usr/bin/pt-index-usage

9. 正則表達(dá)式

正則表達(dá)式就是為處理大量的字符串而定義的一套規(guī)則和方法,從大量的字符串上快速搜索出想要的東西。正則表達(dá)式一般以行為單位處理的。
注意事項:

  • Linux 正則表達(dá)式一般以行為單位處理的
  • alias grep='grep --color=auto' 讓匹配的內(nèi)容顯示顏色
  • 注意字符集,export LC_ALL=C

正則表達(dá)式參數(shù)

參數(shù)解釋
-E, --extended-regexpPATTERN 是一個可擴(kuò)展的正則表達(dá)式(縮寫為 ERE)
-F, --fixed-stringsPATTERN 是一組由斷行符分隔的定長字符串
-e, --regexp=PATTERN用 PATTERN 來進(jìn)行匹配操作 pattern
-f, --file=FILE從 FILE 中取得 PATTERN
-i, --ignore-case忽略大小寫
-w, --word-regexp強制 PATTERN 僅完全匹配字詞
-x, --line-regexp強制 PATTERN 僅完全匹配一行
-z, --null-data一個 0 字節(jié)的數(shù)據(jù)行,但不是空行

Miscellaneous(其它的選項):

參數(shù)解釋
-s 或–no-messages`不顯示錯誤信息
-v 或–invert-match`取反

Output control(輸出控制):

參數(shù)解釋
-m, --max-count=NUM達(dá)到 NUM 次匹配時停止
-n, --line-number顯示行號
-H, --with-filename顯示匹配結(jié)果的文件名
-h, --no-filename不顯示匹配結(jié)果的文件名
-o, --only-matching顯示匹配的 PATTERN
-q, --quiet, --silent安靜模式,沒有任何一般輸出
-a, --text等價于 --binary-files=text
-d, --directories=ACTION如何操作目錄,ACTION is ‘read’, ‘recurse’, or ‘skip’
-D, --devices=ACTION如何操作設(shè)備
-R, -r, --recursive目錄遞歸,等同于 --directories=recurse
--include=FILE_PATTERN只匹配表達(dá)式表示的文件
--exclude=FILE_PATTERN排除表達(dá)式表示的文件
--exclude-from=FILE從文件讀取要排除的文件或目錄
--exclude-dir=PATTERN從表達(dá)式獲取要排除的目錄
-L, --files-without-match打印出內(nèi)容不匹配的文件名
-l, --files-with-matches打印出內(nèi)容匹配的文件名
-c, --count打印出每個文件匹配到內(nèi)容的次數(shù)
-Z, --null文件名后面不打印文件

文件控制:

參數(shù)解釋
-B, --before-context=NUM打印出匹配內(nèi)容行前 NUM 行
A, --after-context=NUM打印出匹配內(nèi)容行后 NUM 行
-C, --context=NUM打印出多少行
–color[=WHEN]顏色高亮顯示
–colour[=WHEN]use markers to highlight the matching strings;WHEN is ‘a(chǎn)lways’, ‘never’, or ‘a(chǎn)uto’

egrep 即 grep -E。fgrep 即 grep -F
提示:正則表達(dá)式一般使用單引號引起來,如果里面引用了變量,就用雙引號引起來。

10. grep 使用

  1. 找出以 r 開頭的行
root@shell1:~# grep '^r' /etc/passwd
root:x:0:0:root:/root:/bin/bash
  1. 找以 login 結(jié)尾的行
root@shell1:~# grep 'login$' /etc/passwd
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
  1. 匹配所有大寫字母中的一個
root@shell1:~# grep '[[:upper:]]' /etc/passwd
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
  1. 匹配以 rb 開頭的行
root@shell1:~# grep '^[rb]' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
  1. 匹配出現(xiàn)兩次 o 的行
root@shell1:~# grep 'o\{2\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash 
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
  1. 匹配 1 到 2 次有 o 的行
root@shell1:~# grep 'o\{1,2\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
  1. 出現(xiàn)兩次 o 以上的行
root@shell1:~# grep 'o\{2,\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
  1. 匹配 0~9 數(shù)字出現(xiàn) 3 次以上的
root@shell1:~# grep '[0-9]\{3,\}' /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
  1. 找出 root 和 sys 的行
root@shell1:~# grep -E 'root|sys' /etc/passwd
root:x:0:0:root:/root:/bin/bash
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
  1. 找出 root 和 sys 開頭的行
root@shell1:~# grep -E '^(root|sys)' /etc/passwd
root:x:0:0:root:/root:/bin/bash
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
  1. 找出兩邊有:中間夾著 7 或 9 的行
root@shell1:~# cat /etc/passwd | grep -E ':(7|9):'
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
  1. 查看指定的文件 /etc/logrotate.conf 內(nèi)容,不顯示注釋行和空白行
cat /etc/logrotate.conf | grep -Ev '^#|^$'
  1. 加入 -c 參數(shù)打印出每個文件匹配到內(nèi)容的次數(shù)
root@shell1:~# grep -c 'root' /etc/passwd  #因為只匹配到一行,所以只輸出 1
1
  1. 加入 -w 參數(shù)只完全匹配字詞,如果不是一樣的詞就不輸出
root@shell1:~# grep -w 'bin' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin

總結(jié)

以上是生活随笔為你收集整理的Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。