본문 바로가기
Linux

사물인터넷 기반 융합기술 교육 - 리눅스프로그래밍 1일

by Luhie 2017. 7. 17.

운영체제(Operation System)

하드웨어와 소프트웨어 기능을 사용할 수 있게 하는 시스템 소프트웨어


저장되어 있다가 메모리상으로 올라와야 가동이 가능하다.


1972 J. Donovan 중앙처리장치, 주기억장치, 입출력장치, 보조기억장치 및 파일 자원의 통제를 담당하는 컴퓨터 시스템 내부의 프로그램 집합

컴퓨터 시스템 자원의 통제를 강조 


1974 s. Shaw 

인간과 기계 사이의 인터페이스로 컴퓨터 사용자의 프로그램 설계 및 작성, 오류 수정, 유지보수를 쉽게 해주고 시스템의 효율적인 처리를 위해 


한정된 자원의 할당을 통제하는 프로그램 집합

인간과 컴퓨터의 인터페이스를 강조


1983 J.Peterson



운영체제 설계의 목표? 

단위 시간당 처리하는 일의 양을 향상시키기 위해서 


DOS

MS-DOS, DR-DOS, K-DOS 



rt os 


유닉스


Bell 연구소에서 Ken Tompson이 PDP-7에서 어셈블러로 개발 (1969)

b언어 -> c언어


Sixth Edition

1976 다른 기관이 사용할 수 있도록 최초버전 배포 


HP버전?? 유닉스

솔라리스 회사?!



GNU Richard Stallman


POSIX(1988)

ANSI C(1989)

XPG(1989)

IEEE








유닉스 특징

멀티유저, 멀티태스킹, 계층적 디렉토리 구조, 높은 보안성 제공, 유연한 네트워크 통신, C언어로 작성 -> 이식성 제공


유닉스 스스템 구조

커널(Kernel)

하드웨어와 인터페이스 하는 운영체지의 핵심

파일관리를 담당하는 파일 시스템

셀(Shell)

사용자와 직접 대화, 명령어 해독기

유틸리티

유틸리ㅣ와 어플리케이션 프로그램



모노리틱 커널



마이크로 커널







리눅스 특징

> 유닉스와 완벽한 호환성 제공 

- POSIX 표준 준수

> 공개 운영 체제, 무료로 제공

> 많은 표준 유틸리티 제공

> 보안 취약/ 문제 발생시 책임 소재 불분명

> 입출력 장치의 추상화

- 입출력 장치를 특수한 파일로 취급

- 입출력 장치를 보통 파일과 같은 방법으로 접근

> 보호기능

- 프로세스와 파일은 소유자와 접근에 대한 보호기능 제공

> 계층적 구조의 파일 시스템

- 계층적 디렉토리 구조

리눅스 구조

> terminal -> Shell/ UtilityProgram -> kernel -> hardware

주변 유틸리티는 GNU 유틸리티로 구성 


리눅스 커널

사용자모드



커널모드

시스템 콜 인터페이스

IPC지원



셀(Shell)

사용자와 os를 연결시켜주는 프로그램


