}

블로그 소개


*여러분들의 따듯한 댓글은 5%, 팔로우는 10% 블로그 포스팅 속도와 퀄리티를 높여줍니다.*

프로필

팔로우 해주시면 포스트할 때 큰 힘이 됩니다!!! 사실 저도 이 팔로우가 무슨 기능이 있는지는 모르겠습니다만, 팔로우 수가 늘면 '날 응원해주는 사람들이 있구나' 생각이 들어서 큰 힘이 됩니다.

팔로어

다른 페이지로 이동


리눅스 독학 페이지 운영체제 독학 페이지 네트워크 독학 페이지 하드웨어 독학 페이지 프로그래밍 독학 페이지 보안 페이지

오스 페이지 다이어트 정보 페이지 게임 정보 페이지 인생 꿀팁


****사진을 클릭하시면 페이지로 이동할 수 있습니다!****

<===***===↓↓↓You can use translate on the chrome↓↓↓===***===>

2021년 8월 4일 수요일

리눅스 런레벨이란 자세히!

 안녕하세요 마무입니다! 오늘은 '리눅스의 런레벨', '리눅스 run level'에 대해서 자세히 알아보도록 하겠습니다.

사실은 CentOS 6.9이하까지 쓰던 'sysV init'가 사용하는 모든 디렉토리와 파일과 함께 런레벨에 대한 내용도 같이 포스트를 했었는데요... 그렇게 했더니 포스트 너무 내용이 많아서 구글 URL 등록에서 빠꾸를 먹었습니다 ㅠㅠ

그래서 결국 런레벨은 이 포스트를 통해 알려드리고, 본격적인 런레벨 변경과 sysV init의 파일 사용법들은 https://mamu2830.blogspot.com/2021/07/Linux-sysV-init-runlevel.html 에서 다루도록하겠습니다!


-----목차-----

1. 리눅스 런레벨이란?

2. 리눅스 런레벨 정리

----------------

더 자세한 정보는 

리눅스 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_13.html

운영체제 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_14.html

에서 찾아보세요!




1. 리눅스 런레벨이란?


사실 제가 아직 포스트에서 설명을 안했기에 "런레벨(Run level)이 뭐지?" 하는 분들이 꽤 있을거라 생각합니다. "Run level(작동 수준)"이란 말 그대로 리눅스 시스템을 어떤 수준으로  작동(부팅)시킬거냐를 말합니다.

여기서의 '(Level)수준'이란, 기존 저희가 사용하던 리눅스의 "인터넷, 멀티유저, GUI(5)"환경부터 시작해서 "인터넷도 안되고, 오직 root만 컴퓨터를 사용하는 환경(1)"까지의 다양한 수준을 말합니다.

왜 굳이 시스템의 작동 수준(run level)을 구분했을까요?

일단 구분한 이유를 알려면, 리눅스의 역사와 효율적 측면을 생각해야합니다.

제일 먼저, 요즘 사람들은 '컴퓨터'라고 하면 개인 컴퓨터(PC)를 떠올리지만, 사실 개인 PC가 상용화 된지는 그리 오래되지 않았습니다.(물론 그것도 이제 약 50년이 다 돼가지만...)

컴퓨터가 막 등장한 시대에서의 '컴퓨터'란 '계산하다'라는 뜻의 'compute'처럼, 말 그대로 계산을 빠르게 하기 위해 당시 과학 지식의 모든 정수를 하나로 합쳐 만들어낸 엄청난 기계로, 당연히~~ 엄청 비싸고, 귀하고, 덩치도 컸습니다.

그리고 이러한 귀한 컴퓨터를 한명만 사용할 수 있는건 너무나 아까웠던 것이죠.

그래서 다수가 컴퓨터를 사용할 수 있는 기술을 연구 및 도입했고, 그래서 생겨난 것이 바로 멀티 유저를 지원하는 시분할 운영체제 바로 '유닉스'입니다.(자세한 역사가 궁금하시면, 리눅스독학 -> 유닉스/리눅스 역사 총 정리포스트를 보시길!)

이후 네트워크와 네트워크가 연결된 '인터넷'이라는 것이 등장하자, 다른 컴퓨터들이 네트워크를 이용해서 다른 컴퓨터(서버)에 접속할 수 있게 됐고, 그렇기에 이 때부터 운영체제가 네트워크 기능도 지원해야했죠.

