Jalankan perbedaan antara file lokal dan jarak jauh

39

Saya terhubung pada host melalui sshdan saya ingin membandingkan (katakanlah dengan diff) file konfigurasi tertentu terhadap rekannya pada host lain, juga dapat diakses melalui ssh, tanpa harus secara manual mengunduh file jarak jauh terlebih dahulu sebelum menjalankan diff.

fduff
sumber
Anda bisa memasang direktori jarak jauh menggunakan SSHFS, dan kemudian mengaksesnya seolah itu lokal.
Barmar

Jawaban:

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

Sumber

polym
sumber
1
Bukankah pipa hanya mengunduh hasil cat, yang sebenarnya hanya file asli?
Stijn de Witt
1
pipa akan mendorong hasil sshperintah remote ke diffyang menunggu untuk dibandingkan stdindengan file lokal.
fduff
1
Mungkin saya salah menafsirkan persyaratan 'tanpa harus mengunduh file jarak jauh'. Saya kira OP berarti 'tanpa harus mengunduh file jarak jauh secara manual'. :) EDIT: Ah, Anda OP. :)
Stijn de Witt
@StijndeWitt, ya saya ingin menghindari harus scp file jarak jauh terlebih dahulu dan kemudian melakukan diff ..
fduff
18

Mencoba:

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

atau menggunakan vimdiff:

vimdiff local_file scp://server//path/to/remote_file
cuonglm
sumber
Apakah diff local_file <(ssh user@server 'cat remote_file')hanya berfungsi untuk SSH tanpa kata sandi? Sepertinya saya tidak bisa mendapatkan prompt kata sandi dengan itu ...
sdbbs
1
@ sdbbs: Substitusi proses berjalan di latar belakang, dan output standar ditulis ke pipa bernama (atau pipa bernama anonim), sehingga Anda tidak mendapatkan prompt kata sandi. Coba cat <(ssh user@server 'cat remote_file')dan cat < <(ssh user@server 'cat remote_file')lihat perbedaannya.
cuonglm
9

Mungkin ini tidak membantu dalam kasus Anda, tetapi saya sering hanya menggunakan

sum -r

pada setiap mesin, dan secara manual membandingkan checksum. Itu memungkinkan untuk perbandingan file bahkan ketika mereka tidak dapat dijangkau melalui koneksi ssh. Tentu saja, semua jawabannya adalah "apakah mereka identik", tetapi seringkali itu cukup untuk kebutuhan saya. Ini juga memudahkan untuk memverifikasi bahwa satu file sama pada 3 atau 4 mesin atau lebih.

MJB
sumber
2
Saya bisa membayangkan bahwa untuk file besar, atau koneksi lambat, ini mungkin sangat berguna. Ini menyimpan pengunduhan seluruh file ketika file sebenarnya berbeda. Script Bash yang lebih baik daripada saya mungkin dapat menggabungkan jawaban ini dengan jawaban di atas yang melibatkan remote catuntuk benar-benar menjalankan catperintah ketika telah ditentukan bahwa file berbeda.
Stijn de Witt
1
Commanding info coreutils 'sum invocation'berkata, antara lain: "'jumlah' disediakan untuk kompatibilitas; program 'cksum' (lihat bagian berikutnya) lebih disukai dalam aplikasi baru."
Teemu Leisti
1

Jika Anda lebih suka pendekatan yang lebih visual dalam sesi terminal Anda. Komandan tengah malam memiliki opsi sistem file jarak jauh (tautan SFTP ... dalam menu) dan opsi membandingkan file visual. Ini tidak diinstal secara default pada kebanyakan sistem Linux tetapi tersedia di sebagian besar repositori dasar. Tangga:

  1. Mulai komandan tengah malam (perintah: mc di folder yang berisi file untuk dibandingkan
  2. Di sisi lain (misalnya Hak menu ) buat tautan sftp ke server lain di folder yang sama ( sftp://<user>@<servername>/<path>).
  3. Menggunakan ins tombol pilih / sorot file yang akan dibandingkan. ( tabperubahan antara panel kiri dan kanan).
  4. Di menu Perintah , pilih Bandingkan file

Catatan: Menu komandan tengah malam biasanya dapat diakses menggunakan mouse di sesi terminal Anda. Itu yang tidak berhasil F9membuat Anda di menu juga.

Terkutuk
sumber