Viděl jsem install
příkaz používaný v mnoha Makefiles a jeho existence a použití jsou poněkud matoucí. Z manuálových stránek to vypadá jako vyřazení cp
s méně funkcemi, ale předpokládám, že by se nepoužil, pokud by neměl nějakou výhodu oproti cp
. Jaká je dohoda?
Přijatá odpověď:
install
nejen kopíruje soubory, ale také mění své vlastnictví a oprávnění a volitelně odstraňuje ladicí symboly ze spustitelných souborů. Kombinuje cp
s chown
, chmod
a strip
. Je to pohodlný nástroj vyšší úrovně, který provádí běžnou sekvenci základních úkolů.
Výhoda install
přes cp
pro instalaci spustitelných souborů je to, že pokud cíl již existuje, odstraní cílový soubor a vytvoří nový. Tím se zbavíte všech aktuálních vlastností, jako jsou seznamy řízení přístupu a schopnosti, což lze považovat za výhodu i nevýhodu. Při aktualizaci spustitelných souborů, pokud existují spuštěné instance tohoto spustitelného souboru, zůstanou spuštěny bez ovlivnění. Naproti tomu cp
aktualizuje soubor na místě, pokud existuje. Na většině unixových variant to selže s chybou EBUSY¹, pokud je cílem běžící spustitelný soubor; u některých může způsobit zhroucení cíle, protože dynamicky načítá části kódu a úprava souboru způsobí načtení nesmyslného kódu.
install
je příkaz BSD (přidán v 4.2BSD, tj. na začátku 80. let). Nebylo přijato POSIX.
¹ „Textový soubor je zaneprázdněn“. V tomto kontextu „textový soubor“ znamená „binární spustitelný soubor“ z nejasných historických důvodů.