Tema del script de shell (02): casos de uso de shell comunes de producción

1. Antecedentes temáticos

Recientemente, utilicé una plataforma de automatización (consulte Prueba de Spug de la plataforma de mantenimiento y operación automatizada para obtener más detalles ) para realizar cambios semanales. El efecto es muy bueno. La plataforma ha estandarizado y automatizado una gran cantidad de operaciones repetitivas y tediosas mediante la distribución de scripts. El núcleo de la plataforma se distribuye a cada servidor Script de shell, siento que es necesario hacer un resumen del script de shell, así que tengo la idea de escribir este tema. Este tema presentará los diversos usos de los scripts de shell en combinación con la operación y el mantenimiento. Se estima que alrededor de 10 artículos incluirán inspección del sistema, monitoreo, carga y descarga de ftp, consulta de base de datos, limpieza de registros, sincronización de reloj, tareas de temporización, etc. , lo que implicará gramática, notas, depuración, etc.

2. Prefacio

Este artículo es el segundo del tema.

El artículo presenta principalmente algunas declaraciones de shell utilizadas recientemente en la operación y el mantenimiento de la producción diaria, que incluyen principalmente reemplazo, eliminación, búsqueda de líneas y caracteres especificados, transferencia de archivos, intercambio de columnas y columnas, etc.

Tres casos de uso de shell

1. Prohibir el inicio de sesión de root directamente

Requisitos: para garantizar la seguridad, el inicio de sesión directo con una cuenta de root está prohibido en producción

antes de arreglar:

[root@ansible /etc/ssh]# ll|grep sshd_config
-rw-------. 1 root root       3907 4月  11 2018 sshd_config
[root@ansible /etc/ssh]# more /etc/ssh/sshd_config|grep PermitRootLogin
#PermitRootLogin yes
# the setting of "PermitRootLogin without-password".

Antes de la modificación, solo hay un archivo sshd_config en el directorio / etc / ssh y PermitRootLogin está configurado como un estado de comentario

Después de la modificación:

[root@ansible /etc/ssh]# sed -i.bak 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
[root@ansible /etc/ssh]# more /etc/ssh/sshd_config|grep PermitRootLogin                               
PermitRootLogin no
# the setting of "PermitRootLogin without-password".
[root@ansible /etc/ssh]# ll|grep sshd_config                                                          
-rw-------  1 root root       3905 1月  22 15:26 sshd_config
-rw-------. 1 root root       3907 4月  11 2018 sshd_config.bak

Después de la modificación, el directorio / etc / ssh tiene más archivos de respaldo y el parámetro PermitRootLogin está comentado y no está en estado

imagen-20210122155247208

2. Actualiza la lista de sudoer

Requisitos: algunas cuentas requieren privilegios de root

antes de arreglar:

[root@ansible /etc]# cd
[root@ansible ~]# cd /etc
[root@ansible /etc]# ll|grep sudoers              
-r--r-----.  1 root root     4328 10月 30 2018 sudoers
drwxr-x---.  2 root root        6 10月 31 2018 sudoers.d
[root@ansible /etc]# more sudoers|grep 'ALL=(ALL)'
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
# %wheel        ALL=(ALL)       NOPASSWD: ALL

Antes de la modificación, solo hay un archivo sudoers en / etc y ninguna otra cuenta, excepto root, tiene privilegios de root

Después de la modificación:

[root@ansible /etc]# sed  -i.bak "/root.*ALL=(ALL).*ALL/a\app    ALL=(ALL)       ALL"  /etc/sudoers
[root@ansible /etc]# ll|grep sudoers                                                               
-r--r-----   1 root root     4355 1月  22 16:05 sudoers
-r--r-----   1 root root     4328 1月  22 15:53 sudoers.bak
drwxr-x---.  2 root root        6 10月 31 2018 sudoers.d
[root@ansible /etc]# more sudoers|grep 'ALL=(ALL)'                                                 
root    ALL=(ALL)       ALL
app    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
# %wheel        ALL=(ALL)       NOPASSWD: ALL

Después de la modificación, hay un archivo de respaldo adicional sudoers.bak en / etc y la línea debajo de la raíz tiene más información sobre la cuenta de la aplicación, por lo que la aplicación tiene privilegios de root.

imagen-20210122160830976

3.scp copia varios directorios o archivos

Requisitos: copie varios archivos locales al control remoto o copie varios archivos del control remoto al local

Copie localmente al directorio remoto:

[root@ansible ~]# touch  a.txt b.txt c.txt
[root@ansible ~]# mkdir d
[root@ansible ~]# scp -v -r a.txt b.txt c.txt d [email protected]:/tmp

