어쩌다 IT
article thumbnail
반응형

리뷰 (Review)

더보기

파일 속성

  • 파일 접근 권한
    • 파일, 디렉토리는 읽기, 쓰기, 실행 권한 부여
    • 소유자 / 그룹 / 기타 사용자 각각에 권한 부여
    • 문자 표기 방법 == 숫자 표기 방법
       rwxrwxr-x == 775
    • chmod - 파일 접근 권한 변경
      • chmod [옵션] <파일 접근 권한> <파일명>
    • umask - 파일 생성 시 기본 권한 제한 설정
      • umask [옵션] [<mask 값>]
  • 특수 접근 권한
    • 접근 권한은 원래 8진수 4자리 (4bit) 사용
    • 맨 처음 자릿수(0번 bit)가 특수 접근 권한을 의미
      • sticky bit(1), SetGID(2), SetUID(4)

 

shell 특수 문자

  • wildcard 문자
    • * - 임의의 문자열 의미, 모든 문자 집합 의미
    • ? - 임의의 문자 의미, 한 글자
    • 정규 표현식 - 문자에 대한 표현 방법, 기호를 이용해서 문자 표현 - 문자 추출
    • 참고 블로그
 

[LINUX] 📚 쉘 특수문자 기호 사용 정리 (와일드카드 / 인용부호 / 다중명령어)

리눅스 터미널 커맨드 특수문자 정리 리눅스 터미널 쉘에선 일부 특수문자는 사전 정의되어 있다. 이를 쉘 메타 문자라고 하는데, 쉘 명령에서 사용하는 문자들 중 사전에 정의된 특별한 기능대

inpa.tistory.com

  • ; - 명령과 명령을 연결
  • && - && 기준 왼쪽 명령어의 실행이 정상적으로 실행되면 오른쪽 명령어 실행 (AND 연산)
  • || - || 기준 왼쪽 명령어의 실행이 정상적으러 실행되면 오른쪽 명령어 실행하지 않음 (OR 연산)
  • redirection (리다이렉션)
    • > - 내용 덮어씀
    • >> - 내용 추가
    • 장치번호> - 해당 장치로 출력 될 내용에 대한 방향 전환
    • cat > <파일> - 간단한 파일 생성, 해당 명령어로 수정은 불가능
    • < - 입력 재지정
    • 참고 블로그
 

[Linux] 리다이렉션 (표준 출력, 표준 에러 활용)

[Linux] 파일 디스크립터(표준 입력, 표준 출력, 표준 에러)에서 표준 입력, 표준 출력, 표준 에러와 이를 포함하는 개념인 파일 디스크립터에 대해 간략하게 알아보았습니다. 이번엔 파일 디스크

bio-info.tistory.com

  • | - pipe, <명령1> | <명령2>
    • 명령1의 실행 결과를 | 를 통해 명령2에 입력한다.
  • ELF는 실행 가능한 파일이라는 의미

Linux 개요

 

프로세스 관리

 

