Linux / 명령어 / install - 파일 복사와 권한 설정

install은 파일을 복사하면서 권한, 소유자·그룹, 타임스탬프 처리와 대상 디렉터리 생성을 함께 수행하는 명령입니다. 패키지 설치 프로그램이 아니라 빌드 결과물을 정해진 시스템 경로에 배치하는 데 적합한 GNU Coreutils 도구입니다.

이 글에서는 실행 파일과 설정 파일 설치, -d로 디렉터리 생성, 권한·소유권 지정, 디버그 심볼 제거 옵션과 cp와의 차이를 설명합니다.

install 명령어란?

install은 원본을 대상에 복사한 뒤 지정한 파일 모드와 속성을 적용합니다. 기본 생성 모드는 일반적으로 0755이므로 설정 파일처럼 실행 권한이 필요 없는 파일은 -m으로 명시해야 합니다. 소프트웨어 의존성을 해결하는 apt나 dnf와는 목적이 다릅니다.

기본 문법

install [옵션] 원본 대상
install [옵션] 원본 ... 디렉터리
install -d [옵션] 디렉터리 ...

파일명이나 경로에 공백이 있으면 따옴표로 감싸고, 하이픈으로 시작하는 이름은 가능한 경우 -- 뒤에 지정합니다. 지원 옵션은 배포판과 GNU Coreutils 버전에 따라 다를 수 있으므로 install --help와 man install으로 현재 시스템의 설명을 확인하세요.

install 기본 사용법

실행 파일 설치하기

실행 파일을 시스템 경로로 복사하면서 모드를 지정합니다. 시스템 디렉터리에 쓸 권한이 필요하면 sudo를 명령에 명시합니다.

sudo install -m 0755 mytool /usr/local/bin/mytool

설정 파일 설치하기

설정 파일에는 실행 권한이 필요하지 않으므로 적절한 모드를 지정합니다. 기존 설정을 덮어쓰기 전에 별도 백업 정책을 마련하세요.

sudo install -m 0644 mytool.conf /etc/mytool/mytool.conf

대상 디렉터리 만들기

-d는 파일 복사가 아니라 디렉터리 생성 모드입니다. 누락된 부모 경로를 만들고 권한·소유권을 적용할 수 있습니다.

sudo install -d -m 0750 -o myapp -g myapp /var/lib/myapp

설치 후 모드 확인하기

install은 파일 복사와 권한 지정을 한 번에 수행하지만 일반적으로 성공 메시지를 출력하지 않습니다.

printf '#!/bin/sh\n' > demo-tool
install -m 755 demo-tool demo-tool-installed
stat -c '%a %n' demo-tool-installed

예시 출력:

755 demo-tool-installed

이 결과는 대상 파일의 권한 모드만 확인합니다. 스크립트가 실제로 올바르게 실행되는지, 설치 위치가 서비스 경로와 맞는지는 별도로 점검하세요.

주요 옵션

옵션 설명
-m MODE 설치할 파일이나 디렉터리의 권한 모드를 지정합니다.
-o OWNER 소유 사용자를 지정합니다. 일반적으로 적절한 권한이 필요합니다.
-g GROUP 소유 그룹을 지정합니다.
-d, --directory 디렉터리와 필요한 부모 경로를 만듭니다.
-D 마지막 인수의 모든 상위 디렉터리를 만든 뒤 파일을 설치합니다.
-t DIR 대상 디렉터리를 옵션으로 지정합니다.
-p, --preserve-timestamps 원본 파일의 접근·수정 시각을 적용합니다.
-s, --strip 설치 과정에서 심볼 테이블 제거를 시도합니다.
-C, --compare 내용과 일부 속성이 같으면 불필요한 파일 변경을 피합니다.

긴 옵션은 의미를 파악하기 쉽고 스크립트 검토에도 도움이 됩니다. 다만 이식성이 중요한 스크립트에서는 대상 시스템이 해당 GNU 확장 옵션을 지원하는지 먼저 확인하세요.

실전 활용 예제

부모 경로와 함께 파일 설치하기

-D는 최종 대상 파일 경로의 부모가 없을 때 함께 만듭니다. 디렉터리 자체의 별도 소유권 정책이 필요하면 install -d를 먼저 사용하는 편이 명확합니다.

sudo install -D -m 0644 myapp.service /etc/systemd/system/myapp.service

여러 파일을 한 디렉터리로 설치하기

-t로 대상 디렉터리를 앞에서 명시하면 파일 목록을 동적으로 구성하기 쉽습니다.

