Linux

CH.4 서버를 구축하는 데 알아야 할 필수 개념과 명령-3

낑깡꺙냥 2024. 3. 24. 19:34

4.4 리눅스 관리자를 위한 명령어

4.4.1 프로그램 설치를 위한 RPM

RHEL 계열 리눅스에서 패키지를 설치하는데 가장 많이 사용되는 것은 RPM과 DNF(또는 YUM)이다.

 

RPM(Redhat Package Manager)

레드햇사에서 Windows의 setup.exe와 같이 프로그램 설치 후 바로 실행할 수 있는 설치 파일을 제작했다. 설치 파일의 확장명은 *.rpm이며 이를 패키지(=소프트웨어 프로그램)하고 부른다.

rpm 파일의 형식은 다음과 같다.

패키지이름-버전-릴리스번호.Rocky Rinux버전.*아키텍처.rpm

*아키텍처

  • i386~686: 인텔 또는 AMD 계열의 32bit CPU
  • x86_64: 인텔 또는 AMD 계열의 64bit CPU
  • src: 소스 파일 패키지, 컴파일을 별도로 해줘야 한다.
  • norache: 모든 CPU에 설치 가능하다.

자주 사용하는 rpm 명령어 옵션

  • 설치
    • rpm Uvh 패키지파일이름.rpm
    • U(대문자) -> 기존에 패키지가 설치되지 않았다면 일반적인 설치를 진행하고, 패키지가 설치되어 있다면 업그레이드한다.
    • v -> 설치 과정 확인(생략 가능)
    • h -> 설치 진행 과정을 #기호로 화면에 출력(생략 가능)
  • 삭제
    • rpm -e 패키지이름 -> 패키지 이름을 삭제(e: erase의 약자)
  • 이미 설치된 패키지 조회
    • rpm -qa 패키지이름 -> 시스템에 패키지가 설치되었는지 확인
    • rpm -qf 파일의절대경로 -> 이미 설치된 파일이 어떤 패키지에 포함된 것인지 확인
    • rpm -ql 패키지이름 -> 특정 패키지에 어떤 파일들이 포함되었는지 확인
    • rpm -qi 패키지이름 -> 설치된 패키지의 상세 정보 (설치 여부 확인 가능)
  • 아직 설치되지 않은 패키지 조회
    • rpm -qlp 패키지파일이름.rpm -> 패키지 파일에 어떤 파일들이 포함되었는지 확인
    • rpm -qip 패키지파일이름.rpm -> 패키지 파일의 상세 정보

RPM의 단점

'의존성'이 존재하기 때문에 설치에 불편함이 있다.

이를 보완한 것이 'DNF'

 

NOTE

더보기

DVD에는 주로 기본 설치 패키지가 있는 BaseOS 폴더와 주로 X 윈도 응용 프로그램 등의 추가 설치 패키지가 있는 AppStream 폴더가 있다.

 

4.4.2 편리하게 패키지를 설치하는 DNF

DNF 명령은 RPM 명령의 의존성문제를 완전히 해결한다.

DNF는 Rocky Linux에서 제공하는 rpm 파일 저장소에 설치할 rpm파일은 물론, 해당 파일과 의존성이 있는 다른 rpm파일까지 인터넷을 통해 모두 알아서 다운로드한 후 자동으로 설치까지 해준다.(당연히 인터넷에 정상적으로 연결된 상태여야 한다.)

저장소의 URL은 YUM과 동일한 /etc/yum.repos.d/ 디렉터리의 파일에 저장되어 있다.

 

DNF 기본 사용법

  • 기본 설치 방법
    • dnf -y install 패키지이름 -> DVD같은 패키지가 필요없다. -y옵션을 써주면 사용자에게 yes/no를 묻는 부분에서 무조건 yes를 입력한 것으로 간주한다.
  • rpm 파일 설치 방법
    • dnf install rpm파일이름.rpm -> 다운로드한 RPM 파일을 설치할 경우 사용한다.(로컬에서 설치) 현재 디렉터리의 rpm 파일에 의존성 문제가 있을 때, 문제를 해결할 수 있는 파일을 인터넷에서 다운로드하여 설치한다.
  • 업데이트 가능한 목록 보기
    • dnf check-update -> 시스템에 설치된 패키지 중에서 업데이트가 가능한 목록을 출력한다.
  • 업데이트
    • dnf update 패키지이름 -> 기존에 설치되지 않은 패키지는 새로 설치하고, 이미 설치되어 있으면 업데이트한다.(아무런 옵션을 정하지 않으면 시간이 매우 오래 걸린다.)
  • 삭제
    • dnf remove 패키지이름 -> 기존에 설치된 패키지를 제거한다.
  • 정보 확인
    • dnf info 패키지이름 -> 패키지의 요약 정보를 보여준다.

 

