레드햇 엔터프라이즈 리눅스에서 파일 전송하기

Red Hat Enterprise LinuxBeginner
지금 연습하기

소개

이 실습에서는 RHEL 시스템에서 파일을 효율적이고 안전하게 관리하고 전송하는 실무 경험을 얻게 됩니다. 압축된 아카이브 파일을 포함한 tar 아카이브 파일을 생성, 목록화 및 추출하는 방법을 배우게 되며, 이는 데이터 패키징 및 백업에 필수적입니다.

또한, 이 실습에서는 대화형 파일 전송을 위한 sftp와 강력하고 효율적인 파일 동기화를 위한 rsync를 사용하여 파일을 안전하게 전송하는 방법을 안내합니다. 이를 통해 네트워크 작업 중 데이터 무결성과 보안을 확보할 수 있습니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 94%입니다.학습자들로부터 99%의 긍정적인 리뷰율을 받았습니다.

tar 아카이브 생성 및 목록 확인

이 단계에서는 tar 아카이브를 생성하고 목록화하는 방법을 배웁니다. tar 유틸리티는 파일 및 디렉터리를 아카이빙하는 데 사용되는 강력한 명령줄 도구입니다. 일반적으로 백업 및 파일 전송에 사용됩니다.

tar 명령어는 수행할 작업을 지정하는 작업 옵션이 필요합니다. 일반적인 작업 옵션으로는 다음이 있습니다.

  • -c 또는 --create: 새로운 아카이브를 생성합니다.
  • -t 또는 --list: 아카이브의 내용을 목록화합니다.
  • -x 또는 --extract: 아카이브에서 파일을 추출합니다.

또한 tar는 일반적인 옵션을 사용하여 동작을 수정합니다.

  • -v 또는 --verbose: 아카이빙 또는 추출 중 처리되는 파일을 표시합니다.
  • -f 또는 --file: 아카이브 파일의 이름을 지정합니다. 이 옵션 뒤에는 아카이브 파일 이름이 와야 합니다.

아카이빙할 샘플 파일을 먼저 생성해 보겠습니다. 기본 작업 디렉터리인 ~/project 디렉터리로 이동합니다.

cd ~/project

이제 my_files라는 새 디렉터리를 만들고 그 안에 샘플 텍스트 파일을 생성합니다.

mkdir my_files
echo "This is file1 content." > my_files/file1.txt
echo "This is file2 content." > my_files/file2.txt
echo "This is file3 content." > my_files/file3.txt
ls my_files

세 개의 파일이 목록에 표시되어야 합니다.

file1.txt  file2.txt  file3.txt

이제 my_files 디렉터리의 tar 아카이브를 생성해 보겠습니다. 아카이브 이름은 my_archive.tar로 지정합니다.

tar -cvf my_archive.tar my_files

아카이브에 파일이 추가되는 과정이 출력됩니다.

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

현재 디렉터리에 my_archive.tar 아카이브 파일이 생성되었는지 확인할 수 있습니다.

ls

my_files와 함께 my_archive.tar가 목록에 표시되어야 합니다.

my_archive.tar  my_files

다음으로 -t (목록) 및 -f (파일) 옵션을 사용하여 my_archive.tar 파일의 내용을 목록화해 보겠습니다.

tar -tf my_archive.tar

아카이브의 내용이 출력됩니다.

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

파일 권한, 소유자, 크기와 같은 자세한 정보를 보고 싶다면 -v (verbose) 옵션을 추가할 수 있습니다.

tar -tvf my_archive.tar

각 아카이브 항목에 대한 자세한 정보를 제공하는 출력은 다음과 유사합니다.

drwxr-xr-x labex/labex        0 2023-10-27 10:00 my_files/
-rw-r--r-- labex/labex       22 2023-10-27 10:00 my_files/file1.txt
-rw-r--r-- labex/labex       22 2023-10-27 10:00 my_files/file2.txt
-rw-r--r-- labex/labex       22 2023-10-27 10:00 my_files/file3.txt

