본문 바로가기

IT's Life/Linux

Linux cp 명령 : 파일 및 디렉토리 복사

cp 명령은 주로 파일과 디렉토리를 복사하는 데 사용되며 일부 옵션을 사용하면 전체 디렉토리를 복사하고 이전 파일과 새 파일을 업그레이드 할 수도 있습니다. 

cp 명령의 기본 형식은 다음과 같습니다.

[root @ localhost ~] # cp [옵션] 소스 파일 객체 파일

옵션 :

  • -a : -d, -p, -r 옵션 모음과 동일하며 이러한 옵션을 하나씩 소개합니다.
  • -d : 소스 파일이 소프트 링크 (하드 링크에는 유효하지 않음) 인 경우 복사 된 대상 파일도 소프트 링크입니다.
  • -i : 대상 파일이 이미 있는지 묻고 덮어 쓰는지 묻습니다.
  • -l : 소스 파일을 복사하는 대신 대상 파일을 소스 파일의 하드 링크 파일로 작성하십시오.
  • -s : 소스 파일을 복사하는 대신 대상 파일을 소스 파일의 소프트 링크 파일로 작성하십시오.
  • -p : 대상 파일은 복사 후 소스 파일의 속성 (소유자, 그룹, 권한 및 시간 포함)을 유지합니다.
  • -r : 디렉토리를 복사하는 데 사용되는 재귀 복사;
  • -u : 대상 파일이 소스 파일과 다른 경우이 옵션을 사용하여 대상 파일을 업데이트하십시오이 옵션을 사용하여 파일을 업그레이드하고 백업 할 수 있습니다.

소스 파일이 둘 이상있을 수 있지만이 경우 대상 파일은 디렉토리 여야합니다.

여기의 소프트 링크는 Windows 시스템의 바로 가기와 유사하지만 하드 링크는 파일 시스템의 inode 번호를 통해 새 파일 이름을 생성합니다. 소프트 링크 나 하드 링크를 복사해도 소스 파일이 복사되지 않습니다. 소프트 링크 및 하드 링크에 대한 자세한 내용은 Linux ln 명령 섹션을 참조하십시오.


[예 1] 

cp 명령의 기본 사용법 cp 명령은 파일을 복사하거나 디렉토리를 복사 할 수 있습니다. 먼저 파일 복사 방법을 살펴 보겠습니다. 예를 들면 다음과 같습니다.

[root @ localhost ~] # touch cangls # 

소스 파일 만들기 

[root @ localhost ~] # cp cangls / tmp / # 

이름을 / tmp / 디렉토리로 변경하지 않고 소스 파일을 복사 합니다.

사본의 이름을 바꾸어야하는 경우 명령은 다음과 같습니다.

[root @ localhost ~] # cp cangls / tmp / bols # 

복사본 이름 바꾸기


동일한 이름의 파일이 복사 된 대상에 이미 존재하면 cp 명령이 기본적으로 "cp -i"의 별명을 실행하므로 덮어 쓸지 여부를 묻습니다.

[root @ localhost ~] # cp cangls / tmp / 

cp : "/ tmp / cangls"를 덮어 쓰시겠습니까? y # 

대상 위치에 같은 이름의 파일이 있으므로 덮어 쓸지 묻는 메시지가 표시됩니다.

다음으로 디렉토리를 복사하는 방법을 보도록하겠습니다. 실제로 "-r"옵션을 사용하여 디렉토리를 복사하십시오.

[root @ localhost ~] # mkdir movie # 

테스트 디렉토리 생성 

[root @ localhost ~] # cp -r / root / movie / / tmp / 

#directory copy



[예 2] 소프트 링크 파일 복사 

소스 파일이 일반 파일이 아니라 소프트 링크 파일 인 경우 소프트 링크의 속성을 복사 할 수 있습니까? 시도해 봅시다 :

[루트 @ localhost를 ~] #의 LN -s / 루트 / cangls / tmp를 / cangls_slink 

# 테스트 파일 / tmp를 / cangls_slink 만들 수있는 소프트 링크 

[루트 @ 로컬 호스트를 ~] #의 LL / tmp를 / cangls_slink 

lrwxrwxrwx 1 개 루트 루트 (12) 6월 14일 05 : 53 / tmp / cangls_slink-> / root / cangls 

# 소스 파일 자체는 소프트 링크 파일입니다. 

[root @ localhost ~] # cp / tmp / cangls_slink / tmp / cangls_t1 # 

소프트 링크 파일을 복사 하지만 "-d"는 없습니다. 옵션 

[root @ localhost ~] # cp -d / tmp / cangls_slink / tmp / cangls_t2 # 

소프트 링크 파일을 복사 하고 "-d"옵션을 추가하십시오 

[root @ localhost ~] # ll / tmp / cangls_t1 / tmp / cangls_t2 

-rw- R--r-- 1 루트 루트 0 6 월 14 일 05:56 / tmp / cangls_t1 

#는 소프트 링크 파일 

