Czym różni się install -c od cp

20

Jaka jest różnica między install -c a cp? Większość instalacji zwykle używa install -c, ale na stronie podręcznika nie brzmi to tak, jakby działało inaczej niż cp (z wyjątkiem może ustawionych uprawnień). Kiedy powinienem używać install -c, a kiedy cp?

Sligocki
źródło

Odpowiedzi:

18

Jedną znaczącą różnicą jest to, że cp obcina plik docelowy i rozpoczyna kopiowanie danych ze źródła do pliku docelowego.

Z drugiej strony install najpierw usuwa plik docelowy.

Jest to znaczące, ponieważ jeśli plik docelowy jest już w użyciu, mogą się przydarzyć złe rzeczy każdemu, kto używa tego pliku, na wypadek gdyby na nim cpbył nowy plik. np. nadpisanie uruchomionego pliku wykonywalnego może się nie powieść. Obcinanie pliku danych, który jest zajęty przez proces odczytu / zapisu, może spowodować dość dziwne zachowanie. Jeśli najpierw usuniesz plik docelowy, podobnie jak podczas instalacji, wszystko będzie wyglądać normalnie - usunięty plik nie zostanie faktycznie usunięty, dopóki wszystkie procesy nie zamkną tego pliku.

nos
źródło
3
Dobra odpowiedź. Ale zobacz także cp --remove-destinationw jądrach GNU.
Peter Eisentraut
7

Technicznie różnica między install -ci cppolega na tym, że installustawia uprawnienia do pliku docelowego na rwxr-xr-x. cpzachowuje uprawnienia do pliku źródłowego minus umask. Te domyślne zachowania są przydatne w różnych sytuacjach. Oczywiście, ze wszystkimi opcjami, że zarówno cpi installoferta w dzisiejszych czasach, które zbiegały funkcjonalności.

Obecnie installjest powszechnie stosowany w plikach makefile, cpwszędzie indziej. To rozróżnienie jest czasami przydatne, ponieważ niektóre systemy operacyjne lub systemy instalacyjne umożliwiają podpięcie się do installprogramu w celu zarejestrowania zainstalowanych pakietów. Nowoczesne systemy zarządzania pakietami sprawiają, że ten rodzaj jest przestarzały, ale niektórzy nadal go używają. Również możliwość ustawienia uprawnień do pliku docelowego w tym samym czasie jest bardzo wygodna.

Peter Eisentraut
źródło
4

installNarzędzie, na jej podstawie, jest fantazyjne cp. Ale jako narzędzie specjalnie instaluje, zawiera kilka funkcji, które cptego nie robią. My /usr/bin/installz coreutils GNU nie tylko kopiuje, ale może także zmienić perms / własność jako flagi Arg (oszczędności chgrp, chown, chmodinwokacje) Opcjonalnie do informacji pasek debugowania (oszczędność na stripwezwanie), a także niektóre mojo dla kontekstów SELinux.

Zapewnia jedynie wygodne czynności przydatne przy instalowaniu oprogramowania. Żadne z nich nie zmienia życia, wszystkie są przydatne i sprawiają, że twoje skrypty są czystsze.

Rich Homolka
źródło