[에스넷시스템 부트캠프] TIL Day14 - diff, sort, file, 압축과 아카이빙, 프로세스
1. 유용한 명령어
1) diff
# diff file1 file2
: 두 파일에 대한 간략한 차이점
출력 형식
3c3 /* file1의 3번째 줄이 file2의 3번째 줄로 변경되었다는 표시 ( c = change ) */
< 33333 /* file1의 해당 줄 */
---
> 44444 /* file2의 해당 줄 */
a (add) : 추가
d (delete) : 삭제
c (change) : 변경
# diff -c file1 file2
: 두 파일에 대한 자세한 차이점
# diff -i file1 file2
: 두 파일을 비교할 때 대소문자 구분 X
💡 데이터 마이그레이션 후 무결성 검사
스토리지 마이그레이션이나 데이터 이동 작업이 끝난 후에는, 이동된 파일들이 원본과 동일한지 확인하는 과정이 필요하다. 이럴 때 # diff --recursive 명령어를 사용하여 디렉토리 전체를 하위 폴더까지 포함하여 비교할 수 있다.
💡 마이그레이션이란?
시스템, 스토리지, 데이터베이스 등의 데이터나 환경을 다른 위치로 이동하거나 변환하는 작업을 말한다.
2) sort
파일의 정렬, 하나 또는 그 이상의 파일의 텍스트 줄을 스크린 상에서 정렬하고자 할 때 사용한다.
sort 명령어는 기본적으로 공백 문자 (space, tab)를 필드 구분자로 인식한다.
# sort -k 3 filename
: 정렬할 필드(3)을 지정
# sort -t : -n filename
: -t로 필드 구분자(:)를 지정하고 -n으로 숫자 기준으로 정렬
# cat filename | sort -n | uniq | wc -l
: 파일 내 중복되지 않은(uniq) 숫자 라인 수(wc -l)를 출력
3) file
file 명령어는 파일의 종류를 알 수 있는 명령어이다. 보통 인터넷 상에서 다운로드 받은 파일이 정확히 어떤 종류인지를 확인할 때 사용된다.
2. 압축 - gzip
리눅스에서 gzip 은 파일을 압축하고, gunzip 또는 gzip -d는 압축을 해제하는 명령어이다.
압축 후에는 .gz 확장자가 붙은 새로운 파일이 생성되고, 원본 파일은 자동으로 삭제된다.
# gzip -n filename
: 명령어에 n 부분에 숫자를 지정해 압축률와 압축 속도를 조절할 수 있다.
숫자가 낮을수록 압축 속도가 높고, 숫자가 높을수록 압축이 높다. 숫자는 1~9까지 지정 가능하다.
3. 압축 + 아카이빙 - tar
아카이빙은 여러 파일이나 디렉토리를 하나의 파일로 묶는 작업으로, 용량 변화는 없다.
tar 명령어를 사용해 아카이빙할 수 있으며, -z 옵션으로 gzip 압축을 함께 적용하고, -f 옵션으로 테이프 대신 파일로 출력되게 만든다.
과거에는 대용량 데이터를 저장하거나 백업할 때 자기 테이프(LTO, DLT 등) 를 사용했다. tar는 이러한 테이프에 여러 파일을 순차적으로 하나로 묶어 저장할 수 있게 도와주는 도구였다.
요즘은 실제 테이프 장치 없이 디스크나 클라우드 스토리지를 테이프처럼 에뮬레이션하는 VTL(Virtual Tape Library) 을 사용하기도 한다. 이는 기존 테이프 기반 백업 시스템을 유지하면서도 속도와 접근성을 향상시킬 수 있는 백업 솔루션이다.
# tar cvf file.tar filename
: 새로운 아카이브 파일을 생성(c)하는 과정을 출력(v)하고 그 결과를 파일로 저장(f)
# tar tvf file.tar
: file.tar 파일(f)의 아카이브 목록(t)을 자세히(v) 출력
tar는 파일의 inode 정보(소유자, 권한, 수정 시간 등 메타데이터) 도 함께 저장하므로, 압축 해제 시에도 기존 파일의 시간 정보가 유지된다.
# tar cvzf file.tar.gz file1 file2 file3
: 여러 파일을 하나의 아카이브 파일로 묶고(c), gzip으로 압축(z) 하여, 파일로 저장(f) 하고, 진행 과정을 출력(v)
# tar cvf - . ( cd /dir ; tar xvf - )
: 현재 디렉토리(.)의 모든 파일을 표준 출력으로 묶어 파이프로 전달하고, /dir로 이동하여 그대로 압축 해제함.
이 방식을 사용하면 마이그레이션시 속성, 권한, 수정시간, 파일의 변경 없이 수행할 수 있다.
❗구버전 tar 사용시 주의 사항
구버전 tar은 파일을 아카이빙할 때 절대 경로(/)를 그대로 저장해 압축 해제 시 시스템 디렉토리를 덮어쓸 위험이 있다. 최신 GNU tar는 이를 자동으로 방지하며, --absolute-names 옵션을 써야만 절대 경로가 유지된다.
4. 프로세스
1) 프로세스란?
- 프로세스는 프로그램이 메모리에 적재되어 실제로 실행 중인 상태를 의미
- 자식 프로세스는 부모 프로세스의 복제본이며, 일부 자원을 공유
- 부모 프로세스가 종료되면 자식 프로세스도 존재 불가
- 프로세스 관련 정보는 /proc 디렉토리에서 확인 가능
2) PID, PPID
- PID (Process ID) : 프로세스에 할당되는 고유 식별 번호
- PPID (Parent Process ID) : 해당 프로세스의 부모 프로세스 식별 번호
3) 프로세스 상태
- Running (실행 중)
- Waiting (대기 중)
- Stopped (중단됨)
- Zombie (좀비) : 자식 프로세스가 종료되었지만 부모 프로세스가 아직 그 종료 상태를 회수하지 않은 상태
4) 포그라운드, 백그라운드
- 포그라운드 : 터미널을 점유하며 실행되는 프로세스
- 백그라운드 : 터미널을 점유하지 않고 실행
# CMD &
: CMD를 백그라운드로 실행
# bg
: 실행 중인 포그라운드 프로세스를 Ctrl+Z로 일시 중지 후, 백그라운드 전환
# fg
: 백그라운드 프로세스를 포그라운드로 다시 전환
5) 프로세스 확인 명령어
# jobs
: 현재 쉘의 백그라운드 작업 목록 확인
# ps -ef
: 전체 프로세스 상세 정보 출력 (UID, PID, PPID 등)
# ps aux
: BSD 스타일의 전체 프로세스 보기
5) 프로세스 종료(kill)
kill 명령어는 시그널(signal) 을 보내 프로세스를 제어한다.
번호 | 이름 | 설명 |
1 | SIGHUP | 프로세스 재시작 |
2 | SIGINT | 인터럽트 (Ctrl+C) |
9 | SIGKILL | 강제 종료 (무조건 종료) |
15 | SIGTERM | 정상 종료 요청 (기본값) |
6) 세션 관리 도구
- screen:
실행 시간이 오래 걸리는 작업을 할 때 사용하는 터미널 세션 관리 도구.
쉘을 세션처럼 분리하여 백그라운드에서 실행 가능하게 하며, 연결이 끊겨도 작업이 계속 진행된다.
메모리를 절약하면서도 안정적으로 작업을 이어갈 수 있다. - tmux:
최근에는 screen보다 더 자주 쓰이는 세션 관리자로, 여러 터미널 창을 한 세션 안에서 분할하고 관리할 수 있다.
복잡한 서버 작업이나 원격 환경에서 특히 유용하다.
7) 데몬(Daemon)
- 데몬은 백그라운드에서 동작하는 프로세스로, 사용자의 직접적인 입력 없이 지속적으로 특정 작업을 수행한다.
- 커널에 의해 백그라운드 모드로 실행되므로 CPU를 계속 점유하진 않지만, 메모리는 상시 점유하고 있기 때문에 데몬이 많을수록 시스템 자원 사용량이 커진다.
- 예: 웹 서버(httpd), 로그 감시(syslogd), 스케줄러(crond) 등
✍️ 하루 회고
오늘은 첫 주에 배운 리눅스 명령어의 연장선에 있는 내용이었다.
기존에 알고 있던 프로세스 관련 명령어들을 다시 복습하면서, 이해를 더 확실히 다질 수 있었다.
또한, gzip과 tar을 함께 사용하여 압축과 아카이빙을 동시에 수행하는 방식이 인상 깊었다.
리눅스 환경에서 이렇게 조합하면, 우리가 윈도우에서 흔히 보던 .zip 파일처럼 하나의 묶인 압축 파일을 만드는 방식을 구현할 수 있다는 점이 흥미로웠다.