또한 당시엔 반도체 기술이 없거나, 발전되지 않아서, 컴퓨터가 사용하는 메모리 크기도 매우매우 적었습니다. 그래서 엄청나게 적은 메모리를 사용하는 당시엔, 지금은 별로 큰 용량이 아닌 듯한 몇 MB도 후덜덜한 크기의 메모리양이였단 말이죠.(당시 부족한 메모리를 보완하기 위해 나온 위대한 기술이 바로 'swap'입니다)

그래서 당연히~~~ 과거 컴퓨터에는 GUI 기술이 있었냐는 둘째치고, GUI를 구현할 메모리가 안됐기에모두 CLI환경이였다는 겁니다.

뭐... 과거 컴퓨터가 귀했고, 그래서 다수가 사용했고, 자원이 부족해 CLI였다... 이정도는 알겠는데 그래서 뭐? 라는 의문이 드시죠?

음.. 그래서 제가 말하고자 하는 결론은, 우리가 아는 컴퓨터의 환경은 원래부터 GUI가 아닌 위에서 말해온 역사의 순서대로 

(1인유저, CLI, run level 1) -> (멀티 유저, CLI, run level 2) -> (멀티 유저, CLI, 네트워크, run level 3) -> (멀티 유저, GUI, 네트워크, run level 5) 이런 순서로 변해왔다는 것이죠.

그리고 각 용도에 따라 위에서 말한 환경을 'run level'이란 것으로 나눠서, 취향이나 목적에 따라 컴퓨터 환경을 사용할 수 있게 한겁니다.

??? 용도에 따라?? 그냥 마지막 런레벨 5(멀티 유저, GUI, 네트워크)가 제일 좋은거 아닌가요? 굳이 다른 run level을 쓸 이유가 있나요??
 
음.. 사실 그렇긴 합니다만 당연히 좋다(고품질)는 건 당연히 그만큼 '자원'을 더 많이 필요로 한다는 것을 의미하기에 그렇습니다.

무슨 말이냐, 요즘은 컴퓨터 기술이 너~~무나 발전해서 GUI 환경으로 서버를 돌려도 큰 문제는 안됩니다만과거엔 부족한 메모리 때문에 CLI 환경으로 돌렸다는 것이죠. 

그리고 지금도 GUI로 돌려서 더 소모할 메모리 공간을 아껴서 차라리 그 만큼 클라이언트들이 서버에 더 접속할 수 있는 메모리를 확보하자 이런 취지로 run level 3을 쓴다는 것이죠.

그래서 서버에서 CLI 환경(run level 3)을 많이 쓴다고 한 것입니다.(그리고 CLI 환경에 익숙해지면, GUI보다 훨씬 작업이 빠르다는 것도 있습니다)

그래서 사실 현재는 run level 3을 쓰냐, 5를 쓰냐는 취향에 가깝습니다.(하지만..리눅스를 제대로 배운 사람들이라면 쓰지 말라해도 run level 3를 쓰지 않을까... 사실 둘 다 쓰는게 최고...)

그럼 run level 1, 2는 뭔가요? 그리고 중간에 비어있는 run level 4는 뭔가요??

일단 위에서 말했듯이, 'run level 1'은 (1인 유저, CLI)환경을 의미합니다.

리눅스에서 오직 단 한명만 로그인을 할 수 있다면... 그 유저는 당연히 관리자인 'root'가 아니겠습니까?

단 한명만 로그인을 할 상황이라.. 무슨 상황에 사용할까요?

당연히 'GRUB2 포스트'에서 다뤘었던응급복구나, 시스템 점검을 할 때의 상황이죠!

응급 복구를 하거나, 시스템 점검을 하려는데 다른 사람들이 접속해 있거나 접속하면 당연히 안되니까 말이죠!

실제로 저의 'GRUB2 포스트'를 보고오셨던 분들이라면, 응급복구를 할 때 '단일 사용자 모드'를 통해서 했던 것을 기억하실텐데요, 바로 그 '단일 사용자 모드'가 run level 1이였답니다~!

그럼 'run level 2'는 언제 쓸까요? 말 그대로 멀티 유저지만 네트워크를 사용하지 않는 경우니, 말 그대로 네트워크를 통한 접속은 제한하고 싶을 때만 사용할겁니다. 물론.. 사실 요즘은 사용할 일이 있을까 싶긴 합니다..({스포}그래서 systemd에선 제거가 된 것이 아닐까...)

