기본 콘텐츠로 건너뛰기

8. cp

안녕하세요, MJ 입니다. 리눅스 파일복사 명령어 cp 에 대해 알아보겠습니다. 리눅스 cp 명령어는 윈도우 copy 명령어와 같은 기능을 합니다. 파일이나, 디렉토리를 복사 할 때 사용됩니다. cp 명령어의 도움말을 확인 해 보겠습니다. 펼치기/접기 Usage: cp [OPTION]... [-T] SOURCE DEST   or:  cp [OPTION]... SOURCE... DIRECTORY   or:  cp [OPTION]... -t DIRECTORY SOURCE... Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY. Mandatory arguments to long options are mandatory for short options too.   -a, --archive                same as -dR --preserve=all       --attributes-only        don't copy the file data, just the attributes       --backup[=CONTROL]...

8. cp

안녕하세요, MJ 입니다.

리눅스 파일복사 명령어 cp 에 대해 알아보겠습니다.


리눅스 cp 명령어는 윈도우 copy 명령어와 같은 기능을 합니다.

파일이나, 디렉토리를 복사 할 때 사용됩니다.

cp 명령어의 도움말을 확인 해 보겠습니다.

펼치기/접기
Usage: cp [OPTION]... [-T] SOURCE DEST
  or:  cp [OPTION]... SOURCE... DIRECTORY
  or:  cp [OPTION]... -t DIRECTORY SOURCE...
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Mandatory arguments to long options are mandatory for short options too.
  -a, --archive                same as -dR --preserve=all
      --attributes-only        don't copy the file data, just the attributes
      --backup[=CONTROL]       make a backup of each existing destination file
  -b                           like --backup but does not accept an argument
      --copy-contents          copy contents of special files when recursive
  -d                           same as --no-dereference --preserve=links
  -f, --force                  if an existing destination file cannot be
                                 opened, remove it and try again (this option
                                 is ignored when the -n option is also used)
  -i, --interactive            prompt before overwrite (overrides a previous -n
                                  option)
  -H                           follow command-line symbolic links in SOURCE
  -l, --link                   hard link files instead of copying
  -L, --dereference            always follow symbolic links in SOURCE
  -n, --no-clobber             do not overwrite an existing file (overrides
                                 a previous -i option)
  -P, --no-dereference         never follow symbolic links in SOURCE
  -p                           same as --preserve=mode,ownership,timestamps
      --preserve[=ATTR_LIST]   preserve the specified attributes (default:
                                 mode,ownership,timestamps), if possible
                                 additional attributes: context, links, xattr,
                                 all
  -c                           deprecated, same as --preserve=context
      --no-preserve=ATTR_LIST  don't preserve the specified attributes
      --parents                use full source file name under DIRECTORY
  -R, -r, --recursive          copy directories recursively
      --reflink[=WHEN]         control clone/CoW copies. See below
      --remove-destination     remove each existing destination file before
                                 attempting to open it (contrast with --force)
      --sparse=WHEN            control creation of sparse files. See below
      --strip-trailing-slashes  remove any trailing slashes from each SOURCE
                                 argument
  -s, --symbolic-link          make symbolic links instead of copying
  -S, --suffix=SUFFIX          override the usual backup suffix
  -t, --target-directory=DIRECTORY  copy all SOURCE arguments into DIRECTORY
  -T, --no-target-directory    treat DEST as a normal file
  -u, --update                 copy only when the SOURCE file is newer
                                 than the destination file or when the
                                 destination file is missing
  -v, --verbose                explain what is being done
  -x, --one-file-system        stay on this file system
  -Z                           set SELinux security context of destination
                                 file to default type
      --context[=CTX]          like -Z, or if CTX is specified then set the
                                 SELinux or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit

By default, sparse SOURCE files are detected by a crude heuristic and the
corresponding DEST file is made sparse as well.  That is the behavior
selected by --sparse=auto.  Specify --sparse=always to create a sparse DEST
file whenever the SOURCE file contains a long enough sequence of zero bytes.
Use --sparse=never to inhibit creation of sparse files.

