본문 바로가기
프로그래밍 놀이터/Script(Python)

[책 정리] 01-1. 리눅스 쉘 시작하기, 리눅스란 무엇인가? - 리눅스 커맨드라인 쉘 스크립트 바이블

by 돼지왕 왕돼지 2020. 4. 19.
반응형

리눅스 커널 들여다보기


-

커널은 네 가지 주요 기능에 대해 일차적인 책임이 있다.

    시스템 메모리 관리

    소프트웨어 프로그램 관리

    하드웨어 관리

    파일시스템 관리



* 시스템 메모리 관리


-

물리적 메모리는 물론 가상 메모리도 만들고 관리한다.

가상 메모리는 하드 디스크의 공간을 이용하며 이를 스왑 공간(Swap space)라고 한다.

커널은 가상 메모리의 내용이 스왑 공간과 실제 물리적 메모리를 오가도록 옮기는 작업을 한다.



-

메모리의 장소는 페이지라고 하는 단위로 묶여 있다.

커널은 물리적 메모리 또는 스왑 공간에 메모리의 각 페이지를 배치한다.

커널은 어떤 페이지가 물리적 메모리에 있으며 어떤 페이지가 하드 디스크로 옮겨졌는지를 가리키는 메모리 페이지 테이블을 가지고 있다.



-

커널은 어떤 메모리 페이지가 사용되었는지를 계속 추적하며 설령 사용할 수 있는 공간이 남아 있다고 해도 일정 이상 쓰이지 않은 메모리를 스왑 공간으로 복사한다. (스왑 아웃)

어떤 프로그램이 스왑 아웃된 메모리 페이지에 접근하려고 하면 커널은 다른 메모리 페이지를 스왑 아웃해서 공간을 확보한 다음, 요청받은 페이지를 스왑 공간으로부터 물리적 메모리로 스왑 인 해야 한다.



* 소프트웨어 프로그램 관리


-

커널은 실행되고 있는 모든 프로세스를 리눅스 시스템이 어떻게 관리할지를 제어한다.



-

커널은 시스템의 다른 모든 프로세스를 시작하기 위해 쓰이는 첫 번째 프로세스인 init 프로세스 만든다.

커널이 시작될 때 가상메모리에는 init 프로세스가 로드된다.

커널은 추가 프로세스를 하나 하나 시작하면서 각 프로세스가 사용하는 데이터와 코드를 저장하기 위해서 가상 메모리에 고유한 영역을 제공한다.



-

일부 리눅스 구현체는 부팅 때 자동으로 시작될 프로세스의 테이블을 포함하고 있다.

리눅스 시스템에서 이 테이블은 보통 /etc/inittabs 라는 특별한 파일 안에 있다.

혹은 /etc/init.d 폴더가 활용되는데 이 폴더는 부팅 때 각각의 앱을 시작 또는 중지시키기 위한 스크립트를 포함하고 있다.

스크립트는 /etc/rcX.d 폴더 아래에 있는 항목을 통해 시작되며, 여기서 X는 실행레벨을 뜻한다.



-

리눅스 운영체제 시스템은 실행 레벨을 활용하는 초기화 시스템(init system)을 사용한다.

실행 레벨은 /etc/inittabs 파일 또는 /etc/rcX.d 폴더에 정의되어 있는 대로 특정한 유형의 프로세스만을 실행시키도록 init 프로세스에 지시하는 데에 쓰일 수 있다.

리눅스 운영체제 시스템에는 다섯 가지의 init 실행 레벨이 있다.



-

실행 레벨 1에서는 하나의 콘솔 터미널 프로세스와 함께 기본 시스템 프로세스만이 시작된다.

이를 단일 사용자 모드라고 한다.



-

표준 초기화 실행 레벨은 3이다.

이 실행 레벨에서는 네트워크 지원 소프트웨어와 같은 대다수 앱이 시작된다.

리눅스에서 인기 있는 또 다른 실행 레벨은 5로, 그래픽 기반 X 윈도우 소프트웨어를 시작하고 그래픽 데스크톱 창을 사용하여 로그인할 수 있는 실행 레벨이다.



