[부트캠프 - 13일차] 1/8.목 - Linux

developowl·2026년 1월 12일

부트캠프

목록 보기
4/24
post-thumbnail

4. FileSystem

디렉토리와 파일

  • 우분투 파일 시스템은 파일과 디렉터리의 계층형 구조(Tree)로 구성

  • 최상위에 루트 디렉터리(/)를 하나 두고 그 아래에 디렉터리나 파일을 배치

  • 작업 디렉터리: 사용자가 우분투에 접속하여 현재 사용하고 있는 디렉터리를 의미하는 것으로 현재 작업 중인 디렉터리는 점(.)으로 표시되고 현재 작업 중인 디렉터리의 위치를 상세하게 확인하기 위해서는 pwd 명령을 사용

  • 상위 디렉터리: 자신을 포함하고 있는 디렉터리로 .. 으로 표시

  • 홈 디렉터리: 각 사용자에게 할당되는 디렉터리로 사용자 계정을 처음 만들 때 지정해 주는 것으로 각각의 사용자 별로 홈 디렉터리를 지정하는데 ~ 로 표시

  • 기본적으로 제공되는 디렉터리

    • ls -F /
    • 디렉터리 이름의 끝에 붙는 / 는 해당 파일이 디렉터리임을 @ 는 심볼릭 링크임을 의미
    • bin, lib, sbin은 디렉터리가 아니라 심볼릭 링크
      • bin은 /usr/bin 디렉터리의 심볼릭 링크
      • lib는 /usr/lib 디렉터리의 심볼릭 링크
    • bin과 lib는 유닉스 초기부터 있었던 디렉터리로 지금은 그 기능이 /usr/bin과 /usr/lib로 통합되었으나 호환성 유지를 위해 심볼릭 링크 형태로 남겨둔 것
  • / 로 끝나는 것은 디렉토리

  • 루트 계정에 제공되는 디렉터리

    • /dev: 디바이스 파일이 배치되어 있는 디렉터리
    • /home
      • 사용자 별로 할당되는 홈 디렉터리가 배치되는 디렉터리
      • adam 이라는 사용자의 홈 디렉터리는 /home/adam
    • /media: DVD/CD 나 USB 와 같은 외부 장치를 연결하는 디렉터리
    • /etc: 리눅스 설정 파일이 위치하는 디렉터리
    • /opt: 추가 패키지가 설치되는 디렉터리
    • /root: root 계정의 홈 디렉터리
    • /sys: 리눅스 커널과 관련있는 파일이 저장된 디렉터리
    • /usr: 기본 실행 파일 과 라이브러리 파일, 헤더 파일 등이 저장되는 디렉터리
    • /boot: 부팅에 필요한 커널 파일이 저장된 디렉터리
    • /lost+found: 파일 시스템에 문제가 발생하여 복구할 경우 문제가 되는 파일이 저장되는 디렉터리
    • /mnt: 파일 시스템을 임시로 마운트하는 디렉터리
    • /proc: 프로세스 정보 등 커널 관련 정보가 저장되는 디렉터리
    • /run: 실행 중인 서비스와 관련된 파일이 저장되는 디렉터리
    • /srv: FTP나 Web 등 시스템에서 제공하는 서비스의 데이터가 저장되는 디렉터리
    • /tmp: 시스템 사용 중에 발생하는 임시 데이터가 저장되는 디렉터리로 이 디렉터리에 있는 파일은 재시작하면 모두 삭제됨
    • /var: 시스템 운영 중에 발생하는 데이터나 로그 등 내용이 자주 바뀌는 파일이 저장되는 디렉터리

절대 경로와 상대 경로

  • 절대 경로
    • 루트 디렉토리(/) 위치부터 시작하는 경로
    • 반드시 / 로 시작
    • 중간 단계의 모든 디렉터리를 표시
    • 특정 위치를 가리키는 절대 경로명은 항상 동일
  • 상대 경로
    • 현재 디렉터리를 기준으로 하는 경로로 / 이외의 문자로 시작
    • 현재 디렉터리에서 상위 디렉터리로 이동할 때는 ..
    • 현재 디렉터리에서 서브 디렉터리로 내려갈 경우 서브 디렉터리명을 추가
    • 현재 위치에 따라 위치가 경로명이 달라질 수 있음

