본문 바로가기
리눅스

cp (Unix)

by 다움위키 2023. 12. 19.

컴퓨팅에서 cp파일디렉토리 복사를 위한 다양한 유닉스유닉스-계열 운영 시스템에서 명령입니다. 그 명령은 파일을 또 다른 파일로 복사하거나, 하나 이상의 파일을 디렉터리로 복사하거나, 전체 디렉터리를 다른 디렉터리로 복사하기 위해 프로그램에 제공된 인수의 유형에 의해 표현된 세 가지 주요 작동의 모드를 가집니다.

유틸리티는 나아가서 수행된 작업을 자세히 설명하기 위해 다양한 명령줄 옵션 플래그를 허용합니다. 두 가지 주요 사양은 POSIX cpGNU cp입니다. GNU cp는 POSIX 버전에 비해 많은 추가적인 옵션을 가집니다.

그 명령은 EFI 셸에서도 사용할 수 있습니다.

History

cp버전 1 유닉스의 일부였습니다. GNU coreutils에 번들된 cp 버전은 Torbjorn Granlund, David MacKenzie 및 Jim Meyering에 의해 작성되었습니다.

Operating modes

cp는 세 가지 주요 작동의 모드를 가집니다. 이들 모드는 호출 시 프로그램에 제공된 인수의 유형과 개수에서 추론됩니다.

  • 프로그램이 파일에 대한 경로 이름의 둘의 인수를 가질 때, 프로그램은 첫 번째 파일의 내용을 두 번째 파일에 복사하고, 필요하면 두 번째 파일을 생성합니다.
  • 프로그램이 파일의 경로 이름에 대한 하나 이상의 인수를 갖고 디렉토리에 대한 경로의 인수 다음에 올 때, 프로그램은 각 소스 파일을 대상 디렉토리에 복사하며, 아직 존재하지 않는 임의의 파일을 생성합니다.
  • 프로그램의 인수가 두 디렉토리의 경로 이름일 때, cp는 소스 디렉토리의 모든 파일을 대상 디렉토리로 복사하며, 필요한 파일 또는 디렉토리를 생성합니다. 이 작동 모드는 디렉토리의 재귀 복사를 나타내기 위해 추가 옵션 플래그, 전형적으로 r을 요구합니다. 만약 대상 디렉터리가 이미 존재하면, 원본이 대상으로 복사되지만, 만약 대상이 존재하지 않으면 새로운 디렉터리가 생성됩니다.

Usage

한 파일을 또 다른 파일에 복사하기:

cp [-fHip][--] sourcefile targetfile

파일(들)을 디렉토리에 복사하기:

cp [-fHip] [--] sourcefile... targetdirectory

디렉토리를 디렉토리에 복사하기 (-r 또는 -R이 사용되어야 합니다):

cp -r|-R [-fHip] [--]  sourcedirectory... targetdirectory

Option flags

  • f (force) – 만약 파일이 쓰기 작업을 위해 열리지 않으면, 대상 파일의 제거를 지정합니다. 제거는 cp 명령에 의해 수행된 임의의 복사보다 먼저 수행됩니다.
  • H (dereference) – 목적지가 대상에 대한 심볼릭 링크가 아닌 대상 파일을 가지도록 파일에 있도록 cp 명령이 심볼릭 링크 (symlinks)를 따르도록 만듭니다.
  • i (interactive) – 덮어쓸 파일 이름을 묻는 메시지가 나타납니다. 이것은 TargetDirectory 또는 TargetFile 매개변수가 SourceFile 또는 SourceDirectory 매개변수에 지정된 파일과 이름이 같은 파일을 포함하면 발생합니다. 만약 y (또는 y에 동등한 로케일)를 입력하면, cp 명령이 계속됩니다. 임의의 다른 답변은 cp 명령이 파일을 덮어쓰는 것을 방지합니다.
  • p (preserve) – p 플래그는 해당 대상에 있는 각 소스 경로의 다음 특성을 유지합니다: 마지막 데이터 수정 시간마지막 접근 시간, 소유권 (이를 수행할 권한이 있는 경우에만), 및 파일 권한 비트를 유지합니다.
  • R or r (recursive) – 디렉토리를 재귀적으로 복사합니다.

Examples

현재 디렉토리에 파일의 사본을 생성합니다:

cp prog.c prog.bak

이것은 prog.c를 prog.bak에 복사합니다. 만약 prog.bak 파일이 존재하지 않으면, cp 명령이 그것을 만듭니다. 만약 그것이 존재하면, cp 명령은 해당 내용을 prog.c 파일의 내용으로 대체합니다.

현재 디렉터리에 있는 두 개의 파일을 또 다른 디렉터리로 복사합니다:

cp jones smith /home/nick/clients

이것은 파일 jones를 /home/nick/clients/jones에 복사되고 smith를 /home/nick/clients/smith에 복사합니다.

파일을 새로운 파일에 복사하고 원본 파일과 결합된 수정 날짜, 시간 및 접근 제어 목록을 유지합니다.

cp -p smith smith.jr

이것은 smith 파일을 smith.jr 파일에 복사됩니다. 현재 날짜 및 시간 스탬프로 파일을 생성하는 대신 시스템은 smith.jr 파일에 smith 파일과 같은 날짜 및 시간을 제공합니다. smith.jr 파일은 역시 smith 파일의 접근 제어 보호도 상속합니다.

모든 파일과 하위디렉터리를 포함하여 하나의 디렉터리를 또 다른 디렉터리로 복사합니다:

cp -R /home/nick/clients /home/nick/customers

이것은 모든 파일, 하위 디렉터리 및 해당 하위디렉터리의 파일을 포함하여 디렉터리 clients를 디렉터리 customers/clients에 복사됩니다. 일부 유닉스 시스템은 디렉토리 경로의 종료에 따라 이 모드에서 다르게 동작합니다. GNU 시스템에서 cp -R /home/nick/clients/ /home/nick/customers를 사용하면, 그것은 예상대로 작동합니다; 어쨌든, BSD 시스템에서, 그것은 디렉토리 clients 자체 대신 "clients" 디렉토리의 모든 contents를 복사합니다. 같은 것은 만약 소스 디렉토리의 경로가 . 또는 .. (후행 슬래시 포함 또는 제외)로 끝나면 GNU와 BSD 시스템 둘 다에서 발생합니다.

존재하는 파일에 대한 파일의 복사는 업데이트 모드에서 존재하는 파일을 엶으로써 수행되며, 따라서 쓰기 허가권을 요구하고 대상 파일이 원래 가지고 있던 권한을 유지하는 파일 inode를 보존합니다.

Related Unix commands

  • cpio – 전체 디렉토리 구조를 한 위치에서 또 다른 위치로 복사합니다
  • tar – 파일의 아카이브를 생성합니다
  • link – 파일 또는 디렉토리에 대한 링크를 생성하기 위한 시스템 호출
  • ln – 파일 또는 디렉토리에 대한 링크를 생성합니다
  • mv – 파일 또는 디렉토리를 이동합니다
  • rm – 파일 또는 디렉토리를 제거합니다
  • unlink – 파일 또는 디렉토리를 제거하기 위한 시스템 호출
  • chmod – 파일 또는 디렉토리에 대한 모드 (일명 허가권)을 변경합니다
  • chown – 파일 또는 디렉토리에 대한 소유자를 변경합니다
  • chgrp – 파일 또는 디렉토리에 대한 그룹을 변경합니다
  • uucp – 유닉스에서 유닉스로 복사합니다
  • scp – SSH를 통한 보안 복사
  • progress, cp, mv, dd에 대해 진행 상황을 보여주는 리눅스 도구.

External links