14. 서버와 파일 전송 및 파일 압축

SSH 암호 인증 없이 로그인하기

파일 전송: scp

  • scp는 SSH 프로토콜을 기반으로 파일을 전송하는 명령어이다.
  • 로컬에서 원격 서버로 또는 반대로 파일을 복사할 수 있다.

scp 문법

  • 내부적으로 ssh 의 프로토콜을 사용하므로 동일한 포트 및 암호화 방식을 사용
    • ex) -o 옵션, -p 옵션
    • 포트의 경우는 ssh 는 소문자(p) scp 는 대문자(P) - 문법의 차리
  • 원격 서버
    • {접근 하는 계정}@{접근하고 싶은 서버}:{원격 서버의 경로}
  • 내 개인 PC
    • {경로 - 상대, 절대 모두 허용}
scp {보내는 곳 경로} {받는 곳 경로}

로컬 → 원격

scp /path/to/local/file username@remote_host:/path/to/remote/

원격 → 로컬

scp username@remote_host:/path/to/remote/file /path/to/local/

[실습] scp

디렉터리 동기화: rsync

  • rsync는 파일과 디렉터리를 동기화하는 명령어이다.
  • scp와 달리 변경된 내용만 전송하여 효율적이다.
  • SSH 기반으로 사용 가능하며, 양쪽 모두 rsync가 설치되어 있어야 한다.

로컬 → 원격

  • 내부적으로 ssh 의 프로토콜을 사용하므로 동일한 포트 및 암호화 방식을 사용
    • -e 옵션을 통해서 암호화 방식이나 포트 지정 가능
      • 예: rsync -e ‘ssh -p 1119 -o Ciphers=aes256-cbc’
  • 원격 서버
    • {접근 하는 계정}@{접근하고 싶은 서버}:{원격 서버의 경로}
  • 내 개인 PC
    • {경로 - 상대, 절대 모두 허용}
rsync -avz {보내는 곳 경로} {받는 곳 경로}
rsync -avz /path/to/local/directory/ username@remote_host:/path/to/remote/

[실습] rsync

포트를 통한 파일 전송: nc (netcat)

  • nc는 TCP/UDP 포트를 통해 데이터를 전송하는 도구이다.
  • 네트워크 포트가 열려 있어야 하며, 단순하고 빠른 전송이 가능하다.
  • 개인 PC의 가상화 리눅스 서버와 테스트 할 수 있다.

받는 쪽 (서버)

  • 원하는 포트를 지정할 수 있으며 포트는 포트 번호는 0부터 65535까지 사용 가능.
  • 다른 사용자가 특정 포트를 점유하고 있으면 사용 불가능
  • 포트번호는 일치해야한다.
nc -l -p {포트번호} | tar xzf -

보내는 쪽 (개인 PC)

tar czf - {파일 이름} | nc {접근하고 싶은 서버} {포트번호}

[실습] nc

HTTP/HTTPS를 통한 파일 다운로드

wget 사용

wget http://example.com/path/to/file

curl 사용

curl -O http://example.com/path/to/file

Git을 이용한 전송

Git은 내부적으로 SSH, HTTPS, Git 프로토콜을 모두 지원한다.

git clone ssh://username@hostname/path/to/repository.git
git clone https://hostname/path/to/repository.git
git clone git://hostname/path/to/repository.git

자세한 내용은 19장에서 다룬다.

파일 압축 및 해제

1. tar 명령어

  • 여러 파일을 하나의 아카이브로 묶는다.
  • tar 자체는 압축하지 않으며, gzip, bzip2와 함께 사용 가능하다.

주요 옵션

옵션 설명
c 아카이브 생성 (create)
x 압축 해제 (extract)
v 처리 과정을 출력 (verbose)
f 파일 이름 지정 (file)
z gzip 사용
j bzip2 사용
C 압축을 푸는 디렉터리 지정

예시

# 단순 압축
tar -cvf archive.tar file1 file2 dir/

# 압축 해제
tar -xvf archive.tar -C /path/to/unzip

# gzip 압축 (z 옵션이 추가. 확장자를 tar.gz 로 맞춰주는게 좋다)
tar -czvf archive.tar.gz file1 dir/

# gzip 해제
tar -xzvf archive.tar.gz -C /path/to/unzip

# bzip2 압축 (j 옵션이 추가. 확장자를 tar.bz2 로 맞춰주는게 좋다)
tar -cjvf archive.tar.bz2 file1 dir/

# bzip2 해제
tar -xjvf archive.tar.bz2 -C /path/to/unzip

2. gzip 명령어

  • 일반 파일을 gzip 만 이용해서 압축
# 압축
gzip filename

# 압축 해제
gzip -d filename.gz

# 압축 파일 내용 보기
zcat filename.gz
zgrep pattern filename.gz

3. bzip2 명령어

  • 일반 파일을 bzip2 만 이용해서 압축
# 압축
bzip2 filename

# 압축 해제
bzip2 -d filename.bz2

# 압축 파일 내용 보기
bzcat filename.bz2
bzgrep pattern filename.bz2

4. zipunzip 명령어

# zip 압축
zip archive.zip file1 file2 dir/

# zip 디렉터리 전체 압축 (-r 옵셥이 있어야 디렉터리의 파일도 모두 압축해준다)
zip -r archive.zip dir/

# 압축 해제
unzip archive.zip

[실습] 파일 압축