우분투 cp 명령어 완벽 가이드: 파일 복사부터 권한 유지 백업까지

개요

리눅스 환경에서 가장 기본적이면서도 중요한 파일 및 디렉터리 복사 명령어인 cp의 핵심 사용법을 정리합니다. 단순 복사뿐만 아니라 디렉터리 재귀 복사, 파일 속성 보존(-a), 최신 파일 업데이트(-u), 자동 백업 옵션까지 실무에서 필수적인 패턴을 다룹니다.

기본 파일 복사와 상세 진행 과정 확인 (-v, -i)

cp 명령어 실습을 위한 원본 및 대상 디렉터리를 생성하고 작업 경로로 이동하기 위해 mkdir -p ~/cp_practice/src ~/cp_practice/dest && cd ~/cp_practice 명령어를 실행합니다.

mkdir -p ~/cp_practice/src ~/cp_practice/dest && cd ~/cp_practice

복사 실습에 사용할 테스트 텍스트 파일을 생성하기 위해 echo "Ubuntu cp command tutorial" > src/sample.txt 명령어를 실행합니다.

echo “Ubuntu cp command tutorial” > src/sample.txt

cp 명령어는 파일이나 디렉터리를 지정한 경로로 복사하는 리눅스의 기본 명령어입니다.
-v 옵션을 추가하면 어떤 파일이 어느 경로로 복사되었는지 진행 과정을 터미널에 상세히 출력합니다.
⚙️ [주요 옵션]

-v : 파일 복사 진행 과정을 터미널 화면에 상세히 출력합니다.
-i : 대상 파일이 이미 존재할 경우 덮어쓸지 여부를 확인하는 대화형 메시지를 표시합니다.
-r : 디렉터리와 그 내부의 모든 하위 파일을 재귀적으로 복사합니다.
-p : 원본 파일의 소유자, 그룹, 권한, 수정 시간 등 속성을 그대로 보존하며 복사합니다.
-a : 원본 파일의 모든 속성과 링크 구조를 유지하며 복사하는 아카이브 모드를 실행합니다.
-u : 대상 파일이 없거나 원본 파일이 더 최신인 경우에만 복사를 수행합니다.
-b : 덮어쓰기 전 대상 파일의 백업본을 생성합니다.

cp -v src/sample.txt dest/sample_copy.txt

대상 경로에 파일이 올바르게 복사되었는지 확인하기 위해 ls -l dest/sample_copy.txt 명령어를 실행합니다.

ls -l dest/sample_copy.txt

파일 갱신에 따른 복사 동작을 확인하기 위해 원본 파일의 내용을 변경하는 echo "Updated content" > src/sample.txt 명령어를 실행합니다.

echo “Updated content” > src/sample.txt

-u 옵션을 추가하여 원본 파일이 대상 파일보다 최신인 경우에만 덮어쓰도록 복사를 수행합니다.
수정된 원본 파일이 더 최신 상태이므로 정상적으로 복사가 진행되었음을 터미널 메시지를 통해 확인할 수 있습니다.

cp -v -u src/sample.txt dest/sample_copy.txt

디렉터리 전체 재귀 복사 및 속성 보존 (-r, -a)

디렉터리 구조를 시각적으로 확인하기 위해 apt-get update -qq && apt-get install -y tree 명령어로 관련 패키지를 설치합니다.

apt-get update -qq && apt-get install -y tree

디렉터리 복사 실습을 위해 하위 설정 및 로그 폴더를 포함하는 project 디렉터리를 생성합니다.

mkdir -p ~/cp_practice/project/config ~/cp_practice/project/logs

복사 대상 파일 구성을 위해 설정 파일 app.env를 생성하고 내용을 작성합니다.

echo “PORT=8080” > ~/cp_practice/project/config/app.env

복사 실습에 포함될 로그 파일 app.log를 생성하고 텍스트를 입력합니다.

echo “Service started” > ~/cp_practice/project/logs/app.log

-r 옵션을 사용하여 project 디렉터리와 내부의 모든 하위 파일 및 폴더를 project_backup 경로로 재귀 복사합니다.

cp -r ~/cp_practice/project ~/cp_practice/project_backup

-a 옵션을 사용하여 원본 파일의 권한, 소유권, 타임스탬프 등의 메타데이터를 그대로 보존하며 project_archive 디렉터리로 복사합니다.

cp -a ~/cp_practice/project ~/cp_practice/project_archive

복사 작업이 정상적으로 수행되었는지 확인하기 위해 tree -L 3 ~/cp_practice 명령어로 3단계 깊이의 디렉터리 구조를 확인합니다.

tree -L 3 ~/cp_practice

최신 파일 갱신(-u)과 안전한 자동 백업 복사

