Trucos de ejecutor y descriptor de archivos de Linux

  
 

Para Linux, todas las operaciones en dispositivos y archivos se realizan mediante descriptores de archivos. Un descriptor de archivo es un entero no negativo que es un valor de índice y apunta a una tabla de registros que abre un archivo para cada proceso en el núcleo. Al abrir un archivo existente o al crear un archivo nuevo, el kernel devuelve un descriptor de archivo al proceso; cuando necesita leer y escribir archivos, también debe pasar el descriptor de archivo como parámetro a la función correspondiente.

Normalmente, cuando se inicia un proceso, se abren 3 archivos: entrada estándar, salida estándar y manejo de errores estándar. Estos tres archivos corresponden a los descriptores de archivos 0, 1 y 2, que son reemplazos de macro STDIN_FILENO, STDOUT_FILENO y STDERR_FILENO.

Vea y establezca el número de descriptores de archivos LINUX
ulimit -nulimit -n 1024

Instancia uno: Asigne descriptores de archivos mediante exec
exec 3 < > hello.txt # Lea y escriba El método está vinculado al descriptor de archivo " 3 " echo " hello exec > &3 # write " hello exec ", si hay contenido anteriormente, se sobrescribirá desde el principio del archivo echo " hello world " > &3 # ¡Escribe " hola mundo ", una nueva línea! Exec 3 > &- # Cerrar escritura, prohibir escritura, sin embargo, no puede leerlo ~ # Si es exec 3 < &-, cierre la lectura y no puede escribir ~

en el ejemplo anterior En el archivo, enlace el archivo hello.txt al descriptor 3.

Instancia 2: Redirecciona la salida estándar
exec 1 > hello.txt # Redirige la salida al archivo hello.txt. A partir de ese momento, la salida de este script se escribirá en el archivo hello. Txtecho " hello exec " echo " hello world "

Instancia 3: redireccionando la salida estándar y restaurando redirecciones a exec 100 > &1 #Conexión del descriptor de archivo 100 a la salida estándar # Desde entonces Para enviar al terminal, tenemos que usar un descriptor temporal para guardarlo! Exec 1 > hello.txt # redirige la salida al archivo hello.txt. A partir de ese momento, la salida de este script se escribirá en el archivo hello.txtecho " hello exec " echo " hello world " exec 1 > &100 100 > &- # Conecte la salida estándar a 100, que es la salida estándar guardada anteriormente # Desactive el descriptor 100, cien, ya que la salida estándar se ha restaurado, no es necesario mantenerlo < /span > echo " oh, my god! " # De esta oración se mostrará en el terminal

Instancia 4: Redirección de entrada
exec 100 < &0exec < hello.txtread line1echo $ line1read line2echo $ line2exec 0 < &100 100 > &-le instancia personalizada

5: Leer y escribir archivos
#! /bin /bashLANG = Cecho " begin " OUTFILE = " hello2.txt " INFILE = " hello.txt " Función file1 {< strong > < /strong > < strong > > $ OUTFILE #zero fuera del archivo, equivalente a vaciar el archivo < /strong > exec 4 > &1exec 1 > $ OUTFILE INEdoecho " $ LINE ": hecho < $ INFILEexec 1 > &4exec 4 > &-} file1echo " <"

con find y exec (1) en el directorio actual (incluidos los subdirectorios), find Todos los archivos txt y busque la línea que contiene la cadena " bin "
find ./-name " *. Txt " -exec grep " bin " {} \\;

(2) en el directorio actual (incluidos los subdirectorios), elimine todos los archivos txt para buscar ./​​-name " *. txt " -exec rm {} \\;

Copyright © Conocimiento de Windows All Rights Reserved