0️⃣ 들어가며

Bash에 대한 기능은 끝났고, 이번 편을 끝으로 리눅스 이해는 마무리할 예정이다.
사실 이번 내용이 Bash 기능보다 더 앞에 나왔어야 하는 게 아닌가 하는 생각이 들지만,
어쨌든 알아두면 좋으니까,, 바로 시작해 보겠다.


1️⃣ 학습 내용

13. 시스템 관리

13.1 패키지 관리 시스템

✅ 패키지와 패키지 관리 시스템

  • 패키지

    프로그램 실행 파일과 프로그램 동작에 필요한 라이브러리, 설정 파일 등 관련 파일을 묶은 하나의 단위

  • 패키지 관리 시스템

    수많은 소프트웨어를 설치/업데이트/삭제하기 편리하도록 사용하는 패키지 전용 프로그램

    사용자로부터 명령어를 받아 패키지 설치, 삭제, 검색, 업데이트 등의 작업을 수행

    리포지토리(서버)에서 패키지를 다운로드하고 설치

    시스템 변경 작업이 일어나기 때문에 보통 sudo 명령어를 사용

    패키지를 설치/관리할 수 있는 프로그램

    예 : apt (Debian/Ubuntu 계열), yum (CentOS), dnf (Fedora), snap (컨테이너형 패키지)

    사용자 → 명령어 입력 → apt (패키지 관리자)
                      ↕
               리포지토리(패키지 저장소)
                      ↕
              실제 패키지 파일 다운로드 및 설치
  • 패키지 종속성(Dependency)

    특정 라이브러리 또는 다른 프로그램에 의존하는 프로그램이 있을 때, 이 특징을 종속성이라 함

    패키지 관리 시스템은 종속성 문제를 자동으로 해결하여 필요한 패키지는 함께 설치함

✅ apt로 패키지 관리하기

  • apt(Advanced Package Tool)

    데비안과 우분 계열의 리눅스 배포판에 탑재된 패키지 관리 시스템

    패키지 DB 업데이트 : sudo apt update(리스트를 업데이트), sudo apt upgrade(업그레이드 가능한 거 다 설치)

    패키지 조회 : list, search, show

    패키지 설치 : install

    패키지 삭제 : remove, autoremove

    • 패키지 데이터베이스 업데이트

      sudo apt update

      리포지토리에 있는 패키지 목록을 최신 상태로 갱신

    • 설치 가능한 패키지 업그레이드

      sudo apt upgrade

      설치된 모든 패키지 중 업데이트가 있는 패키지를 자동 설치

    • 개별 패키지 설치

      sudo apt install 패키지명

    • 패키지 정보 조회

      apt list 패키지명
      apt search 키워드
      apt show 패키지명

13.2 systemd

✅ systemd와 systemctl

  • 리눅스 프로세스 메모리 공간 구조

    • 사용자 공간(User Space)

      일반 애플리케이션, 사용자용 프로세스가 동작하는 메모리 영역

      최상위 프로세스는 systemd (PID 1)로, 시스템의 부팅과 서비스 관리 역할

    • 커널 공간(Kernel Space)

      OS 커널과 시스템 프로세스가 동작하는 메모리 영역

      최상위 프로세스는 [kthreadd] (PID 2)

  • 데몬(Daemon)과 서비스

    systemd가 관리하는 대부분의 프로세스는 백그라운드에서 실행되는 서비스

    특정 백그라운드 실행 서비스를 데몬이라 하며, 평소에는 ‘S’ (Sleep) 상태로 대기하다가 필요할 때 활성화되어 작업을 수행함

    stdin, stdout, stderr이 없고 주로 로그에 상태를 기록

  • systemctl 유틸리티

    systemctl은 systemd 서비스 및 유닛을 관리하는 명령행 도구

    명령어설명
    systemctl list-units시스템의 서비스 목록 확인
    systemctl status 서비스명특정 서비스 상태 확인
    systemctl start 서비스명서비스 시작
    systemctl stop 서비스명서비스 중지
    systemctl enable 서비스명부팅 시 자동 시작 설정
    systemctl disable 서비스명부팅 시 자동 시작 해제
    systemctl cat 서비스명서비스 유닛 파일 내용 보기