When --reflink[=always] is specified, perform a lightweight copy, where the
data blocks are copied only when modified.  If this is not possible the copy
fails, or if --reflink=auto is specified, fall back to a standard copy.
Use --reflink=never to ensure a standard copy is performed.

The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable.  Here are the values:

  none, off       never make backups (even if --backup is given)
  numbered, t     make numbered backups
  existing, nil   numbered if numbered backups exist, simple otherwise
  simple, never   always make simple backups

As a special case, cp makes a backup of SOURCE when the force and backup
options are given and SOURCE and DEST are the same name for an existing,
regular file.

GNU coreutils online help: 

도움말 내용에서 확인되는 모든 옵션을 알고 있을 필요가 없습니다.

자주 사용되는 옵션만 알고, 잘 사용하셔도 충분하기때문입니다.

자주 사용되는 옵션

  • -r: recursive(재귀)를 의미하는 이 옵션은 디렉토리를 포함하여 소 디렉토리 이하에 존재하는 모든 파일,디렉토리를 포함하여 복사를 수행하는 옵션입니다.
  • -v: 파일이 복사 될 때에 소스와 목적지로 복사 진행 과정을 로깅 해 줍니다.(보기옵션)
  • -i: interactive 의미의 이 옵션은 덮어쓰기 할지 물어보는 옵션입니다. 래드햇 계열의 리눅스에는 cp 명령어가 "cp -i" 로 alias 되어있어 -i 옵션을 사용하지 않아도 사용됩니다. 이 alias 를 제거한다면 묻지않고 덮어쓰게 되기때문에 -f 옵션이 필요없게 됩니다.

이 외에 옵션들이 사용되지 않는것은 아니지만, 이 옵션들만 잘 사용하여도, 엔지니어로 일하는데에 아무런 불편함이 없습니다.

cp 명령어에 대해 설명을 적어보았는데, 실습을 해 보겠습니다.

 

1. 재귀 옵션: -r

: 디렉토리 안에 있는 파일을 포함하여 통째로 복사

[run-linux cp]# ls -l
total 0
drwxr-xr-x 2 root root  65 Sep 28 00:37 data1
drwxr-xr-x 2 root root 106 Sep 28 00:37 data2
[run-linux cp]# tree
.
├── data1
│   ├── backup_file
│   ├── data1File_01
│   └── data1File_02
└── data2
    ├── data2File_01
    ├── data2File_02
    ├── data2File_03
    ├── data2File_04
    └── data2File_05

2 directories, 8 files

디렉토리와 디렉토리 내부에 파일이 존재 할 때

 

[run-linux cp]# cp -r data1 data1_copy
[run-linux cp]# ls -l
total 0
drwxr-xr-x 2 root root  65 Sep 28 00:37 data1
drwxr-xr-x 2 root root  65 Sep 28 00:38 data1_copy
drwxr-xr-x 2 root root 106 Sep 28 00:37 data2
[run-linux cp]# tree
.
├── data1
│   ├── backup_file
│   ├── data1File_01
│   └── data1File_02
├── data1_copy
│   ├── backup_file
│   ├── data1File_01
│   └── data1File_02
└── data2
    ├── data2File_01
    ├── data2File_02
    ├── data2File_03
    ├── data2File_04
    └── data2File_05

3 directories, 11 files

: 파일을 하나 씩 복사하지 않고, recursive 하게 디렉토리 하위에 존재하는 파일까지 모두 복사합니다.

2. 보기옵션: -v
: 복사를 수행하는 과정에서 현재 무엇을 하는 중인지 표시

[run-linux cp]# ls -l
total 12
-rw-r--r-- 1 root root 21 Sep 28 00:37 backup_file
-rw-r--r-- 1 root root 42 Sep 28 00:34 data1File_01
-rw-r--r-- 1 root root 42 Sep 28 00:34 data1File_02
[run-linux cp]# cp -v backup_file re_bakup_file
'backup_file' -> 're_bakup_file'
[run-linux cp]# ls -l
total 16
-rw-r--r-- 1 root root 21 Sep 28 00:37 backup_file
-rw-r--r-- 1 root root 42 Sep 28 00:34 data1File_01
-rw-r--r-- 1 root root 42 Sep 28 00:34 data1File_02
-rw-r--r-- 1 root root 21 Sep 28 01:06 re_bakup_file