DNF 고급 사용법

  • 패키지 그룹 설치
    • dnf groupinstall "패키지그룹이름" -> 패키지 그룹 설치는 패키지 그룹에 포함된 패키지들을 통째로 설치할 때 사용할 수 있다. 
      • dnf grouplist -> 패키지 그룹 확인 / 그냥 입력할 시 기본 출력 장치인 콘솔로 출력
  • 패키지 리스트 확인
    • dnf list 패키지이름 ->Rocky Linux에서 제공하는 패키지 리스트를 출력한다.
      • dnf list all -> 모든 패키지 목록을 보여준다.
      • dnf list httpd* -> httpd라는 이름이 들어간 패키지 목록을 보여준다.
      • dnf list available -> 현재 설치 가능한 목록을 모두 보여준다.
      • dnf list hidden -> 숨겨진 목록을 보여준다.
  • 특정 파일이 속한 패키지 이름 확인
    • dnf provides 파일이름 -> 특정 파일이 어느 패키지에 들어 있는지 확인할 수 있다.
  • GPG 키 검사 생략
    • dnf install --nogpgcheck rpm파일이름.rpm -> gpg 키 인증을 생략할 수 있다.(Rocky Linux에서 인증되지 않은 rpm파일을 dnf install로 설치할 때 유용)
  • 기존 저장소 목록 지우기
    • dnf clean all -> 기존에 다운로드한 패키지 목록을 지운다. 일반적으로 /etc/yum.repos.d/ 폴더의 저장소 목록의 내용을 변경한 후 이 명령을 실행한다.

NOTE

더보기

> (리다이렉션 기호)

결과값을 출력하는 곳을 지정

리눅스에서 띄어쓰기가 있는 이름은 ""(큰따옴표)로 묶어야 한다.

DNF 작동 방식과 설정 파일

DNF의 작동 흐름

  1. dnf install 입력
  2. /etc/yum.repos.d/ 디렉터리의 repo 파일을 열어서 URL 주소 확인
  3. 전체 패키지 목록 파일 요청
  4. 전체 패키지 목록 파일만 다운로드
  5. 설치할 패키지와 관련된 패키지의 이름을 화면에 출력
  6. y를 입력하면 설치에 필요한 패키지 파일 요청
  7. 설치할 패키지 파일을 다운로드해서 자동 설치 (dnf -y install 패키지파일 명령을 실행하면 2~7까지 모두 한 번에 처리)

* 3장에서 Rocky Linux의 1905버전만 설치되도록 하기 위해 /etc/yum.repos.d/ 폴더의 내용을 모두 삭제하고 This.repo 파일을 새로 생성하여 남겨두었다. 그리고 This.repo 파일에 BaseOS, AppStream 등의 저장소를 별도로 적어두었다.(+gpgcheck를 0으로 설정/GPG 키 검사 생략)

 

dnf는 /etc/yum.repos.d/ 폴더 아래 확장명이 *.repo인 파일을 모두 열어본다. (단, 그 하위 폴더는 더 찾아보지 않는다.)

 

repo 파일 내용

  • # -> 주석
  • name -> 저장소의 이름
  • baseurl -> URL이 적혀있어야 한다.(http. ftp, file 중 하나) 여러 개가 나올 수 있는데 앞의 주소가 응답하지 않을 경우 다음 주소를 확인하는 방식으로 패키지를 검색한다.
    • http, https -> 저장소응 웹에서 가져오기
    • ftp -> 저장소를 ftp 서버에서 가져오기
    • file -> 저장소를 로컬에서 가져오기
  • gpgcheck -> 패키지의 GPG 서명을 확인할 지 여부를 0(사용 안 함)과 1(사용)로 지정
  • gpgkey -> gpgcheck가 1일 경우, 아스키 gpg 키가 들어있는 저장소의 URL이 적혀 있으면 된다.

dnf 명령을 실행할 때 필요한 파일을 네트워크가 아닌 DVD에서 설치할 수도 있다.(네트워크가 느린 곳에서 효과적)

