웹사이트 검색

Linux에서 cp 명령을 효과적으로 사용하는 방법 [예제 14개]


요약: 따라하기 쉬운 이 가이드에서는 cp 명령의 몇 가지 실제 예를 논의합니다. 이 가이드를 따르면 사용자는 명령줄 인터페이스를 사용하여 Linux에서 쉽게 파일과 디렉터리를 복사할 수 있습니다.

Linux 사용자로서 우리는 때때로 파일 및 디렉터리와 상호 작용합니다. 사용자가 수행하는 일반적인 작업 중 하나는 파일과 디렉터리를 복사하는 것입니다. 물론 그래픽 파일 관리자를 사용하여 복사 작업을 수행할 수 있습니다. 그러나 대부분의 Linux 사용자는 단순성과 풍부한 기능으로 인해 cp 명령 사용을 선호합니다.

초보자 친화적인 이 가이드에서는 cp 명령에 대해 알아봅니다. 이름에서 알 수 있듯이 cp 명령은 특정 경로의 파일과 디렉터리를 복사하는 데 사용됩니다.

이 가이드 전반에 걸쳐 일상적으로 사용할 수 있는 실제 예를 통해 cp 명령의 사용법을 이해할 것입니다.

그럼 시작해 보겠습니다.

Cp 명령 구문

cp 명령의 구문은 다른 Linux 명령과 동일합니다. 상위 수준에서는 옵션인수의 두 부분으로 나뉩니다.

cp [OPTIONS] <SOURCE> <DEST>
cp [OPTIONS] <SOURCE-1> <SOURCE-2> ... <DIRECTORY>

위 구문에서 대괄호 ([])는 선택적 인수를 나타내고, 꺾쇠 괄호 (<>)는 필수 인수를 나타냅니다.

1. 리눅스에서 파일을 복사하는 방법

cp 명령의 기본 용도 중 하나는 파일을 현재 디렉터리에 복사하는 것입니다. 대부분의 경우 사용자는 중요한 구성을 백업하기 위해 이 작업을 수행합니다.

예를 들어 SSH 구성을 업데이트하기 전에 /etc/ssh/sshd_config 파일의 백업 복사본을 만드는 경우가 많습니다.

사용법을 이해하기 위해 간단한 파일을 만들어 보겠습니다.

touch file-1.txt

그런 다음, 다음 명령을 사용하여 파일의 복사본을 만듭니다.

cp file-1.txt file-2.txt

2. 복사 명령 진행률 표시

이전 예에서는 ls 명령을 사용하여 파일 복사 작업이 성공했는지 여부를 확인했습니다. 하지만 단순히 이전 명령의 결과를 확인하기 위해 하나 이상의 명령을 사용하는 것은 의미가 없습니다.

이러한 경우 처리된 모든 파일에 대한 진단을 제공하는 -v 옵션을 사용하여 상세 모드를 활성화할 수 있습니다.

다음 명령을 사용하여 file-1.txt 파일의 복사본을 만들어 보겠습니다.

cp -v file-1.txt file-3.txt

위 출력에서 화살표는 복사되는 파일을 나타냅니다. 왼쪽 인수는 소스 파일이고 오른쪽 인수는 대상 파일입니다.

3. 여러 파일을 디렉토리에 복사하는 방법

지금까지 우리는 단일 파일과 현재 작업 디렉터리만을 사용하여 작업했습니다. 하지만 실제 제작 환경에서는 수많은 파일을 작업해야 합니다. 이러한 환경에서 일반적인 사용 사례 중 하나는 여러 파일을 단일 디렉터리에 복사하는 것입니다.

분명히 이를 달성하기 위해 cp 명령을 여러 번 실행할 수 있지만 이것이 가장 효과적인 방법은 아닙니다. 이러한 작업을 효과적으로 수행하기 위해 cp 명령의 대체 구문을 사용할 수 있습니다.

따라서 먼저 dir-1이라는 이름으로 새 디렉터리를 만듭니다.

mkdir dir-1

이제 단일 명령을 사용하여 세 파일을 모두 dir-1 디렉터리에 복사해 보겠습니다.

cp -v file-1.txt file-2.txt file-3.txt dir-1

위 출력은 모든 파일이 dir-1 디렉터리에 복사되었음을 보여줍니다. 또한 이 대체 구문을 사용하려면 디렉터리가 이미 존재해야 하며 명령의 마지막 인수여야 한다는 점에 유의하는 것이 중요합니다.

4. 파일 덮어쓰기를 방지하는 방법

기본적으로 cp 명령은 대상 파일을 대체합니다. 즉, 대상에 동일한 이름의 파일이 있으면 해당 파일을 덮어씁니다. 그러나 -n 옵션을 사용하면 이 기본 동작을 비활성화할 수 있습니다.

이를 이해하기 위해 기존 파일을 덮어써 보겠습니다.

