안녕하세요, 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 명령어에 대해 알아보았습니다.
문의사항은 댓글을 달아 주시면 성심껏 답변 드리겠습니다.
감사합니다.
댓글
댓글 쓰기