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 | 터미널 연결이 끊어진 프로세스가 받는 시그널 |
'정보보안기사' 카테고리의 다른 글
| [정보보안기사 요약 1] 윈도우 기본 학습 (0) | 2026.04.02 |
|---|---|
| 정보보안기사 취득(2025.12.19) (0) | 2026.04.01 |