강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

[연재잡담-04] NAZU의 Codeless Bash Script (고급편3:원리) (GPL)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문



얼라..댓글이 3개나 달렸네요.. -_-;;

김종성님, 김동수님, 그리고....
김미자님(헉! 뇨댜닷~! -_-a 하지만 아쉽게 백조가 아니신듯~)
(NAZU는 아줌마랑 백조만 좋아합니다. 서로 대하기 편하니깐 -_-a)
(특히 대부분의 아줌마들은 NAZU를 아주 귀여워해주시더라구요 ^^;;)
제글에 덧글달아주신 최초의 여성분(물론, 잡담만...)인거 같은데..
앞으로 친하게 지내도록 노력해봅시다. ㅋㄷ

자~ 농담은 이쯤에서 마치고, 03화를 잠시 되집어 보도록 하겠습니다.

====================================================================
1. 누구나 가끔은 뒤를 돌아볼줄 알야아한다? (200% 잡담)
====================================================================

자, 오늘의 잡담을 시작하기전에 잠시 눈을 감아보세요.
(하긴, 눈감으면 잡담을 어떻게 보겠습니까..;; 말도 안되~~~)
(동영상 잡담을 하는 것도 아니고, 음향섞인 잡담을 하는 것도 아닌데)
(물론, 절대 최면술을 거는 것도 아니니 안심하세요.)
원래 눈을 감아야하는데, 여건상 이미지네이션하도록 하겠습니다.
(전문용어에 약하신 분들을 위해 : "이미지네이션 == 상상" 일겁니다.)

그럼 이미지네이션전에, 웃음은 좀 참아주시고..^^;;
광고를 페러디해서 지금의 제 입장을 말씀드리자면,

NAZU는 개그맨이 아닙니다. NAZU는 잡담꾼입니다. (X이스침대)
잡담은 즐거움을 선사하는데 써야합니다. (X크랜드)

"잡담을 접하게 되어 즐거우십니까?"
Yes : 벌써 신도(?!)가 되셨군요 -_-a
No  : Get Out! (일명, 들(어)내라~!)

자, 그럼 우리함께 떠올려 봅니다.
자신의 마음 속 깊이 자리잡아있는 추억이라는 이름을 가진 기억들을..
깊이 있기에 떠올릴 수 있어 그것을 추억이라 부르는가 봅니다.

좋은 친구들과의 만남, 행복했던 날들, 고마웠던 분들,
힘들었던 날들, 헤어짐, 그리고 가슴시리도록 아픈 기억들..

자신에게 있어서 가장 먼저 떠오르는 것은 어떤 것인가요?

그것이 만약, 행복했던 추억이라면,
여러분은 이미 충분히 행복하다라는 뜻이랍니다.

그것이 만약, 불행했던 추억이라면,
여러분은 앞으로 더 행복해 질수 있는 기회가 있다는 뜻이랍니다.

그분이 만약, 좋은 인연을 가진 사람이라면,
지금 그 사랑을 받고 있는 사람이 행복하다라는 뜻이랍니다.

그분이 만약, 악연을 가진 사람이라면,
여러분은 이미 그 사람을 용서할 준비가 되었다라는 뜻이랍니다.

그분이 만약, 사랑하는 사람이라면,
그분은 여러분께 사랑받을 자격을 갖춘 사람입니다.

그분이 만약, 헤어진 사람이라면,
여러분은 이미 새로운 사랑을 시작할 준비가 되었다라는 뜻이랍니다.

그사람이 만약 NAZU라면,
다른말 필요없습니다. 시집갈께요 ㅋㄷ

(잘 나가다가 항상 일부러 삑사리내는 NAZU랍니다.)
(아~ 참고로 NAZU는 어릴때 꿈이 데릴사위였기에 시집가는 겁니다.)
(절대로 성정체성을 위반(?!)한 것은 아니랍니다.)

이글을 쓰면서, 제게 처음으로 떠오른 추억은...... S.J.K.

P.S. 그러고보니 03화에 이런말이 있었지요.
"5) 혹시 다음에 전화온다면 이글을 에디팅할지도..;;"
말이 씨가 된다더니.. 예비군, 결국 5번 밀렸습니다.
저녁때 문자왔습니다. 이번엔 4월 23일이랍니다.
그것도 저녁 16시부터 24시까지라는데..
이따가 또 한번 더밀려서 아마 5월달쯤 할것같다능.. ㅠ_ㅠ
수원과 서울을 방황하는 저로써는 -_-;; 난감합니다.
요즘 밤길 무섭다던데..;; 여러분도 조심하세요..

====================================================================
2. 03화에서 타이핑했던 스크립트와의 미팅
====================================================================

