본문 바로가기
스터디/system

[Chapter 1] 리눅스 시스템 프로그래밍 시작

by 깝태 2011. 8. 21.

(1) 유닉스(UNIX) 운영체제는 벨 연구소에서 제작되었으며 그 중 1970년대 PDF 컴퓨터들을 위해 설계된 유닉스는
다중 프로세서 서버들과 슈퍼컴퓨터들에 이르기까지 다양한 하드웨어 플랫폼을 위한 다중 사용자, 다중 태스킹 운영체제로 유명했다.

(2) 리눅스(LINUX) 운영체제는 리누스 토발즈가 유닉스 프로그래머들의 도움을 받아 제작했으며 유닉스류 커널의 한 부분이다.
유닉스에서 실행되는것은 실제로 리눅스에서도 거의 실행된다.

(3) 리눅스 프로그램
워게임에서 설명한적이 있지만, 리눅스 시스템에 로그인하고 쉘이 실행되고 우리는 쉘과 상호작용하면서 프로그램을 실행한다.

우리가 입력한(요청한) 명령어를 먼저 쉘(보통 bash)의 명령어인지 확인하고 그렇지 않을경우
특정 폴더안에 (명시되어있는)선언되어있는 폴더안에서 동일한 이름을 가진 파일을 명령어(or 프로그램) 인지 확인한다.
그 특정폴더를 우리는 PATH 환경변수라고 부른다. PATH 환경변수는 보통 시스템 관리자가 설정해두지만 일반 사용자가
직접 추가하거나 수정할 수 있다. 

env 로 사용자 환경을 먼저 확인할 수 있고 echo $PATH 로 PATH 환경변수를 확인할 수 있다.
환경변수를 선언할때는 export PATH="경로" or '명령어' 위 세가지 명령어를 이용해 관리할 수 있다. 

[gate@localhost iyounges.org]$ env
LESSOPEN=|/usr/bin/lesspipe.sh %s
USERNAME=
HISTSIZE=1000
HOSTNAME=localhost.localdomain
LOGNAME=gate
REMOTEHOST=192.168.246.1
MAIL=/var/spool/mail/gate
TERM=xterm
HOSTTYPE=i386
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/gate/bin
HOME=/home/gate
INPUTRC=/etc/inputrc
SHELL=/bin/bash
USER=gate
BASH_ENV=/home/gate/.bashrc
LANG=en_US
OSTYPE=Linux
SHLVL=1
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
_=/usr/bin/env
 
[gate@localhost iyounges.org]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/gate/bin

위 PATH 변수의 항목들을 구분할때는 : 를 기준으로 구별하며 왼쪽에서 오른쪽으로 읽어간다.
고로 A, B 폴더안에 똑같은 파일이 들어있는데 선언될때 B : A 로 선언이되면 B 에 있는 프로그램을 먼저 보고 실행한다는것이다.
그러면 환경변수를 직접 추가해보겠습니다.

[gate@localhost iyounges.org]$ export PATH="/tmp/iyounges.org:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/gate/bin"
[gate@localhost iyounges.org]$ env
LESSOPEN=|/usr/bin/lesspipe.sh %s
USERNAME=
HISTSIZE=1000
HOSTNAME=localhost.localdomain
LOGNAME=gate
REMOTEHOST=192.168.246.1
MAIL=/var/spool/mail/gate
TERM=xterm
HOSTTYPE=i386
PATH=/tmp/iyounges.org:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/gate/bin
HOME=/home/gate
INPUTRC=/etc/inputrc
SHELL=/bin/bash
USER=gate
BASH_ENV=/home/gate/.bashrc
LANG=en_US
OSTYPE=Linux
SHLVL=1
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
_=/usr/bin/env

/tmp/iyounges.org 가 추가된것을 확인할 수 있다.

(4) 추가! - 리눅스 시스템 디렉터리 구조
리눅스는 디렉터리를 하나의 파일로 인식한다.

[  /  ] : 최상위 디렉터리 (루트 디렉터리) 
   ┣ [ /bin   ] : 기본 사용자 명령어
   ┣ [ /boot ] : 부팅 파일
   ┣ [      /dev     ] : 각종 장치 파일(하드디스크, CD-ROM 드라이브)
   ┣ [      /etc      ] : 시스템 관리에 필요한 스크립트와 설정파일
   ┣ [    /home    ] : 사용자 홈 디렉터리 
   ┣ [       /lib      ] : 각종 라이브러리, 커널 모듈
   ┣ [ /lost+found ] : 파일 시스템 복구를 위한 디렉터리
   ┣ [     /mnt      ] : 마운트될 파일시스템의 마운트 포인터
   ┣ [      /opt      ] : 부가 응용 프로그램 패키지 설치파일
   ┣ [     /proc     ] : 시스템의 효율적 관리를 위한 메모리상에 만들어 놓은 가상 디렉터리
   ┣ [      /root     ] : 루트 사용자만 접속이 가능한 루트 디렉터리
   ┣ [     /sbin     ] : 시스템 관리에 관려된 실행파일 포함
   ┣ [     /tmp      ] : 각 장치에 필요한 소켓, 임시파일 보관
   ┣ [      /usr      ] : 시스템에 필요한 모든 명렁어, 라이브러리, 메뉴얼 페이지
          ┣ [ /usr/bin     ] : /bin 에 없는 명령어
        ┣ [ /usr/include ] C 언어 헤더 파일들
        ┗ [  /usr/src  ] : 컴파일 되지 않은 소스코드, 커널 소스코드 포함
   ┗ [ /var ] : 가변저장 공간 - 메일서버일경우 메일저장, 시스템 로그, 네트워크 로그 저장

(5) 정적 라이브러리와 공유 라이브러리
[추가예정]