[Linux] RPM, YUM, DNF / NetworkManager / Netstat, SS, nmap, lsof / Podman

EUN JY·2024년 3월 25일
1

Linux

목록 보기
1/9
post-thumbnail

1. RPM, YUM, DNF

  • 리눅스 패키지를 관리(설치, 삭제, 업데이트 등)하는 명령어

1-2. RPM(Red Hat Package Manager)

  • 초기 리눅스에서는 패키지를 설치하기 위해 tar, gzip 등의 확장자 사용 > 모든 패키지를 사용자가 직접 컴파일 하여 설치해야 했음
  • RPM : 이 불편함을 해소하기 위해 RedHat 사에서 개발한 패키지 관리 프로그램
  • RPM 패키지 : 실행파일, 설정파일, 제작자 정보 등을 담고 있음
  • 인터넷이 연결되어 있지 않아도 설치가 가능
  • *.rpm 확장자로 되어있는 패키지 설치 가능
  • 패키지 사이에 의존하고 있는 패키지까지 자동으로 설치되지 않음

1-3. YUM(Yellowdog Updater, Modified)

  • RPM 이후에 등장한 패키지 관리 프로그램
  • RPM을 기반으로 설계
  • 인터넷을 사용하여 패키지를 설치할 때 필요한 패키지들을 모두 다운로드 받아서 설치할 수 있음 > 패키지간의 의존성 문제를 해결
  • 인터넷을 통한 설치가 가능
  • 특정한 파일 확장자를 요구하지 않음
  • 패키지 사이에 의존하고 있는 패키지까지 자동으로 설치됨

1-4. DNF

  • DNF 패키지 기본 관리 명령
  • DNF와 YUM 차이
  • YUM 에 비해 성능 효율이 좋아 속도 면에서 우수
  • 외부 라이브러리인 libsolv를 이용하여 의존성 문제를 해결
  • API 문서가 공식적으로 제공
  • C, C++, Python으로 작성되었고 여러 확장 시스템을 지원
  • YUM 은 오랜 기간 동안 수정되지 못한 여러 문제점이 존재
    • 성능 저하 발생 / 패키지 설치 시 의존성 관련 문제
    • Fedora 18에 처음 도입된 후 Fedora 22부터 정식으로 DNF 가 YUM 의 자리를 대신함

2. NetworkManager

  • 참고 : NetworkManager 적응하기
  • RHEL 7 ~ RHEL 9 : 기본 네트워크 관리 서비스로 NetworkManager 사용
  • network 서비스
    • RHEL 7 의 initscript 또는 RHEL 8 의 network-scripts 패키지에서 제공하는 script 들을 활용
    • RHEL 7, RHEL 8 까지는 유지되다가 RHEL 9 부터는 아예 제거됨
  • /etc/sysconfig/network-scripts/ifcfg-*(이후 ifcfg-rh 로 지칭) 는 NetworkManager 에서도 호환
    • ifcfg-* : 기존 network 서비스에서 각 네트워크 인터페이스 설정을 위해 관리하던 파일
    • RHEL 9 에서도 호환되지만, 기본적으로는 /etc/NetworkManager/system-connections/ 디렉토리에 <interface>.nmconnection(이후 keyfile 로 지칭) 이름으로 저장

2-1. NetworkManager 도구

  • NetworkManager 에서 네트워크 구성을 위해 사용할 수 있는 도구
이름설명
nmcliCLI 도구
GUI 가 없는 환경에서 대부분의 네트워크 설정을 할 수 있음
nmtuiTUI(Text User Interface) 로 제공
CLI 환경에서 메뉴방식으로 선택하면서 구성할 수 있는 화면을 제공
curse 기반으로 구성
nmtui 에서 지원하지 않는 일부 설정 존재
nm-connection-editorGUI 도구로 nm-connection-editor 패키지로 제공
control-centerGNOME 쉘에서 제공되는 GUI 도구
  • 이 외에도 nmstatectl , web console(cockpit) 등이 있음
  • 실서버 운영 환경에서는 대부분 GUI 가 구성되어 있지 않음
    • GUI 가 없는 서버 환경에서 주로 쓰이는 nmcli , nmtui 도구를 중심으로 네트워크 인터페이스를 구성