따라서 dnf 명령어 실행 시 Rocky Linux DVD를 우선 사용해서 설치하고, 만약 DVD에 패키지 파일이 없을 경우 네트워크에서 다운로드하여 설치하는 것도 가능하다.

 

NOTE

더보기

dnf repolist: 리포지터리 리스트

리포지터리 설치 시 기본 구성으로 사용하는 것이 별도의 조치가 없는 경우 안전하다.

 

4.3.3 파일 압축과 묶기

파일 압축

압축 파일의 확장명은 xz, bz2, gz, zip, Z(compress) 등이다.

최근에는 압축률이 더 좋은 xz나 bz2를 더 많이 사용하는 추세다.

  • xz -> 확장명 xz로 압축하거나 풀어줌
    • xz 파일이름 -> '파일 이름'을 압축 파일인 '파일이름.xz'로 만들며 기존 파일은 삭제됨
    • xz -d 파일이름.xz -> '파일이름.xz' 압축 파일을 일반 파일인 '파일이름'으로 만듦
    • xz -l 파일이름.xz -> '파일이름.xz' 압축 파일에 포함된 파일 목록과 압축률 등을 출력
    • xz -k 파일이름 -> 압축 후에 기존 파일을 삭제하지 않고 그대로 둠
  • bzip2 -> 확장명 bz2로 압축하거나 풀어줌
    • bzip2 파일이름 -> '파일 이름'을 압축 파일인 '파일 이름.bz2'로 만듦
    • bzip2 -d 파일이름.bz2 -> '파일이름.bz2' 압축 파일을 일반 파일인 '파일이름'으로 만듦
  • bunzip2 -> 확장명 bz2의 압축을 풀어줌('bzip2 -d'와 동일한 명령)
  • gzip -> 확장명 gz로 압축하거나 풀어줌
    • gzip 파일이름 -> '파일 이름'을 압축 파일인 '파일 이름.gz'로 만듦
    • gzip -d 파일이름.gz -> '파일이름.gz' 압축 파일을 일반 파일인 '파일이름'으로 만듦
  • gunzip -> 확장명 gz의 압축을 풀어줌('gzip -d'와 종일한 명령)
  • zip -> Windows용과 호환되는 확장명 zip으로 압축하거나 풀어줌(기존 파일은 남음)
    • zip 생성할파일이름.zip 압축할파일이름 -> 압축할 파일 이름을 '새로생성될파일이름.zip'으로 만듦
  • unzip -> Windows용과 호환되는 확장명 zip으로 묶은 파일을 풀어줌
    • unzip 압축파일이름.zip -> '압축파일이름.zip'의 압축을 풀어줌
더보기

압축률 (클수록 크기가 줄어든다.)
xz > bz2 > gz > z

파일 묶기

리눅스에서는 파일 압축과 파일 묶기를 원칙적으로 별개의 프로그램으로 실행

  • tar -> 확장명 tar로 묶음 파일을 만들거나 묶음을 풀어줌
    • [동작]
      • c(소문자) -> 새로운 묶음을 만듦
      • x -> 묶인 파일을 풀어줌
      • t -> 묶음을 풀기 전에 묶인 경로를 보여줌
      • C(대문자) -> 묶음을 풀 때, 지정된 디렉터리에 압축을 풀어줌. 지정하지 않으면 묶을 때와 동일한 디렉터리에 묶음이 풀림
    • [옵션]
      • f(필수) ->묶음 파일 이름 지정. 원래 tar는 테이프 장치 백업이 기본임
      • v -> visual의 의미로 파일이 묶이거나 풀리는 과정을 보여줌(생략 가능)
      • J(대문자) -> tar + xz
      • z(소문자) -> tar +gzip
      • j(소문자) -> tar + bzip2
    • tar cvf(J/z/j) -> 묶기, 묶기+압축
    • tar tvf -> 파일 확인
    • tar xvf(J/z/j) -> tar 풀기, 압축 해제+tar 풀기
    • tar cxvf newdir my.tar -> newdir에 tar 풀기

