2009-09-23 17 views
5

Rozumiem, że podczas instalowania programu wiersza poleceń w C++ w systemie Linux/UNIX jest zwyczajowo zamiast pozostawienia go w jego oryginalnym katalogu, aby przenieść go do katalogu, który jest już na ścieżce, więc mam make install wpis:Pliki danych instalacyjnych systemu Linux/UNIX

mv ayane /usr/local/bin 

Patrząc nieco dalej w przyszłość, mam zamiar skończyć z katalogu lub dwa pełnej konfiguracji, danych i plików skryptów, których program potrzebuje czytać, niektóre w uruchamiania, niektóre później na żądanie, aw niektórych przypadkach następnie modyfikować i zapisywać ponownie.

Prowadzi to do pytania, w jaki sposób program może wiedzieć, gdzie znajdują się jego pliki danych. Patrząc w/bin na maszynie wirtualnej Ubuntu Linux, wydaje mi się, że jej nazwa zawiera tylko pliki binarne, więc pliki danych zwykle nie są umieszczone w tym samym katalogu, co program.

Jakie jest zwykle rozwiązanie do umieszczania plików danych w miejscu, które może być znane programowi?

+0

Istotne: http://stackoverflow.com/questions/528399/what-should-linux-unix-make-install-consist-of – dmckee

Odpowiedz

7

Istnieje kilka standardów systemów plików, czytając na FHS lub coś podobnego (zauważ, że istnieją różne podejścia do układu systemu plików).

Zasadniczo, można umieścić swoje wykonywalne pliki binarne w $prefix/bin/, per-Host Configuration idzie do $prefix/etc/, dla każdego użytkownika w katalogu domowym użytkownika, Arch-niezależny statycznych danych do $prefix/share, danych i bibliotek łukowych zależne w $prefix/lib a dane zmienne zwykle przechodzi w /var/lib/.

Lepiej mieć te rzeczy konfigurowalne zarówno podczas kompilacji, jak i w czasie wykonywania. Poza tym zwyczajowo nie pisze się ręcznie Makefiles z obiektami install, warto przyjrzeć się zestawowi autotools lub podobnym (kwestia gustu).

+2

Bardziej sensowne jest umieszczanie danych w przedrostkach $/prefix/share/ i przedrostku $/lib/. A jeśli istnieje więcej niż jeden plik konfiguracyjny:/etc/ PiedPiper

+2

PiedPiper, prawy, kiedy odnosię się do '$ prefix/lib' i' $ prefix/share', nie sugerowałem, że pliki powinny koniecznie być bezpośrednimi potomkami katalogi. –

2

Powinieneś spojrzeć na standard File System Hierarchy.

W skrócie, jeśli program potrzebuje plików systemowych, wówczas konfiguracja powinna się odbyć w /etc. Zasoby, takie jak skrypty i pliki obrazów, są dostępne w wersji /usr/share. Dane środowiska wykonawczego są w postaci /var/run.

Pliki dla każdego użytkownika znajdują się oczywiście w katalogu domowym użytkownika.

Powiązane problemy