GNU(GNU's Not UNIX)

자유 소프트웨어 재단(Free Software Foundation)

GNU 도구 제공

누구나 개발하고 배포하고 개선할 수 있는 소프트웨어 개발 촉진

- emacs text editor, gcc Compiler 


리눅스 커널

단일커널

모든 핵심 함수와 장치 드라이버가 커널의 일부

다중 프로세서 운영체제

thread지원

하나의 프로그램 안에서 메모리의 데이터를 공유하고 있는 제어 스레드를 다중으로 생성




디렉토리구조

bin 시스템의 주요 명령들이 들어있다.

dev 시스템의 모든 장치 정보를 가지고 있다. 마운트도 

home 시스템 계정하고 관련 

etc  password 파일 시스템관련 파일들이 

sbin 시스템 명령어 


var 가변자료 저장되는 공간 로그가 주로 많이 쌓인다. 



중요 디렉토리 

/ 리눅스의 최상위 디렉토리 


/home 

사용자의 공간

/boot

커널 이미지/ 램디스크 이미지 위치

/root

root 사용자의 홈 디렉토리

/dev

특수 장치 파일들이 위치 / 없을경우 아예 부팅이 안된다.

/etc

파티션 정보, 쉘의 설정파일, 부트로더 정보파일, 패스워드 정보파일, 그룹정보 파일

/bin

 bash, Ls, mv, cp,mount, dmesg, grep 등

/sbin

시스템 운영상에 필수적으로 필요한 유틸리티

init, getty, reboto 

/lib

라이브러리 ldd명령어를 사용하여 실행 파일이 어떠한 라이브러리를 필요로 하는지 확인 

/proc

시스템 정보를 제공하는 가상파일 시스템을 포함



데몬

유닉스에서 항상 백그라운드로 실행되는 서버를 가리키는 독특한 용어

대부분 네트워크와 관련된 활동을 처리해준다

시스템이 부팅하면서 데몬 시작

/etc/inittab 이나 /etc/inetd.conf 파일에 상세화 됨


환경 설정 파일

home 디렉토리에 있다. Dot(.)으로 시작

.bashrc 

- bash shell 을 위한것

- 명령과 기타 프로그래밍 구조를 포함


PS1 = '\u$'


histsize=50 명령어 history 50개만 기억

명령을 찾기 위해 검색하는 모든 리렉토리

PATH = /usr/local/bin:/bin:

IGNOREEORF=1 사용자가 실수로 Ctrl-D를 눌러 로그인 세션을 빠져나가는 일이 없도록 한다

stty erase "^H"  백스페이스가 글자 지우기 수행


.bash_profile 로그인 할때만 실행


LISP 언어 -> 나사에서 쓰다가 일반에 공개된


.Xdefaults X윈도우 시스템을 사용하는 프로그램을 위한것


리눅스 유틸리티

사용자의 편의를 위한 시스템 프로그램

사용자의 프로그램 개발도구 이외에 사용자가 작성한 프로그램도 포함

유틸리티와 내장 명령어

내장 shell

유틸리티(외부명령어)

파일 시스템 역트리 구조로 구성


상용 애플리케이션

staroffice /Word perfect 2000



기본 명령어 ls, awk, tr

편집기  vi

압축 프로그램  : gzip, bzip2, compress tar묶음.gz압축


데이터베이스 : 오라클, IBM, 인포믹스, MySQL, 사이베이스, 인터베이스, sqlite 

- 인포믹스, MySQL 속도가 빠르다. 

프로그래밍 언어 

C/C++(gcc Compiler), JAVA, Fortran, Pascal, LISP, Scheme, Ada, Smalltalk 

스크립트 언어 : Perl, Python, Tcl/Tk

디버거: gdb

X Window 시스템

유닉스 시스템의 표준 GUI


쌈바를 통해서 윈도우 파일 시스템을 접근 가능


> 로그인 <

로그인 프롬프트 

Linux login :

Shell mode root prompt(3), 일반 prompt($)





디렉토리 관련 명령어

절대 경로 : root 로부터 디렉토리

상대 경로 : 형재의 워킹 디렉토리로 부터의 상대적인 위치

. : current directory를 가리키는 메타 심볼

.. : parent directory를 가리키는 메타 심볼


pwd(Print Working Directory) echo $PWD echo 'pwd'

- 현재 자신이 위치한 디렉토리의 절대 경로 표시

mkdir (Make Directory)

파일 내용보기 

cat [opt.] file1 [file2 file3 ..]

more [opt.] [file]

file의 내용을 스크린 사이즈에 맞게 표시 스페이스바를 누르면 다음 페이지로 이동 





touch 파일의 최종사용시간과 변경 시간을 변경 

head 앞부분을

 tail -f 실시간으로 갱신 뒷쪽을 쳐다본다 웹서버에서 활용 


심볼릭 링크

바로가기???

ln -s prog.1.1 prog

ls -l pro


prog -> prog.1.1 만약 실행 파일이라면 프로그램이 실행 됨. 


하드 링크

소프트 링크


Shell


echo $SHELL


more .bashrc


유용한 키

Ctrl-U 커서 위치를 행의 처음까지 삭제

Ctrl-C 실행 중지

Ctrl-Z 일시 정지

Ctrl-S 터미널 출력을 멈춘다

Ctrl-D Logout

Ctrl-Q 다시 출력한다.


키 설정 방법

stty intr ^E

stty -a 현재 터미널의 설정 내용 열람 가능


Tap 문자 입력 후 Tap 키 누르면 자동으로 완성

명령간 이동 위 화살표 최근에 사용한 명령 나타냄



출력 저장

리다이렉션


ls /usr/bin > ~/binaries

수행한 결과가 > 홈디렉토리/binaries 파일에 저장

표준 에러 리다이렉션

< 는 표준 에러를 리다이렉션을 하지 않음 

gcc invinitjig.c >& error-msg

gcc invinitjig.c &> error-msg (본셀, Bash)

gcc invinitjig.c 2> error-msg (에러 메세지만 출력)



echo $PATH 환경 변수!


백그라운드 실행

gcc invinitjig.c &


kill %1 현재 실행되고 있는 프로세스의 첫번째 킬


ps 프로세스 top 현재 수행되고 있는 프로세스 쫘악 점유율 순으로 

터미널을 가지고 있냐 없냐 ? 백그라운드는 터미널을 가지고 있다. 데몬은 없어 별도로 ....?


파일 소유권과 퍼미션

read write execute

-rwx r-x r-x


- 평범한 파일 소유자는 읽기 쓰기 실행 가능 그룹은 읽기 실행 가능 타인은 읽기 실행 가능


chmod -R 755 [filename]

chmod  r-w [filename]


chown ceany [filename]



vi 편집기 구조 

파일 호출 -> 버퍼(임시저장소)  파일 수정 -> 파일저장 

열리는게 아니라 버퍼에 띄운다

세가지 모드

삽입

명령

ex 모드 :,?,/


범위 지정

$  파일의 마지막 줄 번호

. 현재 커서가 있는 줄 번호

환경 설정 명령

:set nu  줄번호 표시 

:set nonu

:set list 눈에 보이지 않는 특수문자 표시



s로 끝나는 글자와 단어를 삭제

I always remember standing in the rains

-> 결과

I remember standing in the rain

/sss 앞쪽으로 문자열 탐색

?sss 뒤로 문자열 탐색


:w [name] 파일저장

ZZ 저장 후 종료


Control-L 화면을 다시 그린다

:!명령   서브 쉘에서 명령을 실행한 다음 vi 되돌아 간다

:sh vi를 잠시 빠져나가 쉘을 수행 vi로 돌아 올때 :exit



GCC

gcc -v /gcc --version 무슨 차이?

gcc -c 컴파일

소스파일(.c)과 같은 이름의 목적파일 (.o), a 바이너리 파일 생성됨


gcc -o 파일이름

원하는 실행파일 이름으로 실행파일 생성

옵션 지정을 안하면 기본값인 a.out로 실행파일 생성(주로 유닉스에서)

gcc -I (대문자 i) 

#include  문장에서 지정한 헤더 파일이 있는 디렉토리 지정

-L 라이브러리 위치 지정

-S 어셈블러만 생성

-g 디버깅 정보 출력 개발자용에 붙이고 배포용은 안붙이고

-l(소문자L) 링크할 라이브러리 지정

-E C프리프로세서만 처리


MAKE(75p 참고)

makefile이라는 특수한 형식에 저장되어 있는 일련의 의존 규칙(dependency rule)들에 근거하여 파일을 최신 버전으로 개정하는 유틸리티

프로그램 그룹중에 새롭게 커마일되어야 하는지를 자동적으로 판단하고 필요한(gcc, cc 등)을 이용하여 필요한 부분만을 재컴파일 시키기 위해 사용

미리 정의된 매크로나 환경변수를 보려면 -p

make -p | more // make를 하면서 more로 보여라??


확장자 규칙

적절한 연산을 수행시키기 위한 규칙

내부 매크로


$* 확장자가 없는 현재의 목표파일

$@ 현재의 목표파일

$< 


순환 make


GNU Debugger

GDB개요

- debugger 목적 

실행시 에러 발생 원인 규명하기 위해

- 기능

다른 프로그램 수행

지정된 위치에서 수행을 멈출 수 있다

프로그램이 정지했을 때 그 대의 상태를 확인할 수 있다.

GDB수행

gdb [프로그램]

GDB 명령

입력은 한 라인으로 받는다



gcc -g -o myfile myyfile.c


gdb myfile


로드밸런싱!!!!!!!!!!