Tramp / Dired przesyła pliki bezpośrednio przez ssh zamiast scp zewnętrznie


12

Korzystam z tramp przez ssh, aby uzyskać dostęp do zdalnych plików. W przypadku plików tekstowych działa to naprawdę dobrze, ale ilekroć chcę skopiować większe pliki zdalne na moją maszynę lokalną, tramp używa wolnej metody inline (kodowania pliku za pomocą gzip). Jest to o wiele wolniejsze niż przy użyciu zewnętrznej metody, takiej jak na przykład scp. Jak zmusić emacsa do korzystania z scp podczas przesyłania dużych plików?

Istotna informacja:

  • Używam pliku ~ / .ssh / config, aby uzyskać dostęp do zdalnego komputera. Alias ​​dla tego komputera to hehi09 poniżej. Dostęp jest bez hasła

  • Wiadomości w buforze wiadomości podczas przesyłania:

    Copying /ssh:hehi09:/home/christian/big_file.dat to /home/christian/big_file.dat'...
    Tramp: Inserting `/ssh:hehi09:/home/christian/big_file.dat'...
    Tramp: Encoding remote file `/ssh:hehi09:/home/christian/big_file.dat' with `(gzip <%s | base64)'...
    
  • Wartości:

    • wartość parametru tramp-copy-size-limit wynosi 10240 (znacznie mniej niż rozmiar testowanego pliku)

    • Domyślną wartością metody tramp-default jest „scp”

  • $ scp hehi09:/home/christian/big_file.dat ~/ działa zgodnie z oczekiwaniami z wiersza poleceń i jest znacznie szybszy niż przesyłanie w emacsie

Jakieś pomysły, dlaczego emacs nie używa scp do kopiowania dużych plików? Każda pomoc jest mile widziana!

Odpowiedzi:


17

Kiedy mówisz „Korzystam z trampa przez ssh”, podejrzewam, że otworzyłeś taki plik /ssh:host:/path/to/file. Ma to zawsze używać metody ssh. Jeśli chcesz użyć metody scp, powinieneś użyć /scp:host:/path/to/file. Używa to automatycznie ssh dla krótkich plików i scp dla dużych plików. Jeśli ufasz ustawionej domyślnej metodzie tramp-default-method, możesz użyć krótszej /host:/path/to/file.


Byłoby miło, gdyby zawsze używał zarówno ssh, jak i scp podczas kopiowania plików, niezależnie od tego, czy / ssh czy / scp .. Lub przynajmniej daje ostrzeżenie podczas kopiowania dużych plików binarnych za pomocą / ssh. Zanim zobaczyłem twoją odpowiedź, pomyślałem, że emacs nie jest gotowy do kopiowania dużych plików przez trampa. (ponieważ użyłem tylko / ssh)
xwl

2
W takim przypadku ustaw scpdomyślną metodę. Nawet wtedy Tramp kopiuje małe pliki przez ssh, a duże pliki przez scp. Możesz dostosować limit za pomocą tramp-copy-size-limit.
Michael Albinus,

5
Począwszy od Emacsa 26, metoda jest obecnie obowiązkowa w zdalnych nazwach plików. Zawsze musisz powiedzieć /scp:host:/path/to/filelub /ssh:host:/path/to/file.
Michael Albinus

0

Ponieważ musisz ustawić go w ~/.emacspliku. Mimo to Emacs jest edytorem tekstowym, a nie klientem SFTP lub FTP, używa tego base64kodowania w sshmetodzie, która powoduje, że jest on zbyt wolny do przesyłania plików.


Przepraszam, ale to nieprawda. Jak wynika z przyjętej odpowiedzi, możesz zaufać domyślnemu wyborowi lub podjąć wyraźną decyzję dla każdego połączenia. Jeśli używasz, sshmasz rację, że base64konwersja ma miejsce, co jest powolne w przypadku dużych plików. Jednak jeśli go użyjesz scp, tak nie jest. Emacs jest w stanie dobrze wykonywać polecenia, które nie zajmują się „tekstem”. Na koniec, nie dziel się z użytkownikami Emacsa, że ​​ich ulubionym systemem operacyjnym jest edytor tekstu;)
Chris

Już skonfigurowałem scpi base64konwersja nadal występowała. Byłoby to znaczące, gdyby tak się nie stało, gdy prawdopodobnie byłaby to główna aplikacja do połączeń SFTP. Chociaż jest używany jako główny edytor tekstu i menedżer plików.
Ronald71

Masz rację, jakoś udało się tutaj zrobić to scpmetodą, bez base64konwersji, obracając to szybciej.
Ronald71

To jest dziwne. Nie potrzebowałem żadnych specjalnych ustawień, scpaby nie używać base64kodowania. Czy mógłbyś szybko podzielić się tym, co było w twoim przypadku dla kogoś, kto wpadnie tutaj w przyszłości?
Chris

Udało się to już zrobić, @Chris. Główny problem polegał na tym, że TRAMP diredpołączenie było otwarte ssh, a następnie uruchomiono scppolecenie, które uniemożliwiło base64konwersję. Po uruchomieniu zarówno metody TRAMP diredpołączenia, jak i kopiowania zarówno scpmetodą, zignorował base64konwersję i zrobił to szybciej.
Ronald71
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.