¿Cómo cambiar el valor de los archivos del sistema sin abrirlos?

¿Cómo cambiar el valor de los archivos del sistema sin abrirlos?

¿Hay alguna forma de cambiar el valor de "PermitRootLogin" /etc/ssh/sshd_configmediante un comando en la terminal?

Quiero cambiar los valores de este archivo sin abrirlo y cambiar el valor de "PermitRootLogin" de sí a no.

Respuesta1

Es perfectamente posible hacerlo con sed, hacer coincidir la línea y cambiar el valor:

sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
  • ^PermitRootLogincoincide con la línea que comienza conPermitRootLogin
  • s/yes/nocambia el valor de la opción de "sí" a "no"

Respuesta2

Quiero cambiar el valor de "PermitRootLogin" de sí a no.

En este caso, usaría Perl (es decir, algo que funcione con campos y que pueda editarse en el lugar; Sed falla en el primero y AWK falla en el segundo):

sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
% grep ^PermitRootLogin /etc/ssh/sshd_config                                                     
PermitRootLogin without-password
% sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
[sudo] password for user: 
% grep ^PermitRootLogin /etc/ssh/sshd_config                                              
PermitRootLogin no

Respuesta3

Puedes cambiarlos con sed, usa la opción -i

sed -i -e 's/old/new/g' file

Consulte al hombre sed para obtener más detalles.

http://www.grymoire.com/Unix/Sed.html

Respuesta4

Cualquier programa que de alguna manera trate con archivos debe emitir open()además read()llamadas al sistema, lo cual se puede verificar con strace. Abrir un archivo sin esas llamadas al sistema es imposible

Su pregunta parece ser si un archivo se puede editar sin un editor de texto. Eso es posible, como han demostrado otros. Mi pequeño aporte aquí es el siguiente:

awk '/^PermitRootLogin/{$2="yes"}1' /etc/ssh/sshd_config > /tmp/sshd_config && mv /tmp/sshd_config /etc/ssh/sshd_config

Básicamente, con AWK, encontramos la línea apropiada, reemplazamos el campo 2, que es "no" por "sí", enviamos todo al archivo tmp y reemplazamos el original con el archivo tmp usando mv.

Recuerde que la propiedad de ese archivo de configuración pertenece a root, por lo que necesitaría sudoacceso (agregar sudoantes mv)

información relacionada