4.4.4 파일 위치 검색

  • find
    • 옵션
      • -name 
      • -user -> 소유자
      • -newer -> 전, 후
      • -perm -> 허가권
      • -size -> 크기
    • action
      • -print -> 기본값
      • -exec -> 외부 명령 실행
    • [기본 사용 예]
      • find /etc -name "*.conf" -> /etc 디렉터리 하위에 확장명이 *.conf인 파일 검색
      • find /usr/bin -size +10k -size -100k -> /usr/bin 디렉터리 하위에 파일 크기가 10KB~100KB인 파일 검색
    • [고급 사용 예]
      • find /home -name "*.swp" -exec rm {} \; -> /home 디렉터리 하위에 확장명이 *.swp인 파일 삭제
        • -exec, \;는 외부 명령어의 시작과 끝을 표시함
        • find /home -name "*.swp" 명령이 중괄호 안으로 들어감
  • which 실행파일이름 -> PATH에 설정된 디렉터리만 검색, 즉 명령어 경로를 의미하는 환경 변수에서만 찾아서 검
  • whereis 실행파일이름 -> 실행 파일 및 소스, man 페이지 파일까지 검색
  • locate 파일이름 -> 파일 목록 데이터베이스에서 검색하기 때문에 매우 빠르고 유용하지만, updatedb 명령을 1회 실행해야 사용할 수 있음

4.4.5 시스템 설정

표준 시간대 설정

[설정]의 [자세히 보기]->[날짜 및 시각]부분에서 표준 시간대를 변경할 수 있다.

 

네트워크 설정

ntmui 명령어

 

방화벽 설정

firewall-config 명령어, 외부에 서비스하기 위해 포트를 열 때 사용한다.

 

서비스(데몬) 설정

ntsysv 명령어, 서비스(데몬)의 시작, 중지, 재시작 및 사용 여부를 설정할 때 사용한다.(먼저 dnf -y install ntsysv 명령으로 설치해야 한다.)

 

4.4.6 CRON과 AT

CRON

CRON: 주기적으로 반복하는 일을 자동으로 실행할 수 있도록 시스템 작업을 예약해놓은 것, cron과 관련된 데몬(서비스)은 crond이고, 관련 파일은 /etc/crontab이다.

형식: 분 시 일 월 요일 사용자 실행명령 (ex. 00 05 1 * * root cp -r /home /backup)

-> 매월 요일 상관없이 1일 오전 5시에 /home 디렉터리를 통째로 /backup 디렉터리에 복사된다. (사용자는 root의 권한)

  • /etc/crontab 파일
    • 시간별: /etc/cron.hourly/
    • 일별: /etc/cron.daily/
    • 주별: /etc/cron.weekly/
    • 월별: /etc/cron.monthly/

run-parts 디렉터리 명령어는 디렉터리 안의 명령을 모두 실행한다.

 

at

at: 일회성 작업을 예약하는 것. 한 번만 실행하고 소멸한다.

  • 예약: at 시간 (ex. at 11:00pm tommorow) -> 내일 새벽 3시 / at 프롬포트에 예약 명령어 입력 후 ENTER누름 / 완료되면 Ctrl+D 누름
  • 확인: at -l
  • 취소: atrm 작업번호

 

NOTE

더보기

쉘 스크립트
쉘에서의 특정 문법으로 특정한 순서에 맞추어 결과물을 도출
.sh -> 리눅스의 쉘 스크립트
확장자명은 구별을 위해 붙임

sh를 실행할 때. ./는 권한(rwx)이 있어야 실행 가능하지만 sh 명령을 쓰면 실행이 가능하다(소유권은 있어야 함?)

 

#!bin/bash #셔뱅: 스크립트 실행 쉘
set $(date) #date 명령어를 변수화
fname="backup-$2$3tar.xz" #fname이라는 변수를 지정하되, 상단의 date에서 위치 매개변수 2번과 3번의 값을 가져와서 지정
tar cfJ /backup/$fname /home #/home을 /backup의 backup-날짜.tar.xz이라는 이름으로 압축

 

NOTE

더보기

윈도우(호스트)에서 리눅스로 파일 옮기기

cmd에서 리눅스 핑 테스트
cd C:\Users\4gl\Desktop(zip파일 경로)

SSH 기반의 파일 전송 명령어 SCP(ssh copy)
SCP 파일명 root@192.168.111.100(누구한테 보낼건지):경로(어디에 저장할건지)
scp test.zip root@192.168.111.100:/root

*파일 전송이 빠른 이유: 로컬이라서
*압축 파일은 빨간색

 

sshpass -p "rocky" scp 파일명 root@192.168.111.100:/root