Chapter 2. 유닉스시스템시작 2.1 유닉스시스템사용과종료 22 2.2 쉘 (shell) BOOT 절차 Bootloader BIOS + LILO Kernel Booting Ramdisk uncompress HDD mount Ramdisk mount init getty -L ttys0 115200 vt100 getty tty1 login (ba)sh
Linux Boot process BIOS 가시스템이상여부테스트 부트로더에서수행부팅할드라이브선택 커널의플래쉬위치선택 선택된드라이브의 MBR읽어드림 MBR의파티션테이블을읽어부팅할파티션을선택커널로드커널을램상으로복사커널압축해제 / 재배치장착된하드웨어검사, 장치드라이버설정파일시스템검사파일시스템마운트 Init 실행 3 첫번째과정 모든 PC 시스템들은롬 ( 정확히는 BIOS) 내의코드를실행시키는것으로부팅을시작된다. 이코드는부트드라이브의섹터 0, 실린더 0 부분을읽는다. BIOS 는읽어들인섹터의내용을실행한다. 4
두번째과정 대부분의부트가능한디스크들은섹터 0, 실린더 0 영역에다음내용중한가지를담고있다. LILO 등과같은부트로더 (boot loader) 의코드. 리눅스커널등과같은운영체제커널의시작부분의코드. 5 세번째과정 부트로더는커널을찾아메모리에로드한후실행시키는방식으로부트를시작한다 커널은하드웨어장치초기화, 첫번째리눅스프로세스의실행환경구성 기본적인디바이스들과그내부데이터구조를초기화시킨다. 6
네번째과정 루트파일시스템을 ReadOnly 로마운트한다 루트파일시스템이란단순히 "/" 에마운트되는파일시스템을말한다. 커널은어디에서루트파일시스템을찾아야하는지를알아야만한다 만일커널이그위치에서로드가능한이미지를찾지못한다면시스템은멈춰버리게된다. 7 다섯번째과정 일반적인하드디스크 (/dev/hda1)/hd 를루트파일시스템으로잡아서부팅을한다 루트파일시스템을램디스크로하여로드하기도한다 일반적으로임베디드시스템은램디스크를루트파일시스템으로한다 8
여섯번째과정 커널에서 initit 을실행하는과정 mount_block_root (init/do_mounts.c) mount_root() (init/do_mounts.c) prepare_namespace() (init/do_mounts.c) Init() (init/main.c) it/ i /sbin/init 9 일곱번째과정 (init) (1) 일단시스템이루트파일시스템을로드하는데성공하면, 다음으로루트파일시스템에있는 init 프로그램을찾아실행을시도한다. /bin 이나 /sbin에존재 init 는그설정파일인 /etc/inittab 에있는대로수행해나간다. 10
일곱번째과정 (inittab) (2) id:3:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 ca::ctrlaltdel:/sbin/shutdown -t3 -r now pf::powerfail:/sbin/shutdown f / -f -h +2 "Power Failure; System Shutting Down" pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty 2345 / i tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty / i tty5 6:2345:respawn:/sbin/mingetty tty6 11 Boot Script -2 /etc/init.d All services [root@bedguy rc3.d]# ls -l lrwxrwxrwx 1 root root 16 4월 4 2000 S05syslog ->../init.d/syslog lrwxrwxrwx 1 root root 14 4월 4 2000 S50inet ->../init.d/inet [root@bedguy rc3.d]# /etc/rc.sysinit / it PATH setting HOSTNAME setting /proc filesystem mount Time setting module load /etc/rc runlevel script exec runlevel 3 -> /etc/rc.d/rc3.d/ 12
리눅스디렉토리 리눅스디렉토리구조 /root bin bootdev etc homlib mnt procroot sbintmpusr var e user1 user2 includelib local sbin src 13 / 디렉토리 리눅스의최상위디렉토리 (Root Dir) 이다. 파티션설정시반드시존재하여야한다. 모든디렉토리는최상위디렉토리를기준으로위치된다. 14
유닉스의구조 [1/4] 유닉스는크게커널, 쉘, 유틸리티와파일시스템으로구분 하드웨어 커널 쉘 유틸리티파일시스템 15 UNIX OS Network Admin. Package telnet du grep a.out tools shell vi kernel Hardware X window system who wc ps LIB ls gcc sort HTTPd 16
로그인전준비사항 유닉스시스템을이용하기위해서는사용자 ID( 계정 ) 를가지고있어야함 자신의로그인명 ( 계정 ) 이없으면시스템관리자에게문의하여발급받아야함 다른사용자로부터의자신의정보들을보호하기위해비밀번호 (password) 를설정해야함 일반적으로최초접속시사용자가직접설정함 로그인방법 텔넷 (telnet) t) 사용자가유닉스시스템에연결하고자하는경우텔넷 (telnet) 을이용하여연결 텔넷은네트워크상에존재하는유닉스운영체제를가진컴퓨터들에접근하여마치자신의컴퓨터처럼사용할수있는서비스 텔넷을이용하여유닉스시스템과연결하기위해자신의로그인명과암호를넣게되면, 유닉스시스템에설정되어있는사용자의홈디렉터리에연결
로그인방법 1. 윈도우환경에서텔넷을이용하기위해 [ 시작- 실행 (R)] 을선택하여 telnet 호스트명 or IP 를입력한후접속 2. login 프롬프트에본인의계정을입력하고 password 란에본인이설정한비밀번호를입력함 최초접속시자신의비밀번호를설정하게됨 유닉스에서는대소문자를구분하기때문에계정과비밀번호입력시주의해야함 로그인방법 로그인명과비밀번호를잘못입력하여수정해야할경우 백스페이스 키가아닌 delete 키를이용 잘못입력했을시 login incorrect 라는메시지가나타나며로그인처음과정부터다시시작해야함 SunOS 5.8 그림 2-2. 유닉스시스템최초접속과정 login: redfox 발급받은로그인명 ( 계정 ) Choose a new password. New Password: 최초의비밀번호설정 Re-enter new Password: 비밀번호확인 telnet: password successfully changed for redfox 비밀번호설정완료메시지 Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001 % SunOS 5.8 그림 2-3. 로그인명과비밀번호를잘못입력한예 login: redfox^h^h^h Password: Login incorrect 에러메시지 login: shcho 로그인과정처음부터다시시작 Password:
비밀번호변경 (passwd)(1/2) 시스템관리자에의해사용자계정이부여된후사용자가처음으로시스템에로그인하면새로운암호를물어본다. 이를입력하면다시한번입력하도록요구하고사용자가처음입력했던암호와정확하게일치하게입력하면시스템과의연결을완료하고프롬프트를보여준다. 추후, 비밀번호를변경하기위해서는 passwd 명령을이용 암호를선택할때다른사람이추측하여알아낼수없는것으로하는것이좋음. % passwd 사용자비밀번호변경 passwd: Changing password for redfox Enter existing login password: 기존비밀번호입력 New Password: 새로설정할비밀번호입력 Re-enter new Password: 새로설정할비밀번호다시입력 passwd: password successfully changed for redfox % 그림 2-4. 비밀번호변경방법 쉘프롬프트 기본적으로로그인할때마다어떤쉘이자동적으로시작하도록정해져있음각사용자와관련된로그인정보는암호파일 (/etc/passwd) 에저장되어있음 수록된엔트리안에해당사용자가로그인할때구동되어야할쉘이름 (/bin/csh) 이들어있음 쉘프롬프트모양 C 쉘 : % Bournce, Korn 쉘 : $ 관리자가어떻게설정했느냐에따라다를수있음 또한사용자본인이프롬프트모양을설정할수있음
쉘프롬프트 SunOS 5.8 login: redfox Password: Last login: Thu Sep 15 11:42:00 from cecom Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001 % 그림 2-5. 기본적인프롬프트모양 cecom% 그림 2-6. 관리자의프롬프트설정내용에따른모양 % ksh Korn 쉘구동 $ Korn 쉘프롬프트모양 $ exit Korn 쉘을종료하고로그인쉘로되돌아감 % 그림 2-7. Korn 쉘구동시쉘프롬프트모양 쉘프롬프트설정 C 쉘의경우, % 기호만나타나있고현재의위치를알수없음. 다음과같이명령줄에서프롬프트를설정하면항상자신의위치를파악가능 매번로그인할때마다본인이설정해놓은프롬프트모양을적용하고싶으면.cshrc (C 쉘 ),.profile (Bourne 쉘 ) 파일에넣어두면됨 (5 장, 부록 B 참고 ) cecom% set prompt="[$cwd]% " [/home/redfox]% 그림 2-8. 프롬프트상에서프롬프트모양설정
사용자확인 (identity) 유닉스시스템은시스템관리자가각사용자에게부여한사용자번호 (userid) 와그룹번호 (groupid) 에의해사용자를확인 일반적으로시스템이사용자명과 userid, 그룹명과 groupid 를자동으로바꾸어주기때문에사용자는이를알필요는없음 사용자는 id와 groups 명령을이용하여자신의 userid와 groupid를볼수있음 기본그룹은패스워드파일에있는사용자명과연관된그룹명이되며, 이것역시시스템관리자가부여 cecom% id uid=225(redfox) gid=100(student) cecom% groups student sys student, sys 그룹에속해있음을보여줌 그림 2-9. 사용자의 userid, groupid 확인 터미널제어 (stty) 제어키 명령어줄, 혹은편집기에서특수한기능을수행할때사용 사용자는 Control 키와함께다른키를치면된다. (^Key) 예를들어 Control-S를치면 ^S 모양으로나타난다. 제어키에서보이는대소문자는같은의미를가짐 예를들어, ^S 와 ^s 는같다. 이예에서 ^S 는 stop 시그널이고, 이것은터미널에입력을멈추도록하는시그널을보낸다. Control-U는보통사용자터미널에 "line-kill" 시그널을보낸다. 이것은사용자가타이핑할때전체입력줄을지운다. vi 편집기 ( 유닉스시스템의대표적인편집기 ) 를이용하여텍스트파일을작성할때제어키를사용하고자하는경우 Control-V(^V) 를먼저치고그뒤에 Control 키를누르면서원하는문자를타이핑 예를들어, ^H(Control-Backspace) 를입력하고싶다면 ^V^H 와같이타이핑
터미널제어 (stty) 터미널의제어속성을설정하거나조사하는데 stty 이용 사용중인터미널에서삭제 (erase) 기능이어떤것으로설정되었는지확인후사용자가이용하기편한키로변경 cecom% stty -a 현재터미널에설정된값확인 speed 38400 baud; 행 = 26; 열 = 80; ypixels = 0; xpixels = 0; csdata? eucw 1:0:0:0, scrw 1:0:0:0 intr = ^c; quit = ^ ; erase = ^?; kill = ^u; eof = ^d; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^q; stop = ^s; susp = ^z; dsusp = ^y; rprnt = ^r; flush = ^o; werase = ^w; lnext = ^v; < 이하생략 > 그림 2-10. 터미널에설정된메타문자값확인 터미널제어에사용되는옵션및메타문자 옵션 (none) a erase kill lnext susp intr stop eof -echo echo -raw raw 의미 터미널설정상태를보여줌 모든옵션을보여줌 한문자를지움 현재작업중인줄을모두지움 다음문자를특수문자로처리하지않음 나중에깨우도록하고프로세스를임시정지 코어덤프없이전면작업종료 터미널출력을정지 / 다시시작함 입력의끝 타이핑한문자들을다시보여주지않음 타이핑한문자들을다시보여줌 메타문자의특별한의미를사용할수있도록함 메타문자의특별한의미를사용할수없도록함 -tostop t 후면작업이터미널에출력을보낼수있도록함 tostop 후면작업이터미널에출력을보내는것을중단함
터미널제어 (stty) 기존에설정된 erase 값인 ^? (delete 키 ) 에서 ^H( 백스페이스키 ) 로변경하기위해서는다음과같이설정 cecom% stty erase ^H erase값을 ^H 값으로설정 cecom% stty -a 변경된 erase 값을확인 speed 38400 baud; 행 = 26; 열 = 80; ypixels = 0; xpixels = 0; csdata? eucw 1:0:0:0, scrw 1:0:0:0 intr = ^c; quit = ^ ; erase = ^h; kill = ^u; eof = ^d; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^q; stop = ^s; susp = ^z; dsusp = ^y; rprnt = ^r; flush = ^o; werase = ^w; lnext = ^v; < 이하생략 > 그림 2-11. 터미널에설정된기존의메타문자값변경 last 명령 마지막으로로그인한사용자명과터미널을보기위해사용. 즉, 로그인한정보를살펴볼때사용 해당사용자가로그인했을때의정보. 즉, 터미널 (pts/2), IP주소, 로그인시간, 로그아웃시간, 접속한시간등을확인할수있음 또한, 사용자가이전에각각몇분몇초동안접속하여작업을했는지확인할수있음 cecom% last redfox redfox pts/7 IP 주소 Mon Oct 3 14:19 아직로그인되어있습니다 redfox pts/2 218.54.204.12 Sat Oct 1 01:52-03:52 (02:00) < 중략...> redfox pts/2 IP 주소 Thu Sep 15 10:42-10:42 (00:00) redfox pts/3 IP 주소 Thu Sep 15 10:30-10:42 (00:11) wtmp 가 Mon Feb 21 17:41 을 ( 를 ) 시작합니다 그림 2-13. redfox 계정에대한 last 명령수행결과
유닉스시스템연결종료 : logout 하기 원격시스템과의연결을끊는방법들 ^D 데이터스트림 (t (stream) 의끝을의미. 또한사용자와의연결을끊음 (log off). 이명령으로로그아웃되는것을막을필요가있음 C 쉘경우,.cshrc 파일내 set ignoreeof 로설정하여 logout 되는것을막을수있음 ^C 프로세스종료 ( 인터럽트 ), 실제 ^C 로 logout 되지않음을확인할수있다.( 이유는?) logout exit 시스템종료 쉘 ( 프로세스 ) 종료 일반적으로로그인쉘을종료시키는방법은 logout, exit 를이용함 유닉스시스템연결종료 : logout 하기 SunOS 5.8 login: redfox Password: Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001 cecom% ^D cecom% 로그아웃 호스트에대한연결을잃었습니다. 그림 2-14. C 쉘의.cshrc 파일내 ignoreeof 가설정되지않은경우 cecom% cat >.cshrc set ignoreeof ^d cecom% source.cshrc cecom% ^D 로그아웃하려면 "logout" 을사용하십시오. cecom% 그림 2-15. C 쉘의.cshrc 파일내 ignoreeof 가설정된경우
유닉스시스템연결종료 : logout 하기 cecom% ^C cecom% ^C cecom% 그림 2-16. Control-C 사용예 cecom% logout 호스트에대한연결을잃었습니다. 그림 2-17. logout 사용예 cecom% exit cecom% 로그아웃 호스트에대한연결을잃었습니다. 그림 2-18. exit 사용예 쉘 (shell) 쉘은유닉스운영체제와사용자사이에서중간적인교량역할을하는프로그램 즉, 명령어해석기 (command interpreter) 로서동작하는프로그램 DOS 에서의 command.com 과유사 또한, 사용자가프로그램및명령어를수행하고, 출력을파일에저장, 하나이상의프로그램이수행되도록함 유닉스에서많이사용되는세가지쉘 (4 장참고 ) Bournce 쉘 Korn 쉘 C 쉘