Linux에서 “install” 명령을 사용하여 파일을 복사하는 방법

install 명령어는 리눅스 및 macOS 환경에서 파일을 복사하는 데 사용되는 다용도 도구입니다. 숙련된 사용자에게 매우 유용하며, 이 글을 통해 더 효율적인 작업 방법을 배우실 수 있습니다.

소프트웨어 설치와는 다른 역할

install 명령어는 이름 때문에 오해를 불러일으키기 쉽지만, 실제로는 소프트웨어를 설치하는 데 사용되지 않습니다. Ubuntu 또는 Debian 계열의 배포판에서 소프트웨어 패키지를 설치하려면 apt-get 명령어를 사용해야 하며, 다른 배포판에서는 해당 배포판의 패키지 관리 도구(예: Fedora의 dnf, openSUSE의 zypper)를 사용해야 합니다.

install 명령어의 실제 기능

install 명령어는 cp(복사), chown(소유자 변경), chmod(모드 변경), mkdir(디렉토리 생성), strip(심볼 제거) 등 여러 명령어를 한 번에 실행할 수 있도록 해줍니다. 즉, 파일을 복사하면서 권한을 설정하고 불필요한 정보를 제거하는 등의 작업을 한 번에 처리할 수 있습니다.

install 명령어를 통해 다음과 같은 작업을 수행할 수 있습니다:

  • cp 명령어처럼 파일을 복사합니다.
  • 기존 파일 덮어쓰기 여부를 선택할 수 있습니다.
  • mkdir 명령어처럼 대상 디렉토리가 없을 경우 생성합니다.
  • chmod 명령어처럼 파일의 사용자 권한을 설정합니다.
  • chown 명령어처럼 파일의 소유자를 설정합니다.
  • strip 명령어처럼 실행 파일에서 불필요한 데이터를 제거합니다.

이처럼 다양한 기능을 제공하지만, install 명령어는 다양한 옵션을 가지고 있습니다.

install 명령어의 활용 시점

install 명령어는 매일 사용되는 명령어는 아니지만, 특정 상황에서 매우 유용합니다. 특히 소프트웨어 개발 과정에서 자주 활용됩니다. 새로운 유틸리티를 개발한 후 테스트 환경 외부에서 테스트해야 할 경우, 이 명령어를 사용하여 프로그램을 테스트 디렉토리로 복사하고, 올바른 권한과 소유권을 설정할 수 있습니다. 개발은 반복적인 작업이므로 이러한 일련의 작업을 install 명령어를 통해 효율적으로 처리할 수 있습니다. 또한, 개발이 완료된 유틸리티를 배포할 때도 install 명령어를 사용하여 최종 작업 위치에 복사할 수 있습니다.

install 명령어 사용 예시

프로그래머가 ‘ana’라는 새로운 유틸리티를 개발하고 있다고 가정해 봅시다. 이 유틸리티는 실행 가능한 바이너리 파일과 데이터베이스 파일로 구성되어 있습니다. 테스트 후에는 Linux 시스템의 모든 사용자가 사용할 수 있도록 /usr/local/bin 디렉토리에 복사해야 합니다. 실제 사용 시에는 컴퓨터 환경에 맞춰 파일 이름과 디렉토리 경로를 변경해야 합니다.

개발 과정에서 유틸리티는 ~/test/ana 디렉토리에서 테스트됩니다. 이 디렉토리의 파일들은 특정 그룹의 구성원에게는 읽기 및 실행 권한이 주어져야 하며, 다른 사용자들에게는 읽기 및 실행 권한이 주어져야 합니다. install 명령어는 chmod와 동일한 숫자 표현을 사용하여 권한을 설정할 수 있습니다. 프로그래머는 다음과 같이 권한을 설정하기로 결정했습니다:

  • 소유자: 읽기, 쓰기, 실행
  • 그룹: 읽기, 실행
  • 기타: 실행

install 명령어 사용 방법

프로그래머의 작업 디렉토리는 ~/work입니다. 이 디렉토리에는 ana라는 바이너리 파일과 Words.db라는 데이터베이스 파일이 있습니다. 테스트를 위해 다음과 같이 파일들을 확인해 보겠습니다.

ls -l ana Words.db

ana 유틸리티는 명령줄에서 주어진 문구의 아나그램을 생성합니다. 간단한 테스트를 통해 정상적으로 작동하는지 확인해 보겠습니다.

프로그래머는 “biscuit”이라는 문구로 ana를 실행하여 정상적으로 작동하는 것을 확인했습니다. 이제 ana와 Words.db 파일을 ~/test/ana 디렉토리에 복사하여 개발 환경에서 제대로 작동하는지 확인해야 합니다. 이를 위해 다음과 같은 명령어를 사용할 수 있습니다.

install -D -v ana Words.db -t ~/test/ana

위 명령어에서 사용된 옵션은 다음과 같습니다:

  • D: 필요한 경우 부모 디렉토리를 포함하여 디렉토리를 생성합니다.
  • v: 자세한 정보 출력, 복사되는 각 디렉토리와 파일 목록을 표시합니다.
  • t: 대상 디렉토리.

install 명령어가 ~/test 디렉토리를 생성한 후 ~/test/ana 디렉토리를 생성하고 파일을 복사하는 것을 확인할 수 있습니다. 이제 파일이 올바르게 복사되었는지 확인하기 위해 ~/test/ana 디렉토리의 파일 목록을 확인해 보겠습니다.