기억 안나시는 분들은,
1) 잠시 보고 오시거나
2) 창을 두개쯤 띄우거나
3) 메모장에 Ctrl + C -> Ctrl + V 하시거나 (그나마 고급기술이라죠^^?)
4) 실습용 에디터를 띄워서 내용을 확인한다.

NAZU가 바라는 것은 무엇? 4번! 나와라 마스터~ (금일은 패러딘가보군..)

아, 맞다 그전에.. NAZU는 보통 vi에디터를 씁니다.
vi에디터 공부하시는 분들, 시험에 안나오면 괜히 공부하지 마세요.
필요해서 쓰다보면 하나 둘씩 늡니다.

-- NAZU가 주로 쓰는 것들 (대소문자 주의) --
i   <== 삽입
esc <== 취소(edit->command)
:wq <== 저장후 종료
-------------------------------------------

위에것을 90% 쓰고 가끔 생각날때, 몇개 더 씁니다.
저것만으로도 지금까지 불편없이 쓰고 있습니다.
물론 저것만을 쓰지는 않지만..^^
vi에디터는 툴일뿐, 외우면 언젠가는 까먹습니다.
그래서 몸으로 익히라는 말을 더 자주하는 겁니다.

그럼, 이제 본론으로...(저번잡담에 대한 도움입니다.)

03화에서 보신 스크립트의 A형과 B형과 C형을 잘보신분들은
모두 똑같은 행위를 하기위해서 만든것이라는 추측이 가실 듯 합니다.
실제로 저 3가지 모듈들은 하나의 파일안에 함수로 되어있습니다.

대략적인 특성을 3가지씩만 나열한다면 다음과 같습니다.
물론, 나열한 것보다 내부코드에따라 더 많은 버그들이 존재합니다.
현상, 원인, 해결책, 버그 등은 여러분이 정리해 보시기 바랍니다.

1) A형 : 단순한 경우 사용
- 단순한 단어 나열이라면 최상의 퍼포먼스를 가질 가능성이 있음
- list로 입력될 리스트를 선수행해야만 수행됨
- list로 입력받는 단위 지정문제 (예외발생 처리가 까다로워짐)

2) B형 : 구조체적인 발상이 필요할 경우 사용
- INPUT이 꼭 파일이어야함
- readline 버그 존재 및 입력 Miss 존재
- 원격 실행후 return시 INPUT을 잃어버릴수 있음 (시스템 의존적임)
 
3) C형 : readline이 불가능한 경우 사용
- 가장 퍼포먼스가 떨어지게 됨
  (head & tail : 머리와 꼬리 증후군이라고도 하죠..)
- 산술연산이 들어가야하므로 오버플로우 발생 가능(시스템 의존적임)
- 다른방법이 없을 경우만 사용
  (그러고보니, 누군가가 팁으로 올려놨던 것 같습니다.)

그럼 D형은? 모듈화의 실습! 이라고 보시면 됩니다.
a. A,B,C형을 함수화시켜 공용 Util로 만들어보고,
b. 실행할 스크립트에서 분기 옵션을 줌으로써
c. 필요에 따라 함수를 호출함

물론, 제가 쓰는 D형은 모듈화 실습과는 조금 다릅니다.
이는 아직 익숙치 못하신분들을 위해 예를 든것으로
간단하게 A,B,C형의 모듈화 작업 하신 후,
실행할 스크립트를 생성해서 실습 하시고,
Linux에서 마치 명령어처럼 쓰이는 스크립트들을 찾아서
곰곰히 생각하면서 분석해 보시면 성과가 있으실 겁니다.

물론, 잡담은 잡담일뿐이므로 안하셔도 됩니다.
단지, 공부해서 남줍니까^^?

어느정도 고급 개발자들만을 위해 한마디 남깁니다.
Control Server VT에서 Execute Server 수백대를 remote하여 동시에
background forking할때 일부러 defunct를 띄워야할 경우도 있습니다.
물론 없앨수도 있지만, 없애면~~~ (아시리라 생각됩니다.)
이 경우 PPID를 검사하여 실제 workscript를 Kill해야 합니다.

저말이 무엇인지 이해가 안가시는 분들은 서운해하지 마시기바랍니다.
(물론, NAZU가 아주 짧게, 중요단어만 언급했기에 알기 어려우실테고)
아직, Bash를 다룬지 얼마 안되셨고, 실제로 환경 구축이 어려우므로
조금만 더 노력하시다가 때가되면 언젠가는 이해할수 있을 것입니다.

물론, 조금만 깊게 파고들면 당장에 아실수도 있습니다.
그것은 여러분들께 맡기겠습니다.

====================================================================
3. bash의 원리
====================================================================
주) 가끔 root가 다른 shell을 수행하게 되어있을 가능성도 있음

