Linux - canalizaciones y redirección

1. Archivos Linux

En Linux, todo es un archivo, incluidos directorios, enlaces (similares a los accesos directos de Windows) y archivos de dispositivos.

En el kernel, todos los archivos abiertos están etiquetados con un descriptor de archivo (un número entero no negativo). El rango de cambio del descriptor de archivo es 0~OPEN_MAX – 1. En los primeros sistemas Unix, cada proceso puede abrir hasta 20 archivos al mismo tiempo, lo que significa que el rango de descriptores de archivo es 0~19, pero ahora muchos sistemas lo aumentan a 0~63.

2. Redirección

El dispositivo de entrada estándar en el sistema Linux es el teclado, y el dispositivo de salida es la pantalla. A veces, esperamos leer datos de dispositivos que no sean el teclado, o enviar datos a otros dispositivos fuera de la pantalla. Esta situación se llama redirección.

Por qué usar la redirección

• Cuando la salida de información en pantalla es muy importante y necesitamos guardarla;

• Cuando el programa se ejecuta en segundo plano y no desea que interfiera con la salida normal de la pantalla;

• Cuando se espera que se guarden los resultados de ejecución de algunos comandos de rutina del sistema (como archivos escritos en /etc/crontab);

• Para algunos comandos de ejecución, ya conocemos sus posibles mensajes de error, por lo que queremos descartarlos con "2> /dev/null";

• Cuando los mensajes de error y los mensajes correctos deben emitirse por separado.

1. símbolo de redireccionamiento

> Salida redireccionada a un archivo o dispositivo sobrescribiendo el archivo original.

>!La redirección de salida a un archivo o dispositivo obliga a sobrescribir el archivo original.

>> salida redirigida a un archivo o dispositivo agregando el archivo original

< Entrada redirigida a un programa

2. Redirección de errores

2> Redirigir una salida de error estándar a un archivo o dispositivo para sobrescribir el archivo original b-shell .

2>>Redirigir una salida de error estándar a un archivo o dispositivo adjunto al archivo original .

2>&1 redirige una salida de error estándar a una salida estándar .

>& redirige una salida de error estándar a un archivo o dispositivo que sobrescribe el archivo original c-shell .

3. Ejemplo de redirección de comandos

Durante la ejecución del comando bash, existen principalmente tres situaciones de entrada y salida, a saber:

1. Entrada estándar, el código es 0 o stdin;

2. Salida estándar: el código es 1 o llamado stdout;

3. Salida de error: código 2 o stderr;

 [prueba @prueba prueba]# ls –al  > lista.txt

Envíe los resultados mostrados al archivo list.txt, reemplazándolo si ya existe.

[prueba @prueba prueba]# ls –al  >> lista.txt

Agregue los resultados mostrados al archivo list.txt, que es acumulativo, ¡y se conservan los datos antiguos!

[prueba @prueba prueba]# ls –al   1> lista.txt  2> lista.err

Envíe los datos mostrados correctamente a list.txt y  envíe los datos incorrectos a list.err

[prueba @prueba prueba]# ls -al 1> lista.txt 2>  &1

¡Envíe los datos mostrados, ya sean correctos o incorrectos, a list.txt! Si el error y el archivo correcto se envían al mismo archivo, ¡debe escribirse en el método anterior! ¡No se puede escribir en otros formatos!

[prueba @prueba prueba]# ls -al 1> list.txt 2> /dev/null

¡Los datos mostrados se enviarán correctamente a list.txt y los datos incorrectos se descartarán!  Se puede decir que /dev/null es un dispositivo de agujero negro. Vacío, es decir, no guardar.

3. Tubería

Una tubería es un mecanismo para la comunicación unidireccional entre dos procesos. Debido a la naturaleza unidireccional de los datos transmitidos por la canalización, la canalización también se denomina canalización semidúplex. Esta característica de la tubería determina las limitaciones del uso del dispositivo. Las tuberías son una de las formas originales de Unix IPC compatibles con Linux y tienen las siguientes características:

Los datos solo pueden fluir de un proceso a otro (uno lee la canalización y el otro escribe la canalización); si se va a realizar una comunicación dúplex, se deben establecer dos canalizaciones.

Las tuberías solo se pueden usar para la comunicación entre procesos padre-hijo o procesos hermanos. , lo que significa que las canalizaciones solo se pueden usar para la comunicación entre procesos con afinidad.

Además de las limitaciones anteriores, la canalización tiene otras desventajas, como que la canalización no tiene nombre (canalización anónima) y el tamaño del búfer de la canalización es limitado. Lo que transmite la tubería es un flujo de bytes sin formato. Esto requiere que la entrada y la salida de la tubería acuerden el formato de datos por adelantado. Aunque hay tantas deficiencias, para algunas comunicaciones simples entre procesos, las tuberías aún son totalmente capaces.

La tubería puede canalizar la salida del primer comando al segundo comando como la entrada del segundo comando, usando el símbolo "|"

1. Introducción de comandos:

función en T

Descripción de la función: lea los datos de entrada estándar y envíe su contenido a un archivo.

Sintaxis: tee [-ai][--ayuda][--versión][archivo...]

Nota complementaria: el comando tee leerá datos del dispositivo de entrada estándar, enviará su contenido al dispositivo de salida estándar y lo guardará como un archivo al mismo tiempo. Podemos usar tee para guardar los datos importados por la canalización como un archivo, o incluso guardar varios archivos a la vez.

Parámetros: -a se agrega al archivo existente en lugar de sobrescribirlo. Si el nombre de archivo dado al comando tee ya existe, el preajuste sobrescribirá el contenido de ese archivo. Después de agregar este parámetro, los datos se agregarán al final del contenido del archivo y el contenido original no se eliminará.

-Ignoro la señal de interrupción

--ayuda ayuda en línea

--version muestra la información de la versión

|xargs

La tubería es realizar "usar la salida estándar anterior como la entrada estándar posterior", y xargs es realizar "usar la entrada estándar como parámetro del comando". Puede intentar ejecutar el código:

La razón por la que se puede usar este comando es que muchos comandos no admiten |pipes para pasar parámetros , y esto es necesario en el trabajo diario, por lo que existe un comando xargs como:

echo "--ayuda"|gato

echo "--ayuda"|gato xargs

Por ejemplo: eliminar una gran cantidad de archivos

ls | xargs -n 20 rm -fr

ls, por supuesto, genera todos los nombres de archivo (separados por espacios)

xargs es la salida de ls, cada grupo de 20 (con espacio como separador), como parámetro de rm -rf

Es decir, todos los nombres de archivo se agrupan en 20 grupos y se eliminan mediante rm -rf, de modo que no se exceda la longitud de la línea de comando.

3. Practica

Guarde toda la información del archivo en el directorio actual en el archivo de información:

 

Cree los archivos file1 y file2 en el directorio actual, escriba el contenido respectivamente y fusione los dos archivos en un nuevo archivo newfile:

Agregue "¡Hola mundo!" al archivo newfile:

Verifique la información del archivo en el directorio /etc, si hay un error, guárdelo en el archivo de error:

 

 

Cuente el número de líneas que contienen la palabra "hola" en newfile en el directorio actual:

 

Busque un archivo llamado "nuevo archivo" en el directorio actual y use el comando cat para mostrar el contenido del archivo:

 

Enumere el contenido del archivo de texto newfile y copie 3 copias al mismo tiempo, los nombres de archivo son ss-copy1, ss-copy2, ss-copy3

 

Supongo que te gusta

Origin blog.csdn.net/qq_52117201/article/details/128378087
Recomendado
Clasificación