sudo install -m 0644 -t /usr/local/share/myapp templates/*.html

설치 결과 검증하기

파일이 올바른 경로에 있고 권한·소유권이 예상과 같은지 확인합니다. 실행 파일이라면 배포 대상 시스템에서 필요한 라이브러리와 아키텍처도 확인해야 합니다.

stat -c '%A %U:%G %n' /usr/local/bin/mytool
file /usr/local/bin/mytool

install와 관련 명령 비교

명령·방법 주요 역할 적합한 상황
install 복사와 권한·소유권 설정 빌드 산출물과 설정 파일 배치
cp 일반적인 파일 복사 속성 설정을 별도 단계로 관리할 때
mkdir 일반 디렉터리 생성 작업용 디렉터리 구조를 만들 때
apt·dnf 패키지 의존성과 데이터베이스 관리 배포판 패키지를 설치·업데이트할 때

사용할 때 주의할 점

패키지 관리자를 대신하지 않는다

install은 파일 배치 도구이며 의존성, 제거 기록, 업데이트와 무결성 검증을 관리하지 않습니다. 배포판 패키지로 제공되는 소프트웨어라면 패키지 관리자를 우선 검토하세요.

기본 모드를 그대로 믿지 않는다

설정 파일과 비밀 키에 실행·읽기 권한이 과도하게 부여되지 않도록 -m을 명시하세요.

기존 파일 덮어쓰기 정책을 정한다

운영 환경의 설정 파일을 바로 교체하면 서비스 장애나 사용자 변경 손실이 생길 수 있습니다. 백업, 비교, 원자적 전환과 롤백 절차를 마련하세요.

FAQ

install 명령은 프로그램 패키지를 설치하나요?

아닙니다. 파일을 지정 경로에 복사하고 속성을 설정하는 도구입니다. 패키지 의존성은 관리하지 않습니다.

cp 대신 install을 쓰는 이유는 무엇인가요?

복사와 함께 파일 모드, 소유자·그룹, 대상 디렉터리 생성을 한 명령에서 명시할 수 있어 빌드·배포 스크립트가 분명해집니다.

디렉터리만 만들 수 있나요?

install -d 디렉터리를 사용합니다. -m, -o, -g도 함께 지정할 수 있습니다.

원본 타임스탬프를 유지하려면 어떻게 하나요?

-p 또는 --preserve-timestamps를 사용합니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / column - 텍스트를 읽기 좋은 표 형태로 정렬

Linux / 명령어 / column - 텍스트를 읽기 좋은 표 형태로 정렬

Linux column 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / tail - 파일의 마지막 내용과 로그 실시간 확인

Linux / 명령어 / tail - 파일의 마지막 내용과 로그 실시간 확인

Linux tail 명령어로 파일의 마지막 행과 바이트를 확인하고 새로 추가되는 로그를 추적하는 방법을 설명합니다. -n, -f, -F 차이와 로그 로테이션, 필터링 및 여러 파일 모니터링 예제를 정리합니다.

Linux / 명령어 / uname - 커널과 시스템 아키텍처 확인

Linux / 명령어 / uname - 커널과 시스템 아키텍처 확인

Linux uname 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / tee - 파이프 출력을 화면과 파일에 동시 저장

Linux / 명령어 / tee - 파이프 출력을 화면과 파일에 동시 저장

Linux tee 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / dd - 블록 단위 데이터 복사와 변환

Linux / 명령어 / dd - 블록 단위 데이터 복사와 변환

Linux dd 명령어로 파일과 블록 장치 데이터를 복사하고 변환하는 방법을 설명합니다. if와 of, 블록 크기, 진행률, 디스크 이미지 생성·복원 및 대상 장치 오지정 위험을 정리합니다.

Linux / machine-id 확인 방법과 시스템 복제 시 주의사항

Linux / machine-id 확인 방법과 시스템 복제 시 주의사항

machine-id의 역할과 확인 방법, 복제용 이미지에서 파일을 삭제·비우거나 uninitialized로 설정할 때의 차이를 설명합니다. 운영 중인 서버의 ID 중복을 안전하게 처리하기 위한 점검 사항도 다룹니다.

Linux / 명령어 / last - 로그인 기록과 시스템 부팅 이력 확인

Linux / 명령어 / last - 로그인 기록과 시스템 부팅 이력 확인

Linux last 명령어로 사용자 로그인·로그아웃, 재부팅과 실패한 로그인 이력을 확인하는 방법을 설명합니다. wtmp·btmp, 기간 필터, 상태 해석과 보안 조사 시 한계를 함께 정리합니다.

Linux / 명령어 / whereis - 명령의 바이너리·소스·매뉴얼 위치 찾기

Linux / 명령어 / whereis - 명령의 바이너리·소스·매뉴얼 위치 찾기

Linux whereis 명령어로 프로그램의 바이너리, 소스와 매뉴얼 페이지 위치를 찾는 방법을 설명합니다. 검색 범위 제한과 which·find와의 차이도 정리합니다.

Linux / 명령어 / uptime - 시스템 가동 시간과 부하 확인

Linux / 명령어 / uptime - 시스템 가동 시간과 부하 확인

Linux uptime 명령어의 가동 시간과 1분·5분·15분 평균 부하를 읽는 방법을 설명합니다. CPU 개수, I/O 대기와 함께 부하를 진단하는 순서도 정리합니다.

Linux 강좌 / 프로세스 확인·일시정지·종료하기

Linux 강좌 / 프로세스 확인·일시정지·종료하기

ps, top, pgrep으로 프로세스의 상태와 자원 사용량을 확인합니다. 실습 프로세스에 STOP, CONT, TERM을 보내고 셸 작업과 서비스의 차이를 익힙니다.