본문 바로가기
IT/리눅스

[리눅스] 기초 내용 정리 (리눅스의 운영)

by dwoi 2023. 3. 28.

리눅스 운영에 대해서 학습한 내용을 정리한 글

목차

     


    리눅스

    사진: Unsplash 의 Gabriel Heinzer

    우분투?


    1. 패키지 설치

    1.1. 패키지

    패키지 : 특정 소프트웨어를 설치 가능한 형태로 묶어 압축 해 둔 소프트웨어 형태 (compressed file archive)

    패키지 형태 : .dep .rpm

    패키지 관리 도구 : apt (Advanced Package Tool)

    1.1.1. 패키지의 필요성

    “리눅스의 다양한 운영체제에서는, 내가 원하는 프로그램(소프트웨어)을 실행하기 위해서는, 

    해당 소스코드를 해당 환경에서 컴파일 하여야 한다.”

    → 배포판 환경에 맞추어 미리 빌드한 실행파일을 압축

    1.1.2. 패키지 시스템 구조

    패키지 관리자 명령어를 통해 패키지를 다운받으면 그 패키지에 의존하는 Dependent 패키지도 같이 깔리는 형식

    • apt
    • dpkg

     

    1.2. 패키지 유틸리티

    1.2.1. 패키지 관리자 - - apt (Advanced Package Tool)

    apt 기본 설치/검색 명령어

    • apt update : 리포지토리 내용 가져오기


    • apt list : 리포지토리 패키지 목록 출력 (로컬 캐쉬)
    • apt list --installed : 설치된 패키지 목록 출력
    • apt list --upgradable : 업그레이드(업데이트) 가능한 목록 출력


    • apt search <keyword> : 리포지토리 검색 (로컬 캐쉬)


    • apt show <pkg-name> : 패키지 정보 표시

     

    apt 기본 관리 (설치/삭제) 명령어

    • apt install : 리포지토리 내의 패키지 설치


    • apt remove : 설치된 패키지 삭제 (설정 유지)
    • apt purge : 설치된 패키지 삭제 + 설정파일 삭제
    • apt autoremove : 더 이상 사용되지 않는 패키지 삭제                                                                                                             (버전 업그레이드로 인한 더 이상 참조되지 않는 dependent 패키지 파일들 삭제)


    • apt upgrade : 패키지 업그레이드(업데이트)

    ※ 또다른 패키지 관리자 유형

    • 패키지 파일 확장자 .deb 또는 .dpkg 를 이용한 설치
    • dpkg

    dpkg 를 이용한 유틸리티 다운로드, 설치, 삭제
    • dpkg -i <pkg> : install
    • dpkg -r <pkg> : remove
    • dpkg -P <pkg> : purge
    • dpkg -l : list installed


    2. 웹 서버 구축하기

    2.1. 리눅스 디렉토리 구조

     

    https://coding-factory.tistory.com/499

    /(루트)

    최상의 디렉토리인 루트 디렉토리를 의미하며, 리눅스의 모든 디렉토리들의 시작점이다. 즉, 모든 디렉토리들을 절대경로로 표기할 때에 이 디렉토리로부터 시작해야 한다.

    /bin

    기본적인 명령어가 저장된 디렉토리. 즉, 리눅스 시스템사용에 있어 가장 기본적이라고 할 수 있는 mv, cp, rm 등과 같은 명령어들이 이 디렉토리에 존재하며 root 사용자와 일반사용자가 함께 사용할 수 있는 명령어 디렉토리이다.

    /boot

    리눅스 부트로더(Boot Loader)가 존재하는 디렉토리. 즉, GRUB 과 같은 부트로더에 관한 파일들(grub.conf 등)이 이 디렉토리에 존재한다.

    /dev

    시스템 디바이스(device)파일을 저장하고 있는 디렉토리. 즉, 하드디스크 장치파일 /dev/sda, CD-ROM 장치파일 /dev/cdrom 등과 같은 장치파일들이 존재하는 디렉토리이다.

    /etc

    시스템의 거의 모든 설정파일이 존재하는 디렉토리. /etc/sysconfig(시스템 제어판용 설정파일), /etc/passwd(사용자관리 설정파일), /etc/named.conf(DNS 설정파일) 등과 같은 파일들이 존재한다.

    /home

    사용자의 홈디렉토리, useradd 명령어로 새로운 사용자를 생성하면 대부분 사용자의 ID와 동일한 이름의 디렉토리가 자동으로 생성됨.

    /lib

    커널모듈파일과 라이브러리파일 즉, 커널이 필요로하는 커널모듈파일들과 프로그램(C, C++ 등)에 필요한 각종 라이브러리 파일들이 존재하는 디렉토리.

    /media

    DVD, CD-ROM, USB 등과 같은 탈부착이 가능한 장치들의 마운트포인트로 사용되는 디렉토리.

    /mnt

    /media 디렉토리와 비슷한 용도로 탈부착이 가능한 장치들에 대하여 일시적인 마운트포인트로 사용하는 디렉토리.

    /proc

    일명 "가상파일시스템" 이라고 하는 곳으로 현재 메모리에 존재하는 모든 작업들이 파일형태로 존재하는 곳이다. 디스크상에 실제 존재하는 것이 아니라 메모리상에 존재하기 때문에 가상파일시스템이라고 부른다. 실제 운용상태를 정확하게 파악할 수 있는 중요한 정보를 제공하며 여기에 존재하는 파일들 가운데 현재 실행중인 커널(kernel)의 옵션 값을 즉시 변경할 수 있는 파라미터파일들이 있기 때문에 시스템 운용에 있어 매우 중요한 의미를 가진다.

    /root

    시스템 최고관리자인 root 사용자의 개인 홈디렉토리.

    /sbin

    ifconfig, e2fsck, ethtool, halt 등과 같이 주로 시스템 관리자들이 사용하는 시스템관리자용 명령어를 저장하고 있는 디렉토리.

    /tmp

    일명 "공용디렉토리" . 시스템을 사용하는 모든 사용자들이 공동으로 사용하는 디렉토리. mysql 에서 사용하는 mysql.sock 등과 같은 소켓파일, 또는 아파치에서 사용하는 세션파일등이 생성되기도 한다. 웹해킹에 사용되기도 해서 주의를 요망.

    /usr

    시스템이 아닌 일반사용자들이 주로 사용하는 디렉토리. 즉, c++, chsh, cpp, crontab, du, find등과 같이 일반사용자들용 명령어들은 /usr/bin 에 위치한다.

    /var

    시스템운용중에 생성되었다가 삭제되는 데이터를 일시적으로 저장하기 위한 디렉토리. 거의 모든 시스템로그파일은 /var/log 에 저장되고, DNS 의 zone 설정파일은 /var/named 에 저장되고, 메일파일은 /var/spool/mail 에 저장되며, 크론설정파일은 /var/spool/cron 디렉토리에 각각 저장됨.

    3. 사용자 모니터링

    3.1. 접속 모니터링 도구 : users, who, w

    ⓐ. users

    현재 접속한 사용자 목록

    ⓑ. who

    현재 접속한 사용자 목록과, 터미널 번호, 접속 시간 및 접속 장소

    ⓒ. w

    시스템 정보, 현재 접속한 사용자 목록, 터미널 번호, 접속장소, 접속 시간, 자원 소모량 및 하는 행위

     

    3.2. 접속 로그 및 접속 실패 로그 : last, lastb

    ⓐ. last : 최근 접속 로그

    • last (/var/log/wtmp - 바이너리 로그 파일)
    • last [username]
    • last reboot

    ⓑ. lastb  : 최근 접속 실패 로그

    • lastb (/var/log/btmp - 바이너리 로그 파일)
    • lastb [username]

     

    3.3. 권한 로그 및 시스템 로그

    3.3.1. 인증 로그를 통한 감사 추적 - login, sudo 등 인증 및 권한상승 요청 등

    인증 로그 확인

    • /var/log/auth.log


    • cat /var/log/auth.log | grep <my-filter>


    • tail -F /var/log/auth.log | grep cron
    • tail -F /var/log/auth.log | grep sudo

     

    3.3.2. 사용자의 다양한 명령어 로그 살펴보기 - history

    사용자 명령어 기록 확인

    • history

    사용자 명령어 기록 활용

    • history 10 : 최근 10개 명령어
    •  ! <number> : 해당 명령어 재실행

    사용자 명령어 기록 로그
    • .bash_history : 내 로그
    • /home/<user>/.bash_history : 타 사용자의 로그

    3.3.3. 다양한 시스템 로그 살펴보기 - /var/log/*

    시스템 로그들 확인
    • ls -al /var/log

    데몬 서비스 (또는 응용 소프트웨어) 로그 확인
    • cat /var/log/syslog
    • cat /var/log/syslog | grep “xxxxx”
    • cat /var/log/boot.log

    커널 로그 확인
    • cat /var/log/kern.log

    로그 로테이션 확인
    • /var/log/xxxx.log
    • /var/log/xxxx.log.1
    • /var/log/xxxx.log.2.gz

    • /etc/logrotate.d/*


    4. 프로세스 모니터링

    4.1. 프로세스 확인(ps - process status)

    프로세스 살펴 보기
    • ps a

    프로세스 상태 코드

    코드설명 (영어)설명 (한국어)DRSTWXZ

    코드    
    D Uninterruptible sleep (usually IO) 깨울 수 없는 잠 (보통 IO)
    R Running or runnable (on run queue) 실행중 또는 실행가능 (실행 큐에 있음)
    S Interruptible sleep (waiting for an event to complete) 깨울 수 있는 잠
    T Stopped, either by a job control signal or because it is being traced. 중지됨 (작업 제어 신호를 받거나 트레이싱 때문에)
    Z Defunct ("zombie") process, terminated but not reaped by its parent. 좀비 프로세스
    종료되었으나 부모 프로세스에 의해 수습되지 않음

    • < : high priority
    • N : log priority
    • L : pages locked into memory
    • s : session leader
    • l : multi-threaded
    • + : foreground process group

    4.1.1. 백그라운드 프로세스 실행 및 관리 (jobs)

    백그라운드로 프로세스 실행하기
    • & : 해당 명령어를 background 로 실행


    백그라운드 프로세스 확인
    • jobs : 백그라운드 프로세스 확인


    백그라운드/포어그라운드 프로세스 전환 및 관리
    • fg <%job#> : 해당 job# 를 foreground 로 전환
    • ctrl+z : 해당 foreground job 을 중단 (suspend(Stopped))
    • bg <%job#> : 해당 job 을 background 로 전환
    • kill <%job#> : 해다 job 을 종료 (Terminate)

     프로세스의 시간

    • 프로세스의 동작 방식에 따른 측정 시간

    https://ghleokim.github.io/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9C%A0%EC%A0%80%EB%AA%A8%EB%93%9C%EC%99%80-%EC%BB%A4%EB%84%90%EB%AA%A8%EB%93%9C/

     

    4.1.2. 프로세스 디버깅을 위한 주요 명령어

    모든 프로세스 살펴보기
    • ps ax
    • ps axu


    프로세스 트리 살펴보기
    • ps -ejH
    • ps axjf


    root 권한으로 실행중인 모든 프로세스 확인
    • ps -U root -u root u : -U = real UID, -u = effective UID


    내 권한으로 실행중인 모든 프로세스 확인
    • ps -xu


    내가 원하는 필드만 출력
    • ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
    • ps -aN --format cmd,pid,user,ppid

     

    모든 프로세스 살펴보기
    • top
    • top -d 1 : 1초마다 갱신
    • top -b : 배치 모드 (로깅 모드)


    top 도움말
    • shift + p : CPU 사용률 내림차순
    • shift + m : MEM 사용률 내림차순
    • shift + t : 프로세스 시간 순 내림차순
    • f 및 space : 프로세스 컬럼 선택 (s 를 통한 sort, q를 통한 종료)
    • 1 : CPU 별 (또는 통합)

     

    4.1.2.1. strace를 통한 시스템 콜 조회

    시스템 콜 호출 디버깅
    • strace -p <pid> : 시스템 콜에 대한 요청임으로 root 권한 필요

     

    4.1.2.2. proc 파일 시스템을 통한 프로세스 디버깅

    특수(special) 파일 시스템, proc
    • /proc/<pid>/


    • 예시) yes > /dev/null & :                        해당 프로세스가 9416 이라고 가정
    • cat /proc/9416/cmdline
    • cat /proc/9416/environ
    • cat /proc/9416/status
    • cat /proc/9416/maps


    • ls -l /proc/9416/fdinfo
    • ls -l /proc/9416/fd


    5. 네트워크 모니터링

    5.1. 시스템 내 열려있는 포트 확인 : netstat

    • 사용법
      •  netstat <OPTION>
        •  -a : 모든 소켓 정보
        •  -r : 라우팅 정보 출력
        •  -n : 호스트명 대신 IP 주소를 출력
        •  -i : 모든 네트워크 인터페이스 정보 출력
        •  -s : 프로토콜별 네트워크 통계
        •  -p : 해당 소켓과 관련된 프로세스 표시
    • 사용예
      •  라우팅 테이블 확인
        •  netstat -rn
      •  인터페이스 통계 표시
        • netstat -i
      •  모든 소켓과 프로세스 표시
        •  netstat -anp
      •  열려있는 TCP 소켓 확인
        •  netstat -ant | grep LISTEN

     

    5.2. tcpdump를 통한 패킷 캡쳐 및 분석

    사용법

    • tcpdump -i <nic>

    주요 옵션
    • -n : no resolve ip (hostname)
    • -nn : no resolve ip & port
    • -e : show ethernet
    • -x : hex decimal raw data
    • -X : hex decimal raw data with ASCII text
    • -v : verbose (패킷 상세 정보 표시)
    • -w : write (파일로 저장: 예, test.pcap)
    • -c : count (패킷 표시/저장 개수 제한)


    • port <#> : port number (예, port 80)
    • host <ip> : src/dst ip address (예, 192.168.56.1)
    • src <ip> : src ip address
    • dst <ip> : dst ip address
    • src <ip> and port <#> : source ip and port
    • net <ip/cidr> : network address (예, 192.168.56.0/24)

     

    5.3. 그 외 네트워크 도구

    인터페이스 설정
    • ifconfig
    • netplan : /etc/netplan 디렉토리 내 인터페이스 설정


    네트워크/라우팅 설정
    • ip
    • route
    • arp


    분석/진단 도구
    • ping
    • trace

     


     

    댓글