파일의 구성 요소

  • 리눅스에서 모든 처리 과정은 파일 단위로 이루어짐

    • 파일

      • 파일 이름

      • I-node

        • Index Node 라고 불림. 파일을 기술하는 디스크 상에서의 데이터 구조를 의미

        • 파일의 데이터 블록이 디스크 상의 어느 주소에 위치하고 있는가에 대한 정보를 기록하기 위해 사용

        • 파일을 생성 → I-node의 link가 0인 위치에 I-node를 생성하고 정보를 저장한 다음 link의 값이 1의 위치로 이동

        • I-node에 저장된 정보
          - 파일의 종류
          - 파일의 소유권 - 사용자(소유자)와 그룹
          - 파일의 액세스 모드
          - 파일의 타임스탬프(파일 갱신일)

          우분투에서 파일을 생성하기 위해서는 파일의 데이터를 저장하기 위한 디스크 내의 공간을 먼저 확보해야 하는데 이때 파일이 저장될 주소에 대한 정보를 기록하기 위해 I-node는 각각의 파티션마다 0 부터 시작하는 정수의 형태로 고유의 식별 번호를 가짐

      • 데이터 블록

        • 실제 데이터가 저장되는 블록

file

  • 파일의 종류를 확인하는 명령
  • /usr/share/file 디렉토리의 magic 파일을 참조해서 파일의 종류를 표시
    file [옵션] [파일 및 디렉토리 경로]
  • 옵션
    • -C: 매직 파일의 포맷을 검사하는 옵션
    • -f 목록파일: 많은 파일들을 한번에 확인하기 위하여 파일 리스트인 목록 파일을 만들어서 그 안에 입력된 모든 파일을 한꺼번에 확인하는 옵션
    • -m 매직파일 : 지정된 매직 파일로 대상 파일을 확인

디렉터리 관련 명령

pwd

  • 현재 작업 디렉토리를 절대 경로로 출력

cd

  • 현재 디렉터리에서 다른 디렉터리로 이동할 때 사용
    cd [디렉터리]
  • 특별한 사용
    • 홈 디렉터리로 이동하고자 하는 경우는 cd 명령만 사용하거나 cd ~
    • 현재 디렉터리는 ./
    • 상위 디렉터리는 ../
    • 키를 이용한 자동 완성 가능

ls

  • 디렉터리의 내용을 출력하는 명령
    ls [옵션] [디렉터리(파일)]
  • 옵션
    • -a: 숨김 파일을 포함하여 모든 파일의 목록을 출력
    • -d: 디렉터리 자체의 정보를 출력
    • -i: 첫 번째 행에 I-node 번호를 출력
    • -l: 파일의 상세 정보를 출력
    • -A: . 와 .. 를 제외한 모든 파일 목록을 출력
    • -F: 파일의 종류를 표시(*: 실행 파일, /: 디렉터리, @: 심볼릭 링크)
    • -L: 심볼릭 링크 파일의 경우 원본 파일의 정보를 출력
    • -R: 하위 디렉터리의 목록까지 출력
  • 상세 정보 출력
  • 하드 링크 수는 연결된 디렉터리의 개수로 파일은 무조건 1이고, 디렉터리는 기본적으로 2

  • 하위 디렉터리는 연결된 상위 디렉터리의 개수 만큼 링크 수 증가

  • 유사한 명령

    • dir
    • vdir

mkdir

  • 리눅스에서는 사용자가 필요에 따라 디렉터리를 생성할 수 있는데 아무 곳에나 만들 수 있는 것은 아니고 기본적으로 해당 계정의 홈 디렉터리에 만들 수 있음
  • /tmp 디렉터리와 같이 누구에게나 쓰기 권한이 있는 디렉터리에도 만들 수 있음
  • 다른 디렉터리의 소유자가 쓰기 권한을 부여해주면 그 디렉터리에도 파일이나 디렉터리를 생성할 수 있음
    mkdir [옵션] [디렉터리]
    • 옵션
      • -p
        • 하위 디렉터리를 계층적으로 생성할 때 중간 단계의 디렉터리가 없으면 자동으로 중간 단계 디렉터리를 생성하고 지정한 디렉터리를 생성