✅ 서비스 유닛(Unit) 파일의 구조

  • 서비스 유닛 파일

    서비스 설정, 실행 방법, 의존성 등을 정의한 파일

    섹션역할 및 설명
    [Unit]서비스 설명, 실행 순서와 의존성 설정 (After, Wants 등)
    [Service]실제 실행 명령어(ExecStart), 재시작 정책 등
    [Install]부팅 시 자동 실행 관련 설정 (WantedBy 등)
  • 서비스 등록 및 관리 과정

    1. 스크립트 작성 (실행할 프로그램 또는 서비스 스크립트 준비)

    2. 유닛 파일 작성 (/etc/systemd/system/myservice.service 등)

      [Unit]
      Description=My Test Service
      After=network.target
      
      [Service]
      Type=simple
      ExecStart=/usr/bin/my_program --option
      Restart=on-failure
      
      [Install]
      WantedBy=multi-user.target
    3. 서비스 활성화

      sudo systemctl enable myservice.service

    4. 서비스 시작

      sudo systemctl start myservice.service

    5. 서비스 상태 확인

      sudo systemctl status myservice.service

    6. 서비스 중지 및 비활성화

      sudo systemctl stop myservice.service

      sudo systemctl disable myservice.service

13.3 .bashrc 파일을 이용한 개인화

✅ .bashrc 파일

  • .bashrc 파일

    Bash가 시작될 때 읽어들이는 셸 스크립트 파일로, 사용자별 셸 환경을 개인화하는 데 사용

    다른 파일 읽어들이기, 환경 변수/셸 변수 설정, alias 설정, Bash 옵션 설정 등의 작업

    # .bashrc 수정 후 현재 셸에 즉시 반영
    source ~/.bashrc
    # 또는
    . ~/.bashrc
  • .profile과의 관계

    .profile은 로그인 셸에서 읽히는 초기화 파일로, 내부에서 ~/.bashrc를 불러 실행하는 경우 많음

    dash, sh 등의 다른 셸에서는 .bashrc 대신 .profile을 사용하기도 함

  • .bashrc에 변수/alias 설정하기

    .bashrc 파일을 직접 편집 가능

    alias의 경우 .bashrc_aliases에 작성해도 됨

    # ~/.bashrc 변수 설정 예시
    export EDITOR="nano"
    export PROJECT_HOME="$HOME/projects"
    export PATH="$PROJECT_HOME/bin:$PATH"
    # alias 설정 예
    alias ll='ls -alF'
    alias la='ls -A'
    alias gst='git status'
    alias venv='source venv/bin/activate'

14. 필수 커맨드라인 툴

✅ grep

  • grep(Global regular expression print)

    표준 입력이나 텍스트 파일에서 특정 패턴이나 문자열을 찾는 커맨드라인 툴

    grep [옵션] 검색_패턴 [파일명] 형태로 사용하고, 표준 입력이나 텍스트 파일 대상으로 검색 가능

  • 주요 옵션

    옵션설명
    -r하위 디렉토리 내 파일 재귀 검색
    -i대소문자 구분 없이 검색
    -v패턴과 일치하지 않는 행 출력
    -n해당 행의 라인 번호 함께 출력
    -c일치하는 행의 개수만 출력
    -l패턴이 포함된 파일명만 출력
    -L패턴이 없는 파일명만 출력
    -E확장 정규 표현식(extended regex) 사용
    -o패턴과 일치하는 부분만 별도로 출력
    -A [숫자]일치 행 이후 추가 출력 행 수 지정
  • 정규 표현식(Regular Expression)

    특정한 규칙의 문자열 패턴을 찾거나 추출, 치환하는 데 사용하는 특수한 문자열

    여러 기호를 사용해 유연한 문자열을 만들 수 있음

    아래 분류 외에도 그룹화와 캡처, 대안, 전방/후방 탐색, 자 부정 클래스, 메타문자 등이 있음

    1. 리터럴(Literal)

      문자를 직접 매칭

      cat → 정확히 "cat" 문자열만 일치

    2. 문자 클래스(Character Classes)

      [ ] 사이의 문자와 하나라도 일치하는지 확인

      [abc] → a, b, 또는 c 중 하나와 일치

      [0-9] → 0~9 사이의 숫자와 일치

      [A-Za-z] → 알파벳 대소문자라면 일치

    3. 축약 문자 클래스(Shorthand Classes)

      패턴의미
      \d숫자 (0-9)
      \w알파벳, 숫자, 밑줄 (단어 문자)
      \s공백 문자 (스페이스, 탭 등)
    4. 수량자 (Quantifiers)

      문자가 몇 번 반복되는지 지정

      수량자의미
      *0번 이상 반복
      +1번 이상 반복
      ?0번 또는 1번
      {n}정확히 n번 반복
      {n,}n번 이상 반복
      {n,m}n번 이상 m번 이하 반복
    5. 앵커(Anchors)

      문자 자체가 아닌 문자의 위치를 지정

      패턴의미
      ^문자열의 시작 (line start)
      $문자열의 끝 (line end)
  • 사용 예시