cp -n -v file-1.txt file-2.txt

이 예에서는 file-2.txt 파일을 덮어쓰지 않았음을 보여주기 위해 -v 옵션을 사용했습니다.

5. 확인 후 파일을 덮어쓰는 방법

이전 예에서는 대상 파일 덮어쓰기를 방지하는 방법을 살펴보았습니다. 그러나 때로는 더 안전한 방법으로 파일 대상을 덮어쓰고 싶을 때가 있습니다.

이러한 경우 명령의 -i 옵션을 사용하여 복사 작업을 대화형으로 만들 수 있습니다. 이 옵션은 경고 메시지를 표시하고 파일을 덮어쓰기 전에 사용자의 확인을 기다립니다.

이를 설명하기 위해 기존 파일을 덮어써 보겠습니다.

cp -i file-1.txt file-2.txt

cp: overwrite 'file-2.txt'?

보시다시피 명령이 확인을 기다리고 있습니다. 다른 Linux 명령과 마찬가지로 'y'를 사용하여 작업을 계속하거나 'n'을 사용하여 작업을 중단할 수 있습니다.

cp 명령의 기본 비대화형 동작은 그다지 안전하지 않습니다. 사용자가 실수로 중요한 구성을 덮어쓸 가능성이 있습니다. 따라서 일부 Linux 배포판에서는 기본적으로 alias 명령을 사용하여 대화형 동작을 시행합니다.

alias cp='cp -i'

6. 소스가 최신인 경우에만 파일 덮어쓰기

이전 예에서는 대화형 모드를 사용하는 방법을 살펴보았습니다. 그러나 때로는 사용자가 실수로 최신 파일을 덮어쓸 수도 있습니다.

이러한 오류가 발생하기 쉬운 경우를 피하기 위해 소스가 대상보다 최신이거나 파일이 대상에 없는 경우에만 복사 작업을 시도하는 -u 옵션을 사용할 수 있습니다.

먼저 소스 파일의 타임스탬프를 업데이트합니다.

touch -t 10101010 file-1.txt
ls -l file-1.txt

위의 예에서는 touch 명령의 -t 옵션을 사용하여 파일의 타임스탬프를 2010년 10월 10일로 설정했습니다.

다음으로 대상 파일의 타임스탬프를 현재 시간으로 업데이트하겠습니다.

touch file-2.txt

이제 -u 옵션을 사용하여 복사 작업을 수행해 보겠습니다.

cp -u -v file-1.txt file-2.txt

여기서는 대상 파일이 원본보다 최신이기 때문에 복사 작업이 시도되지 않았음을 알 수 있습니다.

마지막으로 소스 및 대상 인수를 바꾸고 복사 작업을 수행해 보겠습니다.

cp -u -v file-2.txt file-1.txt

위 출력에서 소스 파일이 대상 파일보다 최신이므로 복사 작업이 성공한 것을 확인할 수 있습니다.

7. 덮어쓰기 전 파일 백업 방법

대상 파일을 덮어쓰기 전에 백업을 수행하도록 cp 명령에 지시할 수 있습니다. 이를 달성하기 위해 자동 백업을 수행하는 --backup 옵션을 사용할 수 있습니다.

cp --backup=numbered -v file-1.txt file-2.txt

이 예에서는 번호가 지정된 백업 정책을 사용했습니다. 이 정책은 백업 파일 이름에 증분 숫자를 사용합니다.

이를 이해하기 위해 동일한 명령을 여러 번 실행하고 출력을 살펴보겠습니다.

cp --backup=numbered -v file-1.txt file-2.txt
cp --backup=numbered -v file-1.txt file-2.txt
cp --backup=numbered -v file-1.txt file-2.txt

8. 파일을 강제로 복사하여 덮어쓰는 방법

이전 몇 가지 예에서는 보다 안전한 방법으로 파일을 덮어쓰는 방법을 살펴보았습니다. 그러나 드문 경우지만 파일을 덮어써야 하는 경우도 있습니다. 하지만 매번 작업이 성공한다는 보장은 없습니다.

예를 들어 대상 파일에 쓰기 권한이 없으면 복사 작업이 실패합니다. 이를 예를 들어 설명하겠습니다.

먼저 대상 파일의 권한을 변경합니다.

chmod 444 file-2.txt
ls -l file-2.txt

이제 file-2.txt 파일을 덮어써 보겠습니다.

cp file-1.txt file-2.txt

위 출력에서 권한 거부 오류로 인해 명령이 실패했음을 확인할 수 있습니다.

이러한 제한을 극복하기 위해 -f 옵션을 사용할 수 있습니다. 이 옵션은 대상 파일을 열 수 없는 경우 대상 파일을 삭제하고 복사 작업을 시도합니다.

이제 -f 옵션을 사용하여 파일을 강제로 덮어씁니다.

cp -f -v file-1.txt file-2.txt

