Byeon-gun's WIPI

IT 인프라와 소프트웨어 개발에 관한 실용적인 기술 가이드와 튜토리얼을 제공하는 기술 블로그입니다.

Byeon-gun's WIPI

IT 인프라와 소프트웨어 개발에 관한 실용적인 기술 가이드와 튜토리얼을 제공하는 기술 블로그입니다.

리눅스에서 파일과 디렉토리를 복사하는 방법

1. 로컬 → 로컬 복사

cp 명령어

  • 가장 기본적인 파일/디렉토리 복사 명령어입니다.
# 파일 복사
cp source.txt target.txt

# 디렉토리 복사 (-r 옵션 필수)
cp -r /home/user/data /home/user/backup

옵션 설명

  • -r : 디렉토리 재귀 복사
  • -a : 권한, 소유자, 타임스탬프 유지 (아카이브 모드)
  • -v : 복사 과정 출력
cp -av source_dir target_dir

rsync 명령어

  • rsync는 변경된 파일만 복사하므로 백업 및 동기화 작업에 매우 효율적입니다.
rsync -av source_dir/ target_dir/

옵션 설명

  • -a : 아카이브 모드 (권한, 소유자 유지)
  • -v : 진행 과정 출력
  • / 유무 주의
    • source_dir/ → 내부 파일만 복사
    • source_dir → 디렉토리 자체 복사
rsync -a --info=progress2 \
  --exclude='storage/cache/' \
  www/ www_$(date '+%Y%m%d')/

2. 로컬 ↔ 원격 서버 간 복사

로컬 → 원격 서버

scp 명령어

# 간단한 파일 전송
scp file.txt [email protected]:/remote/path/

# 디렉토리 복사
scp -r ./local_dir [email protected]:/remote/path/

rsync 명령어

rsync -avz /local/dir/ [email protected]:/remote/dir/

옵션 설명

  • -z : 전송 중 압축
  • --progress : 전송 진행률 표시
  • --delete : 대상 디렉토리에서 불필요한 파일 제거
rsync -avz --progress /local/dir/ user@remote:/remote/dir/

    tar + ssh(디렉토리 통째 전송)

    • 압축 없이 스트림 형태로 전달하므로 대용량 디렉토리 복사에 유리합니다.
    tar cf - ./my_folder | ssh user@remote_host "tar xf - -C /target/path"

    진행률 확인(pv 사용)

    tar cf - ./data | pv | ssh user@remote "tar xf -"

    zstd를 이용한 고속 압축 백업

    tar -I zstd -cf backup.tar.zst ./my_folder

    파일 내용만 전송(cat + ssh)

    • 설정 파일이나 작은 텍스트 전달 시 유용
    cat local_file.txt | ssh user@remote_host "cat > remote_file.txt"

    원격 서버 → 로컬

    scp

    scp [email protected]:/remote/path/file.txt /local/path/

    rsync

    rsync -avz [email protected]:/remote/dir/ /local/dir/

    원격 파일 내용 가져오기

    ssh user@remote_host "cat /path/to/remote_file.txt" > local_file.txt

    rsync를 이용한 원격 서버 디렉터리 안전 백업/동기화

    권한·소유권을 유지하면서, 불필요한 파일은 제외하고, sudo 권한으로 원격 서버의 디렉터리를 동기화하는 방법입니다.

    sudo rsync -avzPH \
      --numeric-ids \
      --exclude="*.log" \
      --exclude="cache/" \
      --rsync-path="sudo rsync" \
      user@REMOTE_SERVER:/app/webroot/api/ \
      /app/webroot/

      옵션 설명

      • -a (archive) : 파일 권한, 소유자, 심볼릭 링크 등을 유지하며 동기화
      • -v (verbose) : 진행 상황을 상세히 출력
      • -z (compress) : 전송 중 데이터 압축 (네트워크 효율 향상)
      • -P
        • --progress: 파일 전송 진행률 표시
        • --partial: 전송 중단 시 이어받기 가능
      • -H : 하드링크 유지 (디스크 사용량 절감)
      • --numeric-ids : UID/GID 일관성 유지
      • --exclude : 불필요한 파일 제외
        • --exclude="*.log"
        • --exclude="cache/"
      • --rsync-path="sudo rsync" : 원격 sudo 권한 사용
      • user@REMOTE_SERVER:/app/webroot/api/ : 경로 지정
        • /api/ → 디렉터리 내용만 복사
        • /apiapi 디렉터리 자체가 생성됨

      이 글에서는 로컬 환경 간 복사부터 로컬 – 원격 서버 간 복사까지 실무에서 자주 사용하는 명령어와 활용 예제입니다.

      답글 남기기

      이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

      Scroll to top