cp 명령어 옵션 및 실행 시 일괄 덮어쓰기 설정 | yes, \(역슬래쉬) 2가지 설정

cp 명령어는 Copy의 약자로 파일 및 디렉토리를 복사합니다.

기본 사용법은

cp -[옵션] <복사할 파일 또는 디렉토리> <목적지 경로 또는 파일 또는 디렉토리리 >

간단하게 복사할 대상과 새로운 이름 등을 설정하여 사용할 수 있습니다.

CP 명령어

cp 명령어를 실행할 때 같은 이름의 대상 파일이 있을 때는 사용자에게 묻지 않고 덮어쓰기가 되는데, 이를 방지하기 위해 alias “cp=’cp -i”로 설정되어 있습니다.

✅ 기본 사용 방법

🔲 파일 및 디렉토리

◻️ 파일 → 파일로 복사

cp file1 file2
# 파일 > 파일 복사 
cp file1 file2
# 파일 > 디렉토리 내 복사
cp file1 dir1/
# 2개 파일 > 디렉토리 내 복사
cp file1 file2 dir1/

◻️ 파일 → 디렉토리로 복사

cp file1 dir1/
ll dir1/
total 0
-rw-r--r-- 1 root root 0 Jun  8 14:11 file1

file1이 dir1/ 안에 복사

◻️ 여러 파일 → 디렉토리로 복사

cp file1 file2 dir1/
ll dir1/
total 0
-rw-r--r-- 1 root root 0 Jun  8 14:11 file1
-rw-r--r-- 1 root root 0 Jun  8 14:15 file2

◻️ 디렉토리 디렉토리

 testuser]# cp dir1/ dir2/
cp: -r not specified; omitting directory 'dir1/'

디렉토리 복사는 -r 또는 -R, 혹은 -a 옵션을 써야 합니다.

  • -r/-R : 디렉토리와 하위 내용 재귀 복사
  • -a : 속성 유지하며 재귀 복사 (내부에 -r 포함)

✅ cp 명령어 옵션

✅ 명령어 예시

🔲 -a 옵션: 원본파일 속성 유지 & 하위 디렉토리(&파일) 복사

원본 파일을 속성을 유지하면서 하위 디렉토리 복사를 할 경우에 [-a]옵션만 사용해도 기능적으로 충분하지만 [-r]이나 [-R]옵션을 같이 사용하는 경우는 여러 환경(스크립트, 자동화 툴 등)에서 -r을 명시적으로 요구하거나 -a만 지원하지 않는 경우가 있을 수 있기 때문입니다.

 testuser]# cp -a dir1 dir2
 testuser]# ll dir*
dir1:
total 0
-rw-r--r-- 1 root root 0 Jun  8 14:11 file1
-rw-r--r-- 1 root root 0 Jun  8 14:15 file2

dir2:
total 0
-rw-r--r-- 1 root root 0 Jun  8 14:11 file1
-rw-r--r-- 1 root root 0 Jun  8 14:15 file2
 testuser]# 

[-d : 심볼릭 링크 자체를 복사]+[-R : 디렉토리 재귀 복사]+[-preserve=all]

-preserve=all 이 포함하는 항목 목록

설명

mode

파일 권한 (rwx 등)

ownership

소유자(user)와 그룹(group)

timestamps

마지막 수정 시간 등의 타임스탬프

links

하드링크 개수 (같은 inode 공유 유지)

context

SELinux 보안 컨텍스트

xattr

확장 속성 (파일에 부가적으로 저장되는 메타데이터)

all

위의 모든 항목을 한 번에 포함하는 축약형

🔲 -u 옵션: 추가 및 변경된 파일만 복사

  • 대상 경로에 동일한 파일이 있고, 원본이 더 새로울 경우에만 복사
  • 백업이나 동기화 시 자주 사용
 testuser]# cp -u file1 file2
 testuser]# ll file*
-rw-r--r-- 1 root root 0 Jun  8 14:11 file1
-rw-r--r-- 1 root root 0 Jun  8 14:30 file2

✅ cp 명령어 일괄 덮어쓰기 설정 2가지 방법

cp 명령어 사용 중에 ‘overwrite’를 물어보는데 기본 cp 명령에 alias 설정이 cp -i 설정이 되어 있기 떄문입니다.

cp -a
cp: overwrite 'messages_ori'? y
~]# alias cp
alias cp='cp -i'

파일이 한 두 개일 경우에는 괜찮지만 여러 파일을 복사할 경우 번거로워질 수 있습니다.

이럴 경우 아래와 같은 옵션을 사용하여 명령을 수행할 수 있습니다.

yes | cp -ar /home/ ./

자동으로 덮어쓰기를 물어보지 않고 복사가 됩니다. ‘yes |’ 를 앞에 넣어서 사용하거나 역슬러쉬[\]를 넣어서 사용하는 방법입니다.

\cp -ar /home/ ./

✅ 스크립트로 crontab 자동 백업 설정

cp 명령어를 /home 디렉토리에 대한 자동 백업 스크립트로 설정한 예시입니다.

 shell-scripts]# vi home_backup_daily_weekly_monthly.sh
 #!/bin/bash

SRC="/home"
DEST="/backup/home"
DATE=$(date +%Y-%m-%d)

DAY=$(date +%u)
DAY_OF_MONTH=$(date +%d)

mkdir -p "$DEST/daily" "$DEST/weekly" "$DEST/monthly"

echo "$(date) 백업 시작" >> /var/log/home_backup.log 2>&1

cp -aRu "$SRC" "$DEST/daily/home_$DATE"
echo "$(date) 일별 백업 완료" >> /var/log/home_backup.log 2>&1

