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 / 명령어 / mktemp - 안전한 임시 파일과 디렉터리 생성

Linux / 명령어 / mktemp - 안전한 임시 파일과 디렉터리 생성

Linux mktemp 명령어로 예측하기 어려운 이름의 임시 파일과 디렉터리를 안전하게 만드는 방법을 설명합니다. 템플릿, TMPDIR, trap을 이용한 정리와 -u 옵션의 위험도 알아봅니다.

Linux / 명령어 / man - 명령어 매뉴얼 확인

Linux / 명령어 / man - 명령어 매뉴얼 확인

man 명령어로 리눅스 매뉴얼을 읽고 검색하는 방법을 설명합니다. 매뉴얼 섹션, 화면 이동, 키워드 검색, 셸 내장 명령 확인과 문서가 없을 때의 해결 방법을 함께 정리합니다.

Linux / 명령어 / type - 명령어 유형과 실행 대상 확인

Linux / 명령어 / type - 명령어 유형과 실행 대상 확인

Bash type 명령어로 별칭, 예약어, 함수, 내장 명령과 실행 파일을 구분하는 방법을 설명합니다. 모든 후보와 경로 확인, command -v·which와의 차이 및 스크립트 활용법을 다룹니다.

Linux / 명령어 / lsblk - 디스크·파티션 구조와 마운트 지점 확인

Linux / 명령어 / lsblk - 디스크·파티션 구조와 마운트 지점 확인

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

Linux / 명령어 / ethtool - 네트워크 링크·드라이버 정보 확인

Linux / 명령어 / ethtool - 네트워크 링크·드라이버 정보 확인

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

Linux / 명령어 / sync - 버퍼에 남은 쓰기 데이터 저장 요청

Linux / 명령어 / sync - 버퍼에 남은 쓰기 데이터 저장 요청

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

Linux / 명령어 / dpkg - 로컬 DEB 패키지 설치와 설치 정보 조회

Linux / 명령어 / dpkg - 로컬 DEB 패키지 설치와 설치 정보 조회

Linux dpkg 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / fold - 긴 행을 지정한 너비로 나누기

Linux / 명령어 / fold - 긴 행을 지정한 너비로 나누기

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

Linux / 명령어 / stat - 파일 정보와 메타데이터 확인

Linux / 명령어 / stat - 파일 정보와 메타데이터 확인

Linux stat 명령어로 파일 크기, 권한, 소유자, inode와 타임스탬프를 확인하는 방법을 설명합니다. atime·mtime·ctime·Birth의 차이와 출력 형식, 파일 시스템 조회법도 정리합니다.

Linux / 명령어 / pkill - 이름으로 프로세스에 시그널 보내기

Linux / 명령어 / pkill - 이름으로 프로세스에 시그널 보내기

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