rmdir

  • 디렉터리를 삭제하는 명령어
    rmdir [옵션] [디렉터리]
    • 옵션
      • -p
        • 지정한 디렉터리를 삭제하고 그 디렉터리와 부모 디렉터리가 빈 디렉터리일 경우 부모 디렉터리도 자동으로 삭제

파일 관련 명령

cat

  • 파일 내용 출력
  • 텍스트 형식의 파일을 출력
  • 텍스트 파일 전체를 열게 되는데 문서가 크면 스크롤을 제공
  • 매개변수로 여러 개의 파일을 지정해서 여러 개의 파일 출력 가능
  • -n 옵션을 이용해서 행 번호 출력 가능
  • 파일을 지정하지 않으면 키보드 입력 내용을 그대로 출력

more

  • 텍스트 형식의 파일을 화면 단위로 출력하고 출력할 내용이 더 있으면 화면
    하단에 --More--(0%) 와 같이 알려줌
  • spacebar를 누르면 다음 페이지를 출력하고 b를 누르면 이전 페이지를 출력하고 중단은 q
  • /문자열 입력하면 해당 문자열을 찾아 이동
  • +숫자 옵션을 이용해서 시작할 행 번호 설정 가능
  • 스크롤 기능이 없음

less

  • more 명령을 약간 개선한 것
  • 원래 more 명령에서는 스크롤되어 지나간 내용은 다시 볼 수 없었음
  • 최근 리눅스 버전에서는 이 점을 개선하여 방향키로 이동이 가능하게 함
  • less 명령을 사용하면 파일 내용의 아래, 위로 방향키나 j, k 키를 이용하여
    자유롭게 이동할 수 있다는 장점이 있음
  • 키와 동작
    • j, 방향키(아래): 한 행 씩 다음 행으로 스크롤
    • k, 방향키(위): 한 행 씩 이전 행으로 스크롤
    • Space Bar, CTRL + f: 다음 화면으로 이동
    • CTRL + b: 이전 화면으로 이동
    • q: 종료

⭐️ head/tail

  • 파일의 앞 부분이나 뒷 부분의 몇 개의 행을 출력하는 명령
    명령 [옵션] [파일]
  • ⭐️ tail 명령에서 -f 옵션을 이용하면 실시간으로 변경되는 내용을 출력할 수 있음
  • -숫자 옵션을 이용하면 숫자 만큼의 행을 출력하는데 숫자 옵션을 생략하면 10개의 행을 출력
  • 로그 파일을 화면에 출력할 때 실시간으로 변경 내용을 확인하고자 할 때 tail -f 로그파일경로 를 사용

파일 및 디렉터리 복사

cp [옵션] [파일이나 디렉토리 경로 1] [파일이나 디렉토리 경로 2]
  • 앞의 파일이나 디렉토리를 뒤의 경로에 복사

  • 옵션

    • -i
      • 파일 2가 이미 존재하면 덮어쓸 것인지 물어봄
      • 이미 존재하는 경우 대화식으로 작업
    • -r
      • 디렉토리를 복사할 때 지정
  • 옵션 없이 복사할 때 이미 존재하는 파일이나 디렉토리라면 덮어씌움

  • 여러 개의 파일을 한꺼번에 복사할 수 있는데, 이 경우 마지막 경로에 복사가 되는데 반드시 디렉토리 경로 이어야 함

  • cp /etc/hosts text1 - /etc/hosts 파일을 현재 디렉터리의 text1 이라는 파일로 복사

파일 이동과 파일 이름 변경

mv

mv [옵션] [파일1 (디렉터리 1)] [파일2 (디렉터리 2)]
  • 옵션
    • -i
      • 파일 2가 이미 존재하면 덮어쓸 것인지 물어봄
  • 경로가 존재하는 경우 덮어 씌우므로 주의
  • mv 명령의 첫 번째 인자로는 원본 파일이나 디렉터리를 지정하고 두 번째 인자로는 목적지 파일이나 디렉터리를 지정

