권찡's 공학이야기

Linux??? 본문

IT & Cloud/Linux

Linux???

권찡 2019. 9. 9. 11:18

  리눅스란 무엇일까?? 컴퓨터에 대해서 알지 못하는 사람도 윈도우는 알고 있을 것입니다. 대부분의 일반 가정에는 윈도우가 설치되있지만, 윈도우에 대해서 자세히 알지 못하죠. 윈도우는 운영체제(OS,operating system)입니다. 운영체제는 하드웨어와 응용프로그램 사이에서 응용 프로그램을 그 목적에 맞게 수행하도록 하드웨어를 제어하고 그 처리 결과를 다시 응용 프로그램으로 보내는 역할을 합니다.

 

 이 운영체제는 윈도우 말고도 다른 운영체제가 존재합니다. 대표적으로 맥os, 유닉스, 리눅스가 있습니다. 

 

리눅스는 리누스 토발즈에 의해 커널이 최초 개발되었으며 이후 전세계 많은 프로그래머들의 참여 및 기여로 지속적인 개발이 되었습니다. 초기에는 서버용 운영체제였으나 점차 데스크탑용으로도 그 사용이 늘어나서 현제 많은 기업들이 리눅스를 사용하고 있습니다.

 

 

 커널에 관한 이야기는 임베디드에서 중요하게 다룰 사항이라 여기서는 설명을 자세하게 하지는 않겠습니다 .

간단히 이야기 하면 커널은 운영체제의 핵심입니다. 시스템의 모든 것을 완전히 통제하며 다른 응용프로그램 수행에 필요한 여러가지 서비스를 제공해주는 역할을 합니다. 보안, 자원 관리, 추상화 등등 운영체제의 핵심 역할을 하죠. 

 

뭐 이 내용은 언젠가 자세히 다룰 때가 있을 것입니다.

 

 

 

왜 기업, 연구기관에서 리눅스가 주로 사용될까요? 

 

이유는 간단합니다. 경제성 때문이죠. 기존 대학, 기업, 연구기관에서는 유닉스가 주로 사용되었습니다. 성능적으로 매우 뛰어나긴 하지만 성능에 비해 가격면에서 이용하기에 무리가 있습니다. 반면 리눅스는 윈도우,맥OS등과 달리 사실상 무료입니다. 누구든지 실력만 되면 온라인으로 개발에 참여할 수 있어 전세계인이 같이 만드는 운영체제죠.

 

개방성 측면에서 Linux의 소스 코드 수준까지 공개되어 사용자의 요구에 따라 누구나 추가,변경이 가능합니다.

 

안정성 측면에는Linux운영체제는 사양이 낮은 컴퓨터에서도 우수한 성능과 기량을 발휘할 수 있습니다특히,가장 안정화된 서버로 인정받은 Unix운영체제를 모태로 하고 있어 안정성이 부각됩니다

 

효율성 측면으로는 필수 기능만을 커널 부분에 두고 나머지 기능은 필요시 선택적으로 사용할 수 잇는 설계방법을 채택하는 것이 가능해 이미 많은 업체들에서 검증된 소프트웨어들을 자체적으로 패키지화하여 배포하죠.

 

 

배포판의 종류에 대해서 알아보죠. 크게 3종류의 배포판이 있습니다.

 

1. RedHat 계열

2. Debian 계열

3. Slackware 계열

 

국내에서는 주로 RedHat 계열의 레드헷 엔터프라이즈 리눅스(RHEL)와 계보를 같이하는 Fedora, CentOS가 있으며, 이 계열은 아시아에서 많이 사용하는 계열입니다. 전 세계 리눅스 시장의 70~80%를 점유하고 있죠. RPM(RedHat Package Manager)기반의 패키지 관리 방식이며, 관리도구로 yem,yum 기능으로 효과적으로 관리할 수 있습니다,

 

Debian계열로는 Ubuntu, Mint가 대표적으로 dpkg기반(DPMS패키지 관리 기법의 기반이 되는 응용프로그램으로 확장자명은 .deb)을 사용합니다. 특히 우분트는 GNU/Linux를 근간으로 하여 사용자 편의성에 초점을 맞춰 개발되었고,설치에 필요한 컴퓨터 사양이 높지 않아 누구라도 쉽게 설치하여 사용 가능하죠.최근은 데스크탑뿐 아니라 모바일/안드로이드 버전도 발표되었습니다.

 

Slackware계열은 대표적으로 SUSE리눅스가 있습니다. 수세 리눅스는 아시아에서는 많이 사용되지 않는 것 같지만, 유럽이나 외국에서는 많이 사용하는 걸로 알고 있습니다. 가장 특징적인 것은 YaSt인데  관리프로그램으로 타 리눅스에서 터미널에서만 설정이 가능하던 옵션을 거의 모두 간단하게 설정하도록 해줍니다.

 

 

위의 각 리눅스 배포판에 따라 여러 장단점이 있으니 자신의 환경에 적합한 것을 사용하는 것이 좋겠죠?

 

 

 

#리눅스 구조

 

위에서는 종류를 알아봤으니 이제 구조를 조금 건드려 봅시다. 구조는 크게 3가지로 나뉩니다.

1) 커널 -Kernel

 앞서 이야기한 커널입니다. 프로그램의 실행과정에서 가장 핵심적인 연산이 이뤄지는 부분으로 하드웨어를 직접 제어하고, 프로세스 관리, 메모리 관리, 파일 시스템 관리 등을 수행하는 운영체제의 핵심이비다. 사용자가 실행시키는 응용프로그램과과 하드웨어 사이의 관리자 역할을 수행하며 쉘과 연관되어 쉘에서 명령하는 작업을 수행하고 그 결과를 쉘로 보내는 일을 합니다.

 

