Comprensión y aprendizaje de la solución básica del sistema de archivos de shell y del sistema de archivos Linux - Parte 10

Comprensión y aprendizaje de la solución básica del sistema de archivos de shell y del sistema de archivos Linux - Parte 10

La Fundación Linux lanzó la LFCS Certificación (Sysadmin certificado por la Fundación Linux), una nueva iniciativa cuyo propósito es permitir que las personas en todas partes (y en cualquier lugar) se certifiquen en soporte operativo básico a intermedio para sistemas Linux, que incluye el soporte de sistemas y servicios de ejecución, junto con el monitoreo y el análisis general, además de la toma de decisiones inteligentes Cuando se trata de plantear problemas a los equipos de apoyo superior.

Sysadmin certificado por la Fundación Linux - Parte 10

Mira el siguiente video que le guía una introducción al Programa de Certificación de la Fundación Linux.

Este es el último artículo (Parte 10) de la presente serie larga de 10 tutorios. En este artículo nos centraremos en los scripting básico de shell y la solución de problemas de los sistemas de archivos Linux. Se requieren ambos temas para el examen de certificación LFCS.

Comprender terminales y conchas

Primero aclaremos algunos conceptos.

  1. Un shell es un programa que toma comandos y los da al sistema operativo para ser ejecutado.
  2. Un terminal es un programa que nos permite como usuarios finales interactuar con el shell. Un ejemplo de un terminal es el terminal gnomo, como se muestra en la imagen a continuación.
Terminal de gnomo

Cuando iniciamos un shell por primera vez, presenta un símbolo del sistema (también conocido como línea de comandos), que nos dice que el shell está listo para comenzar a aceptar comandos de su dispositivo de entrada estándar, que generalmente es el teclado.

Es posible que desee consultar otro artículo de esta serie (use el comando para crear, editar y manipular archivos - Parte 1) para revisar algunos comandos útiles.

Linux proporciona una gama de opciones para conchas, siendo las siguientes las más comunes:

cáscara

Intento representa Bourne Again Shell y es el shell predeterminado del proyecto GNU. Incorpora características útiles de Korn Shell (KSH) y C Shell (CSH), ofreciendo varias mejoras al mismo tiempo. Este es el shell predeterminado utilizado por las distribuciones cubiertas en la certificación LFCS, y es el shell que utilizaremos en este tutorial.

sh shell

El Bourne Shell es el shell más antiguo y, por lo tanto, ha sido el shell predeterminado de muchos sistemas operativos similares a unix durante muchos años.

cáscara de ksh

El Korn Shell es un caparazón unix que fue desarrollado por David Korn en Bell Labs a principios de la década de 1980. Es compatible con el retroceso con Bourne Shell e incluye muchas características del Cell C.

Un script de shell no es nada más y nada menos que un archivo de texto convertido en un programa ejecutable que combina los comandos que se ejecutan el shell uno tras otro.

Scripting de concha básica

Como se mencionó anteriormente, un script de shell nace como un archivo de texto sin formato. Por lo tanto, se puede crear y editar utilizando nuestro editor de texto preferido. Es posible que desee considerar el uso de VI/M (consulte el uso de VI Editor - Parte 2 de esta serie), que presenta una resaltura de sintaxis para su conveniencia.

Escriba el siguiente comando para crear un archivo llamado MyScript.sh y presione enter.

# vim myscript.mierda 

La primera línea de un script de shell debe ser la siguiente (también conocida como un el asunto).

#!/bin/bash 

Él "contado"El sistema operativo el nombre del intérprete que debe usarse para ejecutar el texto que sigue.

Ahora es el momento de agregar nuestros comandos. Podemos aclarar el propósito de cada comando, o del script completo, agregando comentarios también. Tenga en cuenta que el caparazón ignora esas líneas que comienzan con un signo de libra # (Comentarios explicativos).

#!/bin/bash eco Esta es la parte 10 de la serie de 10 artículos sobre el eco de certificación LFCS hoy es $ (fecha +%y-%m-%d) 

Una vez que el script ha sido escrito y guardado, necesitamos que sea ejecutable.

# Chmod 755 MyScript.mierda 

Antes de ejecutar nuestro guión, debemos decir algunas palabras sobre el $ Variable ambiental. Si corremos,

Echo $ Path 

Desde la línea de comando, veremos el contenido de $ Path: Una lista de directorios separados por colon que se buscan cuando ingresamos el nombre de un programa ejecutable. Se llama variable de entorno porque es parte del entorno de shell: un conjunto de información que está disponible para el shell y sus procesos infantiles cuando se inicia el shell.

Cuando escribimos un comando y presionamos ENTER, el shell busca en todos los directorios enumerados en el $ variable y ejecuta la primera instancia que se encuentra. Veamos un ejemplo,

Variables de entorno

