파일의 압축과 묶기
파일 압축
- 압축 파일 확장명은 xz, bz2, gz, zip, Z 등
- xz나 bz2 압축률이 더 좋음
파일 압축 관련 명령
- xz: 확장명 xz로 압축을 하거나 풀어준다.
- ex) xz [파일명]
- ex) xz -d [파일명].xz
- bzip2: 확장명 bz2로 압축을 하거나 풀어준다.
- 압축 -> bzip2 [파일명]
- 압축 풀기 -> bzip2 -d [파일명].bz2
- bunzip2: bzip2 -d 옵션과 동일한 명령어
- gzip: 확장명 gz로 압축을 풀거나 풀어준다.
- 압축 -> gzip [파일명]
- 압축 풀기 -> gzip -d [파일명].gz
- gunzip: gzip -d 옵션과 동일한 명령어
파일 묶기
- 리눅스(유닉스)에서는 '파일 압축'과 '파일 묶기'는 원칙적으로 별개의 프로그램으로 수행한다.
- 파일 묶기의 명령어는 tar이며, 묶인 파일의 확장명도 tar이다.
파일 묶기 명령(tar)
- tar: 확장명 tar로 묶음 파일을 만들어주거나 묶음을 풀어준다.
- 동작: c(묶기), x(풀기), t(경로 확인)
- 옵션: f(파일), v(과정 보이기), J(tar + xz), z(tar + gzip), j(tar + bzip2)
- 사용 예
- # tar cvf my.tar /etc/sysconfig/ -> 묶기
- # tar cvfJ my.tar.xz /etc/sysconfig/ -> 묶기 + xz 압축
- # tar xvf my.tar -> tar 풀기
- # tar xvfJ my.tar.xz /etc/sysconfig/ -> xz 압축 해제 + tar 풀기
파일 위치 검색
- find [경로] [옵션] [조건] [action]: 기본 파일 찾기
- [옵션]: -name, -user(소유자), -newer(전, 후), -perm(허가권), -size(크기)
- [action]: -print(디폴트), -exec(외부 명령 실행)
- 사용 예
- # find /etc -name "*.conf" -> 확장명이 conf인 파일을 찾음
- # find /usr/bin -size +10k -size -100k -> 크기가 10k 이상 100k 이하인 파일을 찾음
- # find /home -name "*.swp" -exec rm { } \; -> 확장명이 swp인 파일을 찾아 삭제함
- which [실행파일 이름]: PATH에 설정된 디렉터리만 검색
- whereis [실행파일 이름]: 실행 파일, 소스, man 페이지 파일까지 검색
- locate [파일 이름]: 파일 목록 데이터베이스에서 검색
CRON과 AT
cron
- 주기적으로 반복되는 일을 자동으로 실행될 수 있도록 설정
- 관련된 데몬(서비스)은 'crond', 관련 파일은 /etc/crontab
- 해당 폴더 안에 특정 파일을 넣어놓으면 해당 파일들이 폴더에 따라 시간별, 일별, 주별, 월별로 자동 실행됨
- 사용 예
- 01 * * * * root run-parts /etc/cron.hourly -> root 권한으로, 매시간 1분에 /etc/cron.hourly 디렉터리 안에 있는 명령들을 자동으로 실행
- 02 4 * * * root run-parts /etc/cron.daily -> root 권한으로, 매일 04시 02분에 /etc/cron.daily 디렉터리 안에 있는 명령들을 자동으로 실행
- 03 4 * * 0 root run-parts /etc/cron.weekly -> root 권한으로, 매주 일요일 04시 03분에 /etc/cron.weekly 디렉터리 안에 있는 명령들을 자동으로 실행
- 42 4 1 * * root run-parts /etc/cron.monthly -> root 권한으로, 매월 1일 04시 42분에 /etc/cron.monthly 디렉터리 안에 있는 명령들을 자동으로 실행
- 실습 예제로 cron을 활용하여 매월 15일 새벽 3시 1분에 /home 디렉터리와 그 하위 디렉터리를 /backup 디렉터리에 백업하는 방법을 살펴보자
- 우선 systemctl status crond 명령어를 통해 현재 cron 서비스가 동작하고 있는지 확인해주었다.
# systemctl status crond(q키로 빠져나옴)
- 이후 /etc/crontab 파일을 열어 아래와 같이 구문을 추가하고 저장해주었다.
# vi /etc/crontab
- 다음으로 /etc/cron.monthly 디렉터리로 이동하여 실제 백업을 수행할 수 있는 실행 명령어를 저장하고 있는 스크립트를 작성하여 저장해준다.
# vi myBackup.sh
- 각 구문의 의미는 다음과 같음
- set $(date): 현재 년($1), 월($2), 일($3), 시($4), 분($5), 초($6)를 가져옴
- fname="backup-$2$3tar.xz": 파일 이름을 backup-$2$3tar.xz의 형식으로 지정
- 여기서 $2, $3는 각각 월과 일을 나타냄
- tar cfJ /backup/$fname /home: home 디렉터리와 그 하위 디렉터리들을 묶고 xz로 압축하여 backup 디렉터리에 저장
- 다만 아직 해당 파일에 대한 실행 권한이 없기 때문에 아래와 같이 실행 권한을 부여해주었다.
# chmod 755 myBackup.sh
- 이후 실제로 backup 디렉터리를 만들어주고, systemctl restart crond 명령을 통해 cron 서비스를 재시작함으로써 우리가 위에서 작업한 설정 파일을 읽어오도록 해주었다.
- 마지막으로 결과를 확인해보기 위해 시스템 시간을 임의로 변경해주었다.
다시 표준 시간대로 되돌리기 위해선 'rdate -s time.bora.net'
2027년 1월 15일 03시로 변경
- 이후 03시 1분이 된 것을 확인한 후 backup 폴더를 살펴보면 아래와 같이 백업 파일이 잘 저장된 것을 확인할 수 있다.
at
- cron은 주기적으로 반복되는 작업을 예약하는 것이지만, at는 일회성 작업을 예약할 때 사용
- 사용 예
- 예약: # at [시간]
- ex) # at 3:00am tomorrow -> 내일 새벽 3시
- ex) # at 11:00pm January 30 -> 1월 30일 오후 11시
- ex) # at now + 1 hours -> 1시간 후
- at> 프롬프트에 예약 명령어 입력 후 Enter
- 완료되면 Ctrl + D
- 확인: # at -l
- 취소: # atrm [작업 번호]
- 예약: # at [시간]
간단한 at 사용 예
네트워크 관련 필수 개념
- TCP/IP: 컴퓨터끼리 네트워크 상으로 의사소통을 하는 프로토콜 중 가장 널리 사용되는 프로토콜의 한 종류
- 호스트 이름(Hostname)과 도메인 이름(Domain name)
- 호스트 이름은 각각의 컴퓨터에 지정된 이름
- 도메인 이름(또는 도메인 주소)은 hanbit.co.kr과 같은 형식
- IP 주소
- 각 컴퓨터의 랜카드에 부여되는 중복되지 않는 유일한 주소
- 4바이트로 이루어져 있으며, 각 자리는 0~255까지의 숫자
- ex) Server 가상머신의 IP 주소는 192.168.111.100
- 네트워크 주소
- 같은 네트워크에 속해 있는 공통된 주소(예: 192.168.111.0)
- 브로드캐스트(Broadcast) 주소
- 내부 네트워크의 모든 컴퓨터가 듣게 되는 주소
- 현재 주소의 제일 끝자리를 255로 바꾼 주소(C 클래스)
- 게이트웨이(Gateway), 라우터(Router)
- 네트워크 간에 데이터를 전송하는 컴퓨터 또는 장비
- VMware의 게이트웨이 주소는 192.168.111.2로 고정
- 넷마스크(Netmask) & 클래스(Class): 네트워크의 규모를 결정(예: 255.255.255.0 - C 클래스)
- DNS(Domain Name System) 서버(= 네임 서버) 주소
- URL을 해당 컴퓨터의 IP 주소로 변환해주는 서버
- 설정 파일은 /etc/resolv.conf
- VMware를 사용하면 VMware가 192.168.111.2번을 게이트웨이 및 DNS 서버로, 192.168.111.254를 DHCP 서버로 설정함
DHCP 서버는 자동으로 IP를 할당하는 역할을 수행
네트워크 관련 명령어
- nmtui
- 네트워크와 관련된 대부분의 작업을 이 명령어에서 수행
- 자동 IP 주소 또는 고정 IP 주소 사용 결정
- IP 주소, 서브넷 마스크, 게이트웨이 정보 입력
- DNS 정보 입력
- 네트워크 카드 드라이버 설정
- 네트워크 장치(ens160)의 설정
- 텍스트 기반으로 동작함
- 네트워크와 관련된 대부분의 작업을 이 명령어에서 수행
X윈도우 nmtui 설정 화면
- systemctl <start/stop/restart/status> NetworkManager: 네트워크의 설정을 변경한 후에, 변경된 내용을 시스템에 적용시키는 명령어
- ifup [장치 이름] 및 ifdown [장치 이름]: 네트워크 장치를 On 또는 Off 시키는 명령어
- ifconfig [장치 이름]: 장치의 IP 주소 설정 정보를 출력
- nslookup: DNS 서버의 작동을 테스트하는 명령어
- ping [IP 주소 또는 URL]: 해당 컴퓨터가 네트워크상에서 응답하는지를 테스트하는 명령어
네트워크와 관련된 주요 파일
- /etc/sysconfig/network: 네트워크의 기본적인 정보가 설정되어 있는 파일
- /etc/sysconfig/network-scripts/ifcfg-ens160: ens32 장치에 설정된 네트워크 정보가 모두 들어있는 파일
- /etc/resolv.conf: DNS 서버의 정보 및 호스트 이름이 들어있는 파일
- /etc/hosts: 현 컴퓨터의 호스트 이름 및 FQDN이 들어있는 파일
네트워크 보안을 위한 SELinux
- SELinux (Security Enhanced Linux)는 보안에 취약한 리눅스를 보호하기 위해 탄생
- 강제(Enforcing), 허용(Permissive), 비활성(Disabled) 세 가지 레벨
- 설정 파일인 /etc/sysconfig/selinux를 편집하거나, system-config-selinux 명령으로 설정
- 작동 방식
- '강제(Enforcing)'는 시스템 보안에 영향을 미치는 기능이 감지되면 아예 그 기능이 작동되지 않도록 시스템에서 막음
- '허용(Permissive)'은 시스템 보안에 영향을 미치는 기능이 감지되면 허용은 되지만 그 내용이 로그에 남음
- '비활성(Disabled)'은 SELinux를 사용하지 않음