: 복사해야 할 파일이 많은 경우, 현재 무엇을 복사하고 있는지 보여줍니다.


3. 대화식: -i
: 목적지에 파일이 이미 존재하는 경우, overwrite 유무를 확인하도록 합니다.

[run-linux cp]# ls -l
total 16
-rw-r--r-- 1 root root 21 Sep 28 00:37 backup_file
-rw-r--r-- 1 root root 42 Sep 28 00:34 data1File_01
-rw-r--r-- 1 root root 42 Sep 28 00:34 data1File_02
-rw-r--r-- 1 root root 21 Sep 28 01:06 re_bakup_file
[run-linux cp]# cp -i re_bakup_file backup_file 
cp: overwrite 'backup_file'? n
[run-linux cp]# ls -l
total 16
-rw-r--r-- 1 root root 21 Sep 28 00:37 backup_file
...(SKIP)...

: overwrite 할 것인지에 'n' 을 입력했더니, 파일에 변경이 일어나지 않았습니다.

 

 

[run-linux cp]# cp -i re_bakup_file backup_file 
cp: overwrite 'backup_file'? y
[run-linux cp]# ls -l
total 16
-rw-r--r-- 1 root root 21 Sep 28 01:13 backup_file
-rw-r--r-- 1 root root 21 Sep 28 01:06 re_bakup_file

: y 를 입력했더니, 파일이 덮어쓰기 되었습니다.

 

 

[run-linux cp]# ll
total 16
-rw-r--r-- 1 root root 21 Sep 28 01:13 backup_file
-rw-r--r-- 1 root root 42 Sep 28 00:34 data1File_01
-rw-r--r-- 1 root root 42 Sep 28 00:34 data1File_02
-rw-r--r-- 1 root root 21 Sep 28 01:06 re_bakup_file
[run-linux cp]# cp backup_file data1File_01
cp: overwrite 'data1File_01'? n

: 하지만, -i 옵션을 사용하지 않아도 이렇게 물어봅니다.

: -i옵션을 사용하지 않았는데도 이렇게 물어보는이유는 alias를 사용하고있기 때문입니다.

[알리아스]

[run-linux cp]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'

 

alias 에 의해 수행되는 명령어 cp는 cp -i 로 수정하여 실행 되기 때문입니다.

 

 cp 명령어에 대해 알아보았습니다.

 

문의사항은 댓글을 달아 주시면 성심껏 답변 드리겠습니다.

감사합니다.

댓글

가장 많이 본 글

2. 버추얼박스(2/2): VM생성

안녕하세요, MJ입니다.   VM 생성 후 , OS 설치를 해야 VM 을 사용 해 볼 수 있을텐데 ,   현재 서버용 OS 로 가장 많이 사용되는 Red Hat 리눅스로 하고싶지만 , 라이선스 문제로 커뮤니티 버전의 OS 중에 Red Hat 계열의 Rocky Linux 로 제가 마음대로 결정 해 보았습니다 . ( 버전은 현재 기준으로 최신 9.4 버전 )   현재는 OS 를 설치 하기위한 미디어가 없는줄로 압니다 . 설치 미디어를 다운로드 하는데에 시간이 걸리기때문에 , 설치미디어 다운로드를 먼저 걸어놓고 , VM 생성을 하겠습니다 .   1. Rocky Linux – 9.4 iso 이미지 다운로드 URL: https://rockylinux.org/download   ( " DVD ISO " 버튼을 클릭하면 다운로드가 시작됩니다 . )   2 . VM 생성 2-1) 기본정보입력 버추얼 박스 프로그램 실행 . 새로만들기 버튼 클릭 생성 할 VM 의 이름을 작성 iso 이미지를 다운로드 중이므로 아직 선택하지 않고 넘어갑니다 . OS 종류로 "Linux" 를 선택 OS 배포판으로 "RedHat 9.x (64bit)" 을 선택 ( Rocky Linux 가 래드햇계열인데 , 목록에 Rocky Linux 가 없어서 ) 다음 버튼 클릭   iso 이미지를 넣고 시작하게 되면 , 무인 설치 건너뛰기 옆 체크박스에 체그가 안 된 상태가 확인되는데 , 무인설치를 하지 않도록 체크를 해 주세요 . ( 설치 과정을 봐야하기때문에 무인설치가 안되면 좋겠습니다 .)   2-2) 스펙 : 메모리 용량 , CPU 개수 , BootMode("Legacy"/E...

