리눅스 환경에서 파일 및 디렉터리를 복사할 때 사용하는 대표적인 명령어가 cp
입니다. 이 포스팅에서는 리눅스 명령어 cp
의 기본 사용법부터 다양한 옵션과 활용 예제까지 자세히 살펴보겠습니다.
목차
리눅스 명령어 cp란?
cp
는 “copy”의 줄임말로, 파일 또는 디렉터리를 복사할 때 사용됩니다. 이 명령어를 사용하면 원본 파일이나 디렉터리를 그대로 복사하여 다른 위치에 동일한 내용을 갖는 파일이나 디렉터리를 생성할 수 있습니다.
기본 사용법
리눅스 명령어 cp
의 기본 사용법은 다음과 같습니다:
cp [옵션] 원본파일 대상파일
ShellScript예를 들어, file1.txt
를 file2.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
옵션을 사용하라고 친절하게 알려줍니다.
-i 옵션(interactive): 덮어쓰기 경고
기본적으로 cp
명령어는 대상 파일이 이미 존재하면 아무 경고 없이 덮어씁니다. 중요한 파일을 실수로 덮어쓰는 것을 방지하기 위해 -i
(interactive) 옵션을 사용하여 확인 메시지를 표시할 수 있습니다.
cp -i file1.txt file2.txt
ShellScript아래 그림은 a5.txt
를 a2.txt
로 복사하려고 할 때, 이미 a2.txt 파일이 있으므로 덮어 쓸 것인지 물어봅니다. 여기에서 y
를 누르면 덮어쓰기가 실행되며, n
을 누르면 복사하지 않습니다.
-v 옵션(verbose): 상세 내용 출력
-v
옵션을 사용하면 복사 과정의 상세 내용을 출력합니다. 이를 통해 복사 과정에서 발생하는 문제를 쉽게 확인할 수 있습니다.
cp -v file1.txt file2.txt
ShellScript~/linux
에 있는 txt 확장자의 파일들을 현재 디렉터리에 복사하게 한 결과입니다. c.txt 파일은 읽을 수 있는 권한이 없어서 파일을 복사하지 못했다는 것을 알 수 있습니다. -v
옵션을 사용하지 않아도 c.txt 파일 같은 경우에 복사되지 않는 것은 알 수 있지만, 다른 파일들이 복사가 얼만큼 어떻게 진행됐는지를 알려주지는 않습니다.
-u 옵션(update): 최신 파일만 복사
-u
옵션은 대상 파일이 원본 파일보다 오래된 경우에만 복사합니다. 이를 통해 불필요한 복사를 줄일 수 있습니다. -v
옵션과 함께 사용하면 어떤 파일들이 업데이트 됐는지 알 수 있습니다.
cp -u file1.txt file2.txt
ShellScript이번에는 -u
옵션을 -v
옵션과 함께 사용해 보았습니다. 왜냐하면 cp
명령어는 기본적으로 어떤 파일이 복사됐는지에 대해서 메시지로 알려주지 않기 때문에 -v
옵션을 이용하지 않으면 파일이 업데이트 됐는지 아닌지 알 수가 없습니다.
아래를 보면 h.txt
파일이 j.txt
보다 오래됐기 때문에 j.txt
파일로 복사된 것을 알 수 있습니다. 하지만 a.txt
는 j.txt
보다 오래되지 않았기 때문에 복사되지 않은 것 또한 확인할 수 있습니다.
-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
를 함께 사용해야 하는 것을 알 수 있습니다.
-L 옵션(link): hard link
기본적으로 명령어 cp
를 이용해서 복사하면 심볼릭 링크는 심볼릭 링크로 복사됩니다. 그런데 심볼릭 링크가 아니라 해당 디렉터리의 실제 내용을 복사하고 싶다면 -L
옵션을 이용하여 복사할 수 있습니다. 이 명령어는 하위 디렉터리를 복사하는 기능이므로 -r
옵션과 함께 사용해야 합니다.
cp -rL sym_link real_dir
ShellScript아래의 예시에서는 심볼릭 링크 shots
에 들어있는 실제 파일들을 shots2
디렉터리로 복사하도록 했습니다.
아래 그림에서 심볼릭 링크로 복사되지 않고 실제 디렉터리로 복사된 것을 확인할 수 있습니다.
–backup 옵션: 백업 파일 생성
--backup
옵션을 사용하면 같은 파일의 이름이 있는 경우 덮어쓰기 전에 백업 파일을 생성합니다.
cp --backup file1.txt file2.txt
ShellScript백업 옵션을 사용하면 아래 그림과 같이 기존에 있던 파일명 뒤에 tilde(~
)가 붙으면서 a.txt~
파일로 백업되고, 복사하려는 파일은 파일 이름대로 a.txt
로 복사됩니다.
주의사항
파일 이름의 공백
파일 이름을 특정해서 복사할 때 특수문자나 스페이스(공백)이 들어가 있다면 따옴표로 묶어서 사용하기 바랍니다. 그렇지 않은 경우 예상하지 않은 결과가 나타날 수 있습니다.
아래의 경우가 그 예입니다. a.txt
파일과 My
파일을 Home
디렉터리로 복사하는 명령인데, 파일이름 My
가 없기 때문에 오류 메시지로 알려주는 상황입니다.
따라서 아래와 같이 따옴표로 묶어서 파일 이름을 사용해야, 원하는 대로 My Home
파일로 복사할 수 있게 됩니다.
파일 퍼미션 문제
간혹 파일에 대한 권한이 없는데, 복사를 해야 하는 경우가 있습니다. 그런 경우에는 sudo
명령어를 이용해서 복사하시기 바랍니다.
아래 그림에서 c.txt
파일은 root
사용자에게만 읽기 권한이 있습니다. 따라서 사용자 ito
는 접근 권한이 없어서 파일을 복사하지 못합니다. 이런 경우에 sudo
명령어를 사용해서 복사할 수 있습니다.
다중 옵션
여러 옵션을 동시에 적용해야 할 때는 붙여 쓰면 보다 편리합니다. 예를 들어, -r 옵션과 -L 옵션을 함께 사용할 때는 앞서 살펴본 -L 옵션의 내용과 같이 -rL 로 함께 사용할 수 있습니다. 물론 -r -L
과 같이 따로 적어줘도 됩니다.
정리
리눅스 명령어 cp
는 파일과 디렉터리를 복사하는 데 필수적인 도구입니다. 기본 사용법부터 다양한 옵션을 통해 유용하게 사용할 수 있으며, 다른 도구와 조합하여 효율적인 작업 환경을 구축할 수 있습니다. 추가로 궁금한 사항이나 더 알고 싶은 내용이 있다면 언제든지 질문해 주세요!
이 글이 여러분의 리눅스 활용에 도움이 되길 바랍니다.