리눅스 명령어 cp 사용법 및 7가지 옵션

리눅스 환경에서 파일 및 디렉터리를 복사할 때 사용하는 대표적인 명령어가 cp입니다. 이 포스팅에서는 리눅스 명령어 cp의 기본 사용법부터 다양한 옵션과 활용 예제까지 자세히 살펴보겠습니다.

리눅스 명령어 cp란?

cp는 “copy”의 줄임말로, 파일 또는 디렉터리를 복사할 때 사용됩니다. 이 명령어를 사용하면 원본 파일이나 디렉터리를 그대로 복사하여 다른 위치에 동일한 내용을 갖는 파일이나 디렉터리를 생성할 수 있습니다.

기본 사용법

리눅스 명령어 cp의 기본 사용법은 다음과 같습니다:

cp [옵션] 원본파일 대상파일
ShellScript

예를 들어, file1.txtfile2.txt로 복사하려면 다음과 같이 입력합니다:

cp file1.txt file2.txt
ShellScript

유용한 옵션들

cp 명령어에는 다양한 옵션이 있습니다. 여기서는 자주 사용되는 몇 가지 옵션을 소개합니다.

-r 옵션(recursive): 하위 디렉터리 복사

-r 옵션은 무엇보다도 명령어 cp에서 가장 많이 사용하는 옵션이라고 할 수 있습니다. 하위 디렉터리와 파일들까지 모두 복사할 때는 -r(recursive) 옵션을 사용해야 합니다. 다음 명령어는 linux 디렉터리를 linux2 디렉터리로 복사합니다.

cp -r linux linux2
ShellScript

-r 옵션을 사용하지 않으면 디렉터리 자체가 복사되지 않으며, 아래 그림과 같이 “cp: -r not specified; omitting directory ‘linux'” 메시지를 띄워서 -r 옵션을 사용하라고 친절하게 알려줍니다.

그림 1. 리눅스 명령어 cp 디렉터리 복사 실패하는 경우
그림 1. 리눅스 명령어 cp 디렉터리 복사 실패하는 경우

-i 옵션(interactive): 덮어쓰기 경고

기본적으로 cp 명령어는 대상 파일이 이미 존재하면 아무 경고 없이 덮어씁니다. 중요한 파일을 실수로 덮어쓰는 것을 방지하기 위해 -i(interactive) 옵션을 사용하여 확인 메시지를 표시할 수 있습니다.

cp -i file1.txt file2.txt
ShellScript

아래 그림은 a5.txta2.txt로 복사하려고 할 때, 이미 a2.txt 파일이 있으므로 덮어 쓸 것인지 물어봅니다. 여기에서 y를 누르면 덮어쓰기가 실행되며, n을 누르면 복사하지 않습니다.

그림 2. 리눅스 명령어 cp -i 옵션 덮어쓰기 확인
그림 2. 리눅스 명령어 cp -i 옵션 덮어쓰기 확인

-v 옵션(verbose): 상세 내용 출력

-v 옵션을 사용하면 복사 과정의 상세 내용을 출력합니다. 이를 통해 복사 과정에서 발생하는 문제를 쉽게 확인할 수 있습니다.

cp -v file1.txt file2.txt
ShellScript

~/linux에 있는 txt 확장자의 파일들을 현재 디렉터리에 복사하게 한 결과입니다. c.txt 파일은 읽을 수 있는 권한이 없어서 파일을 복사하지 못했다는 것을 알 수 있습니다. -v 옵션을 사용하지 않아도 c.txt 파일 같은 경우에 복사되지 않는 것은 알 수 있지만, 다른 파일들이 복사가 얼만큼 어떻게 진행됐는지를 알려주지는 않습니다.

그림 3. 리눅스 명령어 cp -v 복사 상세 내용 출력
그림 3. 리눅스 명령어 cp -v 복사 상세 내용 출력

-u 옵션(update): 최신 파일만 복사

-u 옵션은 대상 파일이 원본 파일보다 오래된 경우에만 복사합니다. 이를 통해 불필요한 복사를 줄일 수 있습니다. -v 옵션과 함께 사용하면 어떤 파일들이 업데이트 됐는지 알 수 있습니다.

cp -u file1.txt file2.txt
ShellScript

이번에는 -u 옵션을 -v 옵션과 함께 사용해 보았습니다. 왜냐하면 cp 명령어는 기본적으로 어떤 파일이 복사됐는지에 대해서 메시지로 알려주지 않기 때문에 -v 옵션을 이용하지 않으면 파일이 업데이트 됐는지 아닌지 알 수가 없습니다.

아래를 보면 h.txt 파일이 j.txt보다 오래됐기 때문에 j.txt 파일로 복사된 것을 알 수 있습니다. 하지만 a.txtj.txt보다 오래되지 않았기 때문에 복사되지 않은 것 또한 확인할 수 있습니다.

그림 4. 리눅스 명령어 cp -u 최신 파일만 복사
그림 4. 리눅스 명령어 cp -u 최신 파일만 복사

-p 옵션(preserve): 권한/소유권 복사

리눅스에서 파일을 복사할 때 파일의 권한(permission)과 소유권(ownership)도 때로는 중요한 경우가 있습니다. 기본적으로 cp 명령어는 파일의 내용만 복사하며, 권한과 소유권은 기본 설정으로 적용됩니다. 하지만 -p 옵션을 사용하면 원본 파일의 권한과 소유권을 유지하면서 복사할 수 있습니다.