파일 이름 바꾸기

mv

mv text1 data1

파일 삭제하기

rm

rm [옵션] [파일 또는 디렉토리]
  • 옵션
    • -i
      • 파일을 정말 삭제할 것인지 확인
    • -r
      • 디렉터리 삭제

ln

  • 링크를 생성하는 명령
    ln [옵션] <링크할 파일> <링크 이름>
  • 파일에 별명을 붙이는 것
  • 링크를 생성하는 이유
    • 긴 경로를 짧게 만들기 위해서
    • 여러 버전의 프로그램이 존재하는 경우 이름을 구분하기 위해서

하드 링크

  • 한 파일 원본에 이름을 여러 개 붙이는 기능
  • 내용을 수정하면 같이 적용됨
  • 하드 링크는 서로 다른 디스크에 생성할 수 없음
  • 양쪽이 모두 원본 파일
    ln data1 dat1.ln
    • data1.ln 파일이 생성되고 하드 링크의 개수가 증가
    • data1.ln 파일과 data1 파일의 i-node 가 동일
    • rm 명령은 하드 링크의 개수를 1 줄여주는 명령
    • 하드 링크의 값이 0이 되면 실제로 i-node 와 데이터 블록을 삭제

심볼릭 링크

  • 바로 가기의 역할
  • 링크를 만들 때 -s 옵션을 추가
  • 서로 다른 디스크에 생성 가능
  • 원본 파일에 대한 정보가 담긴 작은 특수 파일이며 하드 링크와 달리 원본과 구별
  • 심볼릭 링크를 삭제하는 것은 원본에는 아무런 영향을 주지 않지만 원본을 삭제하면 심볼릭 링크는 깨진 상태가 됨

touch

  • 빈 파일을 생성하는 명령
    touch 파일 경로

파일 내용 검색

grep

  • 텍스트에서 특정 문자열을 검색할 때 사용하는 명령.

  • 정규 표현식을 이용하여 복잡한 검색도 가능

    grep [옵션] [패턴] [파일]
    • 옵션
      • -i : 대소문자 모두 검색
      • -l : 지정한 패턴이 포함된 파일명을 출력
      • -n : 행 번호를 출력
      • -v : 패턴이 포함되지 않은 행을 출력
      • -r : 하위 디렉토리까지 검사
      • -w : 일치하는 단어가 있을 때만 조회
      • -c : 개수
  • 확장

# 현재 실행 중인 포트 확인
netstat -an | grep "LISTEN"

# 실시간으로 수정되는 로그파일에서 특정 단어 강조
tail -f access.log | grep --color "404"

# 컨텍스트 매핑
# log.txt에서 Error를 찾아서 그 뒤(A)/앞(B)/앞뒤(C)의 3줄 출력
grep -A / -B / -C 3 "Error" log.txt
  • 정규식
grep "^Start" file.txt

grep "End$" file.txt

grep "[0-9]" file.txt

find

  • 파일을 검색해주는 명령이며 검색 후 동작도 지정 가능
    find [경로] [검색 조건] [동작]
    • 검색 조건
      • -name filename: 파일명으로 검색
        • -name은 대소문자를 구별
        • -iname은 대소문자 구별 X
        • 와일드카드 문자를 사용하는 것이 가능
      • -type 파일 종류: 파일 종류로 검색
      • -user loginlD: 지정한 사용자가 소유한 모든 파일을 검색
      • -group 그룹이름: 그룹을 기준으로 검색
      • -perm 접근 권한: 지정한 사용 권한과 일치하는 파일을 검색
      • -size: 크기로 검색
      • -newer: 수정 시간을 기준으로 특정 파일보다 더 최근에 수정된 파일을 검색
    • 동작
      • -exec 명령 {} \; :검색된 파일에 명령을 실행
      • -ok 명령 {} \; : 사용자의 확인을 받아서 명령을 실행
      • -print : 검색된 파일의 절대 경로명을 화면에 출력 – 기본 동작
      • -ls : 검색 결과를 긴 목록 형식으로 출력
      • -type : 타입으로 찾기(파일 형식)
        • -type f
        • -type d
        • -type l
      • 시간으로 찾기
        • -newer : 참조 파일보다 더 최근에 수정된 파일 검색
        • -newermt : 특정 날짜 이후에 수정된 파일 검색
        • -neweraa : 파일 접근 시간 기준으로 검색
        • 두 파일 사이에 수정된 파일 검색
          find . -newer reference1.txt ! -newer reference2.txt
    • 조건이나 동작이 단어이지만 - 만 붙임