lrwxrwxrwx 1 루트 루트가 아니라 소프트 링크 소스 파일의 실제 복사 본인 "-d"옵션을 찾을 수 없습니다. 12 6 월 14 일 05 : 56 / tmp / cangls_t2-> / root / cangls # 

"-d"옵션이 추가되면 소프트 링크 파일이 복사됩니다

이 예는 소프트 링크 파일을 복사 할 때 "-d"옵션을 사용하지 않으면 cp 명령이 소프트 링크 파일 대신 소스 파일을 복사하고 "-d"옵션이 추가 된 경우에만 소프트 링크 파일이 복사됨을 보여줍니다. "-d"옵션은 하드 링크에 유효하지 않습니다. 


[예 3] 소스 파일 속성 사본 보유 

복사 명령이 실행 된 후 대상 파일의 시간이 소스 파일의 시간이 아니라 복사 명령의 실행 시간이된다는 것을 알았습니다. 예를 들면 다음과 같습니다.

[root @ localhost ~] # cp /var/lib/mlocate/mlocate.db / tmp / 

[root @ localhost ~] # ll /var/lib/mlocate/mlocate.db 

-rw-r ----- 1 루트 Slocate2328027 6 월 14 일 02 : 08 / var / lib / mlocate / mlocate.db # 

소스 파일의 시간과 그룹을 기록하십시오 

[root @ localhost ~] #ll /tmp/mlocate.db 

-rw-r ----- 1 루트 루트 2328027 6 월 14 일 06 : 05 / tmp / mlocate.db # 

루트 사용자가 복사 명령을 실행하기 때문에 대상 파일이 루트 그룹에 속하며 시간이 복사 명령의 실행 시간이됩니다.


백업 및 백업을 수행 할 때 이러한 파일의 시간은 중요한 매개 변수 일 수 있으며 "-p"옵션이 필요합니다. 이 옵션은 소유자, 그룹 및 시간을 포함하여 소스 파일의 속성을 유지합니다. 예를 들면 다음과 같습니다.

[root @ localhost ~] # cp -p /var/lib/mlocate/mlocate.db /tmp/mlocate.db_2 # 

"-p"옵션 사용 

[root @ localhost ~] # ll / var / lib / mlocate / mlocate. Db /tmp/mlocate.db_2 

-rw-r ----- 루트 슬로 케이트 2328027 6 월 14 일 02:08 /tmp/mlocate.db_2 

-rw-r ----- 루트 슬로 케이트 2328027 6 월 14 일 02:08 / Var / lib / mlocate / mlocate.db # 

시간을 포함 하여 소스 및 대상 파일 의 모든 속성이 동일합니다

앞에서 언급했듯이 "-a"옵션은 "-d, -p, -r"옵션과 동일하며 이미 언급 했었습니다. 따라서 "-a"옵션을 사용하면 소스 파일의 소유자, 그룹, 시간 및 소프트 링크 가능성을 포함하여 대상 파일과 소스 파일의 모든 속성이 동일합니다. "-d, -p, -r"옵션 대신 "-a"옵션을 사용하는 것이 더 편리합니다. 


[예 4] "-l"및 "-s"옵션 

"-l"옵션을 사용하면 대상 파일이 소스 파일에 대한 하드 링크로 작성되고 "-s"옵션을 사용하면 대상 파일이 소스 파일로 생성 된 소프트 링크입니다. 

이 두 옵션은 "-d"옵션과 다릅니다 "d"옵션을 사용하려면 소스 파일이 소프트 링크 여야하고 대상 파일이 소프트 링크로 복사됩니다. "-l"및 "-s"옵션의 소스 파일은 일반 파일이어야하며 대상 파일을 하드 링크 및 소프트 링크로 직접 복사 할 수 있습니다. 예를 들면 다음과 같습니다.

[루트 @ 로컬 호스트 ~] 터치 볼스 # 1 

# 가입 파일 

[루트 @ 로컬 호스트 ~] -i # 볼스 LL 

262 154-RW-R & LT - 14 일 루트에게 루트 r--로 1 0.6 6시 26분 볼스. 

# 단지 소스 파일 일반 파일, 오히려 소프트 링크 파일보다 

[루트 @ localhost를 ~] #은 cp에 -l / 루트 / 볼스 / tmp를 / bols_h 

[루트 @ localhost를 ~] # cp를 -s / 루트 / 볼스 / tmp를 / bols_s 

#은 "-l"을 사용하여 및 옵션은 복사 "-s" 

# LL -i / tmp를 / bols_h / tmp를 / bols_s [~ 루트 @ 로컬 호스트] 

26 / tmp를 / bols_h의 : r--로 약 √2 루트 0 6 왕위 06 14-262 154-RW-R 

# 대상 파일 / tmp를 / bols_h 소스 파일 하드 링크 된 파일 

932113 lrwxrwxrwx 1 루트 루트 10 6 왕위 06 14 : 27 / tmp를 / bols_s -> / 루트 / 볼스 

# 대상 파일 / tmp를 / bols_s 소스 파일 소프트 링크 파일