프로세스 (Process)

  • 실행 중인 프로그램
  • Linux에서 모든 프로세스에는 프로세스 식별 번호 (PID, Process ID) 를 통해 관리
    • PID는 프로세스 자신 식별 번호
    • Kernel의 작업 관리자가 PID를 이용하여 프로세스 관리
    • PID는 양의 정수로 부여하고 1번부터 차례대로 부여
    • PID 관리는 Kernel의 작업 관리자가 관리하므로 사용자가 임의로 부여할 수 없다.
    • 프로세스마다 기본적인 메모리 할당
      → 가상 메모리로 할당, 32bit CPU 기준으로 4GB 할당
    • Linux 메모리 운영은 기본적으로 가상 메모리 운영을 의미한다.
  • Linux에서 프로세스 관리는 계층적으로 관리
    • 프로세스가 생성된다는 의미는 부모(parents) 프로세스가 자식(child) 프로세스를 생성함을 의미
      • ex) shell에서 ls 명령을 입력한다는 것
        → shell 프로세스가 ls 프로세스를 생성해서 실행한다는 의미
      • shell 프로세스는 부모 프로세스가 되고, ls 프로세스는 자식 프로세스가 된다.
    • 부모 프로세스 식별 번호 PPID (Parents PID) 모든 프로세스가 가지고 있다.
  • Linux 프로세스 중 가장 상위 프로세스 ID는 1번 프로세스 - Booting 시 생성
  • Linux shell을 운영할 때 shell 프로세스가 부모 프로세스가 되고,
    입력하는 명령에 의해 생성된 프로세스는 자식 프로세스가 된다.
  • 부모 프로세스 역할
    • 자식 프로세스 생성
    • 자식 프로세스 동작 상태 확인
    • 자식 프로세스 종료에 따른 처리 - Kernel에 종료를 알림
  • 자식 프로세스 역할
    • 프로세스 동작 - 자신의 기능 수행
    • 프로세스 종료 시 종료 상태를 부모 프로세스에 전달

프로세스 종류

  • 프로세스 상태에 따른 종류
    • 정상 프로세스
      • 일반적인 프로세스
    • 고아 프로세스
      • 부모 프로세스가 먼저 종료된 상태의 프로세스
      • 언젠가는 좀비 프로세스가 될 수도 있음
      • 따라서 통상 1번 프로세스가 부모 프로세스로 설정된다.
    • 좀비 프로세스
      • 자식 프로세스가 종료되었으나 부모 프로세스에 의해
        Kernel에 보고 되지 않아 현재 동작 중인 프로세스로 인식되는 프로세스
      • 프로세스는 종료되었으나 Kernel의 프로세스 관리 목록에는 존재하는 프로세스
      • 좀비 프로세스가 많이 존재한다는 것은 Kernel의 프로세스 운영 효율이 떨어진다는 것
      • 프로세스 관리 시점에 상태 값으로 확인 가능
  • 프로세스 실행 형태에 따른 종류
    • foreground 프로세스
      • 사용자와 상호 작용이 가능한 프로세스
      • 하나의 프로세스만 foreground 프로세스가 된다.
    • background 프로세스
      • 사용자와 상호 작용을 수행하지 않는 프로세스
      • 프로세스는 생성되었지만 직접적인 사용자 상호작용을 할 수 없는 프로세스를 의미
      • 보통 프로세스 동작이 멈추어 있는 경우가 많으나 아닌 프로세스도 있다. ex) xeyes, ...
      • 언제든지 foreground 프로세스 상태로 변경할 수 있다.
    • daemon 프로세스
      • 무조건 background로 프로세스 생성
      • 사용자와 상호 작용을 절대 하지 않는다.
      • 다른 프로세스 요청에 대한 응답을 목적으로 하는 프로세스
      • Linux에서 프로세스 이름이 d 로 끝난다.

gedit foreground / xeyes, terminal background


프로세스 관리 명령

  • ps, 현재 동작 중인 프로세스 확인 명령
  • ps [옵션]
    • 유닉스 옵션 유형 : 여러 옵션을 묶어서 사용 가능, - 을 붙여서 사용
    • BSD 옵션 유형 : 여러 옵션을 묶어서 사용 가능, - 을 사용하지 않고 옵션 사용
    • GNU 옵션 유형 : 여러 옵션 묶어서 사용 불가능, -- 을 사용하고 옵션명은 full name 사용
  • ps
    • 현재 shell 상에서 실행되고 있는 프로세스 목록 출력
    • PID - Process ID
    • TTY - 터미널 번호
    • TIME - 실행 시간
    • CMD - 명령어

ps 입력 시 출력
현재 shell 상이란 이런 것이다.

 

  • ps -f
    • 현재 shell 상에서 실행되고 있는 프로세스 목록을 상세 정보 출력
    • UID - 프로세스를 실행한 사용자 ID
    • PPID - 부모 PID
    • C - CPU 사용량 (%)
    • STIME - 프로세스 시작 날짜 및 시간