if [ "$DAY" -eq 7 ]; then
    cp -aRu "$SRC" "$DEST/weekly/home_$DATE"
    echo "$(date) 주별 백업 완료" >> /var/log/home_backup.log 2>&1
fi

if [ "$DAY_OF_MONTH" -eq 01 ]; then
    cp -aRu "$SRC" "$DEST/monthly/home_$DATE"
    echo "$(date) 월별 백업 완료" >> /var/log/home_backup.log 2>&1
fi

 shell-scripts]# chmod 700 home_backup_daily_weekly_monthly.sh 
crontab -e
# home 백업 
05 5 * * * /root/shell-scripts/home_backup_daily_weekly_monthly.sh
# home 백업 테스트
* *  * * * /root/shell-scripts/home_backup_daily_weekly_monthly.sh >> /var/log/home_backup.log 2>&1
Jun  8 16:04:04 ip-172-26-14-231 CROND[307137]: (root) CMDEND (/root/shell-scripts/home_backup_daily_weekly_monthly.sh >> /var/log/home_backup.log 2>&1)
 shell-scripts]# cat /var/log/home_backup.log 
Sun Jun  8 04:03:02 PM KST 2025 백업 시작
Sun Jun  8 04:03:03 PM KST 2025 일별 백업 완료
Sun Jun  8 04:03:04 PM KST 2025 주별 백업 완료
리눅스(Linux)

Similar Posts

  • [Linux] ifcfg: IP 네트워크 인터페이스 구성(이더넷) | CentOS 7 ver.

    레드헷 계열 리눅스에서 네트워크 구성은 /etc/sysconfig/network-scripts/ifcfg-* 파일에서 설정합니다. ifcfg(interface configuration)는 “이더넷” 장치를 어떻게 네트워크에 연결할지 설정하는 게 ifcfg-* 파일의 목적입니다. 네트워크 인터페이스는 컴퓨터가 네트워크에 연결되는 물리적 또는 가상 장치입니다. 유선(이더넷 카드), 무선(Wi-Fi 어댑터) 등이 이에 해당합니다. 리눅스에서는 eth0, wlan0, enp0s3 등 이름으로 식별하며 고유하게 관리합니다. 네트워크 인터페이스를 통해 데이터가 송수신 되어 인터넷이나 로컬…

  • du 명령어: 파일 디스크 용량 확인

    du 명령어는 disk usage의 줄임말로 파일과 디렉토리의 사용량을 확인할 때 사용하는 명령어입니다. 목차✅ 기본 사용 방법🔲 파일 및 디렉토리✅ cp 명령어 옵션✅ 명령어 예시🔲 -a 옵션: 원본파일 속성 유지 & 하위 디렉토리(&파일) 복사🔲 -u 옵션: 추가 및 변경된 파일만 복사✅ cp 명령어 일괄 덮어쓰기 설정 2가지 방법✅ 스크립트로 crontab 자동 백업 설정✅ du…

  • Varnish Cache란 무엇인가? | Varnish 설치 및 기본 설정하기

    Varnish Cache는 동적 웹사이트와 API에 적합한 HTTP 가속기입니다. 이는 스퀴드와 같은 클라이언트 사이드 캐시 역할을 하는 다른 웹 가속기와 달리 Nginx, 아파치와 같은 원본 서버 대신 HTTP 가속기로 설계 되었습니다. 또한, Varnish는 HTTP에 특화되어 있어 FTP, SMTP 및 다른 통신 프로토콜을 지원하는 프록시 서버와는 다릅니다. 목차✅ 기본 사용 방법🔲 파일 및 디렉토리✅ cp…

  • ps 명령어(프로세스 명령어)

    ps 명령어는 현재 실행 중인 프로세스를 출력하는 명령어입니다. 목차✅ 기본 사용 방법🔲 파일 및 디렉토리✅ cp 명령어 옵션✅ 명령어 예시🔲 -a 옵션: 원본파일 속성 유지 & 하위 디렉토리(&파일) 복사🔲 -u 옵션: 추가 및 변경된 파일만 복사✅ cp 명령어 일괄 덮어쓰기 설정 2가지 방법✅ 스크립트로 crontab 자동 백업 설정1. ps 명령어 옵션 ps에서 주로…

  • 리눅스 tar 명령어: 파일 압축, 해제

    리눅스 tar 명령어는 여러 개의 파일을 하나의 파일로 묶거나 해제할 때 사용하는 명령어로 웹사이트의 이전 등에 mysqldump와 같이 사용되는 경우가 많습니다. 테이프 아카이버(Tape Archiver)의 앞 글자를 따서 tar라는 이름으로 부르게 되었습니다. 목차✅ 기본 사용 방법🔲 파일 및 디렉토리✅ cp 명령어 옵션✅ 명령어 예시🔲 -a 옵션: 원본파일 속성 유지 & 하위 디렉토리(&파일) 복사🔲 -u…

  • [Linux] userdel 명령어: 사용자 계정 삭제 명령어

    리눅스에서 useradd로 계정 생성 후 삭제가 필요한 경우 userdel 명령어를 사용합니다. 목차✅ 기본 사용 방법🔲 파일 및 디렉토리✅ cp 명령어 옵션✅ 명령어 예시🔲 -a 옵션: 원본파일 속성 유지 & 하위 디렉토리(&파일) 복사🔲 -u 옵션: 추가 및 변경된 파일만 복사✅ cp 명령어 일괄 덮어쓰기 설정 2가지 방법✅ 스크립트로 crontab 자동 백업 설정✅ userdel 명령어…