본문 바로가기

Server Story..../Linux

cp (copy)

cp (copy)
 
파일을 지정된 경로에 복사하는 명령어입니다.
 
명령어 형식 = cp [option] [원본파일] [파일/디렉토리]
 
 
그러면 cp 명령어에 대한 옵션 명령어는 어떠한 것들이 있는지 알아보도록 하겠습니다.
 
-a 원본 파일의 속성, 링크 정보 등을 그대로 유지하면서 복사한다.
  - 되도록이면 chown 명령을 사용하여 소유권을 변경하여 다른사람한테 넘겨줄때 이렇게 쓴다.
-b 복사대상 파일이 있는 경우를 대비해 백업파일을 만든다.
-i 복사대상 파일이 있을경우 사용자에게 복사에 대한 여부를 물어본다.
-R 디렉토리를 복사할 경우, 하위 디렉토리와 파일을 모두 복사한다.
 
 
 
 
-a 원본 파일의 속성, 링크 정보 등을 그대로 유지하면서 복사한다.
 
말 그대로 파일에 대한 속성, 링크정보 등을 그대로 유지하면서 복사하는 옵션 명령어입니다.
복사하려는 파일의 속성과 소유권 등을 유지하면서 복사하는데 아무 옵션명령어를 사용하지 않은 상태에서 복사하는것과 같습니다.
 
이렇게하면은 한가지 문제점이 생기게 됩니다.
root 사용자가 다른 일반 사용자에게 파일을 복사하여 넘겨줄 경우에 문제가 발생하는데, 이 옵션을 사용하게 되면 소유권이 root 사용자인 상태로 파일을 넘겨주게 되어, 이 파일을 받은 일반 사용자는 해당 파일에 대한 권한이 없게 됩니다.
 
이럴때는 chown 명령을 통해 소유권을 해당 일반 사용자로 변경한 다음 넘겨주는 것을 숙지하셔야 합니다.
 
아래 그림을 보시면 123 파일을 홈 디렉토리 안의 100 의 사용자 디렉토리에 복사 하였지만 소유권을 변함없이 모든 정보를 그대로 유지한채 복사된 것을 확인할 수 있습니다.

 
 
 
 
 
-b 복사대상 파일이 있는 경우를 대비해 백업파일을 만든다.
 
복사할 디렉토리에 대상 파일이 있는 경우에, 실수로 덮어 씌워 문제가 발생할 것을 대비해 백업 파일을 만드는 옵션 명령어입니다.
 
대부분 이러한 실수를 많이 하게되는데, 이 옵션명령어를 사용하게 되면은 실수를 하여도 백업파일을 만들어둔 것 때문에 덮어씌움으로 인해서 기존의 중요한 파일이 사라지는 것을 방지할 수 있습니다.
 
아래 그림에 보시면 두개의 100 과 200 의 디렉토리에 각각 똑같은 이름의 파일이 있습니다.
100 디렉토리에 있는 파일은 아무 내용이 없는 파일이며, 200 디렉토리에 있는 파일은 안에 기록이 되어 있는것이 보입니다.

 
 
그럼 -b 옵션 명령어를 사용하여 100 디렉토리에 있는 123 파일을 200 디렉토리에 복사한 후에 200 디렉토리를 확인해 보겠습니다. 확인을 해 보면 같은 파일이름 마지막에  " ~ " 물결 표시가 있는 파일이 생성되는데 이 파일이 백업 파일입니다.

 
 
그러면 위의 두 파일을 한번 확인해 볼까요?
123 파일은 100 디렉토리에서 복사해온 파일로 아무런 내용이 없는것이 확인 되었고,
123~ 파일은 200 디렉토리에 기존에 존재하였던 파일로 안에 Thank You!! 라고 기록되어 있는것을 확인할 수 있습니다.

 
 
 
 
 
 
-i 복사대상 파일이 있을경우 사용자에게 복사에 대한 여부를 물어본다.
 
말 그대로 복사할 대상 디렉토리에 대상 파일이 존재하는 경우에 복사에 대한 여부를 묻는 옵션 명령어입니다.
이 명령어는 리눅스 운영체제에서 기본적으로 .bashrc 파일에 alias 명령으로 인해 " cp " 명령어만 입력해도 cp -i 로 인식하도록 별칭으로 지정되어 있습니다.
 
그만큼 중요한 명령어라 할 수 있는데, 이 옵션이 지정되어 있지 않고 기본적인 cp 명령만을 사용하게 된다면 복사하려는 대상 디렉토리에 해당 파일이 존재하여도 사용자에게 복사 여부를 묻지않고 바로 덮어씌어 버리기 때문입니다.
 
아래 그림은 .bashrc 파일을 확인해본 것으로 alias cp='cp -i' 문구가 보일 것입니다.
cp 명령을 입력하면 cp -i 로 인식하도록 하라!  라고하는 별칭인 것입니다.

 
 
아래 그림을 보시면 cp -i 명령을 통해 복사에 대한 여부를 묻는 메시지가 출력된 것을 확인할 수 있습니다.

 
 
 
 
-R 디렉토리를 복사할 경우, 하위 디렉토리와 파일을 모두 복사한다.
 
디렉토리를 복사할 경우에는 해당 디렉토리와 하위 디렉토리, 그리고 파일을 모두 복사하는 옵션 명령어입니다.
아래 그림을 보시면 100 디렉토리에 있는 111, 222, 333, 444 파일이 200 디렉토리 안에 100 디렉토리와 함께 복사된 것을 확인할 수 있습니다.