명령 실행

# 파일을 찾아서 삭제
find /tmp -user user1 -exec rm {} \;

# 예: 홈 디렉토리에서 확장자가 swp인 모든 파일을 삭제
find ~ -name "*.swp" -exec rm {} \;

# -------
find /tmp -user user1 -ok rm {} \;

locate

  • 파일을 빠르게 찾아주는 명령인데 별도의 패키지를 설치해야 함

wc

  • 파일이나 표준 입력에서 단어 수, 줄 수, 문자 수 등을 셀 때 사용하는 명령어
    wc [옵션] [파일 경로]
    • 옵션
      • -l : 라인 수
      • -w : 단어 수
      • -c : 바이트 수
      • -m : 문자 수
      • -L : 가장 긴 줄의 길이

sort

  • 파일의 내용을 정렬해서 출력
    sort [옵션] [파일 경로]
    • 옵션
      • -r: 내림차순으로 정렬(reverse)
      • -n: 숫자 크기 순으로 정렬(numeric sort)
      • -k: 특정 필드를 기준으로 정렬(key)
      • -u: 중복된 행을 제거(unique)
      • -t: 필드 구분자를 지정(field separator)
      • -M: 월 이름을 기준으로 정렬(month sort)
      • -b: 공백을 무시하고 정렬(ignore leading spaces)

awk

  • 텍스트 처리 도구
  • 패턴을 기반으로 텍스트 파일, 스트림 및 기타 데이터 형식을 조작하고 처리
    awk 옵션 'pattern {action}' file
    • 옵션
      • -F 구분자

sed

  • 스트림 편집기
  • 파일 수정, 텍스트 치환, 라인 삭제 등 다양한 작업에 사용
    sed [옵션] 스크립트 [파일]
    • 옵션
      • -n: 기본 출력을 억제
      • -i: 파일을 직접 수정
      • -r: 확장된 정규 표현식을 활성화
      • -e: 여러 sed 명령을 순차적으로 실행
      • -f FILE: 스크립트를 파일에서 읽어오기

파일 접근 권한 관리

  • 접근 권한은 파일이 가지고 있는 속성 중 하나
  • 접근 권한을 확인하는 명령은 ls -l

파일이 속한 그룹

  • 사용자는 기본 적으로 하나 이상의 그룹에 속하게 되는데 이 그룹을 이용해서 그룹에 속한 사용자들에게만 파일을 공유할 수 있음
  • 사용자가 속한 그룹은 시스템 관리자가 사용자를 등록할 때 결정
  • 그룹은 /etc/group 에 정의가 되어 있는데 시스템 관리자만 수정할 수 있음
  • 사용자가 속한 그룹을 확인하는 명령은 groups [사용자명]

권한 종류

  • 읽기 - r
    • 파일의 내용을 읽거나 복사할 수 있으며 디렉토리의 경우 ls 명령으로 확인할 수 있지만 옵션은 사용 안 됨
  • 쓰기 - w
    • 파일을 수정, 이동, 삭제할 수 있고 디렉토리 안에 파일을 생성하거나 삭제할 수 있음
  • 실행 - x
    • 파일을 실행할 수 있으며 디렉토리의 경우는 cd 명령으로 이동할 수 있음

접근 권한 변경

chmod [옵션] 권한 [파일 또는 디렉터리 경로]
  • 옵션
    • -R
      • 하위 디렉토리까지 모두 변경
  • 권한 설정 방법
    • 기호 모드
      • 접근 권한을 변경하기 위해서 기호를 사용
    • 숫자 모드
      • 접근 권한을 변경하기 위해서 숫자를 사용