ps -f 입력 시 출력

 

  • ps a
    • 현재 shell에서 실행시킨 프로세스 정보 출력 (BSD 유형 옵션)
    • STAT - 프로세스 상태
      • R - 실행 (Running) 중
      • S - 인터럽트 (interrupt) 가 가능한 대기 (sleep) 상태
      • T - 작업 제어에 의해 정지된 상태
      • Z - 좀비 프로세스
      • STIME - 프로세스 시작 날짜 및 시간
      • s - 세션 리터 프로세스
      • + - foreground 프로세스 그룹
      • l - 멀티 스레드 그룹 (스레드는 밑에서 설명)

ps a 입력 시 출력

 

  • ps au
    • 현재 shell에서 실행시킨 프로세스 상세 정보 출력 (BSD 유형 옵션)
    • USER - 사용자 ID
    • %CPU - CPU 사용량
    • %Memory - 물리 메모리 사용량
    • VSZ - 사용 중인 가상 메모리 크기 (kb)
    • RSS - 사용 중인 물리 메모리 크기 (kb)
    • START - 프로세스 시작 시간

ps au 입력 시 출력

 

  • grep
    • 파일 내용 또는 결과 내용에 대하여 패턴으로 검색
    • grep [옵션] <패턴> <파일>
      • <패턴> : 검색어 (문자열), 정규표현식 사용 가능
      • -n : 행 번호 표시
      • -i : 대소문자 구별 없이 모두 검색
      • -l : 검색 패턴이 포함된 모든 파일명 출력
      • | (pipe) 기능과 연계해서 많이 사용된다.

grep tcp 패턴 검색
grep -i http 대소문자 구별없이 검색된다.
/etc/services의 내용에서 http가 포함된 결과 출력

 

  • 스레드 (thread)
    • 프로세스 내에서 동작하는 실행 흐름
    • 스레드는 프로세스에 비해 자원 소모량이 적다.
    • 스레드는 프로세스에 비해 데이터 공유가 쉽다.
      • 프로세스 간에 데이터 공유를 위해서는 별도의 외부 도구를 사용해야 한다.
    • 멀티 스레드의 장점은 멀티 프로세스보다 적은 리소스를 이용하여 동시처리가 가능하다.
    • 멀티 스레드의 단점은 프로그래밍이 어렵다.
  • 전체 프로세스 정보 확인
    • ps -e : 전체 프로세스 목록 출력 (유닉스 유형)
    • ps -ef : 전체 프로세스 상세 목록 출력 (유닉스 유형)
    • ps ax : 전체 프로세스 목록 출력 (BSD 유형)
    • ps aux : 전체 프로세스 상세 목록 출력 (BSD 유형)

전체 프로세스 상세 목록 출력하고 3249 검색 및 출력

 

  • ps 명령 기타 옵션
    • ps -u <사용자명> : 특정 사용자에 대한 프로세스 정보 출력 (유닉스 유형)
    • ps -fu <사용자명> : ps -u <사용자명> 의 상세 정보 출력 (유닉스 유형)
    • ps -p <PID> : 특정 프로세스 상세 정보 출력
  • 프로세스 계층 형식으로 출력
    • pstree [옵션]
    • -a : 프로세스 생성 명령에 대한 모드 옵션 출력
    • -h : 현재  shell과 연관된 프로세스에 대하여 하이라이트로 출력

pstree -h, 굵은 글씨로 하이라이트 된다.


시그널 (signal)

 

인터럽트 (Interrupt)

  • 불가항력 상황에서 발생하는 일, 즉 정상적인 처리가 아니고 특수 상황에 벌어지는 일
    • 하드웨어 인터럽트 (HWI)
      → 하드웨어 이상에 의해 더는 컴퓨터 시스템 운영이 어려울 때 발생
    • 소프트웨어 인터럽트 (SWI)
      → 소프트웨어적으로 발생하는 인터럽트

 

