정보보안기사

[정보보안기사 요약 1]UNIX/ LINUX 기본 학습

Hong's_Computer 2026. 5. 1. 22:12
반응형

passwd 파일: 사용자의 개인정보 저장, 콜론(:)을 구분자로 7개의 필드

  • cat /etc/passwd

  • cat /etc/shadow

  • 쉘(Shell): 사용자와 커널 간 인터페이스 역할을 하는 프로그램
  • id 사용자계정: UID와 GID 정보 확인
  • passwd 계정: 사용자 패스워드 변경, 본인의 비밀번호 변경, root는 전계정 비밀번호 변경 가능

 

group 파일: 그룹 정보를 저장한 파일, 4개의 필드로 구성

  • cat /etc/group

 

 

입출력 재지정(I/O Redirection) 기능: 키보드나 모니터가 아닌 파일로 재지정

  • FD: 프로세스 별로 오픈한 파일을 식별하기 위해 부여한 파일 번호를 의미
    • 표준 입력(STDIN, FD:0)
    • 표준 출력(STDOUT, FD:1)
    • 표준 에러(STDERR, FD:2)

  • 리다이렉션 기호(Operator)
기호 기능 설명 및 예시
> 표준 출력(1) 덮어쓰기(Overwrite) ls > list.txt (기존 내용 지우고 새로 씀)
>> 표준 출력(1) 이어쓰기(Append) ls >> list.txt (기존 내용 밑에 추가함)
< 표준 입력(0) cat < list.txt (파일의 내용을 입력으로 받음)
2> 표준 에러(2) 덮어쓰기 find / -name "test" 2> error.txt (에러 메시지만 저장)
2>> 표준 에러(2) 이어쓰기 에러 로그를 지속적으로 누적할 때 사용

 

 

파이프 또는 파이프라인 기능: 프로세스간 통신을 위한 기법

  • 명령어1 | 명령어2: 명령어1의 표준 출력(FD:1)을 명령어2의 표준 입력(FD:0)으로 연결(IPC 기법)

 

  • 주의 사항: 표준 에러(FD:2)는 파이프를 통과하지 않으므로 에러까지 넘기려면 2>&1 | 처리가 필요함.

 

특수문자(Meta Character)

기호 설명
~ 홈 디렉터리
. 현재 디렉터리
.. 상위 디렉터리
# 주석
$ 쉘 변수($쉘변수명)
& 백그라운드 모드로 실행(명령어 &)
* 임의의 0개 이상 문자 대체
? 임의의 1개 문자 대체
; 쉘 명령 구분자
| 파이프
< 입력 재지정
> 출려 재지정
  • 특수문자 기능 무력화