tar는 기본적으로 아카이빙 시 절대 경로에서 앞선 /를 제거합니다. 이는 아카이브 추출 시 시스템 파일의 실수로 덮어쓰는 것을 방지하기 위한 안전 조치입니다. 예를 들어 /etc/hosts를 아카이빙하면 tar 파일 내부에서는 etc/hosts로 저장됩니다. 이렇게 하면 원본 /etc/hosts 파일을 변경하지 않고 새로운 위치에 추출할 수 있습니다.

tar 아카이브에서 파일 추출

이 단계에서는 tar 아카이브에서 파일을 추출하는 방법을 배웁니다. 파일 추출은 아카이브된 내용을 파일 시스템으로 다시 복사하는 과정입니다.

파일을 추출하는 주요 옵션은 -x 또는 --extract입니다. 일반적으로 아카이브 파일을 지정하기 위해 -f를 사용하고, 추출되는 파일을 확인하기 위해 -v를 사용합니다.

추출하기 전에 기존 파일을 덮어쓰거나 다른 내용과 혼합하는 것을 방지하기 위해 빈 디렉터리에 아카이브를 추출하는 것이 좋습니다. ~/project 디렉터리에 extracted_files라는 새 디렉터리를 생성합니다.

cd ~/project
mkdir extracted_files

이제 extracted_files 디렉터리로 이동합니다. 이렇게 하면 아카이브 내용이 여기에 추출됩니다.

cd extracted_files

이제 부모 디렉터리 (~/project) 에 있는 my_archive.tar의 내용을 현재 extracted_files 디렉터리로 추출합니다.

tar -xvf ../my_archive.tar

추출되는 파일이 출력됩니다.

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

추출 후 현재 디렉터리 (~/project/extracted_files) 의 내용을 확인하여 my_files 디렉터리와 그 내용이 성공적으로 추출되었는지 확인합니다.

ls

my_files 디렉터리가 표시되어야 합니다.

my_files

이제 extracted_files 내부의 my_files 디렉터리의 내용을 확인합니다.

ls my_files

원본 파일이 표시되어야 합니다.

file1.txt  file2.txt  file3.txt

추출된 파일 중 하나의 내용을 확인하려면 다음과 같이 합니다.

cat my_files/file1.txt

출력은 다음과 같아야 합니다.

This is file1 content.

파일 추출 시 tar 명령어는 현재 umask를 사용하여 추출된 파일의 권한을 설정합니다. 그러나 아카이브에 있던 원본 파일 권한을 유지하려면 -p 또는 --preserve-permissions 옵션을 사용할 수 있습니다. 이는 특정 권한이 중요한 실행 가능 스크립트나 구성 파일을 처리할 때 특히 유용합니다. root 사용자의 경우 이 옵션은 종종 기본적으로 활성화됩니다. 일반 사용자의 경우 권한 보존이 중요하다면 포함하는 것이 좋습니다.

이 실습에서는 텍스트 파일에는 기본 동작이 충분하기 때문에 -p 옵션을 명시적으로 보여주지 않습니다. 하지만 향후 사용 사례를 위해 이 옵션을 기억해 두십시오.

압축된 tar 아카이브 생성

이 단계에서는 압축된 tar 아카이브를 생성하는 방법을 배웁니다. tar 자체는 파일만 묶지만, gzip, bzip2, xz와 같은 압축 유틸리티와 통합하여 더 작은 아카이브 파일을 생성할 수 있습니다. 이는 디스크 공간을 절약하고 전송 시간을 줄이는 데 중요합니다.

tar 명령어는 서로 다른 압축 알고리즘에 대한 특정 옵션을 제공합니다.

  • -z 또는 --gzip: gzip 압축을 사용하여 .tar.gz 또는 .tgz 접미사를 생성합니다. 가장 일반적이고 빠른 압축 방법입니다.
  • -j 또는 --bzip2: bzip2 압축을 사용하여 .tar.bz2 또는 .tbz 접미사를 생성합니다. 일반적으로 gzip보다 더 나은 압축률을 제공하지만 속도가 느립니다.
  • -J 또는 --xz: xz 압축을 사용하여 .tar.xz 또는 .txz 접미사를 생성합니다. 세 가지 중 최고의 압축률을 제공하지만 가장 느립니다.
  • -a 또는 --auto-compress: 아카이브의 접미사 (예: .tar.gzgzip을 의미) 를 기반으로 압축 알고리즘을 자동으로 결정할 수 있도록 합니다. 편리한 옵션입니다.

