Utilisez d'abord un script pour simuler la création de 14 fichiers de test:
#!/bin/bash
for ((i=1;i<=10;i++));
do
if [ $i -lt 3 ]
then
touch /home/mysql/test/test$i.sh
touch /home/mysql/test/Phtest$i.sh
touch /home/mysql/test/test$i.sh.bak
elif [ $i -lt 8 ]
then
touch /home/mysql/test/test$i.log
else
touch /home/mysql/test/test$i.sql
fi
done
Après avoir exécuté le script ci-dessus, 14 fichiers seront créés dans le répertoire / home / mysql / test /, les noms de fichiers sont les suivants:
[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. trouver 和 xargs
La fonction de la commande find est également une commande d'opération très fréquemment utilisée dans le processus d'exploitation et de maintenance. Sa fonction est d'aider le personnel d'exploitation et de maintenance à trouver le fichier correspondant. Voici une introduction à l'utilisation la plus courante de find.
1.1 Introduction aux paramètres de recherche communs
-exec
: La commande find exécute la commande shell donnée par ce paramètre sur le fichier correspondant. Cette commande est très simple d'utilisation-name
: Trouvez le nom de fichier à faire correspondre, le nom peut être associé à des-mtime -n +n
: Rechercher les fichiers par heure de changement de fichier, -n signifie dans les n jours, + n signifie il y a n jours-ctime -n +n
: Rechercher les fichiers en fonction de l'heure de création du fichier, -n signifie moins de n jours, + n signifie il y a n jours-atime -n +n
: Vérifier par heure d'accès au fichier, -n signifie moins de n jours, + n signifie il y a n jours-type b/d/c/p/l/f
: Les fichiers recherchés correspondent aux périphériques de bloc, aux répertoires, aux périphériques de caractères, aux tubes, aux liens symboliques et aux fichiers ordinaires.-size n[c]
: Recherche des fichiers d'une longueur de n octets, si c'est + n, c'est une liste de fichiers dont la taille dépasse n octets-mindepth -maxdepth
: Ces deux paramètres sont utilisés ensemble pour limiter la plage de profondeur du niveau de répertoire de fichiers que find peut trouver
1.2 trouver un cas
1. Trouvez une liste de tous les fichiers se terminant par sh dans le répertoire / home / mysql / test
[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. Trouvez une liste de tous les fichiers se terminant par sh dans le répertoire / home / mysql / test, et spécifiez le type de fichier comme fichier
[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. Trouvez une liste de tous les fichiers se terminant par sh dans le répertoire / home / mysql / test, et spécifiez le type de fichier sous forme de fichier, et ne cherchez pas de sous-répertoires dans le répertoire / 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. Recherchez une liste de tous les fichiers se terminant par sh dans le répertoire / home / mysql / test, et spécifiez le type de fichier comme fichier, et la taille du fichier dépasse 100 octets
[mysql@mysql test]$ find /home/mysql/test -name '*sh' -type f -size +100c
/home/mysql/test/create_file.sh
Il faut noter ici que s'il est écrit -size 100c
, seuls les fichiers d'une taille de 100 octets seront recherchés:
[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. Trouvez une liste de tous les fichiers se terminant par le répertoire sh / home / mysql / test, et spécifiez le type de fichier sous forme de fichier, ne cherchez pas le sous-répertoire / home / mysql dans le répertoire test / et ajoutez le suffixe .bak. trouvé
dans Il existe 2 méthodes d'implémentation, la première utilise -exec
, la seconde utilise 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 moyen de réaliser:
[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. ** Rechercher Trouvez une liste de tous les fichiers se terminant par .bak dans le répertoire / home / mysql / test, et spécifiez le type de fichier sous forme de fichier, ne cherchez pas de sous-répertoires dans le répertoire / home / mysql / test , et trouvera que les fichiers sont supprimés directement. Cette opération est souvent utilisée pour nettoyer le journal de l'application. Elle peut également être ajoutée -mtime
pour rechercher des fichiers datant de plus de N jours et les supprimer.
[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
On peut dire que la fonction de awk est très puissante. Si vous voulez présenter awk en détail, vous pouvez écrire un livre. Ici, je vais vous présenter quelques usages courants.
1. Spécifiez la colonne de sortie pour imprimer 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. Épissage de cordes
[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. Imprimez des guillemets simples et des guillemets doubles. Cette fonction est parfois très utile lors de la maintenance de la base de données, comme l'épissage 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. encore
Sed est une bonne solution pour le remplacement de fichiers, un outil d'édition de fichiers très facile à utiliser.
Avant de présenter le cas sed, préparez un fichier. Le contenu du fichier est le suivant:
[mysql@mysql test]$ cat line.txt
line1
line2
LINE3
line4
LIne5
line6
line7
1. Supprimez les lignes vides dans le fichier 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
Peut être vu à partir des résultats ci-dessus, le contenu du fichier source line.txt n'a pas changé, si le changement prend effet, vous pouvez ajouter des -i
paramètres pour modifier directement le contenu du fichier source, sinon, il ne modifiera pas le fichier source .
[mysql@mysql test]$ sed -i '/^ *$/d' line.txt
[mysql@mysql test]$ cat line.txt
line1
line2
LINE3
line4
LIne5
line6
line7
2. Remplacez toutes les chaînes de ligne du fichier line.txt par 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. Supprimez l'enregistrement de ligne contenant la chaîne LINE
[mysql@mysql test]$ sed '/LINE/d' line.txt
test1
test2
test4
LIne5
test6
test7
4. Recherchez la ligne précédente de la chaîne 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. Recherchez la ligne suivante de la chaîne 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 est une commande d'édition très puissante pour le système Linux.Pour maîtriser les commandes vi est une compétence essentielle pour le personnel d'exploitation et de maintenance.
Testez le contenu du fichier line.txt
[mysql@mysql test]$ cat line.txt
test1
test2
LINE3
test4
LIne5
test6
test7
1. Afficher le numéro de ligne et fermer le numéro de ligne définir nu afficher le numéro de ligne définir nonu fermer le numéro de ligne
1 test1
2 test2
3 LINE3
4 test4
5 LIne5
6 test6
7 test7
:set nu
2. Le curseur saute à la dernière ligne pour entrer dans le mode d'édition, appuyez sur Maj + g
3. Le curseur saute à la première ligne pour entrer dans le mode d'édition, appuyez sur gg, le curseur peut sauter à la première ligne
4. Le curseur saute au début de la ligne Entrez dans le mode d'édition, appuyez sur shift + ^
5. Le curseur saute à la fin de la ligne pour entrer dans le mode d'édition, appuyez sur shift + $
6. L'opération de suppression entre en mode d'édition, appuyez sur dd pour supprimer le ligne où se trouve le curseur, et appuyez sur x pour supprimer le curseur Où se trouve le caractère
7. Remplacez et entrez dans le mode d'édition, appuyez d'abord sur Maj +:, puis entrez% s / test / jim / g pour effectuer un remplacement global. Si vous entrez s / test / jim /, seule la ligne où se trouve le curseur sera remplacée
8. Enregistrer et entrer En mode édition, appuyez d'abord sur Maj +:, puis entrez wq! Pour enregistrer et quitter. Si vous ne le faites pas voulez enregistrer, vous pouvez entrer q! pour quitter directement.
5. ps
La commande ps est une commande permettant d'afficher les informations de processus du système d'exploitation.
4. Trouvez les 10 principaux processus qui consomment le plus de mémoire
[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. Trouvez les 10 principaux processus qui consomment le plus de ressources CPU
[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 est un outil pour afficher les fichiers ouverts dans le système actuel dans le système d'exploitation Linux. Cet outil est très utile dans le processus d'exploitation et de maintenance.
1. Afficher le processus d'occupation des fichiers
[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. Afficher le processus occupant le port
[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. Visualisez le processus du répertoire occupé, ceci est très utile lors du démontage du système de fichiers
[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. Afficher le processus dans lequel le fichier de répertoire est occupé
[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. unité de fusion
La commande fuser est utilisée pour signaler les fichiers et les sockets réseau utilisés par le processus. Grâce à cette commande, vous pouvez facilement afficher le numéro de processus du processus local et quel processus local utilise le fichier.
1. Répertoriez tous les numéros de processus et noms d'utilisateur qui accèdent au fichier /u02/run/3308/mysql.sock
[root@192 ~]# fuser -u /u02/run/3308/mysql.sock
/u02/run/3308/mysql.sock: 40333(mysql)
2. Répertoriez tous les numéros de processus et noms d'utilisateur du système de fichiers d'accès
[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. Tuez tous les processus qui accèdent au fichier tps_mysql.sh et affichez le numéro du processus qui a été tué
[mysql@192 ~]$ fuser -ku /home/mysql/tps_mysql.sh
/home/mysql/tps_mysql.sh: 46741(mysql)
8. tr / min
commande rpm Système d'exploitation Linux Outil de gestion des packages rpm
1. Installez le package rpm
[mysql@192 ~]$ rpm -ivh percona-xtrabackup-24-2.4.2-1.el7.x86_64
2. Désinstallez le package d'installation
[mysql@192 ~]$ rpm -e percona-xtrabackup-24-2.4.2-1.el7.x86_64
3. Interrogez la situation d'installation de 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. Affichez le répertoire d'installation du fichier de package 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. Expressions régulières
Les expressions régulières sont un ensemble de règles et de méthodes définies pour traiter un grand nombre de chaînes et rechercher rapidement ce que vous voulez parmi un grand nombre de chaînes. Les expressions régulières sont généralement traitées en unités de lignes.
Précautions:
- Les expressions régulières Linux sont généralement traitées en unités de comportement
alias grep='grep --color=auto'
Rendre la couleur d'affichage du contenu correspondant- Faites attention au jeu de caractères,
export LC_ALL=C
Paramètres d'expression régulière
paramètre | Explication |
---|---|
-E, --extended-regexp |
PATTERN est une expression régulière extensible (abrégée en ERE) |
-F, --fixed-strings |
PATTERN est un ensemble de chaînes de longueur fixe séparées par des sauts de ligne |
-e, --regexp=PATTERN |
Utilisez PATTERN pour faire correspondre le modèle d'opération |
-f, --file=FILE |
Obtenir le PATTERN à partir du FICHIER |
-i, --ignore-case |
Ignorer la casse |
-w, --word-regexp |
Forcer PATTERN à ne faire correspondre exactement que les mots |
-x, --line-regexp |
Forcer PATTERN à correspondre exactement à une ligne |
-z, --null-data |
Une ligne de données de 0 octet, mais pas une ligne vide |
Divers (autres options):
paramètre | Explication |
---|---|
-s 或 –Aucun-message` |
Ne pas afficher les messages d'erreur |
-v 或 –Inverser-match` |
Nier |
Contrôle de sortie:
paramètre | Explication |
---|---|
-m, --max-count=NUM |
Arrêtez-vous à NUM matchs |
-n, --line-number |
Afficher le numéro de ligne |
-H, --with-filename |
Afficher le nom de fichier du résultat correspondant |
-h, --no-filename |
Ne pas afficher le nom de fichier du résultat correspondant |
-o, --only-matching |
Afficher le motif correspondant |
-q, --quiet, --silent |
Mode silencieux, sans sortie générale |
-a, --text |
Équivalent à --binary-files=text |
-d, --directories=ACTION |
Comment faire fonctionner le répertoire, ACTION est «lu», «récurer» ou «sauter» |
-D, --devices=ACTION |
Comment faire fonctionner l'équipement |
-R, -r, --recursive |
Récursivité d'annuaire, équivalente à --directories=recurse |
--include=FILE_PATTERN |
Ne correspond qu'au fichier indiqué par l'expression |
--exclude=FILE_PATTERN |
Exclure les fichiers représentés par des expressions |
--exclude-from=FILE |
Lire le fichier ou le répertoire à exclure du fichier |
--exclude-dir=PATTERN |
Récupère le répertoire à exclure de l'expression |
-L, --files-without-match |
Imprimez le nom de fichier qui ne correspond pas |
-l, --files-with-matches |
Imprimez le nom du fichier qui correspond au contenu |
-c, --count |
Imprimez le nombre de fois que chaque fichier correspond au contenu |
-Z, --null |
N'imprimez pas le fichier après le nom du fichier |
contrôle des documents:
paramètre | Explication |
---|---|
-B, --before-context = NUM | Imprimez les NUM premières lignes de contenu correspondant |
A, --after-context = NUM | Imprimer NUM lignes après avoir fait correspondre les lignes de contenu |
-C, --context = NUM | Combien de lignes sont imprimées |
–Couleur [= QUAND] | Couleur en surbrillance |
–Couleur [= QUAND] | utiliser des marqueurs pour mettre en évidence les chaînes correspondantes; WHEN est «toujours», «jamais» ou «auto» |
egrep ie grep -E
. fgrep ie grep -F
.
Conseil: Les expressions régulières utilisent généralement des guillemets simples. Si les variables sont entre guillemets, utilisez des guillemets doubles.
10. Utilisation de grep
- Trouvez la ligne commençant par r
root@shell1:~# grep '^r' /etc/passwd
root:x:0:0:root:/root:/bin/bash
- Trouvez la ligne se terminant par la connexion
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
- Correspond à l'une de toutes les lettres majuscules
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
- Faire correspondre les lignes commençant par 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
- Faire correspondre les lignes où o apparaît deux fois
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
- Match 1 à 2 lignes avec 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
- Une ligne avec plus de deux occurrences de 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
- Correspond à 0 à 9 chiffres qui apparaissent plus de 3 fois
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
- Trouvez les lignes root et 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
- Trouvez les lignes qui commencent par root et 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
- Trouvez les lignes avec 7 ou 9 des deux côtés
root@shell1:~# cat /etc/passwd | grep -E ':(7|9):'
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
- Afficher le contenu du fichier spécifié /etc/logrotate.conf, aucune ligne de commentaire et aucune ligne vide ne sont affichées
cat /etc/logrotate.conf | grep -Ev '^#|^$'
- Ajout de
-c
paramètres pour imprimer le nombre de fois que chaque fichier correspond au contenu
root@shell1:~# grep -c 'root' /etc/passwd #因为只匹配到一行,所以只输出 1
1
- Joindre les
-w
paramètres uniquement pour la correspondance exacte, sinon le même mot n'est pas sorti
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