기호를 이용하는 방법

  • 사용자 카테고리 문자

    • u : 소유자
    • g : 그룹 사용자
    • o : 기타 사용자
    • a : 전체
  • 연산자 기호

      • : 권한 부여
      • : 권한 제거
    • = : 권한 설정
  • 접근 권한 문자

    • r
    • w
    • x

숫자를 이용한 파일 접근 권한 변경

  • 8진수 3자리로 설정

  • 첫번째 자리 4가 읽기

  • 두번째 자리 2가 쓰기

  • 세번째 자리 1이 실행

  • 모든 권한은 7

  • 읽기와 쓰기 권한은 6

  • 숫자 환산

# 모든 사용자에게 읽기 권한만 부여
chmod 444 test.txt

# 그룹 사용자에게는 모든 권한을 부여
chmod 474 test.txt

기본 접근 권한

  • 파일이나 디렉토리를 생성했을 때 주어지는 접근 권한
  • 파일을 생성
    touch adam.txt
    mkdir temp
    
    # >> -rw-rw-r-- (생략) adma.txt
    • 파일의 기본 권한: rw-rw-r
    • 디렉토리의 기본 권한: rwxrwxr-x

기본 접근 권한 확인 및 변경

umask [옵션] [마스크 값]
  • 옵션

    • -S
      • 마스크 값을 문자로 출력
  • mask → 777에서 접근권한을 뺀 값

    • ex) 013 권한(rwxrw-r—) → 777 - 764 = 013
  • 적용 과정

    • 마스크 값은 파일이 생성될 때마다 적용되는데, 마스크 값을 비트로 표시했을 때 그 값이 1인 경우 대응하는 권한은 제외

📌 기본 보안 필터(mask)의 역할

  • 파일이나 디렉터리가 생성될 때마다 권한을 직접 입력하지 않음.
  • 이때 시스템이 ‘최대 권한에서 이정도는 빼고 생성’ 을 정해둔 필터가 mask
    • 최대 권한: 파일은 666, 디렉토리는 777
  • 비교
    • chmod: 이미 만들어진 파일의 수술
    • umask: 태어날 때부터 갖게 되는 기본 설정
  • 설정

    • umask 077
      • 소유자에게만 모든 권한을 부여하고 나머지에게는 아무런 권한도 주지 않음
    • 파일을 만들면 실행 권한은 부여되지 않으므로 스크립트 파일처럼 실행해야 하는 파일을 만들면 가장 먼저 실행 권한을 부여하는 작업을 해야 한다.
  • 여러 가지 마스크 값

umask 는 4자리 수!!

  • 특수 접근 권한 / 소유자 권한 / 그룹 권한 / 기타 사용자 권한

특수 접근 권한

  • umask에서 맨 앞자리가 특수 접근 권한
  • 0이면 일반적인 접근 권한이고 나머지는 특수접근 권한
    • SetUID: 4
      • 이 파일이 실행하면 해당 파일이 실행되는 동안에는 파일을 실행한 사용자의 권한이 아니라 파일 소유자의 권한이 적용
      • 그러면 x 자리가 s로 나타나게 됨
    • SetGID: 2
      • SetGID 가 설정된 파일을 실행하면 해당 파일이 실행되는 동안에는 파일의 소유 그룹의 권한으로 실행
    • sticky bit: 1
      • 누구나 파일을 생성할 수 있는 디렉토리를 만들 때 사용
      • 파일을 생성하면 생성한 계정으로 소유자가 설정되고 다른 사용자가 생성한 파일은 삭제할 수 없음
      • 맨 마지막 권한의 xt로 표기가 됨
      • 대표적인 디렉토리는 /tmp

5. ProcessManagement

Process

  • 실행 중인 프로그램
  • 리눅스는 다중 프로세스 시스템
    • 여러 개의 프로세스를 동시에 실행
  • 프로세스는 운영에 필요한 다양한 기능을 수행하는 프로세스도 있고, 사용자가 실행한 프로그램인 사용자 프로세스도 존재
  • 프로세스는 부모-자식 관계를 가짐
    • 필요에 따라 부모 프로세스는 자식 프로세스를 생성하고 그 자식은 또 다른 자식 프로세스를 생성할 수 있음
  • 부모 프로세스가 없는 프로세스는 리눅스 시스템을 부팅할 때 스케줄러가 실행한 프로세스인 systemdkthreadd 이다.