Si hay dos archivos ejecutables con el mismo nombre, uno en /usr/local/bin y otro en /usr/bin, el que en el primer directorio se ejecutará primero, mientras que el otro no se ignorará.

Si no hemos guardado nuestro script dentro de uno de los directorios enumerados en el $ variable, necesitamos agregar ./ al nombre del archivo para ejecutarlo. De lo contrario, podemos ejecutarlo tal como lo haríamos con un comando regular.

# PWD # ./MyScript.sh # cp myScript.sh ... /bin # cd… /bin # pwd # myscript.mierda 
Ejecutar script

Condicional

Siempre que necesite especificar diferentes cursos de acción que se tomarán en un script de shell, como resultado del éxito o el fracaso de un comando, usará el si construir para definir tales condiciones. Su sintaxis básica es:

Si condición; luego comandos; el otro otro comandado FI 

Dónde CONDICIÓN puede ser uno de los siguientes (solo las condiciones más frecuentes se citan aquí) y se evalúa como verdadero:

  1. [ -un archivo ] → Existe el archivo.
  2. [-d archivo] → El archivo existe y es un directorio.
  3. [-f archivo] → El archivo existe y es un archivo normal.
  4. [-U archivo] → Existe el archivo y su bit Suid (establecer el usuario de usuario) está configurado.
  5. [-g archivo] → El archivo existe y su bit SGID está configurado.
  6. [-k archivo] → El archivo existe y su bit pegajoso está configurado.
  7. [-r archivo] → El archivo existe y es legible.
  8. [-s archivo]→ El archivo existe y no está vacío.
  9. [-w archivo]→ El archivo existe y es redactado.
  10. [-x archivo] es cierto si el archivo existe y es ejecutable.
  11. [String1 = String2] → Las cadenas son iguales.
  12. [Cadena1 != String2] → Las cadenas no son iguales.

[INT1 OP INT2] Debe ser parte de la lista anterior, mientras que los elementos que siguen (por ejemplo, -EQ -> es cierto si int1 es igual a int2.) debería ser un "niños" lista de [ int1 opción int2 ] donde OP es uno de los siguientes operadores de comparación.

  1. -EQ -> es cierto si int1 es igual a int2.
  2. -NE -> verdadero si int1 no es igual a int2.
  3. -LT -> verdadero si int1 es menor que int2.
  4. -LE -> verdadero si int1 es menor o igual a int2.
  5. -GT -> verdadero si int1 es mayor que int2.
  6. -GE -> verdadero si int1 es mayor o igual a int2.

Para bucles

Este bucle permite ejecutar uno o más comandos para cada valor en una lista de valores. Su sintaxis básica es:

para elemento en secuencia; hacer comandos; hecho 

Dónde artículo es una variable genérica que representa cada valor en SECUENCIA Durante cada iteración.

Mientras que bucles

Este bucle permite ejecutar una serie de comandos repetitivos siempre que el comando de control se ejecute con un estado de salida igual a cero (correctamente). Su sintaxis básica es:

Mientras evaluación_command; hacer ejecute_commands; hecho 

Dónde Evaluación_command puede ser cualquier comando que pueda salir con un éxito (0) o falla (aparte de 0) estado, y ejecute_commands puede ser cualquier programa, script o construcción de shell, incluidos otros bucles anidados.

Poniendolo todo junto

Demostraremos el uso de la construcción if y el bucle for con el siguiente ejemplo.

Determinar si un servicio se ejecuta en una distribución basada en Systemd

Creemos un archivo con una lista de servicios que queremos monitorear de un vistazo.

# MyServices de gato.txt sshd mariadb httpd crond firewalld 
Script para monitorear los servicios de Linux

Nuestro script de shell debería verse como.

#!/bin/bash # Este script itera en una lista de servicios y # se utiliza para determinar si se están ejecutando o no. Para el servicio en $ (Cat MyServices.TXT); Do SystemCtl Status $ Service | Grep --quiet "Running" si [$? -eq 0]; entonces echo $ servicio "es [activo]" el más echo $ service "está [inactivo o no instalado]" FI hecho 
Script de monitoreo de servicios de Linux
Expliquemos cómo funciona el guión.

1). El bucle for lee el Mis servicios.TXT Archiva un elemento de la lista a la vez. Ese elemento único se denota por la variable genérica llamada servicio. La lista está poblada con la salida de,

# MyServices de gato.TXT 

2). El comando anterior está encerrado entre paréntesis y precedido por un signo de dólar para indicar que debe evaluarse para poblar la lista en la que iteraremos.

3). Para cada elemento de la lista (es decir, cada instancia de la variable de servicio), el siguiente comando se ejecutará.

# Sistema de SystemCTL $ Servicio | Grep -Quiet "Running" 

Esta vez necesitamos preceder a nuestra variable genérica (que representa cada elemento en LISTA) con un signo de dólar para indicar que es una variable y, por lo tanto, su valor en cada iteración debe usarse. La salida se contagia a GREP.