# 줄 시작이 "One"이고, 줄 끝이 "master."인 패턴 찾기
grep "^One.*master.$" file.txt

# 숫자가 포함된 단어 검색
grep "\d+" file.txt

# 특정 패턴이 한 번 이상 있는 줄 검색
grep "error+" log.txt

# 공백 문자가 있는 줄 찾기
grep "\s" file.txt

✅ find

  • find

    파일이나 디렉토리 자체를 조건에 맞게 검색하는 커맨드라인 툴 (grep은 파일 내용 검색)

    find [옵션] [검색경로] [표현식]

  • 주요 옵션

    옵션설명
    -L심볼릭 링크의 원본 파일까지 추적
    -P심볼릭 링크 자체에 대해 작업 (기본값)
  • 주요 표현식

    표현식설명
    -name [패턴]파일명 패턴으로 검색 (예: *.sh)
    -type [유형]타입 별 검색 (f 파일, d 디렉토리 등)
    -exec [명령] {} \;검색 결과를 명령에 넘겨 실행 (xargs로 대체 가능)
    -printf [형식_한정자]출력 형식 지정
    -size [n][c/k/M/G]파일 크기 기준 검색 (byte, KB, MB, GB)
    -user [사용자명]해당 사용자가 소유한 파일 검색
    -group [그룹명]해당 그룹이 소유한 파일 검색
    -maxdepth [숫자]검색할 디렉터리 최대 깊이 제한
    -mindepth [숫자]검색 시작 최소 깊이 지정
  • 사용 예시

    # 하루 이내에 수정된 .log 파일 찾기
    find /var/log -name "*.log" -mtime -1
    
    # 크기가 10MB 이상인 파일 찾기
    find /data -size +10M
    
    # 특정 사용자 소유 파일 찾기
    find /home -user alice
    
    # 권한 755를 가진 파일 찾기
    find . -perm 755
    
    # 빈 디렉토리 찾기
    find . -type d -empty
    
    # 여러 파일 한 번에 명령 실행
    find . -name "*.txt" -exec wc -l {} \;
    # xargs 사용, 공백 포함을 대비한 파일명 전달
    find . -name "*.sh" -print0 | xargs -0 wc -l

✅ stat

  • stat

    파일이나 디렉토리의 상세한 정보를 표시하는 커맨드라인 툴

    파일 크기, 디스크 블록 수, inode 번호, 하드 링크 수, 접근/수정/변경 시각 등 자세한 메타데이터 확인 가능

  • 주요 옵션

    옵션설명
    -c, --format=FORMAT출력 형식 지정 (%s크기,%A권한 등)
    -f, --file-system파일시스템 정보출력
    -L, --dereference심볼릭 링크의 실제 파일 정보 출력
    -t축약 형식출력
    --printf=FORMATprintf 스타일 형식 지정
  • 출력 형식 지정자

    지정자출력
    %n파일명
    %s크기 (바이트)
    %A인간가독 권한 (-rw-r--r--)
    %a8진수 권한 (644)
    %U사용자명
    %G그룹명
    %y수정시간
    %Y수정시간 (유닉스 타임스탬프)
    %iinode 번호
  • 사용 예시

    stat file.txt
    # File: file.txt
    # Size: 1234    Blocks: 8     IO Block: 4096   regular file
    # ...
    
    stat -c "%n %s %A %y" file.txt
    # file.txt 1234 -rw-r--r-- 2025-12-02 11:00:00.000000000 +0900
    # 파일 크기와 권한만 확인
    stat -c "%n %s bytes (%A)" *.txt
    
    # 최근 수정된 파일 찾기
    find . -name "*.log" -exec stat -c "%Y %n" {} \; | sort -nr | head
    
    # inode 중복 파일 찾기
    find /data -type f -printf "%i %p\n" | sort | uniq -d | cut -d' ' -f2-