ls -l

이제 ~/test/ana 디렉토리에서 ana 유틸리티를 실행하여 테스트를 진행합니다.

유틸리티는 예상대로 작동하지만, 현재 권한 설정이 올바르지 않습니다. 그룹 구성원에게는 읽기 및 실행 권한을, 다른 사용자에게는 실행 권한만을 주어야 합니다. 이를 해결하기 위해 다음과 같은 명령어를 사용할 수 있습니다. sudo를 사용하여 루트 권한으로 명령어를 실행해야 하며, -o 및 -g 옵션에는 이러한 권한이 필요합니다. 명령어를 실행하면 암호를 묻는 메시지가 표시됩니다.

sudo install -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana

위 명령어에서 사용된 옵션은 다음과 같습니다:

  • b: 덮어쓰기 전에 파일의 백업을 만듭니다.
  • S: 백업 파일의 접미사를 정의합니다. 접미사를 제공하지 않으면 ‘~’가 사용됩니다. 여기서는 ‘.bak’ 접미사를 사용합니다.
  • o: 파일 소유자를 dave로 설정합니다.
  • g: 파일 소유자 그룹을 geek로 설정합니다.
  • m: 파일의 모드를 표준 chmod 숫자 구문을 사용하여 설정합니다.

테스트 디렉토리가 이미 존재하므로 -D(디렉토리 생성) 옵션은 더 이상 필요하지 않습니다. 또한 -v(자세한 정보 출력) 옵션도 생략했습니다. ~/test/ana 디렉토리의 파일 목록을 확인하면 파일 세부 정보가 출력됩니다.

ls -l

이제 모든 요구 사항이 충족되었음을 확인할 수 있습니다.

  • 파일이 테스트 디렉토리로 복사되었습니다.
  • 권한이 올바르게 설정되었습니다.
  • dave가 파일의 소유자입니다.
  • geek 그룹이 두 파일의 소유자 그룹입니다.
  • ana.bak 및 Words.db.bak이라는 각 파일의 백업 복사본이 생성되었습니다.

이 모든 작업이 하나의 명령어로 완료되었습니다. 이제 프로그래머는 유틸리티를 최종적으로 변경하고 다시 컴파일합니다. 변경된 파일은 ~/work 디렉토리에서 ~/test/ana 디렉토리로 복사해야 합니다. 이 때 -C(비교) 옵션을 사용하면 원본 파일과 대상 파일이 동일한 경우 복사를 생략할 수 있습니다.

sudo install -C -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana

대상 디렉토리의 파일 목록을 확인하면 ana 파일의 크기가 변경된 것을 확인할 수 있습니다. ana.bak 파일보다 크며 타임스탬프도 변경되었습니다. 이는 ana 파일이 업데이트되었기 때문입니다.

ls -l

Words.db 파일은 변경되지 않았으므로 크기와 타임스탬프가 그대로입니다. -C(비교) 옵션을 사용하면 변경된 파일만 복사하여 시간과 하드 드라이브 공간을 절약할 수 있습니다. 이제 ana 유틸리티가 제대로 작동하는지 다시 테스트해 보겠습니다.

이제 install 명령어를 사용하여 파일을 /usr/local/bin 디렉토리에 복사할 차례입니다. 이 디렉토리에 파일을 복사하면 시스템의 모든 사용자가 유틸리티를 사용할 수 있습니다. /usr/local/bin 디렉토리가 존재하므로 생성할 필요가 없습니다. 마지막 명령어에서 -C(비교) 옵션을 제거하고, 백업이 필요 없으므로 -b(백업) 옵션과 -S(접미사) 옵션을 제거했습니다.

sudo install -o dave -g geek -m 751 ana Words.db -t /usr/local/bin

이제 /usr/local/bin 디렉토리의 파일 목록을 확인해 보겠습니다.

ls -l

마지막 테스트로 홈 디렉토리로 이동하여 새 유틸리티를 호출해 보겠습니다.

ana 명령어 앞에 ./를 붙일 필요가 없습니다. 이는 /usr/local/bin 디렉토리에서 실행됨을 의미합니다. 이제 임무를 완료했습니다.

install 명령어는 바이너리 파일 내부의 중복된 심볼 테이블과 기타 불필요한 데이터를 제거하여 크기를 줄일 수 있습니다. 이를 위해 -s(스트립) 옵션을 사용할 수 있습니다. Words.db는 바이너리 실행 파일이 아니라 데이터베이스 파일이므로 여기서는 제외합니다. ana 파일을 복사하고 크기를 줄이려면 다음과 같은 명령어를 사용할 수 있습니다. 소문자 ‘s’와 함께 -s(스트립) 옵션을 추가하고, -b(백업) 옵션과 -S(접미사) 옵션을 다시 사용했습니다.

sudo install -s -b -S .bak -o dave -g geek -m 751 ana -t /usr/local/bin

/usr/local/bin 디렉토리의 파일 목록을 보면 ana 파일의 크기가 백업 버전과 비교하여 약 60%로 줄어든 것을 확인할 수 있습니다.

ls -l /usr/local/bin

요약

install 명령어는 특정 상황에서 매우 유용한 명령어입니다. 모든 사용자에게 매일 필요한 명령어는 아니지만, 익숙해지면 효율성을 높이고 키 입력 횟수를 줄여주는 강력한 도구입니다.