Process IDentifier

  • 각 프로세스는 고유한 번호를 가지는데 이것을 PID라고 함
  • 1번부터 시작하고 프로세스가 실행되면서 1씩 증가
  • systemd가 1번, kthreadd 가 2번
    • systemd (PID 1)
      • User Space(사용자 공간)의 왕
      • 터미널, 웹 서버, GUI 등 모든 일반 프로그램의 조상
    • kthreadd (PID 2)
      • Kernel Space 의 관리자
      • 메모리 관리, 디스크 입출력 등 운영체제 내부의 복잡한 일을 처리하는 ‘커널 스레드’의 조상
  • 유닉스에서는 1번 프로세스가 init 프로세스, 우분투는 init의 기능을 systemd 로 변경

📌  init vs systemd

프로세스 종류

daemon process

  • 특정 서비스를 제공하기 위해 리눅스 커널에 의해 실행되기 때문에 서비스라고도 함
  • 평소에는 대기 상태로 있다가 서비스 요청이 들어오면 서비스를 제공
  • 서버라고 불리우는 서비스는 거의 daemon
  • 원격 접속 서비스를 제공하기 위해 동작하는 sshd 프로세스가 있는데 이를 ssh server daemon 이라고 함.
    • SSH (Secure Shell) - 보안 쉘
      • 통신의 시작부터 끝까지 모든 내용을 암호화 함

orphan process

  • 자식 프로세스는 종료되면 부모 프로세스로 돌아가지만 자식 프로세스가 아직 실행 중 인데 부모 프로세스가 먼저 종료되면 자식 프로세스는 고아(orphan) 프로세스
  • 1번 프로세스(systemd or init)가 고아 프로세스의 새로운 부모 프로세스가 되어 고아 프로세스가 작업을 마치고 종료될 수 있게 함

zombie process

  • 자식 프로세스는 종료될 때 부모 프로세스에 종료 정보(exit status)를 보내고 부모 프로세스가 이 정보를 받으면, 자식 프로세스는 프로세스 테이블 목록에서 삭제되지만 / 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아있는 경우가 있는데 이러한 자식 프로세스가 좀비 프로세스
  • 자식 프로세스의 종료 정보를 부모 프로세스가 읽어가기를 기다리고 있는 것
  • 부모 프로세스가 자식 프로세스의 종료 정보를 제대로 처리하지 않았기 때문에 이런 일이 발생
  • 좀비 프로세스는 프로세스 목록에 defunct 프로세스라고 나오기도 함
  • 좀비 프로세스가 증가하면 프로세스 테이블의 용량이 부족해서 정상적인 프로세스가 실행되지 않을 수 있음
  • 좀비 프로세스는 kill 명령으로 제거할 수 없으며 SIGCHLD 시그널을 부모 프로세스에 보내어 부모 프로세스가 자식 프로세스를 정리하도록 하거나 부모 프로세스 자체를 종료해야만 함
    • → 부모 프로세스가 종료되면 좀비 프로세스는 고아 프로세스가 되고 새로운 부모인 1번 프로세스(systemd)는 주기적으로 자식 프로세스의 종료 정보를 확인하여 정리

프로세스 목록 확인

ps

ps [옵션]
  • 유닉스 옵션 - 묶어서 사용할 수 있고, - 로 시작

    • -e: 시스템에서 실행 중인 모든 프로세스의 정보를 출력
    • -f: 프로세스에 대한 자세한 정보를 출력
    • -u uid: 특정 사용자에 대한 모든 프로세스의 정보를 출력
    • -p pid: pid로 지정한 특정 프로세스의 정보를 출력
  • BSD 옵션 - 묶어서 사용할 수 있고, - 로 시작하지 않음

    • a: 터미널에서 실행시킨 프로세스의 정보를 출력
    • u: 프로세스 소유자 이름, CPU 사용량, 메모리 사용량 등 상세 정보를 출력
    • x: 시스템에서 실행 중인 모든 프로세스의 정보를 출력
  • GNU 옵션 - —- 로 시작

    • --pid PID 목록 : 목록으로 지정한 특정 PID 정보를 출력
  • 터미널에서 실행한 프로세스 상세 정보 출력