2) 쉘 - Shell

 쉘은 운영체제에서 사용자가 입력하는 명령을 대신 해석해 커널에 전달, 실행해주는 프로그램입니다. 좀더 자세하게 보면 사용자가 입력한 문자열을 해석하고 해당하는 명령어를 찾아서 커널에 작업을 요청하는 것이죠. 이후 커널에서 작업을 수행한 결과를 다시 쉘로 보내면 쉘을 그 결과를 유저에게 알려주는 형태입니다.

 

3) 응용프로그램 - Application

 리눅스는 각종 프로그래밍 개발도구, 문서 편집도구, 네트워크 관련 도구등 매우 다양한 응용프로그램을 제공합니다. 뭐 여러가지 있겠지만 예를 들어서 웹서버, db서버 등등 여러가지가 있죠.

 

 

 

 

#리눅스 디렉토리 구조

 

 앞으로 리눅스를 사용함에 있어 디렉토리에 대해서 좀 알아놔야 편하기 때문에 설명을 하겠습니다. 우리가 윈도우에서 사용하는 파일 시스템이라 보면 되는데, 가령 윈도우에서 test라는 폴더를 만들고 안에 A,B,C 폴더를 안에 생성한다고 해봅시다. 바탕화면에서 A라는 폴더를 찾으려면 test폴더에 들어가서 찾게 되겠죠?? 마찬가지로 리눅스에서도 비슷한 구조를 가지고 있습니다. 기본적으로 디렉토리를 구분하는 것은 /이며, 윈도우에서 \과 비슷한 것이죠. 가령 C\system32\driver 와 같은 느낌이죠.

 

 

리눅스에서 디렉토리는 역 트리 구조를 가지고 있습니다. 명령어의 종류, 성격, 사용권한 등에 따라 각각의 디렉토리들로 구분됩니다. 기본적인 배포판은 FSSTND라는 표준을 준수하며 기본 골격이 위와 같죠.

 

몇가지 디렉토리만 설명하고 넘어가보겠습니다.

 

/(루트) :최상의 디렉토리인 루트 디렉토리를 의미하며,리눅스의 모든 디렉토리의 시작점이다.,모든 디렉토리들을 절대 경로로 표기할 때에 이 디렉토리로부터 시작

 

/bin :기본적인 명령어가 저장된 디렉토리로 리눅스 시스템사용에 있어 가장 기본적이라고 할수 있는 mv, cp, rm등과 같은 명령어들이 이 디렉토리에 존재하며, root사용자와 일반사용자가 함께 사용할 수 있는 명령어 디렉토리

 

/boot :리눅스 부트로터가 존재하는 디렉토리. GRUB와 같은 부트로더에 관한 파일들이 해당 디렉토리에 존재

 

/dev :시스템 디바이스파일을 저장하고 있는 디렉토리다 하드디스크 장치파일/dev/sdb, CD-ROM/dev/cdrom등과 같은 장치파일이 존재하는 디렉토리

 

/etc :시스템의 거의 모든 설정 파일이 존재하는 디렉토리이다. 하위 디렉토리로 sysconfig, passwd등의 파일이 존재한다.소프트웨어를 설치할시설정파일이 존재하는 디렉토리로 /etc/mail, /etc/squid/(프록시 설정) /etc/skel(사용자 생성시 초기화 파일) /etc/rc.d(부팅레벨별 부팅 스크립트파일 디렉토리)등등 많은 설정 정보들이 존재하는 디렉토리이다.

 

/home :사용자의 홈 디렉토리이며,useradd로 사용자 추가시 사용자의 id와 동일한 디렉토리가 생성

 

/lib :커널모듈파일과 라이브러리파일 디렉토리. 커널이 필요로하는 프로그램(C,C++)등과 같은 각종 라이브러리 파일들이 존재하는 디렉토리

 

/media :탈부착이 가능한 장치들의 마운트포인트로 사용된느 디렉토리

 

/mnt : media 디렉토리와 비슷한 용도로 일시적인 마운트포인트로 사용하는 디렉토리

 

/proc :가상파일시스템이라 불리며 현재 메모리에 존재하는 모든 작업들이 파일형태로 존재하는 곳.실제 운용상태를 정확하게 파악할수 있는 중요한 정보를 제공하며,실행중인 커널의 옵션 값을 즉시 변경할 수 있는 파라미터파일이 존재해 시스템 운용에 있어 중요한 디렉토리

 

/sbin :ifconfig,halt등 시스템 관리자용 명령어를 저장하는 디렉토리

 

/usr :일반 사용자들이 주로 사용하는 디렉토리로 일반사용자 명령어는 /usr/bin 에 저장

 

/var :시스템 운용중 생성되었다가 삭제되는 데이터를 일시적으로 저장하기 위한 디렉토리로 이 디렉토리는 용량이 가변적

 

/lost+found :모든 파일 시스템마다 존재할 수 있는 디렉토리로,fsck, e2fsck등과 같은 파일시스템 체크 및 복구 유틸리티 싱행후 주로 생성되는 것으로 연결이 끊어진 inode들이 숫자파일 형태로 존재하는 곳

 

/swap :물리적 메모리가 부족할 때 디스크를 메모리처럼 쓰는 역할을 하는 디렉토리

 

 

 

각 디렉토리에 대한내용은 외워두면 편하긴 하지만, 리눅스를 사용하다보면 어느정도 익숙해질 것입니다.