Module 3: Linux ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부
주차별목표 리눅스에대한이해 리눅스주요명령어소개 리눅스명령어사용법 vi 편집기사용하기 리눅스파일시스템및커널파일시스템구성소개 2
What is Linux? 1991 년핀란드헬싱키대학의리누스토발즈 (Linux Benedict Torvalds) 학생에의해개발이시작됨 유닉스와호환되는공개된운영체제를개발하자는계획을모임에발표하고, i386 에서실행되는유닉스운영체제를개발하기시작 1995 년에들어서면서리눅스는 i386 계열에서만실행되는운영체제가아닌다양한플랫폼에포팅됨 리눅스커널이외의프로그램들은 GNU 프로젝트의결과물임 GNU 프로젝트는 1984 년 MIT 인공지능연구소의연구원이었던리차드스톨먼 (Richard Stollman) 에의해당시기술을상업화하려는흐름과소스를공개하지않는분위기에반감을가지면서시작 3
리눅스주요명령어 명령어 기능 ls cd mkdir rmdir cp rm mv chmod cat 디렉토리내에서파일목록보기지정된디렉토리로이동하기디렉토리만들기디렉토리삭제하기파일또는디렉토리복사하기파일또는디렉토리삭제하기파일또는디렉토리의이름을변경하거나경로변경하기파일접근권한변경하기텍스트로작성된파일내용을화면에출력하기 4
리눅스주요명령어 명령어 more pwd tail grep tar df mount umount ifconfig 기능 텍스트로작성된파일내용을페이지단위로한화면씩출력하기현재작업하고있는디렉토리이름화면에출력하기파일의마지막일정부분화면에출력하기특정패턴찾기아카이브파일을생성하거나풀기마운트된디스크파일시스템보여주기파일시스템마운트하기마운트한파일시스템해제하기네트워크카드의 IP 주소등설정변경하기 5
리눅스주요명령어 명령어 insmod rmmod lsmod mknod apt-get 기능 디바이스드라이버를커널에삽입하기디바이스드라이버를커널로부터삭제하기커널에모듈로올라가있는모듈목록보기디바이스관련특수파일인디바이스파일만들기데비안계열의패키지관리자 6
리눅스기본명령어요약 파일및디렉토리관리명령어 ls, cp, mv, rm, mkdir, rmdir, chmod, cat, more, vi 기타명령어 df, file, tail, pwd, tar, grep 기타도구 gcc, make, ctags, cscope, taglist 시스템관리명령어 mount, umount, dd, ifconfig, apt-get TFTP, NFS, 삼바 (samba) 설정및활용 디바이스드라이버관련명령어 insmod, rmmod, mknod, lsmod 7
리눅스파일시스템에서의경로 파일또는디렉토리의위치지정경로 절대경로 항상리눅스파일시스템의최상위디렉토리를의미하는 / 로시작하는경로 상대경로 현재디렉토리를중심으로파일경로를지정 현재디렉토리 :. 상위디렉토리 :.. 사용자계정단위로디렉토리이동 : ~ 8
리눅스주요명령어및명령어옵션 리눅스주요명령어의옵션들 ls cp -a( 모든파일보기 ) -l( 자세한정보보기 ) -s( 파일크기보여주기 ) -R( 하위디렉토리파일목록까지보여주기 ) -F( 파일형식을알리는문자를각파일뒤에추가하기 ) -i( 복사대상파일이있을경우확인하기 ) -a( 원본파일의속성, 링크정보들을그대로유지하면서복사하기 ) -r( 경로를복사할경우그안에포함된모든하위경로와파일들을복사하기 ) 9
리눅스주요명령어및명령어옵션 리눅스주요명령어의옵션들 rm tar -i( 파일삭제시확인하기 ) -f( 강제로삭제하기 ) -r( 디렉토리삭제시하위디렉토리와파일들모두삭제하기 ) c( 아카이브파일생성 ) t( 아카이브파일목록보기 ) x( 아카이브파일추출 ) f( 아카이브파일이름지정 ) v( 작업중자세한정보보여주기 ) j(bunzip으로압축되어있는파일풀기 ) z(gzip으로압축되어있는파일풀기 ) 10
리눅스주요명령어및명령어옵션 chmod: 파일접근권한변경 ( 소유자, 그룹, 다른사용자 ) rwxrwxrwx, rw-r--r--, rwxr-xr-x 위의권한을숫자로표현시 : 777, 644, 755 cat: 텍스트로작성된파일내용을화면에출력 more: 텍스트로작성된파일내용을페이지단위로한화면씩출력 tail: 파일의마지막부분출력 -n( 마지막 n 개의행출력. 기본값은 10 임 ), -f( 파일의뒷부분에새로운내용추가시추가된내용출력 ) 파이프기호 ( ): 명령어에서나온결과값을바로다음명령어의인수로전달 예 : ls R /etc more 11
리눅스주요명령어및명령어옵션 pwd: 현재작업하고있는디렉토리이름화면에출력하기 grep: 특정패턴찾기 % grep error /var/log/messages % ls /sbin grep mkfs.* % netstat a grep tftp tar: 아카이브파일을생성하거나풀기 ( 압축기능도제공됨 ) % tar xvfz blob_pro3_050126.tar.gz % tar xvfj linux-2.4.19-pro3_usb20_v32.tar.bz2 df: 마운트된디스크파일시스템보여주기 mount: 파일시스템마운트하기 umount: 마운트한파일시스템해제하기 ifconfig: 네트워크카드의 IP 주소등설정변경하기 % ifconfig eth0 192.168.10.100 apt-get: 데비안계열의패키지관리자 리눅스배포본마다패키지관리자는다름 ( 예 : rpm, yum 등 ) 12
리눅스주요명령어및명령어옵션 리눅스주요명령어의옵션들 apt-get h( 도움말 ) -d( 설치하지않고인터넷에서다운로드만하기 ) -u업그레이드패키지리스트보여주기 ) apt-get install 새로운패키지설치 apt-get update 설치된패키지업데이트 apt-get remove 설치된패키지제거 13
기본명령어연습하기 현재작업디렉토리는 /root/work/cmd 라고가정하고, 하위에아무런내용도없다고가정한다. 그런다음아래와같은파일구조를생성해보기 CWD=/root/work/cmd knu/ hgu/ all/ kidec/ csee/ knu/ csee_copied/ welcome hello hello kidec/ 복사본 welcome 14
기본명령어연습하기 - 답안 1. cd /root/work/cmd 2. mkdir knu 3. mkdir knu/kidec 4. cd kidec 5. vi welcome 6. mkdir../../hgu 7. cd../../hgu 현재디렉토리 :~/work/cmd/hgu 8. mkdir csee 9. vi csee/hello 10.mkdir../all 11.cp r../knu../all 12.cd.. 13.cp r hgu/csee all/csee_copied 15
기타명령어 (mount) 마운트하기 (mount, umount) 다양한종류의파일시스템을리눅스에서마운트할수있음 ( 예 : ext2, ext3, iso9660, nfs, smb) 마운트시사용하는명령어는 mount, 마운트된것을해제할때는 umount 명령어를사용함 마운트를하는방법은먼저마운트지점을생성하고, mount 명령어를사용하여마운트시킴 마운트하려고하는대상이실제디바이스의블록파일시스템이아니라파일로구성된블록시스템일경우는마운트시 o loop 의추가옵션을주어야함 % mount t [ 파일타입 ] [ 마운트할블록파일시스템 ] [ 마운트지점 ] 파일로생성된 CD 이미지 ( 파일명 : /root/kidec_pro3.iso) 를 /root/pro3 디렉토리로마운트하고자할경우 % mkdir /root/pro3 마운트지점생성 % mount t iso9660 o loop /root/kidec_pro3.iso /root/pro3 % df 마운트되었는지확인하기 % umount PRO3 마운트의다른예 % mount t udf o loop /root/share/achro-210t.iso /root/achro-210t % mount t ext2 o loop /usr/local/pxa255/ramdisk_mmc ramdisk % mount t nfs 192.168.10.70:/root/work nfs_share % mount t smb o username=kidec,password=123 //yscho-t/win_share win_share 16
기타명령어 아카이브파일풀기 (tar) % tar xvfz blob_pro3_050126.tar.gz % tar xvfj kernel-2.6.35. tar.bz2 블록파일시스템만들기 (dd) % dd if=/dev/zero of=./ramdisk_big bs=1k count=20480 특정패턴찾아내기 (grep) % grep error /var/log/messages % ls /sbin grep mkfs.* % netstat a grep tftp 17
vi editor(visual editor) vi(visual editor) 는 emacs 와함께유닉스환경에서가장많이쓰이는문서편집기 vi 는한줄씩편집하는줄단위편집기가아니라한화면을편집하는비주얼편집기라는의미 리눅스에포함되어있는 vi 는오리지널 vi 의기능을확장한 vim 이포함되어있음 장점 프로그램이가벼움 매우강력한기능제공 키보드만으로편집을간편하게할수있음 18
Three modes of vi editor vi 편집기의세가지모드 명령모드 ( 편집모드 ) 입력되는키가문서에입력되는것이아니라커서이동, 수정, 삭제, 복사등의기능을수행 입력모드 현재입력되고있는키가그대로문서에입력 라인모드 (ex 모드 ) : ( 콜론 ) 또는 / 로시작되며문서를저장하거나불러오거나검색하거나찾아보기, 바꾸기등의기능을사용할수있음 19
Three modes of vi editor vi 편집기의세가지모드 20
vi editor starting command vi 시작하기 명령어 기능 vi vi aa.txt vi +10 aa.txt vi R aa.txt vi r aa.txt vi 편집기시작하기 aa.txt 파일을 vi로편집시작. aa.txt 파일이있으면기존파일을불러오고, 새파일인경우는비어있는파일로새로생성함 10번행으로 aa.txt 파일열기 aa.txt 파일을읽기전용으로열기손상된 aa.txt 파일복구하기 21
vi editor - saving & exit command vi 저장및종료하기 명령어 ZZ :wq! :w :w bb.txt :1,5w tt.txt :q! :e! :e bb.txt 기능 명령모드에서 ZZ를누르면현재지정된파일이름으로저장되면서료됨변경된내용저장한후종료됨 (ZZ와동일한역할 ) 현재까지수정된내용을파일에저장하기현재내용을 bb.txt 파일에저장하기 1번부터 5번행까지내용을 tt.txt 파일에저장하기수정한내용을파일에저장하기않고 vi 종료하기현재까지수정한내용을다무시하고, 현재파일을다시열기 bb.txt 파일열기 종 22
vi editor - saving & exit command vi 저장및종료하기 명령어 :r cc.txt :5 r cc.txt 기능 현재행아래에 cc.txt 의내용삽입하기 5 번행다음에 cc.txt 의내용삽입 23
Commands of vi editor vi 명령어 커서이동 명령모드에서커서를이동하는데쓰이는명령어들 ex) h( ), j ( ), k ( ), l (, Space) 등 삽입명령 명령모드에서입력모드로들어가게되는명령어들 ex) i, I, a, A, o, O 등 삭제명령 명령모드에서문자를삭제하는데쓰이는명령어들 ex) x, [n]x, dw, [n]dw, dd, [n]dd 등 수정명령 명령모드에서문자를수정하는데쓰이는명령어들 ( 대부분입력모드로변경됨 ) ex) cw, [n]cw, cf 패턴, C, s 등 24
Commands of vi editor vi 명령어 자르기, 복사하기, 붙여넣기 버퍼를사용하여문자를복사, 붙이고자르는데쓰이는명령어들 ex) yy, [n]yy, p, P, ddp 등 문자열찾기및치환하기 문서에서문자열을찾거나치환하는데쓰이는명령어들 ex) /[ 패턴 ],?[ 패턴 ], n, N, :%s/[old]/[new] g 등 블록사용 현재커서위치부터특정영역을선택하는데쓰이는명령어들 ex) v, y, d, >, <, c 등 마크사용 책갈피와같은기능을제공하는명령어들 ex) m[x], [x], `` 등 25
Linux File System 리눅스가부팅되었을때최상위디렉토리인루트 (/) 로마운트되는파일시스템을의미 커널뿐만아니라운영체제및응용프로그램까지모든것을포함 커널소스파일구조와리눅스파일시스템은다름 26
Directories of Linux File System / 리눅스파일시스템의최상위디렉토리 /root 시스템관리자인 root 사용자의홈디렉토리 /bin 시스템을사용하기위한기본적인명령어들이존재 /boot 부팅에필요한커널과부팅할때필요한핵심파일들이존재 부팅할때부트로더가 /boot 디렉토리에있는커널의위치를참조 /dev 디바이스파일 (device file) 들이존재 /etc 시스템환경설정파일들과응용프로그램및서버프로그램등의환경설정에필요한설정파일들이존재 27
Directories of Linux File System /usr 프로그램을설치할때패키지에포함된대부분의파일이설치되는공간 /lib 시스템운영및프로그램구동할때필요한공유라이브러리와부팅할때사용되는커널모듈들이포함되어있음 /lost+found 파일시스템의진단및오류수정은리눅스명령어 fsck (file system check) 수행시발생하는모든결과들은 lost+found 디렉토리에저장되며, 개별파일시스템의최상위디렉토리마다존재 /mnt 외부장치들을시스템에사용하고자마운트할때사용하는마운트지점들을모아두는공간 /opt add-on 패키지가설치되는디렉토리로서리눅스배포판에존재하지않는패키지들은이디렉토리에설치됨 /proc 프로세스와관련된시스템정보를제공하기위한곳으로커널, 파일시스템, 메모리, 프로세스등의정보가저장되는곳 28
Directories of Linux File System /tmp /sbin /var 프로세스생성과정에서발생되는임시파일저장공간 시스템운영에필요한관리자용명령어들이들어있음 시스템운영시발생되는다양한로그 (log) 들이저장됨 /home 일반사용자의홈디렉토리들이만들어지는공간 29
Linux Kernel 리눅스커널 리눅스커널 (Kernel) 은운영체제에서가장기초적이고핵심적인기능을담당하는부분 프로그램들과하드웨어사이에서조정자역할을함 커널은메모리, 파일, 주변장치등시스템을구성하는중요한자원들을관리함 시간관리, 프로세스관리, CPU 스케줄링, 입출력제어등컴퓨터운영에필요한핵심사항들을처리 운영체제는이러한커널과최소한의필요한도구들을묶은시스템소프트웨어 30
Linux Kernel 의분류 접근방식에따른커널의분류 모놀리식 (Monolithic) 커널 하나의커널에필요한모든기능이통합되어있고같은메모리공간안에필요한기능들이존재함 마이크로 (Micro) 커널 필요한기능들을작은서버모듈로나누어설계하고, 이들서버를관리할수있는최소한의기능만을커널핵심부분으로구현 31
Linux Kernel 구조 리눅스커널의구조 32
Linux Kernel 의기능 커널의주요기능 프로세스관리 (Process Management) 프로세스의생성및소멸, 프로세스간의통신, CPU 스케줄링동기화, 제한된자원에대해다중프로세스들을효율적으로관리 메모리관리 (Memory Management) 가상메모리와하드웨어메모리를효율적으로관리 네트워크관리 (Network Management) 통신프로토콜을구현해주며, 네트워크라우팅및주소지정, 네트워크제어기를관리 파일시스템관리 (File System Management) 가상파일시스템에의한여러파일시스템타입을지원 디스크의물리적구조를논리적구조로표현 파일및디렉토리관리블록입출력을위한버퍼캐시관리 디바이스관리 (Device Management) 입출력요청에대한권한등을검증, 입출력요청작업스케줄링 요청된작업에따라주변장치와메모리간에자료전송을담당 입출력제어기관리및인터럽트요청에따른처리 33
Kernel Source File 커널소스파일구조 34
Directories of Kernel Source File 커널소스파일구조 kernel/ 커널기능중프로세스 ( 또는태스크 ) 관리를위한프로세스의생성과소멸, 프로그램실행, 스케줄링, 시그널처리기능등이구현되어있음 fs/ 리눅스에서지원하는다양한파일시스템들이구현되어있음 파일시스템에액세스하기위한표준 API 인 open(), read(), write(), ioctl() 등의시스템콜들이구현되어있음 init/ 커널초기화부분에대한코드와커널의메인함수가구현되어있음 35
Directories of Kernel Source File 커널소스파일구조 drivers/ 리눅스에서지원하는모든디바이스드라이버 (device driver) 는 driver s 디렉토리에존재 include/ arch/ 리눅스커널에서사용하는헤더 (header) 파일들이정의되어있음 CPU 에의존적인코드들이구현되어있음 CPU 마다부팅과정, 메모리관리방법, 프로세스처리부분들이모두다르므로아키텍처별로코드들이필요함 36