자동 백업 및 파일 갱신 복사 실습을 진행할 대상 디렉터리를 생성하기 위해 mkdir -p ~/cp_practice/backup_demo/dest 명령어를 실행합니다.

mkdir -p ~/cp_practice/backup_demo/dest

복사 테스트에 사용할 원본 설정 파일 config.json을 생성하고 초기 내용을 입력하기 위해 echo "Version 1.0" > ~/cp_practice/backup_demo/config.json 명령어를 실행합니다.

echo “Version 1.0” > ~/cp_practice/backup_demo/config.json

생성한 원본 config.json 파일을 대상 디렉터리 경로로 복사합니다.
기본 cp 명령어를 사용하여 원본 파일과 동일한 이름으로 대상 경로에 초기 복사를 완료합니다.

cp ~/cp_practice/backup_demo/config.json ~/cp_practice/backup_demo/dest/config.json

파일 수정 시점에 따른 갱신 복사 동작을 확인하기 위해 1초 대기 후 원본 파일의 내용을 새로운 버전으로 수정합니다.

sleep 1 && echo “Version 2.0” > ~/cp_practice/backup_demo/config.json

-u 옵션과 -v 옵션을 사용하여 원본 파일이 대상 파일보다 최신인 경우에만 덮어쓰도록 복사를 진행합니다.
수정된 원본 파일의 수정 시간이 더 최신 상태이므로 대상 파일에 정상적으로 덮어쓰기가 수행되었음을 터미널 메시지를 통해 확인할 수 있습니다.

cp -u -v ~/cp_practice/backup_demo/config.json ~/cp_practice/backup_demo/dest/config.json

--backup=numbered 옵션을 사용하여 덮어쓰기 전 기존 대상 파일을 번호 형태의 백업 파일로 자동 생성하며 복사를 수행합니다.
실행 결과 기존 대상 파일이 config.json.~1~ 백업본으로 보존된 후 새로운 내용으로 복사되었음을 확인할 수 있습니다.

cp –backup=numbered -v ~/cp_practice/backup_demo/config.json ~/cp_practice/backup_demo/dest/config.json

백업 및 복사 결과가 대상 디렉터리에 정상적으로 반영되었는지 확인하기 위해 ls -la ~/cp_practice/backup_demo/dest 명령어를 실행합니다.
새롭게 복사된 config.json과 함께 이전 상태를 보존한 config.json.~1~ 백업 파일이 함께 존재하는 것을 확인할 수 있습니다.

ls -la ~/cp_practice/backup_demo/dest

다중 파일 일괄 복사와 대상 디렉터리 지정 (-t)

다중 파일 복사 실습을 진행할 목적지 디렉터리를 생성하기 위해 mkdir -p ~/cp_practice/bulk_demo/target 명령어를 실행합니다.

mkdir -p ~/cp_practice/bulk_demo/target

일괄 복사 테스트에 사용할 여러 개의 샘플 로그 파일을 생성하기 위해 touch ~/cp_practice/bulk_demo/report1.log ~/cp_practice/bulk_demo/report2.log ~/cp_practice/bulk_demo/report3.log 명령어를 실행합니다.

touch ~/cp_practice/bulk_demo/report1.log ~/cp_practice/bulk_demo/report2.log ~/cp_practice/bulk_demo/report3.log

-t 옵션을 사용하여 목적지 디렉터리를 먼저 지정하고 와일드카드(*) 패턴에 해당하는 모든 로그 파일을 한 번에 복사합니다.
-v 옵션이 적용되어 각 파일이 대상 디렉터리로 복사되는 진행 과정이 터미널에 상세하게 출력됩니다.

cp -v -t ~/cp_practice/bulk_demo/target ~/cp_practice/bulk_demo/*.log

대상 디렉터리에 모든 로그 파일이 올바르게 복사되었는지 확인하기 위해 ls -l ~/cp_practice/bulk_demo/target 명령어를 실행합니다.
복사 대상이었던 세 개의 로그 파일이 목적지 경로에 정상적으로 존재하는 것을 확인할 수 있습니다.

ls -l ~/cp_practice/bulk_demo/target

모든 실습을 마친 후 사용했던 테스트 디렉터리와 임시 파일들을 깔끔하게 정리하기 위해 rm -rf ~/cp_practice 명령어를 실행합니다.

rm -rf ~/cp_practice

지금까지 우분투에서 기본 파일 복사부터 속성과 권한을 유지하는 백업 옵션까지 cp 명령어의 핵심 활용법을 간단하게 살펴보았습니다.
알려드린 다양한 옵션들을 상황에 맞게 활용하여 더욱 안전하고 효율적인 파일 관리를 진행해보시기 바랍니다.