* 하드웨어 관리


-

리눅스 시스템과 연결된 어떤 장치든 커널 코드의 내부에 삽입된 드라이버 코드를 필요로 한다.

드라이버 코드는 앱과 하드웨어 사이의 중간 다리 구실을 하며, 커널과 데이터가 데이터를 주고받을 수 있는 기능이 있다.



-

리눅스 커널에 디바이스 드라이버 코드를 삽입하기 위해서는 두 가지 방법이 사용된다.

1. 커널에서 컴파일한 드라이버

2. 커널에 추가된 드라이버 모듈



-

리눅스 시스템은 디바이스 파일이라고 하는 특별한 파일로 하드웨어 장치를 식별한다.

장치 파일은 세 가지로 분류된다.

1. 문자(Character)

2. 블록(Block)

3. 네트워크(Network)



-

문자 장치 파일은 한 번에 한 문자씩만 데이터를 처리할 수 있는 장치를 위한 파일이다.

대다수 모뎀과 터미널의 단말기는 문자 파일로 만든다.

블록 파일은 디스크 드라이브와 같이 한꺼번에 대규모의 데이터를 처리할 수 있는 장치를 위한 파일이다.

네트워크 파일 형식은 데이터를 송수신하기 위해 패킷을 사용하는 장치에 사용된다.

여기에는 네트워크 카드, 그리고 루프백 장치를 포함한다.



-

리눅스는 시스템에 있는 각 장치마다 노드(node)라고 하는 특별한 파일을 만든다.

장치를 통해 이루어지는 모든 통신은 디바이스 노드를 통한다.

각 노드는 리눅스 커널이 식별할 수 있도록 고유한 숫자의 쌍을 가지고 있다.

이 숫자의 쌍은 메이저와 마이너 장치 번호로 구성되어 있다.

비슷한 장치는 같은 메이저 장치 번호로 그룹화된다.

마이너 장치 번호는 메이저 장치 그룹 안에서 특정한 장치를 식별하는 데 사용된다.



* 파일 시스템 관리


-

리눅스 커널은 데이터를 하드 드라이브에서 읽거나 쓰기 위해서 여러 가지 유형의 파일시스템을 지원할 수 있다.

커널은 시스템이 사용할 모든 유형의 파일 시스템을 위한 지원과 함께 컴파일되어야 한다.


지원하는 파일 시스템에 대한 자세한 정보는 생략한다.



-

리눅스 커널은 가상 파일 시스템(VFS)을 사용하여 각각의 파일 시스템과 통신한다.

VFS 는 커널이 어떤 종류의 파일시스템과도 통신할 수 있도록 표준 인터페이스를 제공한다.

VFS 는 각 파일시스템이 마운트되고 사용될 때 메모리에 정보를 캐시한다.




GNU 유틸리티


-

하드웨어 장치를 제어하기 위한 커널 말고도 OS 는 파일과 프로그램을 제어하는 것과 같은 표준 기능을 수행하는 유틸리티가 필요하다.

GNU 조직(GNU’s NOT UNIX)은 유닉스 유틸리티의 전체 세트를 OSS 로 개발했다.



* 핵심 GNU 유틸리티


-

GNU 는 유닉스 시스템 관리자가 리눅스에서 유닉스와 비슷한 환경을 쓸 수 있도록 만드는 것을 주목적으로 설계되었다.

리눅스 시스템을 위해 핵심 유틸리티 묶은 핵심 번들을 coreutils 패키지라고 한다.

코어 유틸 패키지는 세 부분으로 구성되어 있다.

1. 파일을 다루기 위한 유틸

2. 텍스트를 조작하기 위한 유틸

3. 프로세스를 관리하기 위한 유틸



* 쉘


-

쉘은 특별한 대화형 유틸리티다.

사용자가 프로그램을 시작하고, 파일 시스템에 있는 파일을 관리하고, 리눅스 시스템에서 실행되는 프로세스를 관리하는 방법을 제공한다.