Cree un nuevo archivo a.txt b.txt c.txt y el directorio d localmente y cópielos en el directorio / tmp del host remoto

imagen-20210122165106801

imagen-20210122165121845

imagen-20210122165134795

Copie el directorio remoto al local:

[root@157 ~]# touch 01.sh 02.sh 03.sh
[root@157 ~]# mkdir 04
[root@ansible ~]# scp -v -r [email protected]:/root/\{01.sh,02.sh,03.sh,04\} /tmp

Cree un nuevo archivo 01.sh 02.sh 03.sh y el directorio 04 en 157 y cópielos en el directorio local / tmp

imagen-20210122165621821

imagen-20210126154706589

imagen-20210122165720838

4. Eliminar tareas programadas existentes

Requisito: eliminar la tarea cronometrada especificada

[root@ansible /var/spool/cron]# crontab -l
0 0 * * * /usr/sbin/ntpdate -u ntpserver  >> /tmp/ntp.log
[root@ansible /var/spool/cron]# sed -i.bak '/\/usr\/sbin\/ntpdate/d' /var/spool/cron/root

Tenga en cuenta que "/" debe escaparse al coincidir con / usr / sbin / ntpdate

imagen-20210126104339368

5. Cambiar entre columnas y columnas

Requisito: intercambie la ip y el nombre de host en el archivo / etc / hosts, el formato de la lista de hosts en ansible es hostname + ip

antes de arreglar:

[root@ansible ~]# cd /etc
[root@ansible /etc]# cp hosts hosts-ansible.txt 
[root@ansible /etc]# more hosts-ansible.txt 
10.17.6.137          loong576-file01
10.17.6.129          loong576-kxxl01
10.17.6.130          loong576-kxxl02
10.17.6.131          loong576-capp01
10.17.6.132          loong576-capp02
10.17.6.128          loong576-pbgw01
10.17.6.127          loong576-pbgw02
10.17.6.134          loong576-xucs01
10.17.6.133          loong576-xucs02
10.17.6.136          loong576-webc01
10.17.6.135          loong576-webc02
10.17.6.14           loong576-gwxx-1
10.17.6.15           loong576-gwxx-2
10.17.6.18           loong576-mysql1
10.17.6.17           loong576-mysql2

Después de la modificación:

[root@ansible /etc]# awk '{print $2,$1 > "hosts-ansible.txt"}' hosts-ansible.txt 
[root@ansible /etc]# more hosts-ansible.txt 
loong576-file01 10.17.6.137
loong576-kxxl01 10.17.6.129
loong576-kxxl02 10.17.6.130
loong576-capp01 10.17.6.131
loong576-capp02 10.17.6.132
loong576-pbgw01 10.17.6.128
loong576-pbgw02 10.17.6.127
loong576-xucs01 10.17.6.134
loong576-xucs02 10.17.6.133
loong576-webc01 10.17.6.136
loong576-webc02 10.17.6.135
loong576-gwxx-1 10.17.6.14
loong576-gwxx-2 10.17.6.15
loong576-mysql1 10.17.6.18
loong576-mysql2 10.17.6.17

imagen-20210126105901043

Este script puede realizar fácilmente el intercambio de posición de ip y nombre de host

6. Agregue la línea especificada

Requisitos: agregue el parámetro'ansible_ssh_host = 'al mismo tiempo antes de la dirección IP 10.17.6

[root@ansible /etc]# sed -i 's/10.17.6/ansible_ssh_host=&/' hosts-ansible.txt 

imagen-20210126160213473A través de 5 y 6, el formato de ip + nombre de host de / etc / hosts se puede convertir fácilmente al formato de nombre de host + ansible_ssh_host = + ip para cumplir con los requisitos de formato de ansible para nombre de host

A través de 5 y 6, el formato de ip + nombre de host de / etc / hosts se puede convertir fácilmente al formato de nombre de host + ansible_ssh_host = + ip para cumplir con los requisitos de formato de ansible para nombre de host

7.find, xargs, rm eliminar archivos encontrados

Requisitos: use buscar para buscar archivos que cumplan las condiciones y eliminarlos

[root@ansible /]# find ./ -name *[0-9]\*.bak
./home/a001.bak
./opt/04.txt.bak
./opt/03.bak
./tmp/09.bak
./tmp/10.txt.bak
./usr/05.bak
./usr/06.txt.bak
./var/07.bak
./var/08.txt.bak
./root/02.txt.bak
./root/01.bak
[root@ansible /]# find ./ -name *[0-9]\*.bak|xargs rm -rf
[root@ansible /]# find ./ -name *[0-9]\*.bak

Busque todos los archivos que comiencen con un número y terminen con .bak, luego elimínelos

imagen-20210126111216741

