Z pewnością wśród technologii systemów plików, FUSE (Filesystem in USErspace) jest jednym z przydatniejszych narzędzi jakie do tej pory stworzono. Na jego bazie powstało już wiele ciekawych i pożytecznych projektów, z których najbardziej popularny to ntfs-3g – pozwalający montować w trybie odczytu i zapisu partycje NTFS.
Postanowiłem przybliżyć nieco najciekawsze zastosowania FUSE – w szczególności takie, o których mało kto słyszał, a mogą być bardzo przydatne do codziennej pracy.
Na pierwszy ogień pójdzie dzisiaj cmdfs – “poleceniowy system plików”, który pozwala na wykonywanie określonych poleceń na wybranych plikach. Dzięki zastosowaniu cmdfs możemy w określonym katalogu otrzymywać automatycznie przetworzone pliki, np. przeskalowane i obrobione obrazki, odpowiednio sparsowane pliki tekstowe, wygenerowane pliki PDF itp.
Strona domowa projektu:
Składnia polecenia:
cmdfs <katalog źródłowy> <miejsce montowania> [opcje]
opcje:
-o command=<polecenie shell>
uruchamiane polecenie [domyślnie: cat]
-o extension=jpg[;gif[;…]] wybrane rozszerzenia plików na których polecenie ma operować
-o path-re=<wyrażenie regularne>
wyrażenie regularne określające ścieżki do zastosowania polecenia
-o mime-re=<wyrażenie regularne>
wyrażenie regularne określające typ plików do zastosowania polecenia (jak
zwracane przez file -b –mime-type)
-o link-thru
opcja wyświetlająca linki do plików źródłowych, które normalnie są niewidoczne
-o hide-empty-dirs
opcja blokująca wyświetlanie katalogów nie zawierających wybranego rodzaju plików
-o monitor
śledzenie na bieżąco katalogu źródłowego
-o cache-dir=<katalog>
zmiana położenia katalogu tymczasowego dla tworzonych plików (domyślnie
/tmp/cmdfs-cache.)
-o cache-size=<rozmiar w Mb>
ograniczenie rozmiaru katalogu tymczasowego do określonej wielkości
-o cache-entries=<liczba>
maksymalna liczba plików jaka może być utworzona w katalogu tymczasowym,
w przypadku włączenia tej opcji najstarsze pliki będą usuwane [domyślnie bez limitu]
-o cache-expiry=<czas w sekundach>
czas po jakim pliki zostaną zastąpione przez nowe [domyśnie bez limitu]
Przykład:
Najprostszym przykładem będzie automatyczne skalowanie obrazków za pomocą polecenia convert, wchodzącego w skład pakietu ImageMagick. Zakładamy, że mamy katalog “/home/user/fotki/” do którego wrzucamy oryginalne zdjęcia, zaś w katalogu “/home/user/miniaturki/” chcemy mieć miniaturki tych zdjęć – bez ręcznego ich skalowania.
W takim przypadku polecenie, które będzie opcją montowania może wyglądać następująco:
command=convert – -resize 20% –
Dobrze jest również określić zakres plików, które powinny być przetwarzane – nie planujemy przecież skalować przypadkowo umieszczonych tam plików MP3:
extension=jpg;gif;png
Teraz wystarczy zamontować nasz system plików poleceniem:
cmdfs /home/user/fotki /home/user/miniaturki “-ocommand=convert – -resize 20% -,extension=jpg;gif;png”
Oczywiście po restarcie systemu nasz system plików zniknie, więc żeby przy każdym starcie systemu był on montowany musimy dodać odpowiedni wpis do pliku /etc/fstab:
cmdfs#/home/user/fotki /home/user/miniaturki fuse user,allow_other,command=convert\040-\040-resize\04020%\040-,monitor,extension=jpg;gif;png 0 0
Pamiętajmy, aby przy tworzeniu wpisu zamienić spacje na znaki \040
To tylko prosty przykład, mam jednak nadzieję, że twórczy Czytelnicy pochwalą się innymi ciekawymi zastosowaniami cmdfs – z chęcią je opublikuję, lub proszę się chwalić w komentarzach.