El -tranquilo La bandera se usa para prevenir grep Desde mostrar en la pantalla las líneas donde aparece la palabra en ejecución. Cuando eso sucede, el comando anterior devuelve un estado de salida de 0 (representado por ps? en la construcción if), verificando así que el servicio se está ejecutando.

Un estado de salida diferente al 0 (es decir, el palabra ejecutar no se encontró en la salida de Sistema de SystemCTL $ Servicio) indica que el servicio no se está ejecutando.

Script de monitoreo de servicios

Podríamos ir un paso más allá y verificar la existencia de Mis servicios.TXT Antes incluso de intentar ingresar al bucle for.

#!/bin/bash # Este script itera en una lista de servicios y # se utiliza para determinar si se están ejecutando o no. Si [-f myServices.TXT ]; luego para el servicio en $ (Cat MyServices.TXT); Do SystemCtl Status $ Service | Grep --quiet "Running" si [$? -eq 0]; Entonces echo $ servicio "es [activo]" el más echo $ servicio "está [inactivo o no instalado]" Fi hecho de otra persona "MyServices MyServices.Falta a txt "Fi 
Pinging una serie de hosts de red o internet para estadísticas de respuesta

Es posible que desee mantener una lista de hosts en un archivo de texto y usar un script para determinar de vez en cuando si son pingibles o no (no dude en reemplazar el contenido de myhosts e intenta por ti mismo).

El comando Read Shell incorporado le dice al bucle While que lea myhosts line por línea y asigna el contenido de cada línea a host variable, que luego se pasa al silbido dominio.

#!/bin/bash # Este script se usa para demostrar el uso de un bucle de tiempo mientras lea el host; hacer ping -c 2 $ host hecho < myhosts 
Script a servidores de ping

Leer también:

  1. Learn Shell Scripting: una guía de novatos al administrador del sistema
  2. 5 scripts de shell para aprender programación de shell

Solución de problemas del sistema de archivos

Aunque Linux es un sistema operativo muy estable, si se bloquea por alguna razón (por ejemplo, debido a un apagón de alimentación), uno (o más) de sus sistemas de archivos no se descartará correctamente y, por lo tanto, se verificará automáticamente los errores cuando Linux se reinicia.

Además, cada vez que el sistema se arranca durante un arranque normal, siempre verifica la integridad de los sistemas de archivos antes de montarlos. En ambos casos, esto se realiza utilizando una herramienta llamada FSCK ("comprobación del sistema de archivos").

FSCK no solo verificará la integridad de los sistemas de archivos, sino que también intentará reparar los sistemas de archivos corruptos si se les indica que lo haga. Dependiendo de la gravedad del daño, FSCK puede tener éxito o no; Cuando lo hace, las partes recuperadas de los archivos se colocan en el Perdido+encontrado Directorio, ubicado en la raíz de cada sistema de archivos.

Por último, pero no menos importante, debemos tener en cuenta que las inconsistencias también pueden ocurrir si intentamos eliminar una unidad USB cuando el sistema operativo todavía le está escribiendo, e incluso puede resultar en daños al hardware.

La sintaxis básica de FSCK es la siguiente:

# sistema de archivos FSCK [Opciones] 
Verificar un sistema de archivos para errores e intentar reparar automáticamente

Para verificar un sistema de archivos con FSCK, primero debemos desmontarlo.

# Monte | GREP SDG1 # UMOUNT /MNT # FSCK -Y /DEV /SDG1 
Verifique los errores del sistema de archivos

junto al -Y bandera, podemos usar el -a Opción para reparar automáticamente los sistemas de archivos sin hacer ninguna pregunta y forzar el cheque incluso cuando el sistema de archivos se ve limpio.

# fsck -af /dev /sdg1 

Si solo estamos interesados ​​en descubrir qué está mal (sin tratar de arreglar nada por el momento) podemos ejecutar FSCK con el -norte opción, que producirá los problemas del sistema de archivos a la salida estándar.

# fsck -n /dev /sdg1 

Dependiendo de los mensajes de error en la salida de FSCK, sabremos si podemos tratar de resolver el problema nosotros mismos o aumentarlo a los equipos de ingeniería para realizar más controles en el hardware.

Resumen

Hemos llegado al final de esto 10 artículos Serie donde han intentado cubrir las competencias básicas de dominio requeridas para aprobar el LFCS examen.

Por razones obvias, no es posible cubrir cada aspecto de estos temas en un tutorial único, y es por eso que esperamos que estos artículos lo hayan puesto en el camino correcto para probar cosas nuevas y continuar aprendiendo.

Si tiene alguna pregunta o comentario, siempre son bienvenidos, así que no dude en dejarnos una línea a través del formulario a continuación!

Convertirse en administrador del sistema certificado por Linux