먼저 ~/project 디렉터리에 있는지 확인합니다.

cd ~/project

먼저 my_files 디렉터리의 gzip 압축 아카이브를 생성합니다. 파일 이름은 my_archive.tar.gz입니다.

tar -czvf my_archive.tar.gz my_files

파일 추가 및 압축 과정이 출력됩니다.

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

압축된 아카이브 생성을 확인합니다.

ls -lh my_archive.tar.gz

ls-lh 옵션은 사람이 읽기 쉬운 크기를 제공합니다. 파일 크기를 보여주는 출력과 유사한 결과가 표시됩니다.

-rw-r--r-- 1 labex labex 180 Oct 27 10:00 my_archive.tar.gz

(참고: 정확한 크기는 시스템과 내용에 따라 약간 다를 수 있지만, 이러한 작은 텍스트 파일의 경우 작은 크기가 될 것입니다.)

이제 일반적으로 더 나은 압축률을 제공하는 xz 압축 아카이브를 생성해 보겠습니다. 파일 이름은 my_archive.tar.xz입니다.

tar -cJvf my_archive.tar.xz my_files

다시 한번, 파일 처리 과정이 출력됩니다.

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

xz 아카이브의 크기를 확인합니다.

ls -lh my_archive.tar.xz

my_archive.tar.xzmy_archive.tar.gz보다 약간 작은 것을 알 수 있습니다. 이는 xz의 더 나은 압축률을 보여줍니다.

-rw-r--r-- 1 labex labex 168 Oct 27 10:00 my_archive.tar.xz

압축된 tar 아카이브를 추출하려면 tar-x 옵션을 사용할 때 압축 유형을 자동으로 감지할 수 있지만, 해당 압축 해제 옵션 (-z, -j, 또는 -J) 또는 -a (자동 압축) 옵션을 명시적으로 사용하는 것이 좋습니다.

my_archive.tar.gzextracted_gz라는 새 디렉터리로 추출해 보겠습니다.

mkdir extracted_gz
tar -xzvf my_archive.tar.gz -C extracted_gz

-C 옵션 (디렉터리 변경) 은 tar가 지정된 디렉터리에 파일을 추출하도록 지시합니다. 이는 현재 디렉터리를 복잡하게 만드는 것을 방지하는 매우 유용한 옵션입니다.

extracted_gz의 내용을 확인합니다.

ls extracted_gz/my_files

다음과 같은 결과가 표시되어야 합니다.

file1.txt  file2.txt  file3.txt

sftp 를 이용한 파일 안전하게 전송

이 단계에서는 sftp (Secure File Transfer Program) 를 사용하여 시스템 간에 파일을 안전하게 전송하는 방법을 배웁니다. sftp는 SSH(Secure Shell) 를 사용하여 안전한 통신을 수행하는 대화형 파일 전송 프로그램으로, 암호화 및 인증을 제공합니다. OpenSSH 제품군의 일부입니다.

이 실습에서는 동일한 호스트에서 labex 사용자를 "원격" 사용자로 사용하여 원격 시스템을 시뮬레이션합니다. 이를 통해 별도의 가상 머신 없이 sftp 명령어를 연습할 수 있습니다.

먼저 ~/project 디렉터리에 있는지 확인합니다.

cd ~/project

시뮬레이션된 원격 사용자의 홈 디렉터리로 "업로드"할 파일을 생성합니다.

echo "This file will be uploaded via sftp." > local_file.txt

이제 localhostlabex 사용자에게 sftp 세션을 시작합니다.

sftp labex@localhost

