일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 삼성
- Bidirectional Associative Memory
- Neural Network
- 갤럭시탭S8울트라
- 삼성전자 소프트웨어멤버십 SSM
- 인공지능
- SSM
- 물걸레자동세척로봇청소기
- 구글 앱 엔진
- 신경회로망
- 패턴 인식
- 나르왈프레오
- 패턴인식
- hopfield network
- 멤버십
- 물걸레로봇청소기추천
- NarwalFreo
- 파이썬
- 신경망
- 하이퍼바이저
- Google App Engine
- 빅데이터
- 고려대학교
- Python
- 가상화
- Friendship
- BAM
- 삼성소프트웨어멤버십
- 동아리
- 증강현실
- Today
- Total
정보공간_1
[6기 강북 윤덕진]리눅스 쉘 스크립트 프로그래밍 #1 본문
안녕하십니까! 강북 삼성소프웨어 멤버십 소속 23-1기 윤덕진입니다.
지난 시간에는 Cross Compile과 Bootloader에 대해서 포스팅하였습니다.
결론부터 말씀드리자면 BeagleBoneBlack에 Tizen을 Porting 하는 것은 성공하지 못했습니다.
Tizen Poring guide에서 제공하는 kernel을 이식하는 것은 성공하였으나, 마지막 과정인 Platform 이미지를 올리는 것은 성공하지 못했습니다.
아마도 저의 지식이 부족한 까닭이라고 생각됩니다. 자세한 내용을 포스팅하고 싶지만, 이 블로그에 올릴만큼의 내용이 되지 못해서 이번 포스팅부터는 다른 주제로 포스팅을 하려고 합니다.
Tizen OS Porting이라는 과제를 하면서 느낀 것이지만, 아직 리눅스에 많이 익숙하지 못해서 고생한 부분이 많다고 느꼈습니다. 그래서 이번 포스팅 부터는 리눅스 쉘 스크립트에 대해서 포스팅하려고 합니다.
오늘은 리눅스와 쉘이 무엇인지에 대해서 포스팅하겠습니다.
1. 리눅스의 탄생
리눅스는 핀란드 헬싱키 대학의 학생이었던 리누스 토발즈의 취미생활로 탄생되었다고 합니다. 취미생활로 리눅스를 만들다니.... 저에겐 상상도 할 수 없는 일이죠..
리누스 토발즈는 유닉스 클론 OS인 미닉스를 더 유용하게 만들기 위해 개발을 시작하였다고 합니다. 리눅스는 현재도 오픈소스로 개발하고 배포하기 때문에 전 세계의 수많은 개발자들이 참여하고 있고, 오늘날에도 여러 종류의 배포판들이 출시되고 있습니다.
1) 리눅스의 파일과 파일 시스템
리눅스의 파일시스템은 우리가 흔히 사용하는 Windows 하고는 차이가 있습니다. Windows는 파티션 별로 C,D,E 와 같은 방식으로 구분을 하지만, 리눅스는 디렉터리를 기준으로 파티션을 구성합니다.
리눅스에서 최상위 디렉터리는 / 로 표시하고 하위에 /root, /usr 등등으로 구분이 됩니다. 즉 각 디렉터리들에 하드 디스크를 매칭 시키기만 하면 해당 디렉터리가 파티션으로 구분이 되는 것입니다. 이렇게 매칭 시키는 개념을 mount 라고 합니다. 제가 예를 들어 /Mem 이라는 디렉터리를 가지고 있다고 하고, 이 디렉터리에 PC가 하드웨어상 가지고 있는 500GB의 하드 디스크를 Mount 시키게 되면 /Mem 이라는 디렉터리가 500GB의 파티션이 되는 것입니다.
기본적으로 하드 디스크가 연결되면 /dev 라는 디렉터리에 Mount가 되어 있습니다. 이 디렉터리에는 여러가지 장치들이 디 바이스 파일로 매칭되어 있습니다. 그 내용은 아래의 표와 같습니다.
디바이스 |
의미 |
/dev/tty |
프로그램이 실행되고 있는 터미널 윈도우 또는 콘솔 |
/dev/dsp |
사운드 카드에 AU 사운드 파일을 실행하는 인터페이스 |
/dev/fd0 |
첫 번째 플로피 드라이버 |
/dev/hda1 |
IDE 하드 디스크의 첫 번재 파티션 |
/dev/sda1 |
SCSI, S-ATA 하드 디스크의 첫 번째 파티션 |
만약 mount의 명령으로 /dev/hda1 파티션을 /Mem 디렉터리에 마운트하려면 다음과 같은 명령어가 필요합니다.
# mount -t ext3 /dev/hda1 /Mem
* # 표시의 의미는 수퍼 유저(root)를 의미 합니다.
-t ->파일시스템의 타입을 의미 합니다. 리눅스에서는 기본적으로 ext3 타입을 사용합니다.
자세한 내용은 mount --help 명령을 실행하면 쉽게 알 수 있습니다.
리눅스에서 자주 사용되는 파일 확장자는 다음과 같습니다.
확장자 |
파일 |
.sh |
본 쉘, 배시 쉘, 쉘 스크립트 파일 |
.txt |
일반 텍스트 파일 |
.log |
로그 파일 |
.html |
html 정적 웹페이지 소스파일 |
.tgz, .tar.gz, bz2 |
압축 파일 |
.php, .php3, php4, php5 |
php 소스파일 |
.h, .c, .cc, .cpp |
c/c++ 소스파일 |
.py |
python 소스파일 |
2. 쉘
쉘이란, 키보드로부터 명령을 입력받아 OS가 그 명령을 수행하도록 하는 프로그램입니다. 쉘은 초창기 유닉스에서만 사용할 수 있는 User Interface 였지만 요즘은 CLI(Command Line Interface) 뿐만 아니라 GUI(Graphical USer Interface)도 가지고 있습니다.
리눅스 시스템에서는 기본적으로 bash(Bourne Again Shell)쉘을 사용하는데, bash 쉘은 sh를 쉘 프로그래밍하기 위해 업그레이드 한 쉘입니다. 이 밖에도 ksh, tcsh, zsh와 같은 쉘이 있습니다.
리눅스에서 사용할 수 있는 쉘의 종류를 확인하려면 /etc/shells 파일을 출력하면 됩니다.
현재 사용중인 쉘을 알아보려면 echo $SHELL 명령을 실행한다.
1) 쉘 스크립트의 구성요소
- if ~ else 와 for,while 등의 쉘 루프 명령어
- grep, awk, cut 등의 텍스트 처리 유틸리티
- w, who, free 등의 바이너리 명령어
2) 쉘 스크립트를 사용하는 이유
동일한 작업을 반복하여 수행하고자 할 때 자동화에 사용할 수 있으며, 자신만의 툴, 유틸리티를 만들 수 있습니다. 리눅스 시스템 모니터링, 보안 정책에 따른 유저 관리 등등 다양하게 사용할 수 있습니다. 하지만 세밀한 프로그래밍(속도, 자료구조 등) 이 필요할 때는 gcc나 python 언어를 사용하여야 합니다.
3. 리눅스 명령어의 기초
리눅스 명령어는 굉장히 많고 다양해서 잘 쓰지 않으면 외우기가 쉽지 않습니다. 저같은 경우는 책상에 명령어 표 같은걸 따로 붙이거나, 창의과제 같은 것을 할 때에는 바탕화면으로 두고 사용하기도 합니다.
이 블로그에서 모든 명령어를 언급할 수는 없을 것 같습니다. 또한 구글링 조금만 하시면 쉽게 찾을 수 있으실 겁니다.
포스팅 도중에 설명이 필요한 명령어는 따로 설명을 붙이도록 하겠습니다.
4. 리눅스의 부팅 과정과 로그인 쉘
리눅스 시스템을 부팅하면 가정 먼저 init 이라는 첫 번째 프로세스가 시작되고, init 프로세스와 연결된 수많은 프로세스들이 자신만의 PID를 가지고 생성되기 시작합니다.
init 프로세스가 시스템을 초기화하고 표준입력과 표준 출력, 표준 에러를 설정합니다.
리눅스에서의 init 프로세스는 /etc/rc.d/init.d 디렉터리에 런레벨별로 설정되 어있는 쉘 스크립트를 실행하는데 이 쉘 스크립트들은 chkconfig 명령을 사용하여 부팅 시 자동으로 실행할 것인지, 실행하지 않을 것인지 설정할 수 있따. 그리고 부팅 시 수행할 런레벨은 /etc/inittab 파일에 설정되어 있습니다.
부팅과정 설명이 어려울 수 있지만, 말그대로 리눅스의 부팅과정입니다. 간과하고 넘어갈 수 있지만, 알아두면 좋을 것 같다는 생각해 적어보았습니다.
오늘은 리눅스 와 쉘에 대한 개념과 간단한 구성요소를 알아보았습니다. 다음 포스팅에서는 리눅스의 부팅 과정 로그인 쉘에 대한 설명을 이어서 포스팅하도록 하겠습니다.
블로그의 전반적인 내용은 제이펍에서 출판한
'김태용의 리눅스 쉘 스크립트 프로그래밍 입문'
이라는 책에서 발췌하였습니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[6기 강남 윤재석] SOAP & REST (0) | 2014.10.15 |
---|---|
[6기 강북 홍진우] 64비트 멀티코어 OS#3 - 메모리 관리 기법 (0) | 2014.10.10 |
[6기 강북 이보희] 디지털 영상처리 - Filter 편 #2 (0) | 2014.10.10 |
[6기 수원 김병연] Node.js TDD & BDD (0) | 2014.10.09 |
[6기 부산 정희록] Pillow #1 (0) | 2014.10.08 |