Co robi / usr / bin / install oprócz kopiowania?

11
  1. Czy make installz Makefile przez większość czasu dzwonisz /usr/bin/install?

  2. Jaką niezbędną pracę wykonuje /usr/bin/installoprócz kopiowania właśnie skompilowanych plików /usr/bin/local?

  3. Strona podręcznika mówi, że /usr/bin/installkopiuj pliki i ustaw atrybuty. Jakie atrybuty są tak ważne do ustawienia?

  4. Czy po prostu ustawia tryby uprawnień i właściciela / grupę, które nie są konieczne?
Tim
źródło
„Czy instalowanie przy użyciu pliku Makefile odbywa się w większości przypadków przez połączenie / usr / bin / install?” Nie, robi wszystko, co chce. Jest to cel docelowy. Czy masz pytanie dotyczące pliku wykonywalnego instalacji? A może o marce? To nie jest jasne.
Faheem Mitha
obie. @FaheemMitha
Tim
Ok, cóż, 1 i 2 to różne pytania, a odpowiedź na 1 prawdopodobnie nie jest, ale definiuje „przez większość czasu”. W każdym razie nie jestem pewien punktu 1.
Faheem Mitha

Odpowiedzi:

17

install oferuje wiele funkcji oprócz kopiowania plików do katalogu.

  • -sopcja usuwa tablicę symboli z pliku wykonywalnego, zajmują mniej miejsca
  • -mopcja 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/binzapewnia, że ​​każdy może wykonać plik, co jest prawdopodobnie tym, czego programista chce dla pliku w udostępnionym katalogu.
  • -oi -gopcje ustawione właściciela i grupę. Dzięki cp, właściciel i grupa pliku docelowego zostanie ustawiony na UID i GID kto prowadził cp, i cp -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. wallProgram musi być w grupie ttyThe screenprogram musi być grupa utmp, itp
  • zmniejsza liczbę poleceń, które należy umieścić w recepturze makefile. install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)jest bardziej zwięzły niż czterech komend cp, strip, chmod, i chown.

Ostatni punkt jest prawdopodobny, dlaczego installwymyślono to polecenie i dlaczego używa go wiele plików makefile.

Installjednak nie zawsze jest używane. Widziałem, cp -r lib $(DESTDIR)/libkiedy jest całe drzewo pełne rzeczy do skopiowania i ./install.shjeśli deweloper woli użyć niestandardowego skryptu. Wiele pakietów ma install.shpochodzenie od tego, który jest dostarczany z X11, który jest podobny, installale obsługuje -topcję (transformacja), aby zmienić nazwy plików docelowych w określony sposób.

Mark Plotnick
źródło
2
  1. 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 installpolecenia w pliku makefile dla dowolnych procesów instalacyjnych wymienionych w 2, ale znowu installto nie jest POSIX, więc zawsze używanie go może nie być najbardziej przenośnym podejściem

    AFAIK większość narzędzi może być używana do automatycznego generowania plików makefile takich jak automakei cmakebędzie z nich korzystać install.

  2. Ogólnie installsł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.

Graeme
źródło