Czy
make install
z Makefile przez większość czasu dzwonisz/usr/bin/install
?Jaką niezbędną pracę wykonuje
/usr/bin/install
oprócz kopiowania właśnie skompilowanych plików/usr/bin/local
?Strona podręcznika mówi, że
/usr/bin/install
kopiuj pliki i ustaw atrybuty. Jakie atrybuty są tak ważne do ustawienia?- Czy po prostu ustawia tryby uprawnień i właściciela / grupę, które nie są konieczne?
11
Odpowiedzi:
install
oferuje wiele funkcji oprócz kopiowania plików do katalogu.-s
opcja usuwa tablicę symboli z pliku wykonywalnego, zajmują mniej miejsca-m
opcja ustawia bity uprawnień. Pliki znajdujące się w katalogu programisty zostały utworzone z zastrzeżeniem jego umask, co może uniemożliwić wykonanie ich przez innych.install -m 755 file1 /usr/local/bin
zapewnia, że każdy może wykonać plik, co jest prawdopodobnie tym, czego programista chce dla pliku w udostępnionym katalogu.-o
i-g
opcje ustawione właściciela i grupę. Dziękicp
, właściciel i grupa pliku docelowego zostanie ustawiony na UID i GID kto prowadziłcp
, icp -p
, właściciela i grupę pliku docelowym byłaby taka sama jak pliku w katalogu build, którego potęga ani być tym, czego chce programista.wall
Program musi być w grupietty
Thescreen
program musi być grupautmp
, itpinstall -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)
jest bardziej zwięzły niż czterech komendcp
,strip
,chmod
, ichown
.Ostatni punkt jest prawdopodobny, dlaczego
install
wymyślono to polecenie i dlaczego używa go wiele plików makefile.Install
jednak nie zawsze jest używane. Widziałem,cp -r lib $(DESTDIR)/lib
kiedy jest całe drzewo pełne rzeczy do skopiowania i./install.sh
jeśli deweloper woli użyć niestandardowego skryptu. Wiele pakietów mainstall.sh
pochodzenie od tego, który jest dostarczany z X11, który jest podobny,install
ale obsługuje-t
opcję (transformacja), aby zmienić nazwy plików docelowych w określony sposób.źródło
Ponieważ polecenia używane w pliku makefile są w zasadzie zależne od twórców projektu, trudno jest tutaj podać jednoznaczną odpowiedź. Generalnie powiedziałbym, że dobrą praktyką jest używanie
install
polecenia w pliku makefile dla dowolnych procesów instalacyjnych wymienionych w 2, ale znowuinstall
to nie jest POSIX, więc zawsze używanie go może nie być najbardziej przenośnym podejściemAFAIK większość narzędzi może być używana do automatycznego generowania plików makefile takich jak
automake
icmake
będzie z nich korzystaćinstall
.Ogólnie
install
służy do kopiowania plików i ustawiania uprawnień / właściciela / grupy w jednym poleceniu, jak mówisz. Inną często używaną funkcją jest usuwanie niepotrzebnych symboli (np. Symboli debugowania) z pliku binarnego, który już ich nie potrzebuje. Ma także kilka dodatkowych opcji, takich jak tworzenie kopii zapasowych przed instalacją i pracą w kontekście SELinux, które mogą być przydatne.Które uprawnienia do wyboru zależą od samego pliku. Większość zainstalowanych plików jest czytelna dla wszystkich, ale tylko do zapisu przez root (chodzi o to, aby umieścić pliki programu w miejscu, gdzie są dostępne dla wszystkich, ale nie można ich modyfikować). Nie dzieje się tak we wszystkim, jeśli plik zawiera poufne dane, często ogranicza się dostęp do grupy lub tylko rootowanie.
źródło