labex@localhost의 비밀번호를 입력하라는 메시지가 표시됩니다. labex를 입력합니다.

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:....
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
labex@localhost's password: labex
Connected to localhost.
sftp>

이제 sftp 대화형 프롬프트에 있습니다.

sftp 프롬프트 내에서 일반 쉘과 유사한 다양한 명령어를 사용할 수 있습니다.

  • pwd: 원격 시스템의 현재 작업 디렉터리를 표시합니다.
  • lpwd: 로컬 시스템의 현재 작업 디렉터리를 표시합니다.
  • ls: 원격 시스템의 파일 목록을 표시합니다.
  • lls: 로컬 시스템의 파일 목록을 표시합니다.

이들을 사용해 보겠습니다.

sftp> pwd
Remote working directory: /home/labex
sftp> lpwd
Local working directory: /home/labex/project
sftp> ls

(ls 명령어는 원격 측의 /home/labex (자신의 홈 디렉터리) 내용을 표시합니다.)

이제 로컬 ~/project 디렉터리의 local_file.txt를 원격 labex 사용자의 홈 디렉터리 (/home/labex) 로 "업로드"합니다. put 명령어를 사용합니다.

sftp> put local_file.txt
Uploading local_file.txt to /home/labex/local_file.txt
local_file.txt                               100%   32     0.0KB/s   00:00
sftp>

파일이 업로드되었는지 확인하려면 원격 디렉터리를 나열합니다.

sftp> ls

/home/labex의 파일 목록에 local_file.txt가 표시되어야 합니다.

다음으로 원격 시스템에서 파일을 "다운로드"해 보겠습니다. 원격 labex 사용자의 홈 디렉터리의 .bashrc 파일을 로컬 ~/project 디렉터리로 다운로드합니다. get 명령어를 사용합니다.

sftp> get .bashrc
Fetching /home/labex/.bashrc to .bashrc
/home/labex/.bashrc                          100%  193     0.2KB/s   00:00
sftp>

다운로드가 완료되었는지 확인하려면 로컬 디렉터리를 나열합니다.

sftp> lls

로컬 ~/project 디렉터리에 .bashrc가 표시되어야 합니다.

sftp 세션을 종료하려면 exit 또는 bye 명령어를 사용합니다.

sftp> exit

일반 쉘 프롬프트로 돌아갑니다.

rsync 를 이용한 파일 안전한 동기화

이 단계에서는 rsync 명령어를 사용하여 시스템 간에 파일을 동기화하는 방법을 배웁니다. rsync는 로컬 및 원격으로 파일 및 디렉터리를 복사하고 동기화하는 강력하고 다재다능한 도구입니다. 주요 장점은 파일의 차이점만 전송할 수 있기 때문에 업데이트에 매우 효율적입니다. sftp와 마찬가지로 rsync는 SSH 를 사용하여 안전하고 암호화된 전송을 수행할 수 있습니다.

rsync의 가장 일반적인 옵션은 다음과 같습니다.

  • -a 또는 --archive: 여러 옵션 (-rlptgoD) 의 조합으로 대부분의 파일 속성 (재귀, 링크, 권한, 시간, 그룹, 소유자, 장치 파일) 을 보존합니다. "아카이브 모드"라고도 하며 대부분의 동기화 작업에 권장됩니다.
  • -v 또는 --verbose: 전송에 대한 자세한 정보를 표시하여 상세도를 높입니다.
  • -z 또는 --compress: 느린 연결을 통해 전송 속도를 높일 수 있도록 전송 중에 파일 데이터를 압축합니다.
  • -h 또는 --human-readable: 사람이 읽기 쉬운 형식으로 숫자를 출력합니다.
  • -n 또는 --dry-run: 실제 변경 사항 없이 시험 실행을 수행합니다. 명령어를 실제로 실행하기 전에 rsync가 무엇을 수행할지 확인하는 데 매우 유용합니다.

먼저 ~/project 디렉터리에 있는지 확인합니다.

cd ~/project

소스 디렉터리와 대상 디렉터리를 만들어 동기화 시나리오를 시뮬레이션합니다.

