Terminal pogryzł człowieka: woof
Przemieszczanie się plików pomiędzy komputerami w sieci lokalnej ma wieloletnią tradycję. Pomagają im (plikom) w tym przeróżne protokoły (SMB, NFS, FTP, SSH/scp), dedykowane programy (Dukto), ale zwykle potrzeba chwili i naglącej potrzeby wymusza rozwiązania najprostsze i… tymczasowe. Co zatem pozwoli nam w trywialny sposób przesłać plik/katalog pomiędzy dwoma komputerami w tej sami sieci LAN? W odpowiedzi cała widownia artykułuje głośno – Woof! Woof!.
Woof to prosty programik służący udostępnianiu pojedynczego pliku bądź całego katalogu. Zgodnie z nazwą (Web Offer One File) działa on na zasadzie jeszcze prostszego serwera HTTP, co pozwala pobrać plik ze wskazanego adresu URL czy to przeglądarką, czy też np. narzędziem wget (a także za pomocą woof w wersji 20120531). Co więcej, woof potrafi serwować również całe katalogi które przesyłane są w postaci archiwum bz2/gzip/zip. Działa również transmisja w odwrotną stronę (upload), ale traci na tym terminalowa koszerności, gdyż wymagana jest do tego celu przeglądarka.
Jak to wszystko działa? Zasada użytkowania woof jest banalna – w opcji minimum podajemy jedynie nazwę pliku, który chcemy komuś udostępnić. Woof standardowo zaoferuje go na porcie 8080 pod adresem IP naszego komputera.
#$ woof test.txt
Now serving on http://13.13.13.13:8080/
Aby się dobrać do oferowanego pliku, na drugiej maszynie używamy czy to wget, czy to przeglądarki i podajemy zasugerowany URL.
#$ wget http://13.13.13.13:8080/test.txt
A jeśli chcemy przesłać cały katalog, czy też zmienić port lub adres IP na którym będzie on udostępniony, do akcji wkraczają parametry którymi można nakarmić woof:
#$ woof -h Usage: woof [-i <ip_addr>] [-p <port>] [-c <count>] [<file>] woof [-i <ip_addr>] [-p <port>] [-c <count>] [-z|-j|-Z|-u] <dir> woof [-i <ip_addr>] [-p <port>] [-c <count>] -s woof [-i <ip_addr>] [-p <port>] [-c <count>] -U Serves a single file <count> times via http on port <port> on IP address <ip_addr>. When no filename is specified, or set to '-', then stdin will be read. When a directory is specified, an tar archive gets served. By default it is gzip compressed. You can specify -z for gzip compression, -j for bzip2 compression, -Z for ZIP compression or -u for no compression. You can configure your default compression method in the configuration file described below. When -s is specified instead of a filename, woof distributes itself. When -U is specified, woof provides an upload form and allows uploading files. defaults: count = 1, port = 8080 You can specify different defaults in two locations: /etc/woofrc and ~/.woofrc can be INI-style config files containing the default port and the default count. The file in the home directory takes precedence. The compression methods are "off", "gz", "bz2" or "zip". Sample file: [main] port = 8008 count = 2 ip = 127.0.0.1 compressed = gz
Jak widać, przesyłanie katalogu w archiwum gzip to banalna sprawa:
#$ woof -z wazne_dokumenty
Do tego możemy dołożyć uruchomienie usługi na innym adresie IP i porcie, a także liczbę dozwolonych pobrań (domyślnie po pobraniu pliku woof kończy działalność):
#$ woof -i 127.0.0.1 -p 1234 -c 5 -z wazne_dokumenty
Autor przewidział również „autoreplikację” programu, dzięki czemu druga strona nie mająca zainstalowanego woofa może sobie go od nas pobrać – wystarczy uruchomić program z parametrem „-s”.
Oczekiwanie na plik/katalog uzyskiwane za pomocą parametru „-U” wyrywa się z ram terminala (no chyba, że ktoś użyje Lynx lub Links), bowiem plik prześlemy za pomocą formularza w przeglądarce WWW, do której wklejamy odpowiedni URL.
Nie jest to może wszystko eleganckie czy też zgodne z zasadami bezpieczeństwa (brak praw dostępu, haseł, szyfrowania, itp.), ale pamiętajmy do jakich celów został stworzony woof. A cele te są doraźne i ratunkowe w awaryjnych sytuacjach i na potrzeby niewielkiej grupy lokalnych komputerów.
Program znajdziemy w standardowych repozytoriach większości standardowych dystrybucji. Niestety, w Ubuntu, Mincie i Debianie program jest w starszej wersji nieobsługującej trybu klienckiego (czyli z możliwością pobrania pliku). Natomiast tryb ten obsługuje już woof który znajdziemy w repozytorium AUR popularnego Arch Linuksa lub Manjaro.