UNIX는 여러 사용자가 동시에 시스템 자원을 공유하고, 여러 작업을 병행하여 처리할 수 있도록 설계된 운영체제 계열입니다. 이식성과 확장성을 중시하며, 커널·셸·유틸리티가 서로 역할을 나누어 시스템을 구성합니다.
이 장에서는 UNIX의 주요 특징과 시스템 구조, 파일 시스템의 기본 구성, 프로세스·디렉터리·파일 관련 명령어, 환경 변수와 Bash 셸의 사용 방식을 정리합니다. 명령어의 이름만 암기하기보다 각 명령이 시스템의 어느 영역을 다루는지 구분하는 것이 중요합니다.
이 장의 핵심 내용
- UNIX는 다중 사용자·다중 작업·시분할 처리를 지원하는 운영체제 계열입니다.
- UNIX 시스템은 핵심 자원을 관리하는 커널, 명령을 해석하는 셸, 사용자 편의를 위한 유틸리티로 구성됩니다.
- UNIX 파일 시스템은 부트 블록, 슈퍼 블록, inode 영역과 데이터 블록으로 설명할 수 있습니다.
fork()는 자식 프로세스를 만들고,exec계열은 현재 프로세스가 실행하는 프로그램을 교체합니다.pwd,ls,mkdir,rmdir,cd는 디렉터리를 다루는 대표 명령어입니다.cp,rm,mv,cat,chmod,chown은 파일 복사·삭제·이동·출력·권한·소유자를 관리합니다.- 환경 변수는 셸과 프로그램의 동작에 영향을 주는 이름과 값의 집합이며, Bash에서는 변수 설정과 내보내기를 구분해야 합니다.
UNIX란 무엇인가?
UNIX는 여러 사용자와 여러 프로그램이 컴퓨터의 자원을 효율적으로 공유하도록 설계된 운영체제 계열입니다. 초기에는 시분할 환경을 중심으로 발전했으며, 이후 서버·워크스테이션·네트워크 시스템과 다양한 UNIX 계열 운영체제의 기반이 되었습니다.
UNIX는 프로그램과 장치를 파일이라는 통일된 방식으로 다루는 설계, 계층적 디렉터리 구조, 명령어 조합과 파이프라인, 프로세스 중심의 실행 모델을 특징으로 합니다.
UNIX의 주요 특징
| 특징 | 의미 |
|---|---|
| 다중 사용자 Multi-user | 여러 사용자가 하나의 시스템 자원을 함께 이용할 수 있음 |
| 다중 작업 Multitasking | 여러 프로세스가 번갈아 또는 병렬적으로 실행될 수 있음 |
| 시분할 처리 | CPU 시간을 여러 사용자와 프로세스에 나누어 대화형 처리를 지원 |
| 계층적 파일 시스템 | 루트 디렉터리를 기준으로 파일과 디렉터리를 트리 구조로 관리 |
| 이식성 | 하드웨어 의존 부분을 줄이고 여러 시스템에서 구현할 수 있도록 설계 |
| 명령어 조합 | 작은 명령어를 파이프와 리다이렉션으로 연결해 복잡한 작업 수행 |
| 백그라운드 실행 | 사용자가 다른 작업을 계속하는 동안 별도의 작업을 뒤에서 수행 |
개념 정리: UNIX를 개방형 시스템이라고 표현하는 경우가 있지만, 모든 UNIX 구현이 동일한 라이선스나 소스 공개 정책을 갖는 것은 아닙니다. 시험에서는 표준화·이식성·다양한 시스템 간 호환성을 강조하는 표현으로 이해하는 것이 적절합니다.
UNIX 시스템은 어떻게 구성될까?
UNIX 시스템은 일반적으로 커널, 셸과 유틸리티의 세 영역으로 나누어 설명할 수 있습니다. 사용자가 입력한 명령은 셸이 해석하고, 필요한 기능은 커널의 시스템 호출이나 유틸리티 프로그램을 통해 수행됩니다.
커널
커널(Kernel)은 UNIX 운영체제의 핵심 부분입니다. 프로세스, 메모리, 파일 시스템, 입출력장치와 시스템 자원을 관리합니다.
셸
셸(Shell)은 사용자가 입력한 명령을 해석하고 프로그램 실행을 요청하는 명령 해석기입니다. 셸 스크립트를 통해 반복 작업도 자동화할 수 있습니다.
유틸리티
유틸리티(Utility)는 파일 관리, 텍스트 처리, 프로그램 개발과 시스템 점검 등 사용자가 자주 수행하는 작업을 지원하는 명령어와 프로그램입니다. 편집기, 컴파일러, 인터프리터와 각종 파일 처리 명령이 여기에 포함될 수 있습니다.
| 구성 요소 | 주요 역할 | 대표적인 예 |
|---|---|---|
| 커널 | 프로세스·메모리·파일·장치·권한 관리 | 스케줄러, 메모리 관리자, 파일 시스템 |
| 셸 | 명령 해석, 프로그램 실행, 스크립트 처리 | sh, Bash, C Shell, KornShell |
| 유틸리티 | 사용자의 파일·텍스트·개발·관리 작업 지원 | ls, cp, cat, 편집기, 컴파일러 |
시험 포인트: “프로세스·메모리·파일·입출력 관리 등 UNIX의 핵심 기능을 수행하는 부분”은 커널입니다. 사용자의 명령을 해석해 커널이나 프로그램에 전달하는 부분은 셸입니다.
UNIX 파일 시스템의 구조
UNIX 계열 파일 시스템은 디스크의 저장 영역을 기능에 따라 나누어 관리합니다. 학습 범위에서는 부트 블록, 슈퍼 블록, inode 영역과 데이터 블록의 네 부분으로 구분합니다.
| 구성 영역 | 저장하는 내용 | 핵심어 |
|---|---|---|
| 부트 블록 Boot Block | 시스템을 부팅하는 데 필요한 코드와 관련 정보 | 부팅 |
| 슈퍼 블록 Superblock | 파일 시스템 전체의 크기, 상태, 사용 가능한 블록 등 관리 정보 | 파일 시스템 전체 정보 |
| inode 영역 Index Node | 파일의 종류, 소유자, 권한, 크기, 시간과 데이터 블록 위치 등의 메타데이터 | 파일 속성·위치 정보 |
| 데이터 블록 Data Block | 파일과 디렉터리의 실제 내용 | 실제 데이터 |
UNIX의 시스템 관련 명령어
시스템 관련 명령어는 사용자 접속 상태, 시스템 정보, 네트워크 연결과 파일 시스템 상태를 확인하거나 관리할 때 사용합니다.
| 명령어 | 기능 | 사용 예 |
|---|---|---|
| login | 사용자 인증을 거쳐 로그인 세션을 시작하는 전통적인 UNIX 명령 | login |
| logout | 현재 로그인 셸을 종료 | logout |
| finger | 등록 사용자나 로그인 사용자에 관한 정보를 표시 | finger user |
| who | 현재 로그인한 사용자의 정보를 표시 | who |
| ping | 네트워크 대상과의 연결 가능성과 응답 상태를 점검 | ping host |
| fsck | 파일 시스템의 일관성과 오류를 검사하고 필요한 경우 복구 | fsck device |
| mount | 파일 시스템을 지정한 디렉터리인 마운트 지점에 연결 | mount device directory |
| uname | 커널 이름과 시스템 정보를 표시 | uname -a |
finger는 전통적인 UNIX 사용자 정보 명령이지만, 현대 Linux 환경에서는 기본 설치되지 않거나 보안상의 이유로 사용하지 않는 경우도 있습니다.명령어 구분: mount는 새로운 파일 시스템을 기존 디렉터리 트리에 연결합니다. 파일을 단순히 복사하거나 이동하는 명령어가 아닙니다.
프로세스 관련 명령과 인터페이스
프로세스는 실행 중인 프로그램의 인스턴스입니다. UNIX는 프로세스를 생성하고 다른 프로그램을 실행하며, 부모와 자식 프로세스의 상태를 관리하는 인터페이스를 제공합니다.
| 명령·함수 | 기능 | 주의할 점 |
|---|---|---|
| fork() | 현재 프로세스를 바탕으로 자식 프로세스를 생성 | 새 프로그램을 바로 실행하는 것이 아니라 프로세스를 복제 |
| exec 계열 | 현재 프로세스의 실행 이미지를 지정한 프로그램으로 교체 | 일반적으로 새로운 프로세스 ID를 만들지 않음 |
| exit | 프로세스 또는 셸의 실행을 종료 | 종료 상태를 부모 프로세스에 전달할 수 있음 |
| wait | 자식 프로세스의 종료 또는 상태 변화를 기다림 | 부모·자식 프로세스 동기화에 사용 |
| kill | 프로세스에 지정한 신호를 전달 | 전달하는 신호에 따라 종료되지 않을 수도 있음 |
| ps | 현재 실행 중인 프로세스의 상태와 정보를 표시 | 옵션에 따라 표시 범위가 달라짐 |
| getpid() | 현재 프로세스의 프로세스 ID를 반환 | 프로그래밍 인터페이스 |
| getppid() | 부모 프로세스의 프로세스 ID를 반환 | 프로그래밍 인터페이스 |
fork(), exec, getpid(), getppid()는 일반적인 대화형 셸 명령보다 프로그램 내부에서 사용하는 시스템 인터페이스로 보는 것이 정확합니다.혼동 주의: fork()가 새로운 프로세스를 만들고, exec 계열은 현재 프로세스에서 실행할 프로그램을 교체합니다. exec 자체가 별도의 새 프로세스를 만드는 것은 아닙니다.
fork()
부모 프로세스를 바탕으로 자식 프로세스를 생성합니다. 부모와 자식은 서로 다른 프로세스 ID를 가집니다.
exec
현재 프로세스의 메모리 이미지를 새로운 프로그램으로 교체합니다. 성공하면 기존 프로그램의 다음 명령으로 돌아오지 않습니다.
디렉터리 관련 명령어
UNIX의 디렉터리는 파일을 계층적으로 구성하는 공간입니다. 현재 위치를 확인하거나 디렉터리의 내용을 조회하고, 새로운 디렉터리를 생성·삭제·이동할 수 있습니다.
| 명령어 | 기능 | 사용 예 |
|---|---|---|
| pwd | 현재 작업 디렉터리의 경로를 표시 | pwd |
| ls | 디렉터리의 파일과 하위 디렉터리를 표시 | ls -l |
| mkdir | 새로운 디렉터리를 생성 | mkdir reports |
| rmdir | 비어 있는 디렉터리를 삭제 | rmdir reports |
| cd | 현재 작업 디렉터리를 변경 | cd /home/user |
rmdir은 일반적으로 비어 있는 디렉터리를 삭제합니다. 내용이 있는 디렉터리를 삭제하는 방식과 구분해야 합니다.파일 관련 명령어
파일 관련 명령어는 파일의 생성과 열기, 복사, 삭제, 이동, 내용 확인, 권한과 소유자 변경 등에 사용됩니다. 여기에는 셸에서 직접 사용하는 명령어와 프로그램에서 사용하는 시스템 호출이 함께 포함될 수 있습니다.
| 명령·함수 | 기능 | 분류 |
|---|---|---|
| creat() | 파일을 생성하거나 기존 파일을 지정한 방식으로 열어 초기화 | 시스템 호출·함수 |
| open() | 파일을 지정한 읽기·쓰기 방식으로 열고 파일 디스크립터를 반환 | 시스템 호출·함수 |
| cp | 파일이나 디렉터리를 복사 | 셸 명령어 |
| rm | 파일 또는 지정한 조건의 디렉터리를 삭제 | 셸 명령어 |
| mv | 파일이나 디렉터리를 이동하거나 이름을 변경 | 셸 명령어 |
| cat | 파일 내용을 표준 출력에 표시하거나 여러 파일을 연결 | 셸 명령어 |
| chmod | 파일이나 디렉터리의 접근 권한을 변경 | 셸 명령어 |
| chown | 파일이나 디렉터리의 소유자 또는 그룹을 변경 | 셸 명령어 |
creat()와 open()은 일반적으로 C 프로그램 등에서 사용하는 인터페이스이며, cp와 rm은 셸에서 실행하는 명령어입니다.시험 포인트: UNIX에서 파일의 사용 권한을 설정하거나 변경하는 명령어는 chmod입니다. 파일의 소유자를 변경하는 명령어는 chown입니다.
chmod와 chown의 차이
chmod
파일의 읽기, 쓰기, 실행 권한을 변경합니다. 소유자·그룹·기타 사용자별 권한을 문자 또는 숫자 방식으로 지정할 수 있습니다.
chmod 755 script.sh
chown
파일이나 디렉터리의 소유자와 필요하면 그룹을 변경합니다. 일반 사용자의 변경 권한은 시스템 정책에 따라 제한될 수 있습니다.
chown user:group file.txt
환경 변수란 무엇인가?
환경 변수(Environment Variable)는 프로그램의 실행 환경과 동작 방식에 영향을 주는 이름과 값의 집합입니다. 셸에서 설정된 환경 변수는 프로그램을 실행할 때 해당 프로그램에 전달될 수 있습니다.
대표적인 환경 변수로는 실행 파일을 검색할 경로를 지정하는 PATH, 사용자의 홈 디렉터리를 나타내는 HOME, 현재 사용자 이름과 관련된 USER, 기본 셸을 나타내는 SHELL 등이 있습니다.
환경 변수 관련 명령어
| 명령어 | 기능 | 주요 환경 |
|---|---|---|
| env | 환경 변수를 출력하거나 수정된 환경에서 명령을 실행 | UNIX·Linux 공통 |
| printenv | 현재 환경 변수 전체 또는 지정한 변수의 값을 출력 | UNIX·Linux 공통 |
| echo | 문자열이나 변수 확장 결과를 출력 | 셸 공통 |
| set | 셸 변수와 셸 설정 등을 표시하거나 변경 | 셸마다 동작 차이 |
| export | 셸 변수를 자식 프로세스에 전달될 환경 변수로 표시 | sh·Bash 계열 |
| setenv | 환경 변수의 값을 설정 | C Shell·tcsh 계열 |
| declare | 변수를 선언하고 정수·배열·읽기 전용 등의 속성을 지정 | Bash |
Bash에서 환경 변수를 설정하는 방법
Bash에서는 먼저 변수명=값 형식으로 셸 변수를 만들고, 자식 프로세스에도 전달하려면 export를 사용합니다.
Bash 예시:MY_NAME="record"export MY_NAMEecho "$MY_NAME"printenv MY_NAME
한 줄로 작성하려면 export MY_NAME="record"처럼 변수 설정과 내보내기를 동시에 수행할 수 있습니다.
혼동 주의: setenv는 일반적인 Bash 명령이 아니라 C Shell과 tcsh 계열에서 사용하는 환경 변수 설정 명령입니다. Bash에서는 변수명=값과 export를 사용합니다.
Bash 셸의 특징
Bash는 Bourne Again Shell의 약자로, Bourne Shell의 문법을 바탕으로 명령행 편집, 명령 이력, 변수, 함수, 조건문과 반복문 등 다양한 기능을 제공하는 셸이자 명령 언어입니다.
Linux에서 널리 사용되며 macOS와 여러 UNIX 계열 시스템에서도 설치하여 사용할 수 있습니다. 다만 모든 Linux 환경의 기본 셸이 반드시 Bash인 것은 아니므로 ‘Linux의 유일한 표준 셸’로 단정해서는 안 됩니다.
| 기능 | 설명 | 예시 |
|---|---|---|
| 변수 | 문자열과 숫자 등의 값을 이름으로 저장 | name="UNIX" |
| 조건문 | 조건에 따라 다른 명령을 실행 | if |
| 반복문 | 명령을 정해진 횟수 또는 조건 동안 반복 | for, while, until |
| 함수 | 여러 명령을 하나의 이름으로 묶어 재사용 | function_name() { ...; } |
| 파이프 | 앞 명령의 출력을 다음 명령의 입력으로 전달 | ps | grep bash |
| 리다이렉션 | 입력과 출력의 대상을 파일 등으로 변경 | command > output.txt |
for, while, until입니다. repeat_do는 Bash의 표준 반복문이 아닙니다.셸의 주요 기능
- 명령 해석 — 사용자가 입력한 명령을 분석하고 필요한 프로그램의 실행을 요청합니다.
- 프로그램 실행 — 외부 명령과 응용 프로그램을 실행하고 결과를 표시합니다.
- 입출력 제어 — 파이프와 리다이렉션으로 명령 간 데이터 흐름을 연결합니다.
- 변수와 환경 관리 — 사용자별 설정과 프로그램 실행 환경을 관리합니다.
- 셸 스크립트 — 조건문·반복문·함수를 사용해 반복 작업을 자동화합니다.
- 초기화 파일 실행 — 로그인이나 셸 시작 시 설정 파일을 읽어 사용자 환경을 구성합니다.
- 작업 제어 — 포그라운드와 백그라운드 작업을 관리합니다.
구분 주의: 프로세스의 메모리·CPU·파일 디스크립터 같은 자원을 직접 관리하는 주체는 커널입니다. 셸은 명령을 해석하고 커널의 기능을 간접적으로 이용해 프로그램 실행을 요청합니다.
시험에서 자주 혼동되는 개념
커널과 셸
커널은 CPU·메모리·파일·장치를 관리합니다. 셸은 사용자 명령을 해석하고 프로그램 실행을 요청합니다.
fork와 exec
fork()는 자식 프로세스를 생성합니다. exec는 현재 프로세스가 실행하는 프로그램을 교체합니다.
chmod와 chown
chmod는 파일 권한을 변경하고, chown은 파일 소유자나 그룹을 변경합니다.
Bash와 C Shell 환경 변수
Bash는 변수 대입 후 export를 사용합니다. C Shell 계열에서는 setenv를 사용할 수 있습니다.
슈퍼 블록과 inode
슈퍼 블록은 파일 시스템 전체 정보를, inode는 개별 파일의 속성과 데이터 위치 정보를 관리합니다.
명령어와 시스템 호출
cp와 cat은 셸에서 실행하는 유틸리티이고, open()과 getpid()는 프로그램에서 사용하는 인터페이스입니다.
이번 장 핵심 요약
- UNIX는 다중 사용자, 다중 작업과 시분할 처리를 지원하는 운영체제 계열입니다.
- 커널은 시스템의 핵심 자원을 관리하고, 셸은 사용자의 명령을 해석합니다.
- 슈퍼 블록은 파일 시스템 전체 정보, inode는 개별 파일의 메타데이터, 데이터 블록은 실제 내용을 저장합니다.
fork()는 자식 프로세스를 만들고,exec는 현재 프로세스의 실행 프로그램을 교체합니다.ps는 프로세스 상태를 표시하고,kill은 프로세스에 신호를 전달합니다.pwd는 현재 경로,ls는 디렉터리 내용,cd는 작업 위치를 다룹니다.cp는 복사,rm은 삭제,mv는 이동과 이름 변경,cat은 내용 출력을 수행합니다.chmod는 접근 권한을 변경하고,chown은 소유자를 변경합니다.- 환경 변수는 프로그램의 실행 환경에 영향을 주며 일반적으로 대문자 이름을 사용합니다.
- Bash에서는 셸 변수를 환경 변수로 전달할 때
export를 사용합니다. setenv는 Bash보다 C Shell 계열의 환경 변수 설정 명령으로 구분합니다.- Bash 스크립트에서는
for,while,until등의 반복문을 사용할 수 있습니다.
복습 문제
UNIX에서 프로세스·메모리·파일과 장치를 관리하는 핵심 부분은?
커널(Kernel)입니다.
커널과 셸의 가장 중요한 차이는?
커널은 하드웨어와 시스템 자원을 직접 관리합니다. 셸은 사용자의 명령을 해석하고 프로그램 실행을 요청하는 명령 해석기입니다.
파일 시스템 전체의 정보를 저장하는 영역은?
슈퍼 블록(Superblock)입니다.
파일의 소유자·권한·크기·수정 시간과 데이터 위치를 관리하는 구조는?
inode입니다.
새로운 자식 프로세스를 생성하는 인터페이스는?
fork()입니다.
exec가 성공하면 새로운 프로세스 ID가 반드시 생성될까?
아닙니다. exec 계열은 일반적으로 현재 프로세스의 실행 이미지를 새로운 프로그램으로 교체하며 기존 프로세스 ID를 유지합니다.
현재 실행 중인 프로세스의 상태를 표시하는 명령어는?
ps입니다.
현재 작업 중인 디렉터리의 경로를 표시하는 명령어는?
pwd입니다.
파일 권한과 파일 소유자를 변경하는 명령어는 각각 무엇일까?
파일 권한은 chmod, 파일 소유자는 chown으로 변경합니다.
현재 환경 변수 전체 또는 특정 환경 변수의 값을 출력하는 명령어는?
printenv를 사용할 수 있습니다. env도 현재 환경을 출력하는 데 사용할 수 있습니다.
Bash에서 셸 변수를 자식 프로세스에 전달하려면 어떤 명령을 사용할까?
export를 사용합니다.
for, while, repeat_do, until 가운데 Bash의 표준 반복문이 아닌 것은?
repeat_do입니다. Bash에서는 for, while, until 등을 사용할 수 있습니다.
셸이 직접 담당하는 기능이 아닌 것은 프로세스 메모리 관리·명령 해석·셸 스크립트·초기화 파일 실행 중 무엇일까?
프로세스 메모리 관리입니다. 메모리와 같은 시스템 자원을 직접 관리하는 주체는 커널입니다.
참고자료
- 학습 범위 — 사무자동화산업기사 제1과목 사무자동화 시스템, UNIX의 개요·명령어·환경 변수
- Q-Net — 사무자동화산업기사 국가자격 종목별 상세정보
- The Open Group — POSIX.1-2024 Shell and Utilities
- The Open Group — POSIX Environment Variables
- GNU Bash Reference Manual — Shell Environment
- Linux man-pages — fork(2)
- Linux man-pages — execve(2)
- Linux man-pages — open(2)
- Linux man-pages — inode(7)
이 글은 사무자동화산업기사 시험 범위에 포함된 UNIX의 구조와 주요 명령어를 이해하고 복습할 수 있도록 재구성한 정리입니다. 시험에서 사용하는 분류와 현대 UNIX·Linux 시스템의 실제 명령어 및 시스템 인터페이스 구분이 일부 다를 수 있으므로, 실제 시험 준비 시에는 최신 Q-Net 출제기준을 함께 확인해야 합니다.