El comando cat y aquí doc crean archivos (resumen usted mismo) para complementar con sudo

2020-03-19 21:50:53

El comando cat y aquí doc crean archivos (resumen usted mismo) para complementar con sudo

 

Introducción

Hoy descubrí que usar sudo + cat + here document no puede crear un archivo sin autorización de root, por ejemplo:

sudo cat <<< hola> /opt/h.txt

-bash: /opt/h.txt: permiso denegado

 

 

Análisis:

man cat # Me di cuenta de que escribí el gato equivocado antes. Resultó ser la abreviatura de concatenate, pero aún significa conexión, lo cual es correcto.

cat: concatena archivos e imprime en la salida estándar

La función de cat es conectar el archivo para imprimir su contenido a la salida estándar, es decir, la pantalla

 

Volver al comando anterior sudo cat <<< 'hello'> /opt/h.txt se puede dividir en dos pasos

sudo cat <<< 'hola' # El primer paso, obtener 'hola' para imprimir a la salida estándar

echo 'hola'> /opt/h.txt # El segundo paso es usar echo para simular el resultado de cat,

La razón de esto es porque la redirección> no es parte de ningún comando, es la salida del comando anterior a un archivo

Incluso puede considerar la redirección> como otro comando, por ejemplo:> /tmp/t.txt para crear un archivo vacío, similar al tacto

Aquí, sudo solo le da al siguiente gato el permiso de root, pero la redirección> sigue siendo los permisos del usuario original

Los usuarios normales no tienen permiso de escritura para / opt, y naturalmente informaron el error de "permiso denegado"

 

 

Resolver:

Método uno, incluye el comando en un comando bash

sudo bash -c "gato <<< 'hola'> /opt/h.txt"

 

Método dos, use tee en lugar de>, tee -a en lugar de >>, ¡muy recomendable! ! !

sudo tee /opt/h.txt <<< hello> / dev / null

# tee: lee desde la entrada estándar y escribe en la salida y archivos estándar

# tee generará una entrada estándar para el archivo y la salida estándar

# El comando anterior utiliza aquí una cadena como entrada estándar y redirige la salida estándar a / dev / null para que no se muestre

 

 

Referencia:

La diferencia entre la canalización de instrucciones de canalización de Linux y la redirección de shell

https://my.oschina.net/badboy2/blog/478952

La diferencia entre el comando de canalización y la redirección

1. El comando de la izquierda debe tener salida estándar | El comando de la derecha debe aceptar entrada estándar

2. El comando de la izquierda debe tener salida estándar> la derecha solo puede ser un archivo

3. El comando de la izquierda debe requerir una entrada estándar <La derecha solo puede ser un archivo

 

 

2020-03-19 18:20:48

Suplemento:

<< 是 Aquí documento

<<< es Here String, solo una línea del documento Here

 

 

2020-02-21 10:11:54

 

El comando cat y aquí doc crean archivos (resumen)

 

cat se abrevia para catenate connection.

 

El comando cat tiene un puerto de entrada y un puerto de salida. Por defecto, conectará la entrada estándar (teclado) y la salida estándar (teclado) si no se ingresa nada.

 

# Ejemplo de operación

cat # Presione enter e imprima lo que escriba en la pantalla.

 

cat file1 # toma file1 como entrada y salida estándar como salida

 

cat archivo1> archivo2 # Tome el archivo1 como entrada y el archivo2 como salida, es decir, envíe el contenido del archivo1 al archivo2

 

# Nota: No hay un orden de entrada y salida, cat solo reconoce mayor que> como el indicador de salida, por lo que el comando anterior es equivalente a

cat> file2 file1 # Aquí la salida sigue siendo file2, la entrada sigue siendo file1, el efecto es el mismo que el comando anterior

 

# Por lo tanto, cuando creamos un archivo con cat y aquí doc, veremos que ambos están escritos correctamente

cat> file1 << EOF #> La salida apunta a file1, la entrada está aquí doc

aaa

bbb

EOF

 

# Es equivalente a

cat << EOF> file1 # La salida sigue siendo file1, la entrada todavía está aquí doc

aaa

bbb

EOF

 

# Tenga en cuenta que << es parte del documento aquí, es decir, el comienzo del documento, imagine todo el documento aquí como un archivo virtual, esencialmente

gato << EOF

aaa

bbb

EOF

 

Es equivalente a

cat file.txt # Suponiendo que el contenido de file.txt también es aaa newline bbb

 

 

 

Sobre otra referencia de uso del documento aquí:

https://juejin.im/post/5cea7e2df265da1bb77645e1#heading-14

27 artículos originales publicados · elogiados 4 · visitas 9691

Supongo que te gusta

Origin blog.csdn.net/yoshubom/article/details/104422134
Recomendado
Clasificación