1. 버추얼박스(1/2): 설치

안녕하세요, MJ입니다. 나의 환경에서 리눅스 머신을 별도로 구동시키고 , 테스트 해 보기위해 가상환경이 필요하게 됩니다 . 가상환경이라고 해서 거창한것처럼 보일 수 있지만 , 가상환경은 가상의 머신을 구동 시킬 수 있는 환경으로 버추얼 박스 , VMWare, Hyper-V, QEMU 정도가 알려진 가상환경 에뮬레이터 라고 볼 수 있겠습니다 .   이 중에서 완전 무료로 사용할 수 있는 것은 Hyper-V 와 QEMU 이지만 , VirtualBox 역시 ExtensionPack 을 설치하지 않는다면 상업용으로도 무료로 사용할 수 있습니다. (비 상업적인 용도로는 ExtensionPack을 설치해도 무료입니다) 조작 및 사용방법이 간단한 VirtualBox 를 이용해 가상 환경 구성을 위한 방법에 대해 소개 하겠습니다 .     1) 버추얼박스 다운로드 - 사이트 : https://virtualbox.org 사이트 접속 후 왼쪽 Downloads 클릭 Windows hosts 클릭 다운로드 된 프로그램을 실행 .   2) 버추얼박스 설치 실패 , 추가 프로그램 확인   버추얼박스 설치 시도 시 "microsoft visual c++ 2019 redistributable package being installed first" 이런 메시지가 확인되었고 , 버추얼박스 설치는 되지 않았습니다 . 구글에서 "microsoft visual c++ 2019 redistributable package being installed first" 이 메시지를 검색해서 첫번째로 확인되는 마이크로소프트 사이트 방문 . 버추얼박스 설치 실패 시 확인된 Redistributable 프로그램을 찾아가 내 OS 의 아키텍처와 일치...

6. OS 설치 후 확인(Rocky Linux - 9.4 )

안녕하세요 MJ 입니다 .   지난번 설치 했던 OS (Rocky Linux - 9.4) 의 부팅 된 화면 입니다 .   번 시간에는 OS 설치 시 설정 했던 내용들에 대해서 하나씩 잘 설정이 적용 되었는지 확인을 해 보도록 하겠습니다 .   [ 설치 시 설정 한 메뉴 ] root 계정 설정 일반유저 생성 타임존 패키지 꾸러미 선택 파티셔닝 네트워크     설정확인 (1/6): root 계정 설정 지정한 패스워드로 로그인을 시도 해 봅니다 . 로그인이 잘 됩니다 . ( 패스워드 설정 확인 )   설정확인 (2/6): 일반유저 생성 로그인 확인 일반유저도 로그인이 잘 됩니다 . ( 패스워드 설정 확인 )   관리자 권한 추가그룹으로 wheel 이 확인됩니다 . ( 관리자 권한 확인 ) : gid 에 표시된 그룹과 , groups 에 표시 된 그룹은 다른 것 입니다 . 계정은 소유자 아이디와 그룹 아이디를 필수로 가져야하고 , 다른 그룹을 가지는 것은 추가그룹 이라고 합니다 . uid 는 여러 개 가질 수 없지만 , 그룹은 여러 개를 가질 수 있습니다 .   Red Hat 계열의 리눅스 기준으로 , ~6 버전까지는 500 번이 일반 유저가 가지는   UID/GID 의 시작이고 , 7~ 버전부터는 1000 번이 시작되며,   기본 관리자 그룹으로 wheel 이 생성 및 설정 됩니다.     설정확인 (3/6): 타임존   설정 한 대로 , 한국시 (Asia/Seoul) 확인이 확인됩니다 .   설정확인 (4/6): 패키지 꾸러미 선택 선택 했던 ...