Uruchom różnicę między plikami lokalnymi i zdalnymi

39

Jestem połączony na hoście przez sshi chciałbym porównać (powiedzmy z diff) pewien plik konfiguracyjny z jego odpowiednikiem na innym hoście, również dostępnym przez ssh, bez konieczności ręcznego pobrania pliku zdalnego przed uruchomieniem diff.

fduff
źródło
Możesz zamontować katalog zdalny za pomocą SSHFS, a następnie uzyskać do niego dostęp tak, jakby był lokalny.
Barmar

Odpowiedzi:

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

Źródło

polim
źródło
1
Czy potok nie pobierze tylko wyników cat, które w rzeczywistości są tylko oryginalnym plikiem?
Stijn de Witt
1
potok wypchnie wynik sshpolecenia zdalnego do tego, diffktóry oczekuje na porównanie stdinz plikiem lokalnym.
fduff
1
Może źle interpretuję wymóg „bez konieczności pobierania pliku zdalnego”. Myślę, że OP oznacza „bez konieczności ręcznego pobierania zdalnego pliku”. :) EDYCJA: Ach, jesteś OP. :)
Stijn de Witt
@StijndeWitt, tak, chciałem uniknąć scp najpierw pliku zdalnego, a potem zrobić
różnicę
18

Próbować:

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

lub używając vimdiff:

vimdiff local_file scp://server//path/to/remote_file
Cuonglm
źródło
Czy diff local_file <(ssh user@server 'cat remote_file')działa tylko w przypadku SSH bez hasła? Wydaje mi się, że nie jestem w stanie uzyskać hasła ...
sdbbs
1
@sdbbs: Proces podstawiania przebiegał w tle, a standardowe wyjście zapisywane jest do nazwanego potoku (lub anonimowego potoku o nazwie), więc nie pojawia się monit o hasło. Spróbować cat <(ssh user@server 'cat remote_file')i cat < <(ssh user@server 'cat remote_file')zobaczyć różnice.
cuonglm
9

Może nie jest to pomocne w twoim przypadku, ale często po prostu używam

sum -r

na każdej maszynie i ręcznie porównaj sumy kontrolne. Pozwala to na porównywanie plików, nawet jeśli nie są one dostępne przez połączenie ssh. Oczywiście, wszystko, na co odpowiada, to „czy są identyczne”, ale często to wystarcza na moje potrzeby. Ułatwia także sprawdzenie, czy pojedynczy plik jest taki sam na 3 lub 4 lub więcej komputerach.

MJB
źródło
2
Mogę sobie wyobrazić, że w przypadku dużych plików lub powolnych połączeń może to być bardzo przydatne. Zapisuje pobieranie całego pliku, gdy pliki są faktycznie różne. Lepszy skrypt Bash niż ja może prawdopodobnie połączyć tę odpowiedź z powyższymi odpowiedziami obejmującymi zdalne caturuchamianie catpolecenia tylko wtedy, gdy zostanie stwierdzone, że pliki się różnią.
Stijn de Witt
1
Commanding info coreutils 'sum invocation'mówi między innymi: „dla zapewnienia zgodności przewidziano„ sumę ”; w nowych aplikacjach preferowany jest program„ cksum ”(patrz następny rozdział).”
Teemu Leisti,
1

Jeśli wolisz bardziej wizualne podejście w sesji terminalu. Midnight Commander ma opcję zdalnego systemu plików (opcja SFTP link ... w menu) oraz opcję wizualnego porównywania plików. Nie jest instalowany domyślnie w większości systemów Linux, ale jest dostępny w większości bazowych repozytoriów. Kroki:

  1. Uruchom program Midnight Commander (polecenie:) mcw folderze zawierającym plik do porównania
  2. Z drugiej strony (na przykład menu po prawej ) utwórz łącze sftp do innego serwera w tym samym folderze ( sftp://<user>@<servername>/<path>).
  3. Za pomocą insprzycisku wybierz / zaznacz pliki do porównania. ( tabzmiany między lewym a prawym panelem).
  4. W menu Poleceń wybierz Porównaj pliki

Uwaga: do menu komendanta północy można zwykle uzyskać dostęp za pomocą myszy w sesji terminalu. To, co nie działa, F9powoduje także przejście do menu.

Fholst
źródło