Widziałem w wielu miejscach używanych install -d
do tworzenia katalogów i install -c
kopiowania pliku. Dlaczego nie użyć mkdir
i cp
? Czy istnieje korzyść z używania install
?
Widziałem w wielu miejscach używanych install -d
do tworzenia katalogów i install -c
kopiowania pliku. Dlaczego nie użyć mkdir
i cp
? Czy istnieje korzyść z używania install
?
Odpowiedzi:
To zależy od tego, co robisz.
install
Polecenie jest zwykle używane w skryptach instalacyjnych, które pochodzą z opakowań i kod źródłowy dla instalacji binarny do systemu. Można go również użyć do zainstalowania dowolnego innego pliku lub katalogu. Oprócz opcji -d
i, -c
które masz -m
do określenia nowych uprawnień do pliku, który ma zostać zainstalowany, więc nie musisz wykonywać czynności A cp
i A, chmod
aby uzyskać ten sam wynik. Na przykład:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Masz również opcje -g
i odpowiednio -o
ustawić grupę docelową i właściciela. Pozwala to uniknąć oddzielnych połączeń z chown
. Ogólnie rzecz biorąc, użycie install
skraca skrypt i sprawia, że jest bardziej zwięzły, tworząc pliki, kopiując, ustawiając tryb i powiązane rzeczy w jednym poleceniu zamiast wielu.
W celach informacyjnych patrz man install
. Aby użyć, spójrz na dowolny skrypt instalacyjny dostarczony z kodem źródłowym pakietu .
„Instaluj” zazwyczaj łączy następujące działania:
Tak więc, zgodnie z podejściem uniksowym, należy stworzyć narzędzie do jednego, ale kompletnego działania polegającego na zainstalowaniu pliku wykonanego przez narzędzie budowlane w jego lokalizacji roboczej.
Kompletna koncepcja, którą opisałem, jest zaimplementowana w systemach BSD (w tak zwanej wersji „xinstall”); Traktuję tutaj tryb „bezpiecznego kopiowania” (nowa wersja z atomową zmianą nazwy). Systemy Linux (od coreutils) nie mają tej ważnej części i są podatne na wyścigi między usuwaniem a ponownym otwarciem przez przypadkowy proces; ale mogą to być objęte przez menedżerów pakietów.
Oprócz poprzednich opisów tutaj dotyczących użycia, istnieje niewielka różnica poziomów między, cp
a install
przynajmniej w Linuksie. W przypadku kopiowania na istniejącym pliku, cp
zastępuje on istniejący i-węzeł pliku, a install
zawsze tworzy nowy i-węzeł dla tej samej nazwy pliku.
To robi różnicę podczas instalowania nowej wersji działającego pliku binarnego. Użycie cp
powoduje błąd EBUSY, podczas gdy install
się powiedzie. Działający plik binarny nadal będzie korzystał ze starej wersji, ale nowa wersja jest używana, jeśli program zostanie zrestartowany.
Jeśli dany katalog już istnieje:
mkdir -p
spróbuje ustawić bity własności i trybu plikówinstall -d
nie będzie próbował ustawić bitów własności i trybu plikówTo jest dla mkdir
i install
od coreutils GNU . Oba używają tej samej make_dir_parents
funkcji, ale z preserve_existing
parametrem ustawionym odpowiednio na false
lub true
.
install
lub$(INSTALL)
w plikach makefile oznacza również te kroki jako kroki kopiowania instalacji, a nie niektóre zwykłe kroki kopiowania. To może być przydatne.