원리를 공부하기위해 필요한 명령어는 단 5개입니다.
mkdir, cp, ldd, chroot, su

아마도 실행안해보신 명령어는 lddchroot 두가지일 듯 싶습니다.
두가지 명령어에 대해서 man 페이지를 참조해 보시면,
머릿속에 무엇인가가 떠오를지도 모르겠습니다만.. ^^?
가장 hint가 많이 되는 것이 chroot이지요^^?

bash의 기본원리를 직접습득하기 위해서 가장 좋은 방법
다음과 같이 직접 수행해 보는 것입니다.

1) root 권한을 취득
(아마 chroot를 할때 root권한이 필요했던 것으로 기억합니다.)
2) mkdir로 테스트 디렉토리 생성
3) /bin/bash 파일을 copy
4) ldd를 통해서 필요한 라이브러리를 찾아서 copy
5) 테스트 디렉토리의 chroot 실행

chroot가 정상적으로 이루어진 후, 이것 저것 해보시기 바랍니다.
내장명령을 제외하고는 아무것도 안될 것이지만...
수행을 위해서 이것 저것 하나씩 copy해서 넣어봅시다.
어쩌면 이것이 LFS(나중에 연재함)의 시작일지도 모릅니다.

다음의 파일을 기억하십니까? /etc/password
root의 정보를 보면 맨 마지막에 어떻게 되어있지요?
대강 어떻게 돌아가는지 이해가 가시는지요^^?

자, 그렇다면 /etc/inittab을 잘 보시면
/etc/password와 연관이 있을만한 무엇인가 보이지 않으시나요?

탐색전은 여러분께 맡기겠습니다. ^^

세부사항은 다음 연재에서 쭉~ 계속되므로,
지금은 원리편에만 즐겨주시면 됩니다.

====================================================================
4. 마치며
====================================================================

이번회는 단순히 보기에는 다른때보다는 내용은 훨씬 적어보입니다.
하지만, 그 속에 담겨있는 의미는 한없이 커져버린 것 같습니다.
리눅스를 아주 크게 나누면, 2개 파트로 나눠지는데 (커널 vs 비커널)
그중의 거대한 하나의 물결이 시작되려 합니다.

알만한 분들은 아십니다. 이쯤에서 strace 날려주시는 분도 계실것이고.
하지만 모르시는 분은 모르십니다.
중반부 연재의 기초이기에 알아두시기 바랍니다.
가끔 알만한 분인데 모르실 경우, 당황스럽기도 합니다 ^^;;
스쳐지나가 버렸기에 모르실수 있습니다. 이제부터라도 알면 됩니다.

현재까지 Bash를 제외하면, 아무것도 한것이 없는 듯 싶습니다만..^^?
(하긴, Bash 연재가 3편이었지? UML은 나중에 긴히 쓰이게 될겁니다.)
(Bash 파트는 3파트 모두 연결해서 보시기 바랍니다. 중요합니다.)
딱 한가지 했네요..^^ 리눅스의 원리에 접근하는 방법이라고 해야하나..

이것이 NAZU가 기본 명령어 공부를 마치고 수행했던 최초의
Linux 즐기기의 시발점이었습니다.

대략 이쯤 왔다면.. NAZU의 기록상이라면, 여러분께서는
[저랑 딱 1시간 공부하셨습니다.]
바로 쪼~기~ 위에있는 원리 1시간이 다입니다.

설치, 명령어, 파일위치, 서비스등을 2주간 시간날때마다 공부했었고,
(이런 것들은 필요이상으로 잡담화시키지 않아도 되기에..)
하루에 1~2시간정도? 했던것 같습니다. 그때 한창 아르바이트 중이라..
시스템 복구를 하다가 chroot를 보고 원리를 파고들기 시작했습니다.
(호기심을 가지면 뭔가 보입니다.)

저는 아무런 자료없이 1시간동안 혼자 낑낑댔던것 같네요..^^;;
(최소한 gcc만 알았어도, 조금 더 진도가 빨랐을지도..)

====================================================================
5. 차회 예고
====================================================================

잡담이 강좌가 되면.. 더이상 잡담이 아니게될지도..
하지만 초지일관!! <== NAZU는 잡담으로 그냥 쓸랍니다.

[연재잡담-05] NAZU의 리눅스안의 도서관들 (GPL)

Not a Dictionary를 기억하시나요?
이번 도서관은 그 도서관이 아닙니다. ^^

알만한 사람은 다 아는, 내용은 뻔한것이라 보이지만,
언제 NAZU가 빈손으로 오는거 보셨습니까?
NAZU는 항상 뭔가를 꼭 들고 옵니다.

그럼 다음 이시간까지 안녕히 ^^)/


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  93 명