시그널 (signal)

  • Linux Kernel에 의해서 프로세스에 전달되는 소프트웨어 인터럽트
  • 시그널에 따라 해당 프로세스 동작에 영향을 미친다.
  • 시그널 발생 시 처리 유형
    • 정해진 시그널 동작을 무조건 수행
      • ctrl + c 키 입력 시 미리 정의된 시그널(강제 종료)에 대한 처리
    • 무시 - 해당 프로세스에서 설정
    • 사용자 프로세스에서 시그널 처리에 대하여 별도 정의해서 처리
  • kill - 시그널 발생 명령
    • kill [옵션, 시그널 번호] <PID>
    • -l : 현재 사용 가능한 전체 시그널 목록 출력
      • 2번 SIGINT
        • ctrl + c 키 입력 시 발생하는 시그널
        • 기본 동작은 프로세스 강제 종료
        • 프로세스에서 무시하도록 할 수 있음
      • 9번 SIGKILL
        • 무조건 프로세스 종료
        • 프로세스에서 무시할 수 없음
    • kill -9 <PID> - PID에 해당하는 프로세스 종료

kill -l, 사용 가능한 전체 시그널 목록 출력


top

  • 전체 프로세스 실시간 실행 상태 모니터링

  • 화면 출력 내용
    • PID - 프로세스 ID
    • USER - 사용자
    • PR - 우선순위
    • NI - Nice 값
    • VIRT - 프로세스 사용 가상 메모리 크기
    • RES - 프로세스 사용 물리 메모리 크기
    • SHR - 프로세스 사용 공유 메모리 크기
    • %CPU - CPU 사용량
    • %Memory - 메모리 사용량
    • Time+ - CPU 누적 이용 시간
    • COMMAND - 명령
  • top 내부 명령
    • spacebar - 내용 갱신
    • k - 프로세스 종료
    • n - 출력 프로세스 개수 변경
    • u - 사용자에 대한 정렬
    • M - 사용 메모리 크기에 따라 정렬
    • P - CPU 사용량에 따라 정렬
    • q - top 종료

foreground / background 프로세스 관리

  • foreground 프로세스 생성
    • shell에서 명령 실행
  • background 프로세스 생성
    • shell에서 명령 실행 시 명령 마지막에 & 추가
    • bg 명령을 이용하여 background 프로세스로 전환
    • ctrl + z 키 입력을 통한 background 전환

명령 뒤 & 을 추가하여 background로 전환

 

  • jobs - background 작업 목록 출력
    • 작업 번호 - 작업 순서
      • + : 최근 작업
      • - : 최근 작업 바로 전 작업
    • 상태
      • Running - 현재 실행 중
      • Stopping - 작업 중지
      • Done - 작업 정상 종료
      • Terminated == Killed - 작업 비정상 종료
  • foreground / background 전환
    • fg <%작업번호>
      • background 작업을 foreground로 전환
    • bg <%작업번호>
      • background로 전환


TIF

어제에 이어서 오늘도 휘모리장단 마냥 몰아치지 않았나 라는 생각을 한다.

전공자이신 조원분께서도 1학기 동안 배울 내용을 2일에 걸쳐서 배운 격이다라고 말씀하시니 복습은 필수겠다.

 

2주 차가 지나면서 느낀 점은 배우는 것도 중요하지만 '멘탈 관리'가 중요하다는 것이다.

불과 어제만 하더라도 오전을 통으로 날려먹었고, 앞으로도 그런 일이 없으리라는 보장은 없으니까.

회사를 다니면서 딱히 멘탈 관리라는 걸 할 일이 없었기 때문에 나름대로의 방법을 찾아봐야겠다.

 

 

2022. 08. 12 에 작성된 글입니다.

반응형
profile

어쩌다 IT

@jwlish

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!