9. 복사하기 전에 대상 파일을 제거하는 방법

이전 예에서는 대상 파일을 실행하는 동안 오류가 발생하면 대상 파일을 제거하는 방법을 살펴보았습니다. 그러나 때로는 대상 파일을 먼저 제거한 다음 복사 작업을 수행해야 하는 경우도 있습니다.

이러한 요구 사항을 충족하려면 --remove-destination 옵션을 사용할 수 있습니다.

cp --remove-destination -v file-1.txt file-2.txt

위 출력에서 cp 명령이 먼저 대상 파일을 제거한 다음 복사 작업을 수행하는 것을 볼 수 있습니다.

10. 복사하는 대신 하드링크 파일을 생성하는 방법

소스 파일의 새 복사본을 만드는 대신 하드 링크를 만들 수 있습니다. 이 옵션은 디스크 공간이 부족한 경우 중요한 역할을 합니다.

이제 -l 옵션을 사용하여 하드 링크를 생성해 보겠습니다.

cp -l -v file-1.txt file-4.txt

이제 두 파일의 inode 번호를 확인하여 하드 링크를 확인하겠습니다.

ls -i1 file-1.txt file-4.txt

위 출력에서 첫 번째 열의 숫자는 inode 번호를 나타냅니다.

11. 복사하는 대신 소프트링크 파일을 생성하는 방법

비슷한 방법으로 아래와 같이 -s 옵션을 사용하여 새 복사본을 만드는 대신 소프트 링크를 만들 수 있습니다.

cp -s -v file-1.txt file-5.txt

이제 심볼릭 링크가 올바르게 생성되었는지 확인해 보겠습니다.

ls -l file-5.txt

위 출력에서 마지막 열은 기호 링크 관계를 나타냅니다.

12. 복사하는 동안 파일 속성을 유지하는 방법

액세스 시간, 수정 시간, 권한 등과 같은 파일과 관련된 다양한 속성이 있습니다. 기본적으로 이러한 속성은 파일을 복사하는 동안 유지되지 않습니다. 이 기본 동작을 무시하려면 -p 옵션을 사용할 수 있습니다.

이를 이해하려면 먼저 file-1.txt의 타임스탬프를 업데이트하세요.

touch -t 10101010 file-1.txt

이제 모든 속성을 유지하여 이 파일의 복사본을 만들어 보겠습니다.

cp -p -v file-1.txt file-6.txt

마지막으로 file-6.txt 파일의 타임스탬프를 확인합니다.

ls -l file-6.txt

13. 반복적으로 복사 작업을 수행하는 방법

지금까지 단일 파일을 복사하는 방법을 살펴보았습니다. 그러나 특정 디렉터리의 모든 파일과 하위 디렉터리를 복사해야 하는 경우가 많습니다.

이러한 경우 -r 또는 -R 옵션을 사용하여 재귀 모드를 사용할 수 있습니다.

이제 디렉터리를 만들고 그 아래에 몇 가지 파일과 하위 디렉터리를 추가해 보겠습니다.

mkdir -p dir-1/dir-2
touch dir-1/file-1.txt dir-1/dir-2/file-2.txt

다음으로 디렉터리 구조가 올바르게 생성되었는지 확인합니다.

tree dir-1

이제 다음 명령을 사용하여 dir-1 디렉터리를 재귀적으로 복사해 보겠습니다.

cp -r -v dir-1 dir-3

마지막으로 모든 파일과 하위 디렉터리가 성공적으로 복사되었는지 확인합니다.

tree dir-3

14. 여러 디렉터리를 복사하는 방법

파일과 마찬가지로 단일 명령을 사용하여 여러 디렉터리를 반복적으로 복사할 수 있습니다. 그러나 이를 달성하려면 대상 디렉터리가 이미 있어야 하며 명령의 마지막 인수여야 합니다. 예를 들어 이것을 이해해 봅시다.

먼저 새 디렉터리를 만듭니다.

mkdir dir-4

이제 아래 명령을 사용하여 dir-1dir-3 디렉터리를 dir-4 디렉터리에 복사해 보겠습니다.

cp -r -v dir-1 dir-3 dir-4

비슷한 방식으로 명령의 -t 옵션을 사용하여 동일한 결과를 얻을 수 있습니다. 이 옵션을 사용하면 대상 디렉터리를 지정할 수 있습니다. 따라서 이를 첫 번째 인수로 사용할 수도 있습니다.

cp -t dir-4 -r -v dir-1 dir-3

이 도움말에서는 cp 명령을 사용하여 파일과 디렉터리를 복사하는 방법에 대해 설명했습니다. 초보자는 Linux 시스템으로 작업하는 동안 일상 생활에서 이러한 예제를 참조할 수 있습니다.

Linux에서 cp 명령의 다른 가장 좋은 예를 알고 계십니까? 아래 댓글로 여러분의 의견을 알려주세요.