리눅스 마스터 2급 - 리눅스의 이해
1.1 리눅스의 특징
다중 사용자 및 다중 처리 시스템
리눅스는 UNIX의 영향을 받고 파생되었습니다.
하나의 시스템에 다수의 사용자들이 동시에 접속할 수 있습니다. 각 접속자들은 다수의 응용프로그램을 살행할 수 있습니다.
완전히 공개된 시스템
운영체제의 핵심인 커널 뿐만 아니라 같이 내장되어 배포되는 대부분의 응용 프로그램이 소스가 공개된 프로그램이다.
뛰어난 네트워크 환경
가장 널리 쓰이는 이더넷 , SLIP, PPP, ATM 등의 다양한 네트워크 환경을 지원하며, TCP/IP, AppleTalk 등
대부분의 네트워크 프로토콜을 지원한다.
다양한 파일시스템 지원
리눅스는 프로그램과 자료를 저장하기 위해 리눅스 고유의 파일시스템인 ext2, ext3, ext3, ext4등을 사용한다
DOS의 FAT, 윈도우의 FAT32 및 NTFS, 유닉스 파일시스템, XFS 등 시스템이 다운되었을 때 이를 즉시 복구할 수 있는 저널링 파일 시스템도 지원합니다.
ext3, ext4, ReiserFS, XFS, JFS 등은 다운 되었을때 즉시 복구할 수 있는 저널링 파일 시스템을 지원합니다.
SMB, CIFS, NFS, NCPFS 등의 네트워크 파일 시스템도 지원합니다.
ext3부터 저널링 파일시스템을 지원합니다.
뛰어난 이식성
리눅스는 약간의 어샘블리 언어와 대부분의 C언어로 작성되어 있습니다.
어샘블리 부분만 새롭게 만들고 C부분을 다시 컴파일 함으로써 쉽게 다른 시스템에 이식할 수 있습니다.
유연성과 확장성
리눅스는 상업용 유닉스의 모든 특성을 가지고 있으며, 유닉스의 표준인 포직스(POSIX)를 준수하고 있습니다.
따라서 공개용 유닉스 프로그램들은 큰 문제없이 컴파일해서 사용할 수 있습니다.
리눅스의 원시코드를 쉽게 접할 수 있고 리눅스는 커널 소스가 공개되어 있어서 다양한 채널을 통해 다양한 하드웨어 관련 지원을 받을 수 있습니다.
뛰어난 안정성과 보안성
리눅스는 커널 소스가 공개되어 있어서 Windows와 같은 폐쇄형 운영체제에 비해 보안상의 취약점이 쉽게 노출될 가능성이 있으나 공개용 소프트웨어를 지지하는 수많은 전문 프로그래머들이 상용 운영체제보다 빠르게 오류 수정과 보안 관련된 패치를 발표하고 있습니다.
다양한 응용프로그램의 제공
리눅스에는운영체제의 핵심인 커널을 비롯하여 다양한 응용 프로그램을 제공합니다.
쉘(Shell)과 기본 명령어, X window 시스템(Xorg, KDE, GNOME 등의 그래픽 유저 인터페이스), 편집기(vi, emacs 등), 서버 및 클라이언트 프로그램(웹, 메일, FTP 등), 개발 도구(C, C++, Java, Python 등), 보안도구(nmap, tepdump 등), 게임 등을 포함하여 배포하고 있습니다.
다양한 배포판의 존재
리눅스는 서버, 개발용, PC용 등 다양한 목적으로 사용 가능하고, 이에 따른 다양한 배포판이 존재한다. 국외에는 레드햇(RedHat), 데비안(Debian), 우분투(Ubuntu), 수세(SUSE) 등이 있고, 국내에는 한컴리눅스, SULinux 등이 있다. 이러한 배포판들은 같은 리눅스 커널을 사용하지만 시스템 도구, 관리시스템, 응용 프로그램 등이 차이가 난다. 또한 상용 배포판인 레드햇 엔터프라이즈 리눅스(RedHat Enterprise Linux), 수세 리눅스 엔터프라이즈 서버(SUSE Linux Enterprise Server) 등과 커뮤니티에서 무료로 배포와 지원을 받을 수 있는 CentOS, Fedora 등으로 나눌 수 있다.
CentOs, Fedora, 레드햇 엔터프라이즈 리눅스의 특징 및 비교
항목 | Fedora | RHEL (Red Hat Enterprise Linux) | CentOS (CentOS Linux / Stream) |
목적 | 최신 기술 테스트, 개발자용 | 기업용, 안정성 중시 | RHEL의 무료 버전 (현재는 CentOS Stream) |
대상 | 개발자, 개인 사용자 | 기업, 기관, 서버 관리자 | 서버 관리자, 테스트 환경 |
출시 주기 | 매우 빠름 (약 6개월) | 느림 (5~10년 장기 지원) | 느림 (RHEL과 비슷하거나 그 전단계) |
안정성 | 낮음 (최신 기능 많음) | 매우 높음 | 높음 (과거 CentOS Linux), Stream은 약간 낮음 |
지원 | 커뮤니티 | 유료 공식 지원 | 커뮤니티 (Stream은 Red Hat에서 일부 지원) |
유료 여부 | 무료 | 유료 (서브스크립션 필요) | 무료 |
관계 | RHEL의 실험실 역할 | Fedora의 안정화 버전 | 예전엔 RHEL 클론, 지금은 RHEL 미리보기 역할 |
1.2 리눅스의 단점
기술지원의 부족
리눅스에서 사용되는 대부분의 응용 프로그램들이 비상업적인 제품이다. 따라서 전 세계에 흩어져 있는 개발자들의 일일이 기술 지원을 하는 것이 불가능하다. 이로 인해 사용하면서 발생하는 문제점들은 모두 사용자의 몫이다.
특정 하드웨어에 대한 지원의 부족
리눅스가 다른 운영체계에 비해 이식성, 확장성 등이 뛰어나지만
여전히 특정한 하드웨어에 설치가 어렵고 모든 플랫폼에서 작동하지는 않는다.
사용자의 숙련된 기술의 요구
현재 리눅스에서는 X-Window 기반 환경이 보편화되면서 초기 텍스트 기반의 명령어를 입력하는 환경에 비해 쉬워졌지만, 아직도 중요한 설정은 명령어를 입력하거나 관련 설정 파일을 편집기를 사용해서 수정해야 한다. 다른 운영체제에 비해 사용자의 숙련된 기술이 요구된다.
1.3 리눅스의 기술적인 특징
계층적인 파일 구조
리눅스의 파일 구조는 /(root)를 기준으로 그 하위 디렉터리에 usr, var, bin 등이 존재하고 다시 usr 디렉터리 밑에는 local, src 등의 디렉터리가 존재한다. 이러한 구조를 계층적 파일 구조라 하며, 거꾸로 뒤집어 놓은 나무처럼 생겼다고 해서 트리(Tree) 구조라고도 한다.
장치의 파일화
장치(Device)란 하드디스크, 키보드, 프린트, 화면 출력 장치 등 시스템에 설치된 여러 가지 하드웨어적 자원을 말한다.
리눅스는 이러한 장치들을 모두 파일화하여 사용한다. 따라서 특정 하드웨어에게 명령을 수행하려면 해당하는 장치 파일에 명령을 내리면 된다.
가상메모리 사용
가상메모리(Virtual Memory)란 하드디스크의 일부를 메모리처럼 사용하는 것을 말한다. 하드디스크는 데이터를 저장하는 공간이고, RAM(메모리)는 작업공간이라 할 수 있다. 프로그램을 실행시킬 작업공간에 해당하는 메모리로 공간이 부족한 데, 메모리의 공간이 작으면 그 프로그램은 실행시킬 수 없게 된다. 이러한 문제점을 극복하기 위해 사용하는 것이 가상메모리이고, 리눅스에서는 이 영역을 스왑(SWAP)이라고 부른다.
스와핑(Swapping)
메모리에 프로그램들이 많이 올라와 공간이 꽉 찼다고 하더라도 가상메모리를 설정하면 추가로 새로운 프로그램을 실행시킬 수 있게 된다. 이것은 메모리에 올라와 있지만 사용하지 않고 있는 프로그램을 하드디스크에 설정된 가상 메모리 공간으로 보내고 그 빈 공간에 새로운 프로그램을 로딩하기 때문이다. 또한 가상메모리에 있는 내용을 사용하려면 다시 메모리로 올리고, 그 대신에 메모리에 있던 다른 내용이 하드디스크에 저장된다. 이처럼 메모리와 하드디스크 사이의 데이터 교환을 스와핑(swapping)이라고 한다.
free -m
을 통해 남는공간 확인이 가능합니다.
동적 라이브러리 지원
프로그램에서 특정한 기능을 하는 루틴(Routine)들을 모아 놓은 것을 라이브러리(Library)라 하여, 프로그램 개발 시 라이브러리 중에서 필요한 루틴들을 받아서 링크(Link)시킨다. 이렇게 되면 같은 기능을 하는 루틴들이 실행 파일마다 들어가므로 실행 파일의 크기도 커지고 메모리도 낭비된다. 그래서 같은 루틴들을 공유하는 것이 공유 라이브러리(Shared Library)라 한다. 정적 라이브러리는 컴파일할 때 이러한 라이브러리를 프로그램에 넣지만, 동적 공유 라이브러리(Dynamic Shared Library)는 실행 파일 내부에 넣어두지 않고, 프로그램을 실행할 때 가져다 사용하므로 메모리의 효율성이 아주 높다.
가상 콘솔
가상 콘솔(Virtual Console)은 하나의 모니터를 장착한 시스템에 여러 개의 가상 화면을 제공해서 사용하게 하는 기능이다. 리눅스는 기본적으로 6개의 가상 콘솔을 제공한다. [CTRL]+[ALT]+[F1]을 기본 시작 창으로 해서 [CTRL]+[ALT]+[F6]까지 총 6개의 텍스트 기반 로그인 창을 제공한다.
X-Window 사용 시에는 [CTRL]+[ALT]+[F7]을 통하여 표시된다. (최근 리눅스 배포판에서 부팅 모드를 X-Window로 사용할 경우 첫 번째 창인 [CTRL]+[ALT]+[F1]이 사용되기도 한다.)
X-Window 창이 아닌 가상 콘솔의 창 전환은 [CTRL] 키 없이 [ALT] + [Fn] 조합만으로도 가능하다. X-Window에서는 [ALT] 키가 부속한 기능으로 사용되기 때문에 [CTRL] 키와 조합하지 않으면 창 전환이 되지 않는다.
가상 콘솔 사용 관련 TIP
텍스트 모드 기반의 가상 콘솔 사용 시에는 이미 지나간 작업의 내용을 볼 수 없다. 그러나 최근 리눅스 배포판은 그래픽카드 메모리를 활용하여 작업 내용을 [SHIFT]+[PageUp]과 [SHIFT]+[PageDown]으로 스크롤할 수 있다.
파이프(Pipe)
파이프는 프로세스의 통신을 위해 도입한 것으로, 어떤 프로세스의 표준 출력이 다른 프로세스의 표준 입력으로 쓰이게 하는 것을 말한다.
리눅스에서 파이프는 | 기호를 사용하고, 여러 개를 사용하면 파이프라인(Pipe-Line)을 구성하게 되며, 데이터들은 파이프라인을 따라 흐르게 된다.
결과적으로 파이프는 여러 명령을 조합할 때 사용하며, 명령어와 명령어 사이에 | 기호를 사용한다.
사용 예
➡ ls 명령의 출력이 more라는 필터의 입력으로 사용되어, 결과가 한 화면씩 출력된다.
➡ ls의 결과인 자료들은 sort를 통해 정렬되고, 다시 more를 통해 한 화면씩 출력된다.
리다이렉션(Redirection)
리다이렉션은 어떤 프로세스의 입력/출력을 표준 입력/출력이 아닌 다른 입력/출력으로 변경할 때 사용하는 기능이다.
출력 결과를 파일로 저장하거나, 파일의 내용을 프로세스의 입력으로 사용할 수 있게 해준다.
종류
- > : 프로세스의 출력을 다른 출력(파일 등)으로 변경한다.
- >> : 프로세스의 출력을 지정한 출력(파일)에 추가한다. (덧붙이기)
- < : 파일 등의 입력을 표준 입력 대신 사용하도록 변경한다.
- << : 기호 뒤에 지정한 문자열을 입력으로 받아, 해당 문자열이 나오기 전까지의 표준 입력을 삼아 내용을 출력한다. (여러 줄 입력에 사용됨)