install -d
디렉토리를 만들고 install -c
파일을 복사하는 데 사용되는 곳이 많이 있습니다 . 왜 사용하지 mkdir
와 cp
? 사용하면 이점이 install
있습니까?
답변
그것은 당신이하는 일에 달려 있습니다.
이 install
명령은 일반적으로 시스템에 바이너리를 설치하기위한 패키지 및 소스 코드와 함께 제공되는 설치 스크립트에서 사용됩니다. 다른 파일이나 디렉토리를 설치하는 데에도 사용할 수 있습니다. 설치할 파일의 새 권한을 지정하기위한 -d
및 -c
옵션 외에도 동일한 결과를 얻기 위해 -m
a cp
및 a chmod
를 수행 할 필요가 없습니다 . 예를 들어 :
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
대상 그룹과 소유자를 각각 설정하는 옵션 -g
과 옵션도 있습니다 -o
. 이것은에 대한 별도의 호출을 피합니다 chown
. 일반적 install
으로을 사용 하면 파일 작성, 복사, 모드 설정 및 관련 항목을 여러 명령 대신 하나의 명령으로 수행하여 스크립트 를 단축하고 더 간결하게 만들 수 있습니다.
자세한 내용은을 참조하십시오 man install
. 사용법은 패키지 소스 코드 와 함께 제공된 설치 스크립트를 살펴보십시오 .
답변
“install”은 일반적으로 다음 작업을 결합합니다.
- 지정된 파일을 대상 위치에 복사하는 작업은 이전 사본을 사용하는 프로세스와 관련하여 수행됩니다. “cp”와 달리 “install”은 새 파일을 작성하기 전에 파일을 링크 해제하거나 (-S 스위치가있는 BSD 시스템에서) 새 파일을 작성하고 대상 이름으로 원자 이름을 변경하므로 설치와 다시 열기 사이의 경쟁 조건을 피합니다 . 이 파일을 사용하지 않으면 실행중인 이진 파일에 대한 복사 (ETXTBSY 사용)가 실패하거나 라이브러리 파일 또는 데이터 파일이 교체되면 충돌이 발생할 수 있습니다.
- 별도의 명령없이 새 파일에 적절한 자격 증명을 설정하십시오.
- 요청이있을 경우 중간 디렉토리를 만드십시오.
- 대상 파일이 새 버전 (-C 스위치)과 동일한 경우 수정하지 마십시오.
따라서 Unix의 접근 방식에 따라 일부 건물 도구로 만든 파일을 작업 위치에 설치하는 단일의 완전한 조치를 위해 도구를 만들어야합니다.
내가 설명한대로 완전한 개념은 BSD 시스템 ( “xinstall”버전)에서 구현됩니다. 여기서는 “안전 복사”모드 (원자 이름 바꾸기 기능이있는 새 버전)를 여기에 중요하게 취급합니다. coreutils의 Linux 시스템은이 중요한 부분을 놓치고 방관자 프로세스에 의한 삭제와 다시 열기 사이에 경쟁이 발생하기 쉽습니다. 그러나 이것은 패키지 관리자가 다룰 수있었습니다.
답변
외에도 여기에 사용에 대한 이전의 설명에서, 낮은 수준의 차이가 cp
그리고 install
적어도 리눅스에. 기존 파일을 복사하면 파일 cp
의 기존 inode를 덮어 쓰는 동시에 install
항상 동일한 파일 이름으로 새 inode를 만듭니다.
실행중인 바이너리의 새 버전을 설치할 때 차이가 있습니다. 를 사용 cp
하면 EBUSY 오류가 발생하지만 install
성공합니다. 실행중인 바이너리는 여전히 이전 버전을 사용하지만 프로그램을 다시 시작하면 새 버전이 사용됩니다.
답변
해당 디렉토리가 이미 존재하는 경우 :
mkdir -p
소유권 및 파일 모드 비트를 설정하려고 시도합니다install -d
소유권 및 파일 모드 비트를 설정하지 않습니다
이것은입니다 mkdir
과 install
에서 GNU의로 coreutils . 둘 다 동일한 make_dir_parents
기능을 사용 하지만 preserve_existing
매개 변수가 각각 false
또는 로 설정되어 true
있습니다.