[cmd_test@btjeon-naver ~]$ ls -l /etc > foo.txt
[cmd_test@btjeon-naver ~]$ ll foo.*
-rw-rw-r-- 1 cmd_test cmd_test 11785 Jun 1 09:33 foo.txt
[cmd_test@btjeon-naver ~]$ gzip foo.txt
[cmd_test@btjeon-naver ~]$ ll foo.*
-rw-rw-r-- 1 cmd_test cmd_test 2410 Jun 1 09:33 foo.txt.gz
[cmd_test@btjeon-naver ~]$ gunzip foo.txt
[cmd_test@btjeon-naver ~]$ ll foo.*
-rw-rw-r-- 1 cmd_test cmd_test 11785 Jun 1 09:33 foo.txt
gzip 명령어는 한 개 이상의 파일을 압축할 때 사용한다.
<gzip 옵션>
옵션 | 설명 |
-c | 표준 출력에 결과를 쓰고, 원본 파일을 유지함. --stdout 및 -to-stdout으로도 사용할 수 있다. |
-d | 압축 해제. 이 옵션을 쓰면 gunzip과 같은 동작을 하게 된다. --decompress 또는 --uncompress로도 사용할 수 있다. |
-f | 압축 파일이 이미 존재해도 압축을 실행. --force로도 사용할 수 있다. |
-h | 도움말. --help로도 사용할 수 있다. |
-l | 각각의 압축 파일별로 압축 정보를 표시. --list로도 사용할 수 있다. |
-r | 커맨드라인의 인자가 디렉토리인 경우, 디렉토리를 순환하면서 포함되어 있는 파일들을 압축한다. --recursive로도 사용할 수 있다. |
-t | 압축 파일의 무결성을 검사한다. --test로도 사용할 수 있다. |
-v | 압축되는 과정을 자세히 표시한다. --verbose로도 사용할 수 있다. |
-number | 압축 정도를 설정. number에는 1(가장 빠르지만 압축률은 최소)부터 9(가장 느리지만 압축률은 최대)까지의 정수만 올 수 있다. 숫자 1과 9 대신 각각 --fast와 --best로도 사용될 수 있다. 기본값은 6. |
[cmd_test@btjeon-naver ~]$ ls -l /etc | gzip > foo.txt.gz
[cmd_test@btjeon-naver ~]$ ll foo.*
-rw-rw-r-- 1 cmd_test cmd_test 11785 Jun 1 09:33 foo.txt
-rw-rw-r-- 1 cmd_test cmd_test 2402 Jun 1 09:45 foo.txt.gz
표준 출력을 통해 파일을 압축할 수 있다.
[cmd_test@btjeon-naver ~]$ bzip2 foo.txt
[cmd_test@btjeon-naver ~]$ ll foo.txt.bz2
-rw-rw-r-- 1 cmd_test cmd_test 2201 Jun 1 09:33 foo.txt.bz2
[cmd_test@btjeon-naver ~]$ bunzip2 foo.txt.bz2
[cmd_test@btjeon-naver ~]$ ll foo.txt
-rw-rw-r-- 1 cmd_test cmd_test 11785 Jun 1 09:33 foo.txt
bzip2는 다른 알고리즘을 사용하는 압축 명령어인데, 속도는 느리지만 높은 압축률을 자랑한다.
[cmd_test@btjeon-naver ~]$ tar cf playground.tar playground
tar 아카이브 생성
[cmd_test@btjeon-naver ~]$ tar tf playground.tar
playground/dir-100/
playground/dir-100/file-A
playground/dir-100/file-B
playground/dir-100/file-C
playground/dir-100/file-D
playground/dir-100/file-E
...
tar 아카이브 내용 확인
[cmd_test@btjeon-naver ~]$ tar tvf playground.tar
drwx------ cmd_test/cmd_test 0 2022-05-28 17:26 playground/dir-100/
-rw------- cmd_test/cmd_test 0 2022-05-28 17:26 playground/dir-100/file-A
-rw------- cmd_test/cmd_test 0 2022-05-28 17:32 playground/dir-100/file-B
-rw------- cmd_test/cmd_test 0 2022-05-28 17:26 playground/dir-100/file-C
-rw------- cmd_test/cmd_test 0 2022-05-28 17:26 playground/dir-100/file-D
-rw------- cmd_test/cmd_test 0 2022-05-28 17:26 playground/dir-100/file-E
...
자세하게 내용을 표시하고 싶으면 v(verbose) 옵션이 필요하다.
[cmd_test@btjeon-naver ~]$ mkdir foo
[cmd_test@btjeon-naver ~]$ cd foo
[cmd_test@btjeon-naver foo]$ tar xf ../playground.tar
[cmd_test@btjeon-naver foo]$ ls
playground
아카이브 풀기. 슈퍼유저가 아닌 한, 아카이브에서 생성된 새로운 파일과 디렉토리들에 대해서는 원 소유자가 아닌 아카이브를 해제한 사용자의 소유가 된다.
[cmd_test@btjeon-naver ~]$ tar cf playground2.tar ~/playground
tar: Removing leading `/' from member names
[cmd_test@btjeon-naver ~]$ cd foo
[cmd_test@btjeon-naver foo]$ tar xf ../playground2.tar
[cmd_test@btjeon-naver foo]$ ls
home playground
[cmd_test@btjeon-naver foo]$ ls home/
cmd_test
[cmd_test@btjeon-naver foo]$ ls home/cmd_test/
playground
압축 대상을 ~ 이하 경로명으로 지정할 경우 아카이브를 해제하면 절대경로 기준으로 파일이 생성된다.
[cmd_test@btjeon-naver foo]$ rm -r home/
[cmd_test@btjeon-naver foo]$ ls
playground
[cmd_test@btjeon-naver foo]$ tar xf ../playground2.tar --wildcards 'home/cmd_test/playground/dir-*/file-A'
[cmd_test@btjeon-naver foo]$ ls
home playground
[cmd_test@btjeon-naver foo]$ ll home/cmd_test/playground/dir-001
total 0
-rw------- 1 cmd_test cmd_test 0 May 28 17:26 file-A
--wildcards 옵션을 통해 dir-* 와일드카드를 포함하고 있는 경로명의 file-A 파일만을 해제한다.
[cmd_test@btjeon-naver ~]$ find playground -name 'file-A' -exec tar cf playground-fileA.tar '{}' '+'
find 명령어로 특정 파일만을 압축한다.
[cmd_test@btjeon-naver ~]$ find playground -name 'file-A' | tar czf playground-fileA.tgz -T -
z 옵션 : gzip 압축 아카이브 파일 생성
(-T, --files-from 옵션은 tar 프로그램이 커맨드라인이 아닌 파일에서 직접 경로명 목록을 읽어오도록 한다.)
[cmd_test@btjeon-naver ~]$ find playground -name 'file-A' | tar cjf playground-fileA.tbz -T -
j 옵션 : bzip2 압축 아카이브 파일 생성
ssh remote-sys 'tar cf - Documents' | tar xf -
파일 압축을 한 상태로 시스템 간 파일 전송을 할 수 있다. 아카이브 파일 생성 결과를 표준 출력으로 보냄.
[cmd_test@btjeon-naver ~]$ zip -r playground.zip playground
...
adding: playground/dir-100/ (stored 0%)
adding: playground/dir-100/file-A (stored 0%)
adding: playground/dir-100/file-B (stored 0%)
adding: playground/dir-100/file-C (stored 0%)
adding: playground/dir-100/file-D (stored 0%)
adding: playground/dir-100/file-E (stored 0%)...
[cmd_test@btjeon-naver ~]$ zip -r playground.zip playground
...
updating: playground/dir-100/ (stored 0%)
updating: playground/dir-100/file-A (stored 0%)
updating: playground/dir-100/file-B (stored 0%)
updating: playground/dir-100/file-C (stored 0%)
updating: playground/dir-100/file-D (stored 0%)
updating: playground/dir-100/file-E (stored 0%)
...
[cmd_test@btjeon-naver foo]$ unzip ../playground.zip
Archive: ../playground.zip
replace playground/dir-001/file-A? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
...
extracting: playground/dir-100/file-A
extracting: playground/dir-100/file-B
extracting: playground/dir-100/file-C
extracting: playground/dir-100/file-D
extracting: playground/dir-100/file-E
...
zip 명령어로 압축 및 압축 해제하기 (주로 윈도우 시스템과 파일을 교환하기 위해 사용)
기존 아카이브 파일이 존재할 때, 새로운 파일은 추가되고(adding) 중복된 파일은 교체된다(updating).
[cmd_test@btjeon-naver ~]$ unzip -l playground.zip playground/dir-077/file-Z
Archive: playground.zip
Length Date Time Name
--------- ---------- ----- ----
0 05-28-2022 17:26 playground/dir-077/file-Z
--------- -------
0 1 file
[cmd_test@btjeon-naver ~]$ cd foo
[cmd_test@btjeon-naver foo]$ unzip ../playground.zip playground/dir-077/file-Z
Archive: ../playground.zip
replace playground/dir-077/file-Z? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
extracting: playground/dir-077/file-Z
unzip 명령어는 일부 파일을 지정하여 해당 파일만 해제할 수 있다.
-l 옵션은 압축을 해제하지 않고 단지 아카이브이 내용만을 표시한다. -v 옵션을 통해 그 내용을 자세하게 볼 수 있다.
[cmd_test@btjeon-naver ~]$ find playground -name "file-A" | zip -@ playground-fileA.zip
...
adding: playground/dir-095/file-A (stored 0%)
adding: playground/dir-096/file-A (stored 0%)
adding: playground/dir-097/file-A (stored 0%)
adding: playground/dir-098/file-A (stored 0%)
adding: playground/dir-099/file-A (stored 0%)
adding: playground/dir-100/file-A (stored 0%)
[cmd_test@btjeon-naver ~]$ ls -l /etc | zip > foo.txt.zip
adding: - (deflated 80%)
[cmd_test@btjeon-naver ~]$ unzip -p foo.txt.zip | less
zip 명령어도 tar처럼 표준 입출력을 활용할 수 있다. -@ 옵션으로 파일명들을 zip과 연결할 수 있다.
단, unzip 명령어는 표준 입력을 허용하지 않는다.
[cmd_test@btjeon-naver ~]$ rsync -av playground foo
...
playground/dir-100/file-V
playground/dir-100/file-W
playground/dir-100/file-X
playground/dir-100/file-Y
playground/dir-100/file-Z
sent 136,318 bytes received 49,859 bytes 372,354.00 bytes/sec
total size is 0 speedup is 0.00
[cmd_test@btjeon-naver ~]$ rsync -av playground foo
sending incremental file list
sent 34,564 bytes received 125 bytes 69,378.00 bytes/sec
total size is 0 speedup is 0.00
[cmd_test@btjeon-naver ~]$ touch playground/dir-099/file-Z
[cmd_test@btjeon-naver ~]$ rsync -av playground foo
sending incremental file list
playground/dir-099/file-Z
sent 34,618 bytes received 150 bytes 69,536.00 bytes/sec
total size is 0 speedup is 0.00
rsync 명령어는 로컬 혹은 원격 파일 및 디렉토리를 동기화하는 기능을 제공한다.
변경된 파일만 감지하여 동기화를 수행한다.
sudo rsync -av --delete /etc /home /usr/local /media/BigDisk/backup
이와 같이 외부 저장 장치에 파일을 백업할 수 있다. --delete 옵션은 기존 시스템에는 더 이상 존재하지 않지만 백업 장치에는 남아 있을지도 모르는 파일에 대해 삭제하는 기능을 제공한다.
sudo rsync -av -delete --rsh=ssh /etc /home /usr/local remote-sys:/backup
이와 같이 원격 시스템에 백업 작업을 수행할 수도 있다.
출처 : 리눅스 커맨드라인 완벽 입문서
'IT일반 > Linux' 카테고리의 다른 글
Command Line - 텍스트 편집 (0) | 2022.06.01 |
---|---|
Command Line - 정규 표현식 (0) | 2022.06.01 |
Command Line - 파일 검색 (0) | 2022.05.28 |
Command Line - 네트워킹 (0) | 2022.05.28 |
Command Line - 저장 장치 (0) | 2022.05.27 |