기호 설명
\ 바로 뒤에 오는 특수문자 1개의 기능을 무력화
' ' 따옴표 안의 모든 특수문자 기능을 무력화하고 단순 문자열로 취급
" " 묶인 문자열 중 $, `(백틱), \ 세 개를 제외한 나머지 특수문자만 무력화
  • 논리적인 명령어 제어
기호 설명
&& 앞의 명령어가 성공(정상 종료) 했을 때만 뒤의 명령어를 실행
|| 앞의 명령어가 실패(에러 발생) 했을 때만 뒤의 명령어를 실행

 

 

파일 시스템: 논리적인 자료구조

  • Boot Block: 운영체제 부팅/초기화를 위한 부트스트랩 코드 저장
  • Super Block: 파일 시스템 전체의 메타데이터(총 블록 수, 여유 블록 수, 블록 크기 등) 관리
  • Inode List: 각 파일 및 디렉터리의 고유한 inode 구조체들이 모여있는 구역
  • Data Block: 실제 파일의 내용(데이터)이 저장되는 공간

 

파일 시스템과 링크(Link, 기존 파일에 대한 또 다른 접근 포인트를 만들어주는 기능) 파일

구분 하드 링크(Hard Link) 심볼릭/소프트 링크(Symbolic Link)
개념 원본과 완벽히 동일한 파일(이름만 다름) 원본 파일의 '경로(Path)'를 담고 있는 새로운 파일
명령어 ln 원본 링크명 ln -s [원본_file | 원본_directory] 링크명
Inode 원본과 동일한 inode 번호 공유 원본과 다른 독립적인 inode 번호 할당
디렉터리 연결 불가 연결 가능
파티션 교차 다른 파티션(파일 시스템)에 연결 불가능 다른 파티션에도 자유롭게 연결 가능
원본 삭제 시 링크 파일로 여전히 데이터 접근 가능 접근 불가 (단절된 링크, Broken Link 발생)
확인 방법 ls -l 시 링크 카운트(Link count) 증가 확인 ls -l 시 권한 앞자리가 l이며, -> 로 원본을 가리킴

 

 

디렉터리 관리

 

 

디렉터리 내용 출력(ls 명령어)

  • ls [옵션] [file_name | directory_name]

  • ls 옵션
옵션 설명
-l 목록 형태로 자세히 보여줌
-a 모든 디렉터리와 파일(숨김 포함) 보여줌
-R 하위 디렉터리까지 출력
-F 파일 종류와 기호 출력
-i inode number 출력
  • ls 파일 종류
종류 설명
- 일반 정규 파일
d 디렉터리
b 블록장치 파일
c 문자장치 파일
l 심볼릭 링크 파일
p 이름 있는 파이프
s 유닉스 도메인 소켓
  • 접근 권한(r, w, x의 숫자(8진수) 값)
    • r(Read, 읽기): 4
    • w(Write, 쓰기): 2
    • x(Execute, 실행): 1
    • 예시: rwxr-xr-- = (4+2+1) / (4+0+1) / (4+0+0) = 754

 

cd [directory_name]: 디렉터리간 이동 명령어

mkdir [-p] directory_name: 새로운 디렉터리 생성

  • -p: 계층 구조를 가지는 디렉터리 모두 생성

rmdir [-p] directory_name: 기존의 빈 디렉터리 삭제(단, 해당 디렉터리에 아무것도 없어야함)

  • rm -r directory_name: 파일이 있더라도 삭제

chmod [-R] 접근권한 [file_name | directory_name ...]: 파일 접근권한 변경

  • -R: 하위 디렉터리와 파일의 권한까지 변경
접근권한(예시: u+x | g=rwx | 755 | 126 ...)
대상 u(user), g(group), o(other), a(all)
연산자 +(추가), -(제거), =(설정)
접근권한 r(읽기, 4), w(쓰기, 2), x(실행, 1)

 

chown [-hR] 소유자:소유그룹 [file_name | directory_name ...]: 파일 소유자 및 소유그룹 변경(root만 실행 가능)

chgrp [-hR] 소유그룹 [file_name | directory_name ...]: 파일 소유 그룹 변경(root만 실행 가능)

  • -h: 심볼릭 링크 파일 자체의 소유자나 소유그룹 변경

 

접근권한 마스크 설정(umask): 파일(기본값: 666) 또는 디렉터리(기본값: 777) 생성시 설정하는 값으로 제거할 접근권한 정보가 설정됨(권장 설정 값은 mask 022)

  • umask 숫자: 기본 설정 변경

 

find path [expression] [action]: 시스템 내의 파일 중 사용자가 원하는 파일을 찾아줌

  • path: 절대경로(/: 최상위, /파일명: 해당 파일 이하) or 상대경로(.: 현재 디렉터리 이하)
expression 종류(옵션) 설명
-name "파일명" 파일명으로 검색(와일드카드 *, ? 사용 시 반드시 따옴표로 묶을 것)
-type 파일종류 f(일반 파일), d(디렉터리), l(심볼릭 링크), b(블록), c(문자)
-user 소유자명 특정 사용자(소유자)의 파일 검색
-group 소유그룹명 특정 그룹 소유의 파일 검색
-size [+-]num[단위] 파일 크기로 검색(단위: c(바이트), k(KB), M(MB), G(GB))
-perm [-]mode 특정 권한(퍼미션)을 가진 파일 검색
-atime [+-]n 최근 n일 기준 접근(Access)된 파일(예: +7은 7일 이전, -7은 7일 이내)
-ctime [+-]n 최근 n일 기준 속성 변경(Change)된 파일
-mtime [+-]n 최근 n일 기준 내용 수정(Modify)된 파일
-exec 명령어 {} \; 검색된 파일({})에 대해 지정한 명령어를 수행하고 \;로 종료

 

 

디렉터리 관리 명령어: ls, cd, pwd(현재 작업 디렉터리의 절대경로 출력), mkdir, rmdir

파일 관리 명령어

  • cat file_name: 파일 내용을 한 번에 출력 또는 병합
  • more file_name: 내용이 길 때 페이지 단위로 출력(Space: 다음 페이지, Enter: 한 줄씩)
  • head [-n 숫자] file_name: 내용의 앞부분 출력(default 10줄)
  • tail [-n 숫자 | -f]: 내용의 뒷 부분 출력(default 10줄), -f: 실시간 출력
  • mv old_name [new_name | directory_name]: 이름 변경 및 위치 변경
  • cp [-r] 원본파일 새파일: 원본 파일 내용을 새 파일로 복사(-r: 전체 복사)
  • rm [-rf] file_name | directory_name: 강제 삭제
  • ln [-s] 목표파일 link_name: 하드 링크 또는 심볼릭 링크 파일을 생성

파일 권한 관리 명령어: chmod, chown, chgrp, touch(0Byte 파일 생성 및 파일의 시간 변경), umask

파일 응용 명령어

  • wc [-l] file_name: 파일의 행(Line), 단어, 문자 수 출력(-l: 몇 줄인지 출력)
  • cut [옵션] fime_name: 파일 내용에서 특정 필드(열, Column)나 문자를 잘라내어 추출
  • paste file_name1 file_name2: 두 파일의 내용을 같은 줄(Line)끼리 옆으로 이어 붙임
  • tr "기본문자" "치환문자": 문자를 치환하거나 삭제(-d). 예시는 소문자를 전부 대문자로 바꾸는 명령어
  • sort [-r] file_name: 파일 내용을 알파벳/숫자 순으로 정렬
  • split: 파일 분할
  • uniq: 연속된 중복 줄을 제거(예: sort test.txt | uniq)
  • cmp file_name1 file_name2: 두 파일을 바이트(Byte) 단위로 비교하여 처음으로 내용이 달라지는 위치를 출력
  • comm file_name1 file_name2: 두 파일을 줄 단위로 비교하여 3개의 열(1열: 1에만 있음, 2열: 2에만 있음, 3열: 공통)로 출력
  • diff file_name1 file_name2: 두 파일 간의 내용 차이점을 비교해서 출력
  • grep "패턴" /경로: 특정 문자열(패턴)이 포함된 줄만 출력

 

 

포르세스 개요

  • 프로세스 A와 프로세스 B가 동일한 test.txt 파일을 동시에 열었다고 가정해 봅시다. 실제 파일(Vnode)은 1개지만 A와 B가 파일을 읽고 있는 위치(Offset)나 열기 모드(Read/Write)는 서로 다를 수 있습니다. 따라서 Vnode는 하나만 유지하여 메모리를 아끼고 각 프로세스의 현재 상태(Offset 등)는 System Open-File Table에 따로따로 기록하는 효율적이고 안전한 방식을 쓰는 것이다.

 

Process 메모리 구조

  • Code(Text) Area: 작성한 프로그램의 실제 코드(기계어 명령어)가 저장되는 공간(Read-Only로 보호됨)
  • Data Area: 전역 변수(Global)와 정적 변수(Static)가 저장되는 공간, 프로그램 시작 시 할당되고 종료 시 해제됨.
  • Heap Area: 프로그래머가 필요할 때 동적으로 할당하는 메모리 공간(아래에서 위로 주소가 자라남)
  • Stack Area: 함수 호출 시 생성되는 지역 변수, 매개변수, 리턴 주소 등이 임시로 저장되는 공간(위에서 아래로 주소가 자라남)

PCB(Process Control Block): 각 프로세스를 관리하기 위해 유지하는 정보를 담고 있음

  • Process Number: PID가 저장됨
  • Program Counter: 문맥교환 발생시 다음에 실행할 명령어 위치 저장
    • 문맥 교환(Context Switching): CPU에서 실행중인 프로세스가 새로운 프로세스로 교환될 때 현재 상태 저장 후 새로운 프로세스의 상태를 복원하는 과정
  • Register Save Area: 문맥교환 발생시 현재 프로세스의 실행 상태 저장
    • 레지스터(Register): CPU 내부의 고속 소량의 임시 기억장치
  • Process State: 해당 프로세스가 현재 라이프사이클 중 어느 단계에 있는지를 나타낸다.
  • Memory Limits: 프로세스가 사용하는 메모리 정보

FDT(File Descriptor Table): 프로세스마다 개별적으로 가지는 파일 테이블, FD 0(입력)·1(출력)·2(에러)는 기본 할당되며 새로 파일을 열면 사용 가능한 가장 작은 숫자(3번부터)가 부여됨.

System Open-File Table: 시스템 전체에서 열려있는 파일들의 상태를 관리

  • Open Mode: 파일의 읽기/쓰기 모드
  • Offset: 파일 입출력(I/O)을 수행하기 위한 현재 위치 값
  • Reference Count: 해당 파일의 참조 개수

Active Vnode Table: 저장 매체(디스크)에 있는 실제 파일의 고유한 정보(inode 기반)를 메모리상에 캐싱해 둔 객체(중재자)

 

fork(): 나랑 똑같은 복사본(자식) 만들기

exec(): 복사본(자식)의 뇌를 완전히 다른 새로운 프로그램으로 덮어씌워 실행하기

wait(): 부모가 자식이 종료될 때까지 대기하며 자식의 '종료 상태 정보'를 회수하는 함수

sleep(n): 지정한 n초 동안 프로세스 실행을 일시 대기(Sleep) 상태로 전환

 

 

PPID: 부모 프로세스의 PID

 

kill -15 PID(SIGTERM): 프로세스 정상 종료(기본값)

kill -9 PID(SIGKILL): 프로세스 강제 종료

 

좀비 프로세스: 종료 상태 정보를 부모에게 반환하지 못해서 또는 부모 프로세스 오류 등으로 소멸하지 않고 남아있는 프로세스(시스템 가용성의 문제 발생 → 부모 프로세스 강제 종료 or 커널 정보 초기화 → 고아 프로세스가 됨)

고아 프로세스: 자식 프로세스가 살아있는 상태에서 부모 프로세스 종료시 남아있는 자식 프로세스로 이 경우 init 프로세스(PID 1)가 대리모 역할을 수행한다.

 

ps [옵션]

옵션 설명
-e 모든 프로세스
-u 사용자명 해당 사용자의 프로세
-f 상세한 정보
-l 더 상세한 정보
-o [필드 1, ...] 선택된 필드 정보만 출력

 

 

 

프로세스 그룹(PGID): 여러 프로세스들을 하나로 묶어 관리하기 위한 집합(주로 시그널을 한 번에 보내기 위해 사용)

세션(SID): 터미널과의 논리적인 연결 단위, 사용자가 로그인해서 로그아웃할 때까지 생성된 모든 프로세스 그룹의 집합.

터미널 제어권: 키보드 입력 및 제어 시그널(Ctrl+C 등)을 받을 수 있는 권한.

  • 포그라운드 모드: 터미널에 대한 제어권을 가지고 동작하는 모드, 사용자와 상호작용 가능
  • 백그라운드 모드: 터미널에 대한 제어권 없이 동작하는 모드, 키보드 시그널을 받지 않음
명령어 문법 및 활용 예시 설명
& find / -name "test" > log.txt & 명령어 맨 뒤에 붙이면 해당 작업을 처음부터 백그라운드로 실행
jobs jobs 현재 터미널 세션에서 백그라운드로 돌고 있거나 일시 정지된 작업들의 목록과 작업 번호(%n)를 출력
fg fg %1 백그라운드에 있는 1번 작업을 포그라운드로 가져 온다(제어권 획득)
bg bg %2 Ctrl+Z로 일시 정지된 2번 작업을 백그라운드에서 다시 실행(재개)
nohup nohup ./server_start.sh & 로그아웃하여 세션(터미널)이 끊겨도 프로세스가 죽지 않고 계속 백그라운드에서 실행되도록 보장하는 명령어

 

 

 

프로세스 간 통신(IPC: Inter-Process Communication): 프로세스는 각자 독립된 메모리 공간을 가지므로 서로 직접 대화할 수 없다. 따라서 커널이 제공하는 우체국 같은 기능(파이프, 시그널, 메시지 큐, 공유 메모리 등)을 통해 통신해야 한다.

  • kill -[signal_number | signal_name] PID: PID 종료 명령어(기본값: SIGTERM)
Signal_name Signal_number 설명
SIGINT 2 Ctrl + C 입력 시 발생(실행 중인 포그라운드 프로세스 중지)
SIGKILL 9 무시하거나 임의로 처리 못하는 시그널, 강제 종료
SIGSTOP 19 무시하거나 임의로 처리 못하는 시그널, 강제 정지
SIGTERM 15 정상 default 종료(기본값)
SIGFPE 8 0으로 나누기 등 치명적인 산술 연산 오류 발생
SIGCHLD 17 프로세스 종료시 부모 프로세스가 받는 시그널(부모에게 보내는 사망 시그널)
SIGALRM 14 alarm() 함수로 설정한 타이머의 시간이 다 되었을 때 발생
SIGQUIT 3 Ctrl + \ 입력 시 발생(종료와 동시에 상태 정보인 Core Dump를 남김)
SIGSEGV 11 커널에 의해 발생(잘못된 메모리 참조 오류)
SIGHUP 1 터미널 연결이 끊어진 프로세스가 받는 시그널

 

반응형