자 그럼 'run level 4'란 무엇일까요!? 그냥 사실 레드햇 init 시스템에서는 'run level 3'과 똑같습니다. 단지, 사용자들이 추가로 따로 서비스를 등록하거나, 다른 시스템 설정 등, 취향에 따라 사용해놓으라고 만들어놓은 레벨입니다.

예를 들자면, 기존에 'run level 3'을 사용하는데, ssh서버 말고 telnet을 쓰는 서버만 따로 두고 싶은데, ssh서비스랑 telnet 서비스 둘다 키는건 좀 아니란 말이죠..(물론 요즘은 telnet을 공부용 외엔 안씁니다.)

그럴 때 이제 'run level 4'에 ssh서비스는 제외하고, telnet 관련 서비스만 등록해놓는 겁니다. 그래서 telnet만 쓰고 싶을 때 "init 4" 이렇게 명령어만 치면 sshd는 꺼져있는, telnet 서비스용 서버가 되는거죠!

물론... 서버는 원래 자주 껏다 키지 않으며위 예시대로 할바엔 걍 서비스 등록해제후, 등록하는게 낫지만요.. 어쨌든~~ 극단적 예시를 들었지만이런식으로 다른 서비스나, 시스템 초기화를 위해 개인적으로 사용하라고 만들어놓은게 이 run level 4라는 것이죠~

어? 그럼 0과 6이란 것도 있던데, 뭔가요? 

'run level 0'은 시스템 종료를 위해 예약해놓은 런레벨이며, 'run level 6'은 시스템 재부팅을 위해 예약해놓은 런레벨입니다.

이따가 다루겠지만, run level 0에 실행하라는 서비스가 모여있는 '/etc/rc.d/rc0'을 보시면기존 시스템 서비스들을 모두 종료한 후에다른 프로세스 모두 종료(killall)하고시스템을 종료하라는 명령어(halt)가 적혀있는 것을 볼 수 있습니다.

물론 'run level S(s)'라는 것이 존재한다고 'man page'에 써져있지만, run level 1을 쓰면 이후 자동으로 run level S로 바뀐다고도 써져있기에 그냥 run level 1 == run level S(s)라고 보셔도 될 것 같습니다.

참고로, 이 런레벨들은 'init [0~6]' 이렇게 명령어를 치면, 그 런레벨에 맞는 모드로 변경을 합니다.

같은 맥락으로 종료를 위한 '0'같은 경우,  터미널에 'init 0'라 명령어를 치면 리눅스가 종료가 되죠!




2. 리눅스 런레벨 정리



run level 0 : 시스템 종료
run level 1 : 단일 사용자 모드
run level 2 : 네트워크 x, 멀티 유저, CLI 모드
run level 3 : 멀티 유저, CLI 모드
run level 4 : 멀티 유저, CLI 모드지만, 유저들이 따로 사용하라고 만들어놓은 모드
run level 5 : 멀티 유저, GUI 모드
run level 6 : 재부팅


이 포스트를 통해서 런레벨에 대해서 알아봤으니, 본격적으로 init 프로세스를 사용하는 시스템에서 어떻게 이 런레벨이 쓰이는지에 대한 포스트는
여기에 자세히 적어놨습니다!!





오늘도 포스트를 읽으시느라 고생하셨습니다. 

도움이 되셨다면 따뜻한 댓글을 달아주시거나 또는 팔로우를 해주시면, 저에게 가장 큰 힘이 
돼 포스트 퀄리티 향상에 큰 도움이 됩니다!!

그럼 다음에 더 좋은 포스트로 찾아뵙겠습니다!

댓글 2개:

#1 여러분들이 소중한 시간을 투자해 달아주시는 따뜻한 댓글들은 저에게 정말 큰 힘이 됩니다!

#2 저의 각 포스트들은 엄청난 노력과 시간 투자를 통해 만들어진 포스트들로, 무단 복제나 모방하는 것을 금지합니다.

#3 저의 포스트에도 틀린 정보가 있을 수도 있습니다. 그럴 경우 친절한 말투로 근거와 함께 댓글로 달아주시면 정말 감사하겠습니다!

* 바쁜 개인 일정으로 댓글 답변이 많이 느립니다 *