2-2. NetworkManager 용어

  • Connection : 네트워크 연결을 설정하고 관리하는 데 필요한 모든 설정이 포함된 프로필(프로파일)
    • 여러 Connection 프로필을 생성, 편집 및 저장, 다양한 네트워크 또는 액세스 포인트 간에 빠르게 전환
    • 다양한 네트워크 설정을 구성/관리할 수 있는 프로필을 만들 수 있게 해줌
    • Device 를 다양한 type 의 네트워크와 더 간단하게 연관지을 수 있음
  • Device : NetworkManager 에서 인식되는 네트워크 인터페이스
    • ip link 명령으로 사용할 수 있는 네트워크 인터페이스를 확인하는 것과 비슷
    • nmcli device 의 sub 명령어 -> connect, disconnnect
    • ip link set dev up 같이 인터페이스를 up/down 하는 것과는 조금 다름 (connection 과 connect/disconnect 를 수행)
    • connection 을 연결/활성화하는 건, nmcli connection 명령에서도 가능

2-3. nmcli 로 IP 관리하기

  • NetworkManager 에서 인식되는 Device 를 확인, 선택한 Device 에 연결할 설정(Connection)을 추가
  • 이 때, nmcli 명령어로 connection 을 생성/수정/삭제/활성화/비활성화 할 수 있음
  • nmcli 명령어를 통한 설정은 ifcfg-rh 또는 keyfile 에 바로 반영됨

3. Port 확인

  • Daemon 혹은 Application 이 Listen 하고 있는 Port 를 확인하는 방법
    • 데몬(Daemon): 사용자가 직접 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램
  • Port 의 상태 : Open, Filtered, Closed, Unfiltered

3-1. Netstat

  • Linux 네트워킹 시스템에 대한 정보를 확인하는데 사용되는 도구
  • sudo netstat -ltup : Open 되어있는 모든 Port 를 확인할 수 있음
    • -l : Netstat 에 모든 수신 소켓을 표시
    • -t : 모든 TCP 연결을 표시
    • -u : 모든 UDP 연결을 표시
    • -p : 포트에서 수신하는 어플리케이션/데몬의 이름을 표시
    • -n : 서비스 이름 대신 Port 번호를 표시

3-2. SS

  • Open 된 소켓에 대한 정보를 표시 (출력은 Netstat 과 비슷)
  • sudo ss -lntu : TCP 및 UDP 연결에 대한 모든 수신 대기 포트를 숫자로 표시

3-3. nmap

  • 아주 강력하고 인기있는 네트워크 탐색 도구이자 포트 스캐너
  • 시스템에 nmap이 없을 경우 apt-get, yum, dnf 등을 이용하여 설치 가능
  • Port 스캔하는 시간이 수 초 이상 소요
  • sudo nmap -n -PN -sT -sU -p- localhost

3-4. lsof

  • Linux 에서 open file 을 확인하는데 사용
  • Unix/Linux의 모든 것은 파일로 이루어져 있기 때문에 스트림이나 네트워크 파일도 lsof 로 확인 가능
  • sudo lsof -i : -i 로 모든 네트워크 파일을 볼 수 있음

4. Podman

4-1. Docker VS Podman

  • Docker
    • Docker 데몬 : 단일 호스트에서 모든 컨테이너를 관리하는 백그라운드 프로세스
    • 모든 Docker 이미지, 컨테이너, 네트워크, 스토리지 등을 처리
    • 컨테이너를 관리하기 위해 데몬이 필요하므로, 프로세스를 실행하려면 루트 권한이 필요
  • Podman
    • 컨테이너를 관리하기 위해 데몬이 필요하지 않으므로, 루트 권한이 필요하지 않음

4-2. 기본 명령어

  • 이미지 다운로드와 제거
[root@localhost ~]# podman pull docker.io/library/alpine
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob 4abcf2066143 done   |
Copying config 05455a0888 done   |
Writing manifest to image destination
05455a08881ea9cf0e752bc48e61bbd71a34c029bb13df01e40e3e70e0d007bd
[root@localhost ~]# podman rmi alpine
Untagged: docker.io/library/alpine:latest
Deleted: 05455a08881ea9cf0e752bc48e61bbd71a34c029bb13df01e40e3e70e0d007bd
  • 컨테이너 실행 확인과 사용 가능한 모든 컨테이너 출력
[root@localhost system-connections]# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
  • 새 컨테이너 생성
    • -name hakase-nginx 라는 이름으로 만듦
    • -p : 외부 포트는 8000을 사용 / -d 백그라운드로 실행, 컨테이너 id 를 출력
podman run -d -p 8000:80 --name hakase-nginx docker.io/library/nginx
  • 실행 중인 컨테이너 관리
명령어설명
podman top hakase-nginx컨테이너 내부의 프로세스를 확인
podman exec -it hakase-nginx /bin/bash실행 중인 컨테이너로 로그인
nginx -Vhakase-nginx 내부에서 nginx 버전 확인
podman stop hakase-nginxhakase-nginx 컨테이너 중지
podman rm hakase-nginx컨테이너 제거
podman rm hakase-nginx -f실행 중인 컨테이너 강제 제거
profile
개린이

0개의 댓글