Ejecute una diferencia entre archivos locales y remotos

39

Estoy conectado a un host a través de sshy me gustaría comparar (digamos con diff) un cierto archivo de configuración contra su contraparte en otro host, también accesible a través ssh, sin tener que descargar manualmente el archivo remoto antes de ejecutar el diff.

fduff
fuente
Puede montar el directorio remoto usando SSHFS, y luego acceder a él como si fuera local.
Barmar

Respuestas:

57
ssh user@remote_host "cat remote_file.txt" | diff - local_file.txt

Fuente

polimero
fuente
1
¿No descargará la tubería los resultados de cat, que de hecho son solo el archivo original?
Stijn de Witt
1
la tubería empujará el resultado del sshcomando remoto al diffque está esperando para comparar stdincon el archivo local.
fduff
1
Tal vez estoy malinterpretando el requisito 'sin tener que descargar el archivo remoto'. Supongo que OP significa 'sin tener que descargar manualmente el archivo remoto'. :) EDITAR: Ah, eres el OP. :)
Stijn de Witt
@StijndeWitt, sí, quería evitar tener que scp el archivo remoto primero y luego hacer la diferencia ..
fduff
18

Tratar:

diff local_file <(ssh user@server 'cat remote_file')

o usando vimdiff:

vimdiff local_file scp://server//path/to/remote_file
Cuonglm
fuente
¿ diff local_file <(ssh user@server 'cat remote_file')Funciona solo para SSH sin contraseña? Parece que no puedo obtener un mensaje de contraseña con él ...
sdbbs
1
@sdbbs: la sustitución del proceso se ejecutó en segundo plano, y la salida estándar se escribe en la canalización con nombre (o canalización con nombre anónimo), por lo que no obtiene la solicitud de contraseña. Probar cat <(ssh user@server 'cat remote_file')y cat < <(ssh user@server 'cat remote_file')ver las diferencias.
Cuonglm
9

Tal vez esto no sea útil en su caso exacto, pero a menudo simplemente uso

sum -r

en cada máquina y compare manualmente las sumas de verificación. Eso permite comparaciones de archivos incluso cuando no se puede acceder a ellos a través de una conexión ssh. Por supuesto, todo lo que responde es "son idénticos", pero a menudo eso es suficiente para mis necesidades. También facilita verificar que un solo archivo sea el mismo en 3 o 4 o más máquinas.

MJB
fuente
2
Me imagino que para archivos grandes o conexiones lentas, esto podría ser muy útil. Guarda la descarga de todo el archivo para cuando los archivos son realmente diferentes. Un mejor script de Bash que yo probablemente pueda combinar esta respuesta con las respuestas anteriores que involucran un control remoto catpara ejecutar el catcomando solo cuando se ha determinado que los archivos difieren.
Stijn de Witt
1
El comando info coreutils 'sum invocation'dice, entre otras cosas: "se proporciona 'suma' para compatibilidad; el programa 'cksum' (consulte la siguiente sección) es preferible en nuevas aplicaciones".
Teemu Leisti
1

Si prefiere un enfoque más visual en su sesión de terminal. El comandante de medianoche tiene una opción de sistema de archivos remotos (enlace SFTP ... opción en el menú) y una opción de comparación de archivos visuales. No está instalado de manera predeterminada en la mayoría de los sistemas Linux, pero está disponible en la mayoría de los repositorios base. Pasos:

  1. Inicie el comandante de medianoche (comando:) mcen la carpeta que contiene el archivo que se va a comparar
  2. En el otro lado (por ejemplo, el menú Derecha ) cree un enlace sftp al otro servidor en la misma carpeta ( sftp://<user>@<servername>/<path>).
  3. Usando la instecla seleccionar / resaltar los archivos a comparar. ( tabcambia entre el panel izquierdo y derecho).
  4. En el menú Comando , seleccione Comparar archivos

Nota: El menú del comandante de medianoche generalmente se puede acceder usando el mouse en su sesión de terminal. Lo que no funciona también F9te lleva al menú.

Fholst
fuente