8.sed, find, grep eliminar / reemplazar caracteres especificados en archivos

Requisitos: busque la cadena que contiene 'loong576' en todos los archivos y reemplácela o elimínela

antes de arreglar:

[root@ansible-awx os-check]# find .|xargs grep -rl 'loong576'                                  
./defaults/main.yaml
./files/check_linux.sh
./tasks/main.yaml
./defaults/main.yaml
./defaults/main.yaml
./files/check_linux.sh
./files/check_linux.sh
./tasks/main.yaml
./tasks/main.yaml
[root@ansible-awx os-check]# find .|xargs grep -ri 'loong576'                                
./defaults/main.yaml:# Created by loong576 2020.05 
./files/check_linux.sh:# Created by loong576 2020.05 
./tasks/main.yaml:# Created by loong576 2020.05 
./defaults/main.yaml:# Created by loong576 2020.05 
./defaults/main.yaml:# Created by loong576 2020.05 
./files/check_linux.sh:# Created by loong576 2020.05 
./files/check_linux.sh:# Created by loong576 2020.05 
./tasks/main.yaml:# Created by loong576 2020.05 
./tasks/main.yaml:# Created by loong576 2020.05 

Busque la lista de archivos que contienen la palabra loong576 y señale los caracteres específicos contenidos en el archivo

Después de la modificación: cambie el comentario de 'Creado por loong576 2020.05' a 'Creado por loong576 2021.01'

[root@ansible-awx os-check]# sed -i "s/2020.05/2021.01/g"  `find .|xargs grep -rl 'loong576'` 
[root@ansible-awx os-check]# find .|xargs grep -ri 'loong576'                                 
./defaults/main.yaml:# Created by loong576 2021.01 
./files/check_linux.sh:# Created by loong576 2021.01 
./tasks/main.yaml:# Created by loong576 2021.01 
./defaults/main.yaml:# Created by loong576 2021.01 
./defaults/main.yaml:# Created by loong576 2021.01 
./files/check_linux.sh:# Created by loong576 2021.01 
./files/check_linux.sh:# Created by loong576 2021.01 
./tasks/main.yaml:# Created by loong576 2021.01 
./tasks/main.yaml:# Created by loong576 2021.01 

Eliminar hora:

[root@ansible-awx os-check]# sed -i "s/2021.01//g"  `find .|xargs grep -rl 'loong576'`               
[root@ansible-awx os-check]# find .|xargs grep -ri 'loong576'                          
./defaults/main.yaml:# Created by loong576  
./files/check_linux.sh:# Created by loong576  
./tasks/main.yaml:# Created by loong576  
./defaults/main.yaml:# Created by loong576  
./defaults/main.yaml:# Created by loong576  
./files/check_linux.sh:# Created by loong576  
./files/check_linux.sh:# Created by loong576  
./tasks/main.yaml:# Created by loong576  
./tasks/main.yaml:# Created by loong576

imagen-20210126144600270

9. Especifique el carácter para agregar caracteres al frente y la línea anterior, y agregue una línea a la última línea

Requisito: al configurar el servidor ntp, debe agregar una nueva línea en el carácter especificado en el archivo de configuración /etc/ntp.conf, comentar algunas configuraciones predeterminadas (agregar # antes del carácter especificado) y agregar una nueva línea al final del archivo de configuración / etc / hosts

Agregue una nueva línea en el carácter especificado:

[root@ansible ~]# sed -i '/driftfile/i server ntpserver iburst' /etc/ntp.conf 

Agregue 'server ntpserver iburst' a la línea especificada de driftfile

Tenga en cuenta algunas configuraciones predeterminadas (agregue # antes de los caracteres especificados):

[root@ansible ~]# sed -i '/centos.pool.ntp.org/s/^/#/' /etc/ntp.conf

Servidor de comentarios [0..3] .centos.pool.ntp.org iburst '

Antes del cambio:

imagen-20210126150628314

Después del cambio:

imagen-20210126150816735

Agregue en la última línea:

[root@ansible ~]# sed -i '$a 172.16.7.157    ntpserver' /etc/hosts

imagen-20210126151241163

4. Resumen de este artículo

Este artículo presenta principalmente algunos casos de uso de shell de uso común, que implican búsqueda diaria, reemplazo, transferencia de archivos, etc. Los comandos utilizados principalmente incluyen find, sed, xargs, scp, etc. El script de shell es combinar lógicamente los diversos comandos de acuerdo con el propósito inutilizable, y dominar estos comandos tendrá un efecto multiplicador en el siguiente script.

 

 

Para más, preste atención: tema de shell

Supongo que te gusta

Origin blog.51cto.com/3241766/2607150
Recomendado
Clasificación