소스 디렉터리 source_dir을 만들고 몇 개의 파일을 추가합니다.

mkdir source_dir
echo "Content of fileA" > source_dir/fileA.txt
echo "Content of fileB" > source_dir/fileB.txt
mkdir source_dir/subdir
echo "Content of subfile1" > source_dir/subdir/subfile1.txt

빈 대상 디렉터리 dest_dir을 만듭니다.

mkdir dest_dir

이제 source_dirdest_dir로 동기화할 때 rsync가 수행할 작업을 미리 확인하기 위해 드라이 런을 수행합니다. 아카이브 모드, 상세 출력, 사람이 읽기 쉬운 크기 (-avh) 옵션과 함께 드라이 런 (-n) 옵션을 사용합니다.

rsync -avhn source_dir/ dest_dir/

경로명 뒤의 슬래시에 대한 중요 참고 사항:

  • source_dir/: 경로명 뒤의 슬래시는 source_dir내용을 복사한다는 의미입니다.
  • source_dir: 경로명 뒤에 슬래시가 없으면 source_dir 자체를 대상에 복사한다는 의미입니다.

드라이 런의 출력은 전송될 파일을 보여줍니다.

sending incremental file list
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt

sent 186 bytes  received 12 bytes  396.00 bytes/sec
total size is 66  speedup is 0.33 (DRY RUN)

마지막에 (DRY RUN)이 표시되어 실제 변경 사항이 없음을 나타냅니다.

이제 실제 동기화를 수행합니다. -n 옵션을 제거합니다.

rsync -avh source_dir/ dest_dir/

출력은 드라이 런과 유사하지만 (DRY RUN) 태그는 없습니다.

sending incremental file list
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt

sent 186 bytes  received 12 bytes  396.00 bytes/sec
total size is 66  speedup is 0.33

파일이 dest_dir로 복사되었는지 확인합니다.

ls -R dest_dir

다음과 같은 결과가 표시되어야 합니다.

dest_dir:
fileA.txt  fileB.txt  subdir

dest_dir/subdir:
subfile1.txt

이제 source_dir의 파일을 수정하고 새 파일을 추가하여 rsync의 효율성을 확인해 보겠습니다.

echo "Updated content for fileA" > source_dir/fileA.txt
echo "New file content" > source_dir/new_file.txt

이번에 rsync가 무엇을 전송할지 확인하기 위해 다시 드라이 런을 수행합니다.

rsync -avhn source_dir/ dest_dir/

출력은 변경되거나 새로 추가된 파일만 보여줍니다.

sending incremental file list
./
fileA.txt
new_file.txt

sent 128 bytes  received 12 bytes  280.00 bytes/sec
total size is 100  speedup is 0.71 (DRY RUN)

이것은 rsync가 차이점만 전송할 수 있음을 보여줍니다.

이제 실제 동기화를 다시 수행합니다.

rsync -avh source_dir/ dest_dir/

dest_dir의 내용을 다시 확인합니다.

ls -R dest_dir
cat dest_dir/fileA.txt
cat dest_dir/new_file.txt

dest_dirnew_file.txt가 있고 fileA.txt에는 "Updated content for fileA"가 포함되어 있어야 합니다.

요약

이 실습에서는 필수적인 명령줄 도구를 사용하여 RHEL 시스템에서 파일을 관리하고 전송하는 실질적인 경험을 쌓았습니다. tar 유틸리티를 숙달하여 압축된 tar.gz 아카이브를 생성하여 효율적인 저장 및 전송을 포함하여 아카이브에서 파일을 생성, 목록화 및 추출하는 방법을 배웠습니다.

이어서 안전한 파일 전송 방법을 탐색했습니다. 시스템 간 상호 작용적이고 안전한 파일 전송을 위해 sftp를 활용하여 파일 업로드 및 다운로드 기능을 이해했습니다. 마지막으로, 증분 업데이트를 처리하고 여러 위치에서 데이터 일관성을 보장하는 데 효율적인 강력한 파일 및 디렉터리 동기화 도구인 rsync를 깊이 있게 살펴보았습니다.