쉘의 핵심은 커맨드 프롬프트다. 여기서 상호작용을 맡고 있다.

이를 통해 텍스트 명령을 입력하면 쉘은 이를 해석하고 커널에서 실행시킨다.



-

쉘 명령들을 묶어서 파일에 넣음으로써 프로그램처럼 실행할 수도 있다.

이 파일을 쉘 스크립트라고 한다.

커맨드라인에서 실행할 수 있는 명령이라면 무엇이든 쉘 스크립트에 넣고 명령의 그룹으로 실행할 수 있다.



-

리눅스 시스템에서 쓸 수 있는 여러 가지 리눅스 쉘이 있다.

이들 쉘은 각자 특징이 있으며, 어떤 것은 스크립트를 만들 때 더욱 쓸모가 있는가 하면, 어떤 것은 프로세스 관리에 더욱 유용하다.

모든 리눅스 배포판에서 사용하는 기본 쉘은 bash 쉘이다.

bash 쉘은 본(Bourne, 제작자 이름) 쉘이라고 부르는 표준 UNIX 쉘을 대체하는 수단으로GNU 가 개발했으며, bash 쉘이라는 이름은 ‘Bourne again shell’ 이라는 뜻도 있다.



-

다음의 쉘들이 있다.

ash : 간단하고 가벼운 쉘로 메모리가 작은 환경에서도 실행되지만 bash 쉘과 완벽한 호환성이 있다.

kom : bash 와 호환되나 연관 배열 및 부동소수점 연산과 같은 고급 프로그래밍 기능을 지원하는 프로그래밍 쉘

tcsh : C 프로그래밍 언어의 요소를 쉘 스크립트에 결합시킨 쉘

zsh : bash, tcsh, kom 의 기능을 통합시킨 진보된 쉘로서 고급 프로그래밍 기능, 공유된 히스토리 파일, 테마를 입한 프롬프트와 같은 기능을 제공




리눅스 데스크톱 환경


* X 윈도우 시스템


-

X윈도우는 PC의 비디오 카드 및 모니터를 직접 다루는 낮은 수준의 프로그램이며, 리눅스 앱이 컴퓨터에 화려한 윈도우와 그래픽을 제공하는 방법을 제어한다.

가장 인기 있는 패키지는 X.org 다. 이는 X 윈도우 시스템을 구현한 OOS 이며 오늘날 사용되는 최신 비디오 카드 대부분을 지원한다.



-

두 개의 다른 X 윈도우 패키지도 인기를 얻어가고 있다.

페도라 리눅스 배포판의 웨이랜드 소프트웨어(Wayland software)와 우분투 리눅스 배포판의 미르 디스플레이 서버이다.

이들은 리눅스 배포판을 처음 설치할 때 비디오 카드와 모니터를 찾으려 시도하고 필요한 정보를 포함하는 X 윈도우 구성 파일을 만든다.



* KDE 데스크톱


-

K 데스크톱 환경(KDE, K Desktop Environment)은 MS 윈도우 환경과 비슷한 그래픽 데스크톱을 제공하는 OOS 이다.



* GNOME 데스크톱


-

GNU 네트워크 객체 모델 환경(GNOME, GNU Network Object Model Environment) 이다.

많은 리눅스 배포판의 기본 데스크톱 환경이 되고 있다.



* 유니티 데스크톱


-

우분투 리눅스에서는 독자적인 리눅스 데스크톱 환경인 유니티를 개발했다.



* 다른 데스크톱


-

그래픽 데스크톱 환경의 단점은 올바르게 작동하기 위해서는 시스템 자원을 상당히 많이 필요로 한다는 것이다.

오래된 PC 에서도 완벽하게 재구실을 하는 기본 기능을 제공하기 위해 메모리를 적게 사용하는 여러 가지 그래픽 데스크톱 앱을 만들었다.


Fluxbox, Xfce, JWM, Fvwm, fvwm95 등이 있다.



반응형

댓글