Buduję aplikację wiersza polecenia i muszę zapisać niektóre dane tymczasowe w plikach. Nie wiem, gdzie jest konwencja dla aplikacji do przechowywania pamięci podręcznej w systemach uniksowych (w tym przypadku Ubuntu 12.0.4)?
„Systemy oparte na Uniksie” są zdecydowanie zbyt ogólną kategorią, aby dokonywać wszelkiego rodzaju ogólnych ustaleń, które będą miały zastosowanie do wszystkich systemów opartych na Uniksie. Problem polega na tym, że struktura systemu plików (i „właściwe” / „konwencjonalne” miejsce do umieszczania rzeczy) jest tak bardzo różna w różnych smakach „Uniksa” (jeśli można to tak nazwać), że prawie trzeba sobie z tym poradzić indywidualnie dla każdego przypadku.
Kilka przykładów:
Odpowiedź jest taka, że kanoniczna, społecznie akceptowana, dobrze zintegrowana konwencja o tym, gdzie przechowywać cokolwiek w dowolnym systemie operacyjnym, niezależnie od tego, czy jest to dystrybucja Linuksa, BSD, Solaris, HP-UX itp., Zależy od dokładnych okoliczności . Konkretnie:
apt-get
lub yum
zainstalować go bezpośrednio, bez pobierania instalatora ze strony internetowej?Nie ma prostej odpowiedzi na to pytanie bez uwzględnienia wszystkich czynników. Jednak szczególnie w przypadku Ubuntu 12.04 , jeśli budujesz swój pakiet w .deb
pliku, który ma być dystrybuowany w PPA lub do przesyłania do własnych repozytoriów pakietów Ubuntu ( main
lub universe
), zalecam przechowywanie pamięci podręcznej /var/cache
. Ale dotyczy to tylko Ubuntu i na pewno nie powinieneś przyjmować założenia, że każda dystrybucja lub system operacyjny oparty na Uniksie uzna to za dopuszczalne.
Ponadto, jeśli nie ma żadnych korzyści z zapisywania danych w pamięci podręcznej między systemami, myślę, że może to również należeć do / tmp.
Pamiętaj, że napotkasz problemy z konwencją ścieżkowania dla każdego typu pliku, z którego korzysta Twój program: współdzielone dane, pliki wykonywalne, biblioteki, pliki pomocy, obrazy, dźwięk, strony internetowe i tak dalej. Więc muszę się zastanawiać, jeśli pytasz o pliki pamięci podręcznej, w jaki sposób planujesz obsługiwać inne typy plików. Czy po prostu przyjmujesz naiwne założenia i masz nadzieję, że nikt się z tobą nie zgadza? Jeśli nie przeczytałeś żadnych dokumentów lub standardów Ubuntu sugerujących, gdzie je umieścić, złym pomysłem jest po prostu założenie takiej czy innej rzeczy. Na przykład zawsze trzymanie bibliotek w / usr / lib może być pomyłką, ponieważ w zależności od sytuacji mogą one należeć gdzie indziej.
Ponadto jako programista uważam, że najbardziej odpowiedzialną rzeczą jest umożliwienie użytkownikowi końcowemu decydowania, gdzie umieścić swoje pliki. Możesz ustawić wartości domyślne, ale użytkownicy (i dystrybutorzy) mogą i dostosują kompilację do swoich dystrybucji.
Najprostszym sposobem na to jest zbudowanie programu za pomocą GNU Autoconf . Autoconf to system kompilacji, w którym użytkownik może przekazywać argumenty wiersza polecenia do skryptu kompilacji, aby zmienić ścieżki różnych „typów katalogów” od domyślnych. Prawie każda dystrybucja ma skrypt kompilacji dla każdego pakietu Autoconf, który ustawia odpowiednie dla danej dystrybucji konwencjonalne katalogi dla każdego typu. Mają nawet konkretny typ katalogu pamięci podręcznej: sharedstatedir .
/tmp
folderem. Odpowiedzi na twoje pytania brzmiałyby (pobierz, nie, nie, nie, nie, nie, nie). Prawdopodobnie wydaje się normalne, że większość ludzi doszła do wniosku,/tmp
że jestem nowy w systemach uniksowych, a konwencje oparte na Ubuntu os są mi nieznane. Otwiera to ciekawy pomysł na gem, aby umożliwić buforowanie dysku agnostycznego (agnostic użytkownika). Dzięki, +1 ode mnie.gem
narzędzie. Jednak prawdopodobnie nie byłoby właściwe tworzenie plików w czasie wykonywania w tym samym katalogu, w którym aplikacja jest pobierana przez klejnot. Z drugiej strony, jeśli korzystasz z aplikacji jako użytkownik, potrzebujesz katalogu, który jest przeznaczony do odczytu i zapisu dla użytkowników , a to oznacza albo zmianę uprawnień (co wymaga jeszcze większej pracy integracyjnej systemu w czasie instalacji, takiej jak utworzenie grupy itp.) lub za pomocą globalnego katalogu do odczytu i zapisu, np. / tmp./usr
,/lib
lub/bin
z aplikacji.