티스토리 뷰
나는 늙었다. IT 흔히 전산에 관련된 일을 하고 있다. 기술지원을 했었던 메인프레임급 시스템 장비(Server-서버) 또한 늙었다. 하지만 아직 많이 전 세계적으로 사용 중이다. 일반인이 알지 못할 뿐이지만 중요한 인공지능 및 획기적인 신기술을 적용 가능하게 해주는 그런 슈퍼컴퓨터들이 이런 묵직하고, 늙어버렸지만 힘이 짱짱한 시스템들이다. 오늘은 UNIX System = 유닉스 시스템에 대해서 기본적으로 이해할 수 있도록 도움을 주는 글을 써보려 한다. 해킹, 보안 이런 글에 비해서는 보다가 그냥 짜증이 날 수도 있다. 딱딱하고 어려운 컴퓨터, IT, 전산 이야기이지만 포기하지 않겠다.
목차 (INDEX)
- UNIX(유닉스)의 기본구조, 개요, 역사
- UNIX(유닉스)의 중요한 시스템 디렉토리 및 파일 시스템들
- UNIX(유닉스)의 개념 설명, 명령어, 관리 명령어
UNIX(유닉스)의 기본구조, 개요, 역사
1. 유닉스의 기본구조
-유닉스 시스템의 특징
- 온라인 대화형 시스템(Interactive System)
- 타 기종에 높은 이식성
- Multi-tasking System
- Multi-User
2. 유닉스의 개요
- 커널(Kernel)이란?
: 주기억장치에 상주하여 시스템에서 처리되는 데이터를 장치 간 전송, 변환하는 기능을 담당한 유닉스 운영체제의 핵심이다.
- 쉘(Shell)이란?
: 유닉스명령을 해석하는 명령 해석기, 사용자와 커널 간 인터페이스 담당하며, Bourn Shel, C Shell, Korn Shell 등이 있다.
- Utility Program(유틸리티)란?
: 사용자 편의를 위한 여러 시스템 프로그램 즉, 언어 처리기(language processor), 텍스트 편집기, 시스템 관리 프로그램 등을 들 수 있다.
- 파일시스템(Filesystem)이란?
: 컴퓨터에서 처리할 자료를 저장하는 공간이다. File들의 집합이 적절한 형태로 구성된 것을 지칭하며, UNIX의 filesystem은 계층적인 tree구조이다.
3. 유닉스의 역사
- 1969년 : Ken Tompson이 어셈블리 언어로 OS 개발 (DEC사의 PDP-7용)
- B언어로 Unix OS 개발
- 1972년경 : Dennis Ritchie가 C언어(B언어를 개량한 언어)로 개발
- Unix는 1969년 미국의 Bell Telphone Lab(AT&T의 부설연구소)에서 Ken Thompson 등에 의해 개발(Unix:미국 AT&T Bell Lab의 등록상표)되었으며, Bell Lab은 미국 최대 전화회사인 Bell System의 두뇌 역할을 하고 있었고, 실제 생산은 같은 계열사인 Western Electric이 담당했다. 개발 당시 Bell Lab에서는 Multics(본래 MIT에서 개발된 그 당시 최소 OS)라는 OS가 돌아가고 있었으며, 이는 Multi user interactive system(시간 분할 시스템)이며, 대화식(interactive) (<->(일괄처리식(batch) ; 그 당시 거의 모든 시스템이 배치 방식 OS이어서 중간 처리를 요했다) 이란 점이 특징이었다.
MIT에서 교육받은 Ken Thompson은 Multics를 능가하는 OS를 개발했다. 맨 처음 PDP-7란 미니컴퓨터 상에서 직접 프로그램을 쓰고 수행하기 위해선 여러 소프트웨어가 필요하였다. 그래서 Ken Thompson은 PDP-7을 위한 OS와 어셈블러 및 여러 유틸리니를 PDP-7 어셈블리 언어로 작성하였다. 이렇게 해서 Unix OS가 탄생하게 되었다. 그는 “스페이스 워스”라는 비디오 게임을 만들던 중 강력한 OS에 대한 필요를 느끼고 유닉스를 개발하였으며, 이후 동료 엔지니어 Dennis Ritchie가 B언어를 기반으로 한 C언어를 개발해 프로그래머들의 관심을 끌게 되었다.
C는 어셈블리 언어에 비해 소스코드를 이해하기 쉬웠으며 시스템에 접근하는 방식도 강력했기 때문이다. 그는 기계어이자 저수준 언어인 C를 이용해 유닉스를 다시 만들 것을 제안해 결국 유닉스의 기본적인 구조 부분을 C언어로 개작해 냈다. 아울러 유닉스의 보급에는 소스코드의 무상 공개라는 점이 커다란 작용을 했다.
- 한편 78년 버클리 대학원생들이 이 소스코드를 바탕으로 네트워크 처리 능력과 메모리 관리시스템을 포함시킨 BSD(Berkeley Software Distribution) 유닉스를 개발했다. 개발과정에서 보았듯이 유닉스는 처음에 기계 의존성이 높은 어셈블리 언어로 작성되었기 때문에 어떤 기계의 OS를 다른 기계에서 사용하기 위해서는 재개발해야 한다는 약점이 있었다. 그래서 Thompson은 이식성이 높은 B언어를 개발했고, 이를 개량해 Ritchie가 개발한 C언어를 사용해서 유닉스를 다시 고쳐 썼다.
결론적으로 본래 Multics에 기초를 두고 PDP-7의 어셈블리 언어로 쓰인 유닉스는 C언어로 쓰이고 거의 어떤 컴퓨터라도 이식 가능하게 되었다. 93년에는 유닉스의 표준화를 모색하기 위해 설립된 OSF, UI 등을 중심으로 70여 개의 유닉스 관련 업체가 공동으로 SVR4(System V Release 4)를 제정했으며, 이는 이기종간 호환성 증진과 동일한 사용자 인터페이스 등 개방형 시스템에 대한 요구사항을 실현한 표준이다. 실제로 현재의 유닉스 표준은 SVR4를 기준으로 하고 있다.
UNIX(유닉스)의 중요한 시스템 디렉토리 및 파일 시스템들
우리가 잘 알고 있는 리눅스(Linux) 운영체제는 유닉스(UNIX) 운영체제와 차이점이 있다면 공짜인지? 아니면 돈을 지불해야 사용 가능한지? 의 질문으로 운영체제의 개발과 운영이 시작되었다.
예를 들어 IBM은 AIX, HP는 HP-UX, Oracle은 이미 망해버린 SUN의 Solaris(솔라리스)의 운영체제를 본인들의 비싼 서버(Hardware)에 돈을 받고 팔고 있다. 유닉스 운영체제 이름이 다른 뿐이지 뿌리는 모두 유닉스이다. 기본 파일 시스템 구조에서 약간의 다른 디렉토리와 그들만의 관리 프로그램 그리고, 그들만의 시스템 명령어가 조금 틀릴 뿐이다. 본 글에서는 Sun사의 솔라리스로 설명을 대체하겠다.
1. 유닉스의 중요한 시스템 디렉토리
- " / " 는 루트(Root) 디렉토리
- /bin : 바이너리(binaries) 형태의 실행 파일 위치, 많은 필수적인 UNIX 명령어 프로그램들이 포함
- /etc : 시스템 설정에 관한 전반적인 파일들이 모여 있다. 로긴 시 보이는 메시지, 네트워크 설정, 서버 스크립트, 마운트 테이블 등은 모두 이곳에 존재한다.
- /dev : 시스템에서 사용되는 모든 입출력 장치 파일(device file)들을 갖고 있는 디렉토리
1) /dev/console 시스템의 콘솔, 모니터가 시스템에 직접 연결되어 있음
2) /dev/tty로 시작되는 장치 파일들 시스템에 구성된 단말기
3) /dev/pty로 시작하는 장치 파일들 사용 중인 컴퓨터가 telnet에 의해 네트워킹 되어 원격 로그인된 가상 단말기들
- /lib : 공유 라이브러리(Library) 파일들을 포함, 호출되는 코드들을 포함
- /tmp : 일시적인 임시(Temporary) 파일이 생성되는 디렉토리
- /usr : 사용자의 실제 작업을 위해 필요한 모든 명령어와 파일, 응용 패키지(package)들을 갖고 있는 디렉토리
1) /usr/bin /bin 에 없는 유용한 실행 파일들까지 가지고 있음
2) /usr/include C 컴파일러를 위한 include 파일들을 포함
3) /usr/lib /lib보다 더 많은 라이브러리를 포함 많은 프로그램들의 사양(specification) 파일을 포함
4) /usr/adm 시스템 관리자(administrator)들을 위한 내용과 시스템의 문제나 오류를 기록해 놓은 다양한 파일들이 포함
5) /usr/man UNIX 시스템의 상세한 매뉴얼 페이지의 실제 내용이 저장
6) /usr/src 시스템에 있는 컴파일되지 않은 다양한 프로그램의 소스(source) 코드들을 포함
7) /usr/openwin 오픈윈도우 프로그램을 모아둔 곳
- /var : 시스템의 전반적인 로그가 싸이게 되고, 그중 주의 깊게 보아야 할 디렉토리는 'adm'과 'mail' 디렉토리 이다. 시스템의 보안적 문제가 발생하였다면, 보통 본 디렉토리의 로그 분석부터 들어간다.
- /proc : 현재 시스템에 구동 중인 프로세서들이 PID를 파일명으로 하여 존재한다. 파일의 용량은 메모리 점유량을 표시하며, 소유주는 프로세서 UID/GID를 말한다. 당연히 지우려 해도 지워지지 않고, 표시되는 파일 크기는 실제 파일 시스템을 점유하는 용량이 아니니 참고 바란다.
※ 유닉스의 중요한 시스템 파일
/etc/passwd 시스템 사용자 password 및 계정 관리 파일
/etc/shadow 시스템 사용자 계정의 password 파일
/etc/hosts 네트워크 관리 파일
/etc/services 시스템에서 사용되는 서비스 포트 관리 파일
/etc/inittab 시스템 부팅 시 기본 실행 데몬 파일
/etc/rc*.d 시스템 부팅 시 기본 실행 프로그램 디렉터리
/etc/profile 시스템 기본 환경 파일
/var/spool/cron/crontabs 시스템 Cron 관리 디렉토리
/etc/vfstab 파일 시스템 관리 파일
/var/adm 시스템에 로그인한 사용자에 대한 로그파일이 위치한다. 부팅 때 콘솔에 발생하는 오류 메시지를 저장
※ /dev/dsk 와 /dev/rdsk의 차이
- 흔히 유닉스에서 스토리지 디바이스를 액세스하는 방법에 따라 블록디바이스(/dev/dsk) 와 로(RAW)디바이스(/dev/rdsk) 로 구분을 한다. 단어 그대로 이해를 한다면 블록디바이스에 블록은 파일시스템의 블록을 말한다. 즉 로디바이스 위에 파일시스템이 얹어 있다고 보면 된다.
OS는 어플리케이션의 IO 요구에 따라 파일 시스템에서 읽어 오느냐, 디바이스(파일시스템 보다는 더 하위레벨)에서 읽어 오느냐가 엑세스 방법에 의해서 차이가 있다. 디바이스는 파일시스템이 없기 때문에 당연히 파일, 디렉토리, 엑세스 컨트롤 등을 어플리케이션에서 직접 관리 해야한다. 디바이스를 데이타베이스에서 사용할 때 데이타 베이스는 자체적으로 블록과 익스텐드 등의 스토리지 관리 개념을 가지고 있기 때문에 OS레벨에서의 물리적인 데이타 파일 관리만 하면 된다. (DB에서 로디바이스를 사용하더라도 물리적인 디바이스(디스크)에 데이타 파일형태로 위치해야 하기 때문에 볼륨매니저 같은 가상 스토리지 개념이 필하다.
일반적인 디스크의 I/O는 다음과 같은 패스를 가진다.
Application <-> Library Buffer <-> Operation System Cache <-> File System/Volume Manager <-> Device
로디바이스의 패스는 다음과 같다.
Application <-> Device 흔히 DBMS 를 config 할 때 데이타 파일의 위치를 놓고 RAW 와 파일시스템 비교를 많이 하게 된다.
나름대로 장단점이 있어 쉽게 판단 할 수는 없지만 파일관리측면에선 파일시스템이 성능면에서는 로디바이스가 좋다. DBMS 시스템에서 파일시스템을 사용 할 경우 DBMS 의 가 자체 IO버퍼를 설정 하기 때문에 OS 의 파일시스템 캐시가 필요 없다. 이런 파일시스템의 단점을 보완하고자 솔라리스의 Direct I/O , 베리타스 파일시스템 등이 나오게 되었다. 이와 같은 더블 버퍼링 를 막음으로써 OS는 메모리 파일시스템 캐싱을 위한 메모리 매니지먼트가 필요가 없어지고, DBMS 에서만 버퍼링을 하므로 메모리를 덜 소모하게 된다. 주소 변환을 할 필요가 없으니 캐시의 엑세스 속도도 빨라진다. RAW의 장점을 하나 더 있다.KAIO(kernal async IO) 이다. 위의 IO패스에서 보듯이 로디바이스는 IO요구가 발생될 때 유저라이브러리를 사용 하지 않고 커널 레벨에서 IO가 이루어 지므로 명령 자체가 단순해 져서 결과적으로 CPU를 덜 사용하게 된다.
UNIX(유닉스)의 개념 설명, 명령어, 관리 명령어
1. 유닉스의 개념 설명
HOME : 사용자 login시의 default 디렉토리
LOGNAME : 사용자의 login 이름
PS1 : 주(Primary) 쉘 프롬프트를 정의
PS2 : 보조(Secondary) 쉘 프롬프트를 정의
PATH : 사용자의 실행 탐색 경로를 지정
SHELL : 명령어 해석기의 정의
TERM : 터미널 형태를 정의
LANG : 국가별 언어를 설정
history : korn shell 이용 시 사용한 명령어 저장 파일
exrc : Vi 편집기 이용 시 편집기의 조절 키 설정, 환경 값 설정 파일
profile : korn shell, bourne shell . login시 user의 환경 값 저장 파일
kshrc : 사용 중 korn shell로 변환 시 환경 값 저장 파일
login: C shell login시 user의 환경 값 저장 파일
cshrc : 사용 중 c shell로의 변환 시 환경 값 저장 파일
홈 디렉터리 : 사용자가 로그인했을 때 처음 위치하는 시작 디렉토리, 사용자 로그인 이름과 동일, /etc/passwd 파일에 등록
사용자 작업 디렉토리 : 사용자가 현재 작업하고 있는 디렉토리
경로 : 상대 경로-사용하고 있는 작업 디렉토리부터 시작, 절대 경로-루트 디렉토리로 부터 시작
글을 작성하다가 이건 아니다 싶어서, 기본 명령어와 관리 명령어는 조금 간결하게 내용 정리를 해야 할 것 같다. 왜냐하면 명령어만 다루는 글도 분명 많이 존재했을 것이다. 그래서 해법을 제시하고 글을 마무리하겠다. 손가락이 아프다.
- 유닉스 기본 명령어는 각종 포털(다음, 구글, 네이버 등)에서 '솔라리스 기본 명령어'를 검색하면 나온다. 기본 명령어까지 상세하게 보려고 하는 사람이라면, 그렇게 해달라.
- 유닉스 관리 명령어는 아래의 마지막에 '솔리라스 관리자용 지침서'라고 교육용으로 만든 자료가 있다. 해당 자료를 다운로드해서 한번 보면 된다.
솔라리스 관리자용 지침서 문서 파일(PDF)