sudo cp -p file1.txt file2.txt
ShellScript

아래 그림은 /usr/bin/mount 파일을 옵션 없이 mount 파일로 복사, -p 옵션을 이용해서 mount2로 복사, sudo 명령어와 -p 옵션을 이용해서 mount3 파일로 복사한 결과입니다.

chown 명령어로 파일의 소유권을 설정할 때 sudo 명령어가 필요하듯이 cp -p를 이용하려면 sudo를 함께 사용해야 하는 것을 알 수 있습니다.

그림 5. 리눅스 명령어 cp -p 옵션 권한/소유권 복사
그림 5. 리눅스 명령어 cp -p 옵션 권한/소유권 복사

기본적으로 명령어 cp를 이용해서 복사하면 심볼릭 링크는 심볼릭 링크로 복사됩니다. 그런데 심볼릭 링크가 아니라 해당 디렉터리의 실제 내용을 복사하고 싶다면 -L 옵션을 이용하여 복사할 수 있습니다. 이 명령어는 하위 디렉터리를 복사하는 기능이므로 -r 옵션과 함께 사용해야 합니다.

cp -rL sym_link real_dir
ShellScript

아래의 예시에서는 심볼릭 링크 shots에 들어있는 실제 파일들을 shots2 디렉터리로 복사하도록 했습니다.

그림 6. 리눅스 명령어 -L 옵션 심볼릭 링크의 실제 내용 복사
그림 6. 리눅스 명령어 cp -L 옵션 심볼릭 링크의 실제 내용 복사

아래 그림에서 심볼릭 링크로 복사되지 않고 실제 디렉터리로 복사된 것을 확인할 수 있습니다.

그림 7. 리눅스 명령어 -L 옵션 심볼릭 링크의 실제 내용 복사 결과 확인
그림 7. 리눅스 명령어 cp -L 옵션 심볼릭 링크의 실제 내용 복사 결과 확인

–backup 옵션: 백업 파일 생성

--backup 옵션을 사용하면 같은 파일의 이름이 있는 경우 덮어쓰기 전에 백업 파일을 생성합니다.

cp --backup file1.txt file2.txt
ShellScript

백업 옵션을 사용하면 아래 그림과 같이 기존에 있던 파일명 뒤에 tilde(~)가 붙으면서 a.txt~ 파일로 백업되고, 복사하려는 파일은 파일 이름대로 a.txt로 복사됩니다.

그림 8. 리눅스 명령어 --backup 옵션으로 같은 이름의 파일 백업
그림 8. 리눅스 명령어 cp –backup 옵션으로 같은 이름의 파일 백업

주의사항

파일 이름의 공백

파일 이름을 특정해서 복사할 때 특수문자나 스페이스(공백)이 들어가 있다면 따옴표로 묶어서 사용하기 바랍니다. 그렇지 않은 경우 예상하지 않은 결과가 나타날 수 있습니다.

아래의 경우가 그 예입니다. a.txt 파일과 My 파일을 Home 디렉터리로 복사하는 명령인데, 파일이름 My가 없기 때문에 오류 메시지로 알려주는 상황입니다.

그림 9. 리눅스 명령어 cp 사용시 파일이름에 공백이 있을 때 따옴표로 묶지 않은 경우
그림 9. 리눅스 명령어 cp 사용시 파일이름에 공백이 있을 때 따옴표로 묶지 않은 경우

따라서 아래와 같이 따옴표로 묶어서 파일 이름을 사용해야, 원하는 대로 My Home 파일로 복사할 수 있게 됩니다.

그림 10. 리눅스 명령어 cp 사용시 파일이름에 공백이 있을 때 따옴표로 묶어서 처리한 경우
그림 10. 리눅스 명령어 cp 사용시 파일이름에 공백이 있을 때 따옴표로 묶어서 처리한 경우

파일 퍼미션 문제

간혹 파일에 대한 권한이 없는데, 복사를 해야 하는 경우가 있습니다. 그런 경우에는 sudo 명령어를 이용해서 복사하시기 바랍니다.

아래 그림에서 c.txt 파일은 root 사용자에게만 읽기 권한이 있습니다. 따라서 사용자 ito는 접근 권한이 없어서 파일을 복사하지 못합니다. 이런 경우에 sudo 명령어를 사용해서 복사할 수 있습니다.

그림 11. 리눅스 명령어 cp 사용시 sudo 명령어를 이용해서 복사
그림 11. 리눅스 명령어 cp 사용시 sudo 명령어를 이용해서 복사

다중 옵션

여러 옵션을 동시에 적용해야 할 때는 붙여 쓰면 보다 편리합니다. 예를 들어, -r 옵션과 -L 옵션을 함께 사용할 때는 앞서 살펴본 -L 옵션의 내용과 같이 -rL 로 함께 사용할 수 있습니다. 물론 -r -L과 같이 따로 적어줘도 됩니다.

정리

리눅스 명령어 cp는 파일과 디렉터리를 복사하는 데 필수적인 도구입니다. 기본 사용법부터 다양한 옵션을 통해 유용하게 사용할 수 있으며, 다른 도구와 조합하여 효율적인 작업 환경을 구축할 수 있습니다. 추가로 궁금한 사항이나 더 알고 싶은 내용이 있다면 언제든지 질문해 주세요!

이 글이 여러분의 리눅스 활용에 도움이 되길 바랍니다.

Reference

함께 읽으면 좋은 글

Leave a Comment