특정 프로세스 검색

pgrep [옵션] [패턴]
  • 옵션
    • -x: 패턴과 정확히 일치하는 프로세스의 정보를 출력
    • -n: 패턴을 포함하고 있는 가장 최근 프로세스의 정보를 출력
    • -u 사용자 이름: 특정 사용자에 대한 모든 프로세스를 출력
    • -l: PID와 프로세스 이름을 출력
    • -t term: 특정 단말기와 관련된 프로세스의 정보를 출력

프로세스 종료

  • kill 이나 pkill
  • 프로세스를 종료하는 데는 kill or pkill 을 사용하여 프로세스에 시그널을 보내 프로세스를 종료
  • 시그널
    • 프로세스에 무언가 발생했음을 알리는 간단한 메시지

    • 리눅스에서 지원하는 시그널 확인 → kill -l

kill

  • 시그널을 전달하는 명령
  • kill 입력하면 프로세스를 강제 종료 시킴
kill [-signal] PID
  • 종료 시그널
    • 2
      • 인터럽트 시그널을 전송
    • 9
      • 프로세스를 강제로 종료
    • 15
      • 프로세스와 관련된 파일들을 정리하고 종료하는데 종료되지 않는 프로세스가 있을 수 있음

pkill

  • kill 과 마찬가지로 시그널을 보내지만 PID 가 아니라 프로세스의 명령 이름 (CMD) 으로 프로세스를 찾아 종료
  • kill 명령과의 차이점은 명령 이름으로 찾아 종료하므로 같은 명령이 여러 개 검색될 경우 한 번에 모두 종요한다는 것

killall

  • pkill 처럼 프로세스의 명령 이름(CMD)으로 프로세스를 찾아 종료
  • 이름으로 실행 중인 모든 프로세스를 한 번에 종료할 수 있는데 해당 프로세스를 소유하고 있어야 함
    • UID (User ID) 와 관련되어 있음
    • 프로세스를 실행한 사람을 기준으로
      • 일반 사용자: 본인이 실행한 프로세스만 종료 가능
      • 슈퍼 유저(root): 시스템의 모든 프로세스를 소유한 것과 다름없는 권한

📌 sudo(Substituted User do) vs su -

  • su -
    • 사용자 전환
    • 누가 했는지 추적이 어려움(사용자가 활동한 로그와 구별이 안 됨)
  • sudo
    • 권한 대행
    • 추적 용이(권한을 빌린 사용자별로 로그가 수집이 됨)

top

  • 프로세스 정보를 주기적으로 출력

작업 제어

포그라운드 작업

  • 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다리는 방식으로 처리되는 프로세스

백그라운드 작업

  • 명령의 처리가 끝나는 것과 상관 없이 곧바로 프롬프트를 출력해서 다른 작업을 수행할 수 있도록 하는 것
  • 명령의 실행 시간이 오래 걸리거나 명령을 실행한 후 다른 작업을 할 필요가 있을 때 사용
  • 명령 뒤에 & 를 붙여주면 됨
  • 백그라운드 작업을 만들 때 무엇인가를 출력하는 경우 내용을 출력할 때 현재 작업 내용과 겹쳐져서 출력이 될 수 있음
  • 백그라운드 작업에서 출력은 화면이 아니라 파일에 출력하는 것이 바람직함

작업 목록 보기

jobs

  • 백그라운드 작업을 모두 보여주는데 특정 작업 번호를 지정하면 해당 작업의 정보만 출력하는 bash의 내부 명령

    jobs [%작업 번호]
    • %번호: 해당 번호의 작업 정보를 출력
    • %+ 또는 %%: 작업 순서가 +인 작업 정보를 출력
    • %-: 작업 순서가 -인 작업 정보를 출력
  • 출력 정보

  • 작업 전환

profile
Don’t get mad at the computer.

0개의 댓글