✅ wc

  • wc

    파일이나 표준 입력의 줄, 단어, 문자, 바이트 수를 세는 명령어

  • 주요 옵션

    옵션설명
    -l줄(line) 수
    -w단어(word) 수
    -c바이트(byte) 수
    -m문자(character) 수
    -L가장 긴 줄의 문자 개수
  • 사용 예시

    wc file.txt         # 기본 (줄, 단어, 바이트 수 출력)
    wc -l file.txt      # 줄 수만 출력
    echo "hello world" | wc -w   # 단어 개수 세기
    wc -c *.txt         # 여러 파일의 바이트 수 출력

✅ df

  • df

    디스크 파일시스템의 전체/사용/여유 용량을 표시하는 명령어

  • 주요 옵션

    옵션설명
    -h사람이 읽기 쉬운 단위로 표시 (KB, MB, GB)
    -T파일시스템 타입 표시
    -a모든 파일시스템 표시
  • 사용 예시

    df -h                # 디스크 용량을 GB/MB 단위로 출력
    df -T /home          # /home의 파일시스템 종류와 용량 확인
    df                   # 전체 파일시스템 사용량

✅ du

  • du

    디렉터리(폴더)와 파일의 디스크 사용량을 계산해서 표시하는 명령어

  • 주요 옵션

    옵션설명
    -h사람이 읽기 쉬운 단위(K, M, G)로 표시
    -s총합만 요약해서 표시
    -a파일별 사용량 모두 표시
    -d nn레벨까지 하위 디렉터리 표시
  • 사용 예시

    du -h                # 디렉터리별 사용량
    du -sh *             # 현재 폴더 내 각 항목 총용량
    du -h --max-depth=1  # 1단계 하위 디렉터리까지 표시

✅ tar

  • tar

    여러 파일과 디렉토리를 하나의 아카이브 파일로 압축하거나, 압축한 파일을 푸는 커맨드라인 툴

    테이프 저장용 아카이브로 개발되었으나 현재는 다양한 압축 도구와 결합하여 널리 사용

    tar [옵션] [-f 아카이브_파일명] [대상 파일/디렉터리]

    아카이브 : 여러 파일과 디렉토리를 한 덩어리로 만드는 것

  • 주요 옵션

    옵션설명
    -c새로운 아카이브 생성 (create)
    -x아카이브에서 파일 추출 (extract)
    -t아카이브 내 파일 목록 확인 (list)
    -f사용할 아카이브 파일명 지정 (file)
    -v실행 과정을 자세히 출력 (verbose)
    -zgzip 압축 적용/해제
    -jbzip2 압축 적용/해제
    -Jxz 압축 적용/해제
    -C아카이브를 풀 대상 디렉터리 지정
    -r기존 아카이브에 파일을 덧붙임 (append)

✅ read

  • read

    표준 입력에서 한 줄을 읽어 변수에 저장하는 Bash의 내장 명령어

    read [옵션] [변수명] 형태로 사용하며, 변수를 지정하지 않으면 REPLY 변수에 자동 저장

  • 주요 옵션

    옵션설명
    -p ["프롬프트"]프롬프트 메시지 출력 후 입력 대기
    -r백슬래시()를 이스케이프 문자로 해석하지 않음
    -s입력 시 화면 출력 안 함 (비밀번호용)
    -t [초]최대 대기 시간 (초 단위)
    -n [숫자]지정된 문자 수만큼만 읽기
    -d [구분자]개행(\n) 대신 지정 구분자까지 읽기
    -a [배열]입력을 배열로 저장
  • 사용 예시

    # 기본 (프롬프트와 함께 입력 받기)
    read -p "이름을 입력하세요: " name
    echo "안녕하세요, $name님!"
    # 파이프라인 활용
    echo "John 25" | read -r name age
    echo "이름: $name, 나이: $age"
    # 배열 활용
    echo "1 2 3 4" | read -a numbers
    echo "${numbers[@]}"

✅ tr

  • tr

    표준 입력에서 문자를 바꾸거나(translate), 삭제(delete)하는 필터 명령어

  • 주요 옵션

    옵션설명
    -d지정한 문자 삭제
    -s지정 문자를 연속된 한 문자로 압축
    -c문자 집합 반전(제외 집합 지정)
  • 사용 예시

    echo "HELLO" | tr 'A-Z' 'a-z'        # 소문자로 변환
    echo "hello  world" | tr -s ' '      # 연속 공백을 1개로
    echo "apple" | tr -d 'aeiou'         # 모음 삭제

2️⃣ 느낀 점

여기까지가 리눅스 기본 내용이었고
다음 편부터는 리눅스 개발환경의 도구에 대한 글을 쓸 예정이다!
매우매우 길었던 리눅스 이해 이제 끄읕

0개의 댓글