nhập môn hệ điều hành linux

Upload: nguyenphuongdang

Post on 15-Oct-2015

199 views

Category:

Documents


0 download

TRANSCRIPT

  • Nhp mn H iu hnh Linux

    ng Nguyn [email protected]

    Ngy 24 thng 12 nm 2013

    Mc lc

    1 M u 2

    2 Gii thiu v Linux 22.1 Linux l g? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2 Nhn Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.3 Lch s hnh thnh Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.4 Kin trc ca Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.5 Mt s c tnh ca h iu hnh Linux . . . . . . . . . . . . . . . . . . . . . . . 52.6 Cc bn phn phi h iu hnh . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    3 Linux c bn 73.1 Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.2 Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.3 Cc lnh thao tc vi ti khon ngi dng . . . . . . . . . . . . . . . . . . . . . 93.4 Cc lnh thao tc vi th mc v tp tin . . . . . . . . . . . . . . . . . . . . . . 113.5 Cc lnh iu khin tin trnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.6 Lnh ci t cc gi phn mm, ng dng . . . . . . . . . . . . . . . . . . . . . . 15

    4 Cc cng c Linux thng dng 164.1 Lnh echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.2 Mt s lnh Linux c bn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.3 Cc k t c bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.4 Filter v pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.5 Mng v chui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.6 Trnh son tho vn bn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    5 Shell script 255.1 Cch to v thc thi shell script . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.2 Bin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265.3 Cu trc iu khin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275.4 Hm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    6 Cch thc bin dch v thc thi chng trnh 326.1 Trnh bin dch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326.2 Cc thc bin dch v thc thi chng trnh . . . . . . . . . . . . . . . . . . . . . 326.3 Bin dch vi th vin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336.4 Bin dch vi Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    Ti liu tham kho 37

    1

  • ng Nguyn Phng Ti liu ni b NMTP

    1 M u

    C th ni i vi phn ln sinh vin Vit Nam hin nay, c th l sinh vin cc ngnh khoahc v k thut ht nhn, h iu hnh Linux vn cn l mt iu g kh xa l. Tri vi cch iu hnh m ngun ng nh Windows hay MacOS, h iu hnh Linux c s dng khrng ri trong gii khoa hc, c bit l trong lnh vc ht nhn v ht c bn, t thc nghimcho n l thuyt. Nhng u im ca Linux so vi cc h iu hnh khc nh phn mm minph, tnh bo mt cao, kh nng can thip su vo bn trong h thng,... gip cho h iuhnh ny c v tr cao trong con mt ca cc nh khoa hc v cng ngh. Trong hu ht cc thnghim ln v ht nhn v ht c bn hin nay, h iu hnh Linux lun l h iu hnh cs dng chnh trong sut qu trnh tin hnh th nghim. Do , vic tm hiu v s dng hiu hnh Linux mt cch thnh tho s l u th ln cho cc bn sinh vin c nh gn blu di vi ngnh khoa hc ny.

    Tp ti liu ny c vit vi mc ch cung cp cho cc bn mt s kin thc c bn nht vh iu hnh Linux v cch thc hot ng ca n, cng nh hng dn s dng mt s cngc c bn c cung cp trong h iu hnh ny. Ni dung ca ti liu c tng hp t nhiungun khc nhau (xem phn Ti liu tham kho). phn u ca ti liu, tc gi trnh by ccnh ngha c bn v Linux v nguyn l hot ng ca n, phn 3 v 4 cung cp cc lnh cbn ca h iu hnh. Sau khi hon thnh xong cc phn c bn, cc bn s c lm quenvi phng thc lp trnh shell script c trnh by trong phn 5. i vi nhng bn munxy dng cc chng trnh m phng, x l s liu trn h iu hnh Linux, phn 6 s gip ccbn tm hiu cch thc bin dch v thc thi mt chng trnh t m ngun ca n. Tc gi hivng rng vi tp ti liu ny, cc bn sinh vin vi nim am m nghin cu s c t tin bt tay vo vic tm hiu h iu hnh Linux v lm cho n tr thnh mt cng c c lcphc v cho cng vic ca cc bn.

    2 Gii thiu v Linux

    2.1 Linux l g?

    Thut ng Linux thc cht c s dng ch nhn Linux (Linux kernel). Tuy nhin trongthc t, tn gi Linux c s dng mt cch rng ri ch

    Mt h iu hnh ging Unix (Unix-like) theo chun POSIX (Portable Operating SystemInterface) c to ra bi vic ng gi nhn Linux cng vi cc th vin v cng cGNU.

    Cc bn phn phi Linux (xem Phn 2.6).

    2.2 Nhn Linux

    Nhn h iu hnh (operating system kernel hay OS kernel) l thnh phn trung tm v c bnnht ca hu ht cc h iu hnh my tnh, c nhim v qun l cc ti nguyn h thng, linlc gia cc thnh phn phn cng v phn mm (xem Hnh 1). N cung cp 2 chc nng chnhcho h iu hnh

    Cung cp cc ti nguyn my tnh (b nh, CPU, cc thit b vo/ra m phn mm ngdng cn iu khin thc hin cc chc nng ca mnh) cho cc tin trnh (process)ca cc phn mm ng dng qua cc c ch lin lc gia cc tin trnh (inter-processcommunication) v cc hm h thng (system call).

    Xc lp ro chn gia 2 tin trnh khc nhau, nu mt tin trnh b hng th cng khnglm nh hng n tin trnh kia. y chnh l u im ln nht ca Linux so vi cc hiu hnh nh DOS v Windows.

    2

  • ng Nguyn Phng Ti liu ni b NMTP

    Hnh 1: S hot ng ca nhn h iu hnh

    Nhn Linux c xy dng bng ngn ng lp trnh C m phng li nhn Unix (mt h iuhnh my tnh c xy dng vo nhng nm 1960-1970 vi thit k theo module) v cLinus Torvalds pht trin vo nm 1991. Mt s c im ca nhn Linux tha k t nhn Unixgm c

    Nhn kiu nguyn khi (monolithic kernel): thc hin cc nhim v ca mnh bng cchthc thi ton b m h iu hnh trong cng mt a ch b nh tng hiu nng hthng.

    Thit k theo module: h iu hnh cung cp mt tp hp cc cng c n gin, v micng c ch thc hin nhng chc nng gii hn v c nh ngha r rng.

    H tp tin phn cp (Filesystem Hierarchy Standard FHS): h thng tp tin c tchc theo mt h thng phn bc tng t cu trc ca mt cy phn cp, bc cao nhtca h thng tp tin l th mc gc, c k hiu bng vch cho / (root directory).

    Unix shell: giao din trung gian gia ngi dng v nhn Unix.

    C ch pipeline: xy dng cc lnh phc tp hn bng cch kt hp cc lnh n gin.

    2.3 Lch s hnh thnh Linux

    H iu hnh Linux c pht trin da trn hai nn tng chnh l h iu hnh Unix vD n GNU.

    H iu hnh Unix c kin ngh v pht trin ti vin nghin cu Bell ca cng ty AT&T(M) vo nm 1969 bi Ken Thompson, Dennis Ritchie, Douglas McIlroy v Joe Ossanna. Bnu tin ca h iu hnh c ra i vo nm 1971 c vit bng ngn ng Assembly.

    Nm 1973, Dennis Ritchie vit li Unix bng ngn ng C (tr nhn h iu hnh v I/O). Lich ca vic vit h iu hnh bng ngn ng bc cao l c kh nng mang m ngun ca hsang cc nn my tnh khc v bin dch li, chnh nh iu ny m h iu hnh s c cc bnchy trn cc h my tnh khc nhau. H iu hnh Unix nhanh chng pht trin v c sdng rng ri trong cc trng hc v doanh nghip.

    Nm 1983, D n GNU c khi xng bi Richard Stallman, vi mc ch to ra mt "Hthng phn mm hon chnh tng thch vi Unix" bao gm ton b cc phn mm t do (FreeSoftware). Sau vo nm 1985, Stallman bt u thnh lp T chc phn mm t do v tora Giy php chung GNU (GNU General Public License GNU GPL) vo nm 1989.Nm 1987, h iu hnh MINIX (vit tt ca mini-Unix) c thit k bi gio s AndrewS. Tanenbaum da trn nn tng Unix nhm phc v cho mc ch gio dc. Chnh MINIX lngun cm hng cho Linus Torvalds to ra Linux sau ny.

    3

  • ng Nguyn Phng Ti liu ni b NMTP

    Khong u 1990, nhiu chng trnh ng dng cho Unix ra i, nhng cc thnh phn cpthp cn thit nh trnh iu khin thit b, daemons,... vn cha c hon thnh. Nh vymt nhu cu cp bch lc l cn c mt h iu hnh hon chnh c th chy cc chngtrnh trn.

    Vo nm 1991, trong khi ang hc ti i hc Helsinki, Linus Torvalds bt u c tngv vic xy dng mt h iu hnh, hn na ng cng nhn thy hn ch trong giy php caMINIX l ch c s dng trong gio dc m thi. Torvalds bt tay vo vic pht trin nhnLinux trn mi trng MINIX cc ng dng vit cho MINIX c th s dng trn Linux. Dndn cc ng dng GNU bt u thay th cc thnh phn ca MINIX, do cc li ch s dngm ngun c sn mt cch t do t d n GNU.

    Phin bn Linux 1.0 c ra i vo nm 1994 di bn quyn GNU, bt c ai cng c th tiv xem m ngun ca Linux. T n nay c hng lot cc phin bn Linux ra i vinhiu hng pht trin khc nhau.

    H iu hnh Linux t c nhng thnh cng mt cch nhanh chng nh vo m hnh phttrin phn mm ngun m hiu qu, cng vi cc c tnh ni bt so vi cc h thng khc: chiph phn cng thp, tc cao (khi so snh vi cc phin bn Unix c quyn) v kh nngbo mt tt, tin cy cao (khi so snh vi Windows) cng nh l cc c im v gi thnhr, khng b ph thuc vo nh cung cp.

    2.4 Kin trc ca Linux

    Ta c th chia kin trc ca Linux thnh 2 khu vc chnh (xem Hnh 2)

    Vng nhn h iu hnh (kernel space) gm 3 thnh phn chnh

    M nhn ph thuc kin trc vi x l (Architecture-dependent kernel code) phn ln Linuxc lp vi kin trc vi x l, nhng cng c nhng b phn cn phi theo ng tng kintrc c th hot ng c v hiu qu, th mc con ./linux/arch s cha cc mngun ph thuc kin trc (vd: th mc i386)

    Nhn h iu hnh (kernel) phn m nhn c lp vi kin trc vi x l, nh trnhby bn trn.

    Giao din cc hm h thng (System call interface SCI) thc hin nhim v gi cchm h thng t vng ng dng vo nhn Linux. Giao din ny c lp vi kin trc bvi x l ngay c trong cng mt h vi x l. Cc gi lin quan c ci trong th mc n./linux/kernel v phn ph thuc vo kin trc vi x l nm trong ./linux/arch.

    Vng khng gian ca ngi dng (user space) gm 2 thnh phn chnh

    Cc ng dng ca ngi dng (User Applications) bao gm cc phn mm, gi ng dng.

    Cc th vin C (GNU C Library) phc v cho giao din cc hm h thng, to lin ktgia cc ng dng v nhn Linux. Giao din ny quan trng v nhn Linux v cc ngdng chim cc vng a ch b nh c bo v khc nhau. Mi ng dng c vng ach o ring cn nhn c mt vng a ch duy nht.

    Cc thnh phn chnh ca mt h iu hnh Linux hon chnh gm c

    B khi ng (bootloader) l mt chng trnh c thc thi bi my tnh khi n ln utin c m ln, nhim v ca cc chng trnh ny l ti nhn Linux vo b nh. Mts b khi ng ph bin nh GRUB, LILO,...

    4

  • ng Nguyn Phng Ti liu ni b NMTP

    Hnh 2: Kin trc ca h iu hnh Linux

    Trnh khi ng (init program) l mt tin trnh c khi ng bi nhn Linux, v ltin trnh gc trong cy tin trnh, hay ni mt cch khc tt c cc tin trnh u ckhi ng thng qua init chng hn nh cc tin trnh nh dch v h thng, du nhcng nhp (bt k l giao din ha hay dng lnh),...

    Th vin phn mm, cha cc tp tin th vin c s dng bi cc tin trnh ang chay.Trn cc h thng iu hnh Linux s dng cc tp tin thc thi dng ELF (Executable andLinkable Format), trnh lin kt ng (dynamic linker) ld-linux.so c nhim v qunl vic s dng cc th vin lin kt ng. Th vin phn mm chung c dng nhiunht trn h thng Linux l th vin ngn ng C ca GNU. Nu h thng c ci tcho ngi dng t bin dch phn mm, cc tp tin header s c thm vo m tgiao din cho cc th vin c ci t.

    Cc chng trnh giao din ngi dng nh cc shell hoc mi trng ca s (windowingenvironments).

    2.5 Mt s c tnh ca h iu hnh Linux

    M ngun m (open source) theo giy php GNU, ngi s dng Linux c c nhngphn mm min ph, c th thay i m ngun ca phn mm nu mun. Ngoi ra, ngidng cn c th phn phi li phn mm nu thch, min l cung cp km m ngun vghi ch s thay i.

    a nhim (multi-tasking) tt c cc tin trnh trong Linux l c lp, khng mt tintrnh no c cn tr cng vic ca tin trnh khc. Nhn Linux thc hin ch phnchia thi gian ca b vi x l trung tm (Central Processing Unit CPU), ln lt chiacho mi tin trnh mt khong thi gian thc hin.

    a ngi dng (multi-user) cho php nhiu ngi lm vic cng lc, Linux c th cungcp tt c cc ti nguyn h thng cho ngi dng lm vic qua cc terminal, l mt ngdng giao din dng lnh (Command Line Interface CLI).

    Lm vic trn cc phn cng khc nhau Linux u tin c pht trin trn nntng Intel 386/486, nhng hin ti n c th lm vic trn tt c cc b vi x l Intel (baogm c cc b x l 64bit), ng thi Linux cn c th lm vic trn rt nhiu b x lkhc ca AMD hay ARM, DEC Alpha, SUN Sparc,...

    5

  • ng Nguyn Phng Ti liu ni b NMTP

    Kh nng chy chng trnh ca HH khc Linux pht trin cc trnh gilp (emulator) cho DOS, Windows 3.1, Windows 95 v Wine. Ngoi ra, Linux cng cmt lot cc chng trnh to my o m ngun m cng nh sn phm thng mi:qemu,bochs,vmware,...

    a b nh swap ln a cho php lm vic vi Linux khi dung lng b nh c hn,ni dung ca mt s phn b nh c ghi ln vng a cng xc nh t trc, vic nyc lm gim tc lm vic nhng cho php chy cc chng trnh cn b nh dung lngln m thc t khng c trn my tnh.

    T chc b nh theo trang h thng b nh Linux c t chc dng cc trang vidung lng 4KB v cung cp cc trang b nh theo yu cu, khi ny ch phn m cnthit ca chng trnh mi nm trong b nh, cn nhng phn m khng s dng ti thiim hin ti th nm li trn a.

    Cng s dng chng trnh nu cn chy mt lc nhiu bn sao ca cng mt ngdng no , th Linux ch np vo b nh mt bn sao ca m chng trnh v tt ccc tin trnh ging nhau cng s dng mt m ny.

    Th vin chung phn chia cc th vin thnh cc th vin ng (dynamic) v tnh(static), cho php gim kch thc b nh b ng dng chim.

    B m ng ca a b nh c d tr cho b m c gim xung khi b nhkhng c s dng, v tng ln khi h thng hay tin trnh cn nhiu b nh hn.

    H tr cc nh dng h thng tp tin khc nhau h tr mt s lng ln cc nhdng h thng tp tin, bao gm cc h thng tp tin DOS v OS/2, v c cc h thngtp tin mi, nh reiserfs, HFS,... Trong khi h thng tp tin chnh ca Linux, c gil Second Extended File System (ext2fs) v Third Extended File System (ext3fs) cho phps dng khng gian a mt cch c hiu qu.

    Kh nng h tr mng h tr tt c cc dch v Unix, bao gm Networked File System(NFS ), kt ni t xa (telnet, rlogin, ssh), lm vic trong cc mng TCP/IP, truy cpdial-up qua cc giao thc SLIP v PPP,... ng thi c h tr chia s cc tp tin v in txa trong cc mng Macintosh, Netware v Windows.

    2.6 Cc bn phn phi h iu hnh

    Hin nay c rt nhiu bn phn phi h iu hnh Linux trn ton th gii, phn ln cc bnny c th ti v ci t thng qua kt ni mng. iu ny cho php ngi dng c th lachn h iu hnh cho h theo nhng nhu cu cn thit. Cc bn phn phi u c duy tr vqun l bi cc c nhn, t chc tnh nguyn hoc cc cng ty. Mt bn phn phi hon chnhbao gm nhn Linux c ci t, h thng bo mt chung v cc gi phn mm cn thit.Cc bn phn phi khc nhau s dng cc trnh qun l gi khc nhau nh dpkg, Synaptic,YAST, yum hoc Portage ci t, loi b, v cp nht tt c cc phn mm trong h thng.

    Mt s bn phn phi Linux ni bt v c nhiu ngi s dng nht bao gm

    Debian GNU/Linux: h iu hnh c xy dng t D n Debian, da trn nhnLinux vi nhiu cng c c bn ly t d n GNU, s dng h thng qun l gi ng dngAPT (Advanced Packaging Tool).Trang web: http://www.debian.org/

    Ubuntu: h iu hnh da trn Debian GNU/Linux.Trang web: http://www.ubuntu.com/

    6

  • ng Nguyn Phng Ti liu ni b NMTP

    Red Hat Enterprise Linux: bn phn phi Linux c pht trin bi cng ty Red Hatv mc tiu hng ti th trng thng mi.Trang web: http://www.redhat.com/rhel/

    Fedora: bn phn phi Linux da trn h thng qun l gi ng dng RPM (RedHatPackage Manager), c pht trin theo D n Fedora.Trang web: http://www.fedoraproject.org/

    SUSE Linux: h iu hnh m ngun m xy dng da trn nhn Linux.Trang web: http://vi.opensuse.org/

    CentOS: c ngun gc t bn phn phi Red Hat Enterprise Linux (RHEL).Trang web: http://www.centos.org/

    OpenSolaris: h iu hnh m ngun m da trn nn tng h iu hnh Solaris (dnhcho Unix) trc c to bi cng ty Sun Microsystems.Trang web: http://www.opensolaris.org/

    Scientific Linux: h iu hnh c pht trin da trn nn tng ca Enterprise Linuxti Fermilab, CERN v nhiu phng th nghim khc trn th gii nhm a vo mt scng c (vd: Alpine,OpenAFS,...) phc v cho cc nghin cu ang c tin hnh v thitlp mt nn tng chung cho cc th nghim khc nhau trn ton th gii.Trang web: https://www.scientificlinux.org/

    3 Linux c bn

    3.1 Shell

    Nh ni trn, h thng Linux nhn n thun c th khi qut thnh 2 phn chnh: phnh thng (c trng bi nhn h iu hnh), v phn ngi dng (bao gm cc chng trnhng dng, cng c). Vic thao tc trc tip ti nhn h iu hnh l rt phc tp v i hik thut cao, trch s phc tp cho ngi s dng v bo v nhn t nhng sai st cangi s dng, ngi ta xy dng mt ng dng tng t nh mt lp v (shell) bao quanhnhn (xem Hnh 3).

    Hnh 3: Hnh nh minh ha cu trc h iu hnh Linux

    V c bn, shell l mt giao din (interface) tng tc gia ngi dng v nhn h iu hnh.N thng dch cc lnh ca ngi dng nhp vo hoc t cc tp tin theo mt c php chotrc v chuyn n n nhn ca h iu hnh x l tip, sau tr li kt qu cho ngi

    7

  • ng Nguyn Phng Ti liu ni b NMTP

    dng. Shell khng phi l mt phn ca nhn h iu hnh nhng n s dng nhn thc thicc lnh, chng trnh.

    Cc loi shell thng c s dng trong Linux gm c

    Bourne Shell (sh) l shell nguyn thy t h iu hnh Unix, c pht trin bi StephenBourne thuc phng th nghim AT&T Bell v pht hnh ln u tin trn phin bn Unix7 nm 1977. Phn khi to mc nh cho cc tin trnh shell ny mc nh l /bin/sh.

    C Shell (csh) c pht trin bi Bill Joy v c pht hnh vo nm 1979 trn cc hthng BSD Unix, cung cp ngn ng dng lnh tng t nh ngn ng lp trnh C gipto thun li cho ngi lp trnh ngn ng ny. Ngy nay, C shell khng cn c s dngnhiu trn cc h thng Unix/Linux na m c thay th bng TENEX C Shell (tcsh).

    Korn Shell (ksh) c pht trin bi David Korn (cng ti phng th nghim AT&TBell) u nhng nm 80. N c kh nng tng thch ngc vi Bourne shell v n cngk tha mt s tnh nng ca C Shell. Phn khi to mc nh cho cc tin trnh shell nymc nh l /bin/ksh.

    Bourne Again Shell (bash) c vit bi Brian Fox nm 1987 cho d n GNU, y lshell mc nh ca Linux, c ci sn trong hu ht cc h iu hnh Linux hin nay,ngoi ra cn c trn Mac OS X. Phn khi to mc nh l /bin/bash.

    Z Shell (zsh) c vit bi Paul Falstad vo nm 1990, y l shell mi nht tch hp y cc tnh nng ca cc shell trc v nhng ci tin nh tnh nng t hon thnhcu lnh (autocomplete), kim tra li c php (spelling correction), cu lnh nhiu dng(multi-line command),...

    3.2 Terminal

    tng tc c vi shell chng ta cn mt chng trnh giao tip, trong Linux c hai phngthc giao tip gm c

    S dng Giao din ha ngi dng (Graphical User Interfaces GUI) trong hu htcc h iu hnh Linux hin nay u c sn phn giao din ny, trong ta c th thoimi s dng chut tng t nh trong h iu hnh Windows.

    S dng Giao din dng lnh (Command Line Interface CLI) y l giao din truynthng ca Linux, tt c cc iu khin my tnh u phi thng qua vic nhp cc dnglnh. u im ca phng thc ny l nhanh gn v x l c nhiu cng vic, tuy nhinkhuyt im ca n l vic hc v ghi nh cc cu lnh l kh kh khn.

    Trong ti liu ny, tc gi s tp trung vo vic hng dn s dng CLI hn l GUI vn ququen thuc vi ngi dng.

    giao tip vi shell qua dng lnh ta cn mt chng trnh giao tip, trong Linux chng trnhny c gi l Terminal Emulator hay gi tt l Terminal. C rt nhiu Terminal khc nhauc vit cho Linux, chng hn nh Konsole (KDE), Gnome Terminal (Gnome),... tuy nhincc lnh trong Terminal lun thng nht nhau gia cc phin bn Linux.

    Mt s phm tt thng dng trong Terminal :Ctrl-L xa mn hnhCtrl-D thotCtrl-R tm lnh chy trc Tab t ng hon tt cu lnhCtrl-Ins sao chpShft-Ins dn

    8

  • ng Nguyn Phng Ti liu ni b NMTP

    Shft-PgUp (PgDn) cun mn hnh ln (xung)Shft-Alt-Fn chuyn sang terminal th n

    3.3 Cc lnh thao tc vi ti khon ngi dng

    Linux l h iu hnh a ngi dng, c ngha l nhiu ngi c th cng truy cp v s dngmy tnh cng mt lc. Trong Linux c hai loi ngi dng l ngi dng thng thng (regularuser) v siu ngi dng (super user). c th truy cp c h thng my tnh c s dngLinux, mi ngi dng cn phi to mt ti khon (account) cho ring mnh, cc thng tin trongti khon ngi dng gm c

    Tn ti khon (username): ti a 8 k t, tn ti khon c phn bit ch hoa, chthng; thng thng ngi dng hay t tt c l ch thng.

    Mt khu (password): c m ho v c t trong file /etc/shadow.

    UID (user identification): s ID ca ngi dng, l mt s nguyn dng duy nht ch iu hnh gn cho mi ti khon ngi dng gip h thng phn bit gia cc ngidng khc nhau. Mt s im lu dnh cho UID:

    Ngi dng c UID = 0 l ngi dng c quyn qun tr h thng cao nht (root).

    UID ca ngi dng bnh thng c gi tr khc 0.

    UID = 65534 c gn cho ti khon nobody (ngi dng khng c quyn qun tr).

    UID = 1 999 c dnh cho cc ti khon h thng (mail, daemon, sshd,...). GID (group identification): s ID ca nhm ngi dng (mi ngi dng lun l thnh

    vin ca mt nhm). Ngi dng trong cng mt nhm c quyn hn nh nhau, thngthng th tt c ngi dng u thuc vo nhm User (tr root v cc ti khon dnhring cho h thng), mi ngi dng ch c quyn thao tc trong th mc ring ca mnhv nhng th mc khc c php ca h thng. Ngi dng ny khng th truy cp voth mc ring ca ngi dng khc (tr trng hp c chnh ngi dng hoc rootcho php).

    Thng tin c nhn: thng gm tn y ca ngi dng hoc cc thng tin khc clin quan.

    Th mc ring (home directory): mi ngi dng c cp mt th mc ring, thngl th mc con ca th mc /home v c tn c t trng vi tn ti khon trnhnhm ln (vd: tn ti khon l phuong th th mc ring l /home/phuong. Ring i viti khon root th th mc ring l /root.

    ng nhp (login) vo h thng, ngi dng cn cung cp hai thng tin cn thit l tnngi dng (username) v mt khu (password).

    Kim tra thng tin ngi dng bng cch xem tp tin /etc/passwd thng qua lnh

    sudo cat /etc/passwd

    Tp tin passwd l tr ton b thng tin ca tt c ngi dng, bn di l v d ni dung catp tin passwd ny. Trong tp tin, thng tin ca mi ngi dng nm trn 1 dng, c ngncch bi du :. Trong v d di, ti khon dang (ch mu ) bao gm cc thng tin nhtn ti khon (dang), mt khu ( m ho), UID (1000), GID(1000), thng tin c nhn (DangNguyen Phuong), th mc ring (/home/dang), shell ng nhp (/bin/bash).

    9

  • ng Nguyn Phng Ti liu ni b NMTP

    . . . . . . .kernoops : x : 1 0 8 : 6 5 534 : Kernel Oops Tracking Daemon , , , : / : / bin/falsepulse : x : 1 0 9 : 1 1 6 : PulseAudio daemon , , , : / var/run/pulse : / bin/falsertkit : x : 1 1 0 : 1 1 9 : RealtimeKit , , , : / proc : / bin/falsehplip : x : 1 1 1 : 7 : HPLIP system user , , , : / var/run/hplip : / bin/falsesaned : x : 1 1 2 : 1 2 1 : : / home/saned : / bin/falsedang : x : 1 0 00 : 1 0 00 :Dang Nguyen Phuong , , , : / home/dang : / bin /bashmpd : x : 1 1 3 : 2 9 : : / var/lib/mpd : / bin/falsesshd : x : 1 1 4 : 6 5 5 3 4 : : / var/run/sshd : / usr/sbin/nologinguest : x : 1 1 5 : 1 2 5 : Guest , , , : / tmp/guesthome . hy7SXb : / bin/bash

    Ti khon root cn c gi l ti khon siu ngi dng, v l ti khon c quyn cao nhttrn h thng Linux. Ngi dng c th s dng ti khon root thc hin mt s cng vicqun tr h thng nh thm cc ti khon ngi dng mi, thay i mt khu ca ngi dng,ci t v g b phn mm, thay i quyn ca cc tp tin v th mc,... Khi s dng ti khonroot, ngi dng phi rt cn thn v mi thao tc trong ti khon ny s nh hng trc tipn c h thng.

    Mt s lnh lm vic vi ti khon root

    Thay i password cho root

    sudo passwd root

    Chuyn sang ti khon root

    su

    Thc thi lnh vi quyn root bng cch thm sudo pha trc lnh

    Trong mt s h iu hnh chng hn nh Ubuntu, ti khon root mc nh b kha, iu nyc ngha l ngi dng khng th ng nhp trc tip vi ti khon root hoc s dng lnh su tr thnh root. Nhng ngi dng vn c th chy cc chng trnh vi c quyn ca rootthng qua lnh sudo. Ngoi ra, khi ci t Ubuntu, ti khon ngi dng u tin c to sthuc nhm Admin c quyn qun tr h thng.

    Ti khon ngi dng l ti khon cho php ngi dng c th truy cp v lm vic trnh thng. to mt ti khon ngi dng mi, thay i cng nh xa b ti khon ny, taphi s dng quyn ca mt siu ngi dng.

    Mt s lnh lm vic vi ti khon ngi dng

    To ti khon ngi dng

    sudo useradd [ options ]

    hoc

    sudo adduser [ options ]

    Mt s ty chnh cho lnh useradd-d, --home HOME_DIR khai bo th mc ring-m, --create-home to th mc ring trong trng hp khng c trc -p, --password PASSWORD khai bo mt khu-s, --shell SHELL khai bo shell ng nhp

    10

  • ng Nguyn Phng Ti liu ni b NMTP

    -u, --uid UID khai bo UID-g, --gid GROUP khai bo GID-e, expiredate EXPIRE_DATE khai bo ngy ht hn ca ti khon (YYYY-MM-DD)

    Xa ti khon ngi dng

    sudo userdel [ options ]

    Mt s ty chnh cho lnh userdel-f, --force xa ngay c khi ngi dng ang ng nhp-r, --remove xa th mc ring v cc tp tin cha trong

    To nhm

    sudo groupadd [ options ]

    Xa nhm

    sudo groupdel [ options ]

    Chuyn sang ti khon ca ngi dng khc

    su

    Thay i mt khu

    sudo passwd [ options ]

    Thay i thng tin ti khon ngi dng

    sudo usermod [ options ]

    V d:To ti khon ngi dng c tn phuong, th mc ring l phuong1, shell ang nhp l bashshell v ch s UID l 1001

    $ sudo useradd m d /home/phuong1 s /bin/bash u 1001 phuongThay i mt khu

    $ sudo passwd phuong

    Xa ti khon va c to

    $ sudo userdel r f phuong

    3.4 Cc lnh thao tc vi th mc v tp tin

    Linux t chc th mc v tp tin theo cu trc cy ging nh DOS v Windows. V ng dn,ta c th dng ng dn tng i hoc ng dn tuyt i nh trong DOS. im khc bitln nht l Linux s dng du / phn cch cc cp th mc thay v dng du \ nh trongDOS. Mt s th mc chnh trong Linux (xem Hnh 4) gm c

    /home cha cc th mc ring ca ngi dng/bin cha cc ng dng (binary application)/boot cc tp tin cu hnh cho qu trnh khi ng h thng/etc cha cc tp tin cu hnh h thng cc b/dev cha cc tp tin thit b/lib cha cc th vin h thng (system libraries)

    11

  • ng Nguyn Phng Ti liu ni b NMTP

    /lost+found cha cc tp tin khng c th mc m/media cha cc tp tin lin kt c to ra khi mt thit b lu ng cm vo/mnt gn cc h thng tp tin tm thi (mounted filesystems)/opt cha cc phn mm ng dng c ci t thm/proc cha cc thng tin v tnh trng ca h thng, cc tin trnh ang hot ng/root th mc ring ca root/sbin cha cc tp tin thc thi ca h thng (system binaries)/sys cha cc tp tin ca h thng (system files)/tmp cha cc tp tin c to ra tm thi (temporary files)/usr cha nhng tp tin ca cc ng dng chnh c ci t cho mi ngi dng/usr/src cha m ngun/usr/include cha cc tp tin header ca C/usr/bin cha hu ht cc lnh thc thi ca ngi dng/usr/lib cha cc file th vin ca cc chng trnh ngi dng/usr/local cha cc chng trnh b sung khng thuc h thng/usr/man cha cc ti liu trc tuyn/var cha cc tp tin ghi cc s liu bin i (variable files)/var/log cha cc tp tin lu tr thng tin lm vic hin hnh ca ngi dng

    Hnh 4: V d cu trc th mc ca Linux

    Mt s lnh thao tc trn th mc v tp tin

    Di chuyn n th mc

    cd

    Trong Linux, du . cho bit l th mc hin hnh, du .. ch th mc cao hn mtcp (th mc m). Nu ng dn bt u bng / th h thng xem nh l tn ngdn tuyt i (cc th mc gc u bt u bng /), ng dn bt u bng l mtng dn tng i. Nhng k hiu ny c th c s dng cng vi nhau.Di chuyn v th mc ring ca ngi dng

    $ cd

    Di chuyn ln th mc m (cao hn 1 cp)

    $ cd . .

    Di chuyn ti mt th mc bt k theo ng dn tuyt i

    12

  • ng Nguyn Phng Ti liu ni b NMTP

    $ cd /home/dang/Documents/presentations

    Di chuyn ti mt th mc bt k theo ng dn tng i

    $ cd ~/Documents/presentations

    Di chuyn ti mt th mc bt k theo v tr tng i so vi th mc hin ti

    $ cd . . / . . / Documents/presentations

    Xem v tr th mc hin hnh

    pwd

    Lit k th mc, tp tin

    ls [ options ]

    lit k th mc v tp tin cng vi thng tin chi tit, ta c th s dng ty chnh -l.Nu mun lit k vi i tng c cha k t hoc chui k t no , ta c th dng kt * dng thay th cho cc chui k t khng quan tm. lit k cc tp tin n ta sdng ty chnh -a.Lit k tp tin v th mc cha trong th mc presentations vi thng tin chi tit

    $ ls l ~/Documents/presentationsLit k cc cc tp tin c ui .pdf

    $ ls ~/Documents/presentations / . pdf

    To th mc

    mkdir

    Xa th mc, tp tin

    rm

    v

    rm r xa ton b th mc cng vi cc tp tin bn trong, ta s dng

    rm rf

    Gn quyn truy cp Mi tp tin hoc th mc trn Linux u thuc s hu ca mt ngidng v mt nhm no . C ba loi i tng

    Ngi s hu (owner): ngi u tin to ra tp tin hoc th mc

    Nhm s hu (group): nhm m ngi s hu thuc vo

    Ngi khc (others): nhng ngi cn li

    Linux cho php ngi dng xc nh cc quyn c (read), ghi (write) v thc thi (execute) chotng i tng. Khi ta s dng lnh ls -l, kt qu xut ra c dng nh sau

    $ ls ldrwxrxrx 2 dang dang 4096 20131001 18 :40 directoryrwrr 1 dang dang 6673 20111223 03 :14 file

    13

  • ng Nguyn Phng Ti liu ni b NMTP

    ct u tin ta thy mt dy k t chng hn nh drwxr-xr-x, k t u tin dng ch rai tng l th mc (d) hay tp tin (-). Cc k t tip theo c chia lm 3 nhm: quynca ngi s hu (3 k t u), nhm s hu (3 k t tip) v ngi dng khc (3 k t cui).Cc quyn gm c read (r), write (w) v execute (x).

    Mt s lnh v quyn truy cp th mc v tp tin

    Thay i quyn truy cp

    chmod [ options ]

    Trong , cc ty chnh bao gm cc khai bo sau: Khai bo nhm ngi dng: u l user ; g l group; o l others; a l all. Thao tc: + l thm quyn; l xa quyn; = l gn quyn. Quyn: r l read ; w l write; x l execute.

    Ngoi ra ta cng c th s dng ch s gn quyn: read (4), write (2) v execute (1).Trong trng hp mun gn quyn c v ghi ta s dng s 6 (= 4 +2), ch c v thcthi l s 5 ( = 4 + 1) v ton b cc quyn l s 7 (= 4 + 2 + 1).V d: Gn ton quyn cho ngi s hu, ch c v thc thi cho nhng ngi cn li

    $ chmod u=rwx , g=rx , o=rx file$ chmod 755 file

    Thay i ngi s hu

    chown [ owner : group ]

    V d: Thay i ngi s hu l phuong thuc nhm abc

    $ chown phuong : abc file

    thay i ngi s hu, nhm s hu ca th mc v tt c th mc con bn trong, tas dng thm ty chnh -R.

    $ chown R phuong : abc file

    Thay i nhm s hu

    chgrp [ newgroup ]

    3.5 Cc lnh iu khin tin trnh

    Tin trnh (process) l mt chng trnh n chy trn khng gian a ch o ca n. Cn phnbit tin trnh vi lnh v mt dng lnh trn shell c th sinh ra nhiu tin trnh.

    C 3 loi tin trnh chnh trn Linux:

    Tin trnh tng tc (interactive process) tin trnh khi ng v qun l bi shell.

    Tin trnh batch (batch process) tin trnh khng gn lin vi terminal v c nm tronghng i (queue) ln lt thc hin.

    Tin trnh daemon (daemon process) daemon l vit tt ca Disk And Execution MONitor,y l cc tin trnh chy ch ngm v c khi ng t u, cc daemon thngc h thng pht sinh t ng v c th hot ng lin tc hay pht sinh nh k.

    ly thng tin trng thi ca cc tin trnh, ta c th s dng nhiu lnh khc nhau, mttrong nhng lnh l ps, v d nh

    14

  • ng Nguyn Phng Ti liu ni b NMTP

    $ psPID TTY TIME CMD

    3096 pts/0 00 : 00 : 00 bash3666 pts/0 00 : 00 : 00 ps

    Ct u tin l s ID ca tin trnh (Process Identification PID), mi tin trnh ca Linuxu mang mt s ID v cc thao tc lin quan n tin trnh u thng qua s PID ny. Ctth hai cho thy tn thit b u cui m trn chng trnh c thc hin, ct th ba lthi gian v ct cui cng l lnh to ra tin trnh ang chy.

    hin th tt c cc tin trnh, ta c th s dng thm ty chnh -a, ty chnh -x cho phphin th c nhng tin trnh khng gn lin vi thit b u cui (TTY). Chng ta cng c thxem thng tin y ca cc tin trnh ang chy bng -axl.

    Ngoi ra ta cng c th s dng lnh top xem trng thi ca cc tin trnh (bm q thot)

    $ top

    top 05 : 57 : 33 up 3 : 35 , 2 users , load average : 0 . 00 , 0 . 11 , 0 .18Tasks : 163 total , 1 running , 161 sleeping , 0 stopped , 1 zombieCpu (s ) : 9.1%us , 3.8%sy , 0.0%ni , 86.5%id , 0.7%wa , 0.0%hi , 0.0%si ,

    0.0%stMem : 2049688k total , 1925156k used , 124532k free , 209008k buffersSwap : 2084860k total , 28k used , 2084832k free , 1023704k cached

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND1942 dang 20 0 332m 74m 24m S 23 3 .7 36 : 10 . 10 plugin

    containe1011 root 20 0 59012 23m 10m S 8 1 .2 25 : 48 . 40 Xorg1518 dang 9 11 158m 5824 4500 S 7 0 .3 7 : 0 3 . 9 3 pulseaudio3089 dang 20 0 94540 14m 10m S 7 0 .7 0 : 0 4 . 7 7 gnometerminal1848 dang 20 0 655m 228m 36m S 1 11 .4 39 : 00 . 79 firefox3668 dang 20 0 2632 1156 860 R 1 0 .1 0 : 0 0 . 0 9 top1516 dang 20 0 179m 41m 19m S 1 2 .1 13 : 24 . 43 compiz

    1 root 20 0 3048 1860 1276 S 0 0 .1 0 : 0 2 . 2 0 init2 root 20 0 0 0 0 S 0 0 .0 0 : 0 0 . 0 0 kthreadd3 root 20 0 0 0 0 S 0 0 .0 0 : 0 1 . 9 2 ksoftirqd/0

    . . . . . .

    dng mt tin trnh, ta s dng lnh kill

    kill [ signal ]

    Gi tr mc nh ca signal l 15 (kt thc tin trnh), ngoi ra ta cng c th s dng ccgi tr khc nh 9 (ngng thi hnh tin trnh m khng b cc tin trnh khc can thip) hay 2(ngng t bn phm vi Ctrl+C).

    3.6 Lnh ci t cc gi phn mm, ng dng

    ci t cc gi ng dng trong Linux, ta c th s dng cc chng trnh qun l gi khcnhau. Mi h iu hnh Linux s dng mt nh dng cc gi phn mm ci t khc nhau.Cc h iu hnh thuc Red Hat nh Fedora, OpenSUSE,... c cc gi phn mm c ui l.rpm, trong khi cc h iu hnh Debian c cc gi phn mm c ui .deb.

    i vi cc h iu hnh Red Hat, hai trnh qun l gi thng dng l rpm (Redhat PackageManager) v yum (Yellowdog Updater Modified)

    15

  • ng Nguyn Phng Ti liu ni b NMTP

    ci t vi yum, ta s dng lnh

    $ yum install

    g b ta dng lnh

    $ yum remove

    ci t vi trnh rpm ta c th s dng lnh

    $ rpm ivh

    g b ta dng lnh

    $ rpm e

    i vi cc h iu hnh Debian hay Ubuntu, hai trnh qun l gi thng dng l apt (AdvancedPackage Tool) v dpkg (Debian Package)

    Vi apt, ta c th ci t gi phn mm thng qua lnh

    $ sudo aptget install

    g b ta dng lnh

    $ sudo aptget remove

    ci t trc tip t gi phn mm (thng c ui .deb) ta c th s dng dpkg

    $ sudo dpkg i

    g b ta dng lnh

    $ sudo dpkg r

    Ngoi ra, ta cng c th ci t trc tip cc gi phn mm t m ngun (thng c nn lidi dng tarball c ui .tar, .tar.gz, .tar.bz2,.tgz,...). Cch thc thc hin nh sau

    $ tar zxvf .tar . gz # g i a i nen$ cd # vao trong thu muc package$ . / configure # kiem tra va t h i e t lap cau hinh ca i dat$ make # bien dich$ make install # chep chuong t r i nh vua bien dich vao he thong

    4 Cc cng c Linux thng dng

    4.1 Lnh echo

    y l lnh dng hin th dng vn bn, gi tr bin

    C php

    echo [ option ]

    Mt s ty chnh cho lnh echo-n khng in k t xung dng-e cho php hiu nhng k t theo sau du \ trong chui

    Mt s k t c bit cho chui gm c

    16

  • ng Nguyn Phng Ti liu ni b NMTP

    \a ting chung\b backspace\c khng xung dng\n xung dng\r v u dng\t tab\\ du \

    V d:

    $ echo ' Hello 'Hello$ echo "Today ' s date is $ ( date ) "Today ' s date is Sun Dec 15 08 : 29 : 37 ICT 2013$ echo $HOME/home/dang$ echo {one , two , red , blue}fishonefish twofish redfish bluefish

    Cc du nhy c 3 loi du nhy sau

    Du nhy n (single quote) : nhng g nm trong du nhy ny c ngha khng i.

    Du nhy kp (double quote) : nhng g nm trong du nhy ny c xem l nhng kt ring bit.

    Du nhy ngc (backtick) ` `: thc thi lnh.

    V d:

    $ echo "$ ( date ) "Sun Dec 15 08 : 29 : 37 ICT 2013$ echo '$ ( date ) '$ ( date )$ echo `date`Sun Dec 15 08 : 29 : 37 ICT 2013

    Hin th mu sc thay i mu ch xut ra mn hnh ca lnh echo ta thm vo chuik hiu iu khin escape (\033 hoc \e) cng vi s hiu ca mu mun th hin cho chui trnmn hnh

    V d: thay i mu ch

    $ echo e "\033[34m This is blue text"This i s b lue t ext

    $ echo e "\033[0m This i s normal t ex t "This is normal text

    $ echo e "\e [ 34 m This is blue text\e [ 0 m"This i s b lue t ext

    $ echo e " This is normal text"This is normal text

    Ta c th in m ch ln bng cch thm cc k hiu ch thuc tnh hin th vo (cch nhau bidu ;). Cc thuc tnh thng dng gm c 1 (in m), 5 (nhp nhy), 7 (o mu),...

    V d: thay i thuc tnh

    17

  • ng Nguyn Phng Ti liu ni b NMTP

    $ echo e "\e [ 34 m This is blue text\e [ 0 m"This i s b lue t ext

    $ echo e "\e [ 1 ; 3 4 m This is bold blue text\e [ 0 m"This i s bold blue text

    Cc mu ch chun trong Linux c nh s t 30 n 37, cc mu phng nn tng ng cngc nh s t 40 n 47, pha di l danh sch cc mu ch chun

    30 en31 32 xanh l cy33 nu34 xanh nc bin35 hng36 xanh da tri37 xm (trng i vi phng nn)0 mu ban u

    V d: thay i mu ch v phng nn

    $ echo e "\e [ 4 3 ; 3 4 m Yellow blue \e [ 4 7 ; 3 0 m Black and white"Yellow blue Black and white

    4.2 Mt s lnh Linux c bn

    cp sao chp tp tin hoc th mc ( sao chp th mc ta phi s dng thm ty chnh -r)

    $ cp file1 file2 # copy f i l e 1 thanh f i l e 2$ cp file directory/ # copy f i l e vao thu muc d i r e c t o r y$ cp r dir1/ dir2/ # copy ta t ca tap t i n va thu muc trong d i r 1 vao d i r 2

    more hin th ni dung cc tp tin (nhn phm q thot)

    $ more file

    less tng t lnh more nhng khng lu li ni dung tp tin sau khi thot

    $ less file

    grep tm kim mt chui k t

    $ grep " s t r i n g " file

    find tm kim tp tin

    $ find /path name file

    man hin th hng dn s dng lnh

    $ man command

    cat hin th ni dung hay ni cc tp tin

    $ cat file1 # hien th i no i dung tap t i n$ cat file1 file2 > file # noi tap t i n

    18

  • ng Nguyn Phng Ti liu ni b NMTP

    diff so snh ni dung 2 tp tin

    $ diff file1 file2

    gzip nn mt tp tin km theo ui .gz

    $ gzip file

    gunzip gii nn tp tin

    $ gunzip file

    tar nn v gii nn tp tin, th mc km theo ui .tar

    $ tar cf file . tar file # nen tap t i n$ tar zxvf file . tar # g i a i nen tap t i n

    alias gn tn cho lnh

    $ alias name=command

    clear xa mn hnh

    $ clear

    date hin th ngy thng

    $ date

    expr tnh ton biu thc, c th c thay th bng $(( ))

    $ expr 1 + 3$ expr 10 / 2$ expr 20 % 3

    file xc nh kiu tp tin

    $ file

    Cc lnh kim tra dung lng

    $ df h # kiem tra dung luong dia cung$ du h # kiem tra dung luong thu muc hien tho i va thu muc con$ du sh # chi kiem tra dung luong thu muc hien tho i

    4.3 Cc k t c bit

    Trong Linux c s dng mt s k t c bit chng hn nh# bt u phn ch thch (comment); phn cch nhiu lnh trn mt dng lnh? i din cho 1 k t hay thc hin lnh test* i din cho chui k t& chy ng dng ch nn (background), tr li du nhc cho tc v khc\ tt tc dng ca nhng k t c bit( ) gom cc lnh thnh mt nhm{ } tp hp (list)

    19

  • ng Nguyn Phng Ti liu ni b NMTP

    : lnh rng (null command)> nh hng d liu xut ra file< nh hng d liu nhp t file>> nh hng d liu xut ra cui file nu file tn ti| nh hng d liu xut l d liu nhp cho lnh tip theo$ s dng ni dung bin&& cu lnh nm sau k t ch c thc hin khi cu lnh pha trc thnh cng|| cu lnh nm sau ch c thc hin khi cu lnh pha trc khng thnh cng

    V d:Vit nhiu lnh trn cng 1 dng

    $ cd ~/my_dir ; rm . txt ; mkdir my_sub_dir

    t gi tr cho bin

    $ var1=100$ ( ( var2 = var1 combined_file

    Nu tp tin test1.txt tn ti, in ra tn ca tp tin ny v kim tra tip s tn ti ca test2.txt,nu ng th in ra tip tn test2.txt

    $ [ f test1 . txt ] && echo " t e s t 1 . txt " && [ f test2 . txt ] && echo " t e s t 2 .txt "

    4.4 Filter v pipe

    Filter hay cn gi l b lc, l mt chng trnh ly d liu vo t thit b nhp, x l (hoclc) n v gi kt qu n thit b xut. Mt s filter thng dng gm c

    grep l lnh tm kim cc dng c cha mt chui hoc t kha trong file, mt s c phpca lnh

    $ grep [ options ] 'word ' filename$ grep [ options ] ' string1 string2 ' filename

    Ty chnh cho lnh:-i khng phn bit ch hoa hay thng trong qu trnh tm-w ch a ra kt qu chnh xc vi t kha-c m s dng kt qu c tm thy-n hin th th t mi dng ca kt qu-v in o ngc kt qu (ch in nhng dng khng cha t kha)

    wc l lnh thc hin vic m trong tp tin

    $ wc [ options ] filename

    Ty chnh cho lnh:

    20

  • ng Nguyn Phng Ti liu ni b NMTP

    -c m s byte-m m s k t-l m s dng-L chiu di ca dng di nht-w m s t

    tr dng chuyn i cc k t

    $ tr {sample1} {sample2}

    Ty chnh cho lnh:-c m s byte-m m s k t-l m s dng-L chiu di ca dng di nht-w m s t

    Chuyn i a thnh 1 v * thnh b

    $ tr "a" "1b" < filename

    Chuyn i ch thng thnh ch hoa

    $ tr " [ az ] " " [AZ ] " < filename

    cut ly ra mt ct d liu hay phn ch ra t cc dng trong tp tin

    $ cut [ options ] filename

    Ty chnh cho lnh:-b LIST ch chn cc byte ny-c LIST ch chn cc k t ny-d DELIM s dng DELIM thay cho tab phn cch cc ct-f LIST ch chn cc ct ny

    Ly cc k t t v tr 1-3 trong tp tin test.txt

    $ cat test . txtcat command for file oriented operations .cp command for copy files or directories .ls command to list out files and directories with its attributes .$ cut c13 test . txtcatcpls

    Ly tn nhn vin trong tp tin name.txt

    $ cat name . txt406378: Sales : Itorre : Jan031762: Marketing : Nasium : Jim636496: Research : Ancholie : Mel$ cut d : f3 name . txtItorreNasiumAncholie

    uniq thc hin vic g b cc dng ch ging v k nhau

    $ uniq filename

    21

  • ng Nguyn Phng Ti liu ni b NMTP

    Pipe cho php kt hp nhiu lnh v x l chng nh mt lnh bng cch ly kt qu cacu lnh trc v gi chng nh d liu vo cho cu lnh sau. Pipe c biu din bi mt dugch ng (|).

    V d: xem tn y ca user dang cng vi ng dn ti th mc ring v shell mc nh

    $ cat /etc/passwd | grep "\dang : " | cut d ' : ' f5 , 6 , 7Dang Nguyen Phuong , , , : / home/dang : / bin/bash

    V d: hin th ngy ca tun

    $ date | cut d ' ' f1Sun

    V d: hin th tn cc user v thi gian h ng nhp

    $ who | tr s ' ' | cut d ' ' f1 , 4dang 18 :01dang 18 :09

    4.5 Mng v chui

    Mng c dng array[N], mt s lnh dnh cho mng nh sau

    Khai bo mng

    $ declare a arrayhoc

    $ array=(item1 item2 item3 . . . . )

    hoc

    $ array=([i ]=X [ j ]=Y . . . . )

    Ly gi tr ca mt phn t trong mng

    $ {array [ i ] }

    Ly tt c cc phn t trong mng

    $ ${array [ @ ] }$ ${array [ ] }

    Tng s phn t c trong mng

    $ ${#array [ @ ] }$ ${#array [ ] }

    Xa mt phn t c trong mng

    $ unset array [ i ]

    Xa ton b mng

    $ unset array

    22

  • ng Nguyn Phng Ti liu ni b NMTP

    Chui l mt dy cc k t, mt s lnh dnh cho chui nh sau

    Khai bo chui

    $ string=abcABC123ABCabc

    Chiu di chui

    $ ${#string}

    hoc

    $ expr length $string

    hoc

    $ expr " $ s t r i n g " : ' . '

    V tr ca k t trong chui

    $ expr index $string $substring

    Ly chui con

    $ ${string : position} # lay chuoi con tu v i t r i p o s i t i o n$ ${string : position : length} # lay chuoi con co do dai l ength tu v i t r i

    p o s i t i o n

    Xa chui con

    $ ${string#substring} #xoa chuoi sub s t r i ng ngan nhat t inh tu dau chuoi$ ${string##substring} #xoa chuoi sub s t r i ng dai nhat t inh tu dau chuoi

    Thay th chui

    $ ${string/substring/replacement} # thay the chuoi sub s t r i ng dau t i e nbang replacement

    $ ${string//substring/replacement} # thay the ta t ca chuoi sub s t r i ngbang replacement

    4.6 Trnh son tho vn bn

    Trong Linux c rt nhiu trnh son tho vn bn khc nhau, nhm gip ngi dng to ra ccd liu vn bn, th in t, danh sch, bn ghi ch, bo co,... Bn cnh cc trnh son thov hin th vn bn c sn trong Linux nh nano, cat,... phn ny s gii thiu thm mt strnh son tho vn bn c nhiu ngi s dng hin nay.

    Gedit l mt trnh son tho vn bn n gin, c ci t mc nh trong mi h thngGNOME. im mnh ca trnh son tho Gedit l n c b sung thm rt nhiu trnh h tr(plugin) chnh thng hoc t cc nh pht trin th 3. Mt s trnh h tr thng dng chnghn nh

    Bracket Completion: t ng ng ngoc (( )), ([ ]), ({ }), (< >)

    Charmap: chn k t t bn k t

    Code Comment : nh du ghi ch bng phm tt

    Join lines/ Split lines: ni, ct dng vi Ctrl-J hoc Shft-Ctrl-J

    23

  • ng Nguyn Phng Ti liu ni b NMTP

    Session Saver : lu li mt phin lm vic

    Smart Spaces: t ng lm sp xp khong trng u dng ca cc on m lnh bngphm tt Ctrl-T hoc Shft-Ctrl-T

    Emacs (Editor MACroS ) l trnh son tho vn bn a chc nng, chy c trn nhiu hiu hnh v c th m rng thm vo chc nng mi. Emacs ph bin trong gii lp trnhmy tnh v ngi dng my tnh thng tho k thut. Mt s tnh nng c trng ca emacsgm c

    Son tho trn nhiu ca s v b m (buffer)

    Tm kim, thay th, t sa li

    Son tho quy (recursive edit): cho php son tho khi mt cu lnh ang thc hingia chng

    Nhiu ch son tho: vn bn thng, cc file chng trnh (t mu c php v thchin tng on m lnh), ngn ng nh du (HTML), LaTeX, v hnh bng cc k t

    Sa i theo thch c nhn bng cch chnh sa cc bin ca chng trnh

    Lp trnh bng ngn ng Lisp (LISt Processing)

    Nhiu chng trnh h tr (danh sch th mc, c v son e-mail, tr chi,...)

    Vim (Vi IMproved) l trnh son tho vn bn c nng cp ln t trnh son tho Vi trc. Trnh son tho vim c th chy hai ch khc nhau

    ch cu lnh (command mode), nhng g ngi dng g vo s c hiu nh l culnh ra lnh cho vim.

    ch nhp vn bn (insert mode), nhng g ngi dng g vo c my hiu l nidung ca tp tin.

    chuyn i qua li gia hai ch ny, ta s dng k t i hoc a chuyn t ch lnh sang ch nhp v Esc chuyn t ch nhp sang ch lnh. Mc nh khikhi ng vim ch lnh.

    Thc thi thc thi cc chng trnh son tho vn bn, ti du nhc lnh ta g tn cacc chng trnh, c th i km vi tn ca tp tin mun m

    V d:

    $ gedit filename$ emacs filename$ vim filename

    Cc phm tt mt s phm tt thng dng trong vic son tho bng cch hng trnh trn

    24

  • ng Nguyn Phng Ti liu ni b NMTP

    Lnh Gedit Emacs VimThot khi chng trnh Ctrl-q Ctrl-x Ctrl-c :qM tp tin Ctrl-o Ctrl-x Ctrl-f :eng tp tin Ctrl-wLu file Ctrl-s Ctrl-x Ctrl-s :wLu file vi tn khc Shft-Ctrl-s Ctrl-x Ctrl-w :w filenameTm kim Ctrl-f Ctrl-s / hay ?Tm tip theo Ctrl-g Ctrl-s nTm v thay th Ctrl-h Alt-% %s/oldword/newword/gi n dng th N Ctrl-i N Alt-x goto-line N NGCun ln 1 trang Ctrl-Alt-PgUp Alt-v Ctrl-bCun xung 1 trang Ctrl-Alt-PgDn Ctrl-v Ctrl-fnh du chn tt c Ctrl-a Ctrl-x hCt vng c nh du Ctrl-x Ctrl-w v,dCopy vng c nh du Ctrl-c Alt-w "*yDn Ctrl-v Ctrl-y pChuyn sang ch lnh Alt-x lnh Esc

    5 Shell script

    Thng thng, shell nhn lnh t ngi dng nhp thng qua bn phm (keyboard) v mi lnngi dng ch nhp 1 lnh (kt thc bng phm enter). Tuy nhin, trong trng hp ngidng s dng nhiu lnh cng lc th ngi dng c th lu chui lnh vo tp tin vn bn vyu cu shell thc thi tp tin ny thay v nhp vo cc lnh. Chui cc lnh vit trong tp tin c gi l shell script.

    5.1 Cch to v thc thi shell script

    to mt shell script, ngi dng c th s dng mt trnh son tho vn bn bt k, sontho mt tp tin cha cc dng lnh cn thc hin v lu tp tin ny vi ui tng ng viloi shell m chng ta mun sa dng thc thi.

    V d chng ta mun to mt shell script xut ra mn hnh dng ch Hello world! s dngbash shell, chng ta s to mt file c tn l hello.sh vi ni dung nh sau

    #!/ bin /bash# gan chuoi "He l lo world ! " cho bien STRINGstring="Hel lo World"# xuat noi dung cua bien STRING ra man hinhecho $string

    Trong v d ny, dng u tin ca hello.sh c k t #! u nhm bo cho Linux bit trnhthng dch shell m ta mun s dng, trong trng hp ny l bash shell. Ngoi ra, ta cn cth s dng mt s trnh thng dch khc nh

    #!/bin/sh Bourne shell#!/bin/csh C shell#!/usr/bin/perl Perl#!/usr/bin/php PHP#!/usr/bin/python Python#!/usr/bin/ruby Ruby

    Vi tp tin hello.sh va c to ra, ta c th gi thc thi theo 2 cch.

    Gi trnh thng dch shell vi tn tp tin lm i s

    25

  • ng Nguyn Phng Ti liu ni b NMTP

    $ /bin/bash hello . sh

    Gi thc thi ngay t dng lnh, tng t cc lnh Linux thng thng. lm c iuny, trc tin ta cn gn thuc tnh thc thi cho tp tin script va c to bng lnhchmod

    $ chmod +x hello . sh

    Sau c th gi thc thi script

    $ . / hello . sh

    5.2 Bin

    Trong shell script, thng thng ta khng cn phi khai bo bin trc khi s dng, thay vo bin s c t ng to v khai bo khi ln u tin tn bin xut hin. Mc nh, tt ccc bin u c khi to v cha tr kiu chui (string), ngay c khi d liu c a vobin l mt con s. Shell v mt vi lnh tin ch s t ng chuyn chui thnh s thc hinphp tnh khi c yu cu.

    Bn trong shell script, ta c th ly v ni dung ca bin bng cch dng du $ t trc tnbin. hin th ni dung bin, ta c th dng lnh echo.

    c ni dung d liu do ngi dng a vo v lu li trong bin, ta c th s dng lnhread, v d nh

    #!/ bin /bashread stringecho "He l lo " $string

    Lnh read kt thc khi ngi dng nhn phm Enter.

    Mt s lu khi gn ni dung cho bin

    Tn bin c bt u bng k t hoc du gch chn _

    Tn bin phn bit ch hoa v ch thng

    Khng c s dng cc k t c bit (?, *,...) t tn cho bin

    Khi thc hin lnh gn, trc v sau du = khng c c khong trng

    Nu gn ni dung chui trng cho bin,cn bao bc chui bng du

    Bin mi trng Khi trnh shell khi ng n cung cp sn mt s bin c khai bo vgn tr mc nh, chng c gi l cc bin mi trng (environment variable). Cc bin nythng c vit hoa phn bit vi bin do ngi dng t nh ngha (thng l k t khnghoa). Ni dung cc bin ny thng ty vo thit lp ca h thng v ngi qun tr cho phpngi dng h thng s dng. Di y l mt s bin mi trng thng dng nht

    $HOME v tr th mc ch$PATH danh sch cc ng dn chng trnh thc thi (cch nhau bng du :)$PS1 du nhc (prompt) hin th trn dng lnh, thng l $$SP2 du nhc th cp, thng l du >$IFS du phn cch cc trng trong chui, thng cha k t Tab, k t trng

    hoc k t xung hng$0 cha tn chng trnh gi trn dng lnh$# s tham s truyn trn dng lnh

    26

  • ng Nguyn Phng Ti liu ni b NMTP

    $$ ID tin trnh ca shell script thc thi

    Mi mi trng m ngi dng ng nhp cha mt s bin mi trng dng cho mc chring. C th xem anh sch cc bin ny bng lnh env. to mt bin mi trng mi, tac th dng lnh export (bash shell) hoc lnh setenv (C shell).

    V d: Thm ng dn ti chng trnh thc thi ROOT v bin PATH v th vin ROOT vobin LD_LIBRARY_PATH

    export ROOTSYS=~/root_v5 . 34/ root/export PATH=$ROOTSYS/bin : $PATHexport LD_LIBRARY_PATH=$ROOTSYS/lib : $LD_LIBRARY_PATH

    hoc

    setenv ROOTSYS "~/root_v5 .34/ root /"setenv PATH "$ROOTSYS/bin :$PATH"setenv LD_LIBRARY_PATH "$ROOTSYS/ l i b :$LD_LIBRARY_PATH"

    Bin tham s l cc bin t ng do h thng to ra khi ngi dng thc thi shell i kmvi vic tip nhn tham s no x l, mt s bin tham s thng dng

    $1, $2, $3,... v tr v ni dung ca cc tham s theo th t tri sang phi$# tng cc tham s$* danh sch tt c cc tham s, c lu trong mt chui duy nht phn

    cch bng k t trong $IFS$@ danh sch cc tham s c chuyn thnh chui, khng s dng du

    phn cch ca $IFS$? gi tr tr li ca cu lnh trc

    V d: To shell cript hello.sh vi hai tham s tn ngi dng v ngy

    #!/ bin /bashname=$1date=$2echo "He l lo " $name " , today i s " $date

    Kt qu khi thc thi shell script

    $ . / hello . sh Phuong 01 .01 . 2011Hello Phuong , today is 01 .01 . 2011

    5.3 Cu trc iu khin

    Tng t nh cc ngn ng lp trnh khc, shell cng cung cp cu trc lnh iu khin, baogm cc lnh if, for, while, until, case.

    If kim tra iu kin ng hoc sai thc thi lnh thch hp

    C php

    if conditionthen

    statementselse

    statements

    hay

    27

  • ng Nguyn Phng Ti liu ni b NMTP

    if condition1then

    statementselif condition2then

    statements. . .else

    statements

    (ta c th a t kha then ln cng dng vi t kha if hay elif bng cch t du ; sauiu kin)

    kim tra iu kin, ta c th s dng lnh test hay cp du ngoc vung []. Trong Linuxc 3 kiu so snh

    So snh s hc-eq so snh bng-ne khng bng-lt nh hn-le nh hn hoc bng-gt ln hn-ge ln hn hoc bng

    So snh chuis1 = s2 hai chui bng nhaus1 != s2 hai chui khng bng nhau-n s1 chui khng rng-z s1 chui rng

    Kim tra tp tin, th mc-s file tp tin khng rng-f file tp tin tn ti, khng phi th mc-d dir th mc tn ti, khng phi tp tin-w file tp tin cho php ghi-r file tp tin ch c-x file tp tin c quyn thc thi

    V d: kim tra xem i s c phi tn ca tp tin hay khng

    #!/ bin /bash

    if [ f "$1" ]then

    echo "$1 i s a f i l e "else

    echo "$1 i s not a f i l e "fi

    V d: so snh mt s vi 100

    #!/ bin /bashcount=99if [ $count eq 100 ] ; then

    echo "Count i s 100"elif [ $count gt 100 ] ; then

    echo "Count i s g r e a t e r than 100"

    28

  • ng Nguyn Phng Ti liu ni b NMTP

    elseecho "Count i s l e s s than 100"

    fi

    For lp li mt s ln vi cc gi tr xc nh, phm vi lp c th nm trong mt tp hpchui hay l kt qa tr v t mt bin hoc biu thc khc

    C php

    for variable in valuesdo

    statemensdone

    V d: lit k tt c cc tp tin v th mc c trong th mc /var

    #!/ bin /bash

    for f in $ ( ls /var/ ) ; doecho $f

    done

    While thc hin lp v hn khi iu kin kim tra vn cn ng

    C php

    while conditiondo

    statementsdone

    V d: to bng cu chng

    #!/ bin /bashy=1while [ $y le 10 ] ; do

    x=1while [ $x le 10 ] ; do

    printf "% 4d" $ ( ( $x $y ) )let x++

    doneecho ""let y++

    done

    Until tng t lnh while nhng iu kin kim tra b o ngc li

    C php

    until conditiondo

    statementsdone

    V d: in cc s li dn t 20

    29

  • ng Nguyn Phng Ti liu ni b NMTP

    #!/ bin /bashcounter=20until [ $counter lt 10 ] ; do

    echo $counterlet counter=1

    done

    Case so khp ni dung ca bin vi mt chui cc mu (pattern) no , khi mt mu cso khp th lnh tng ng s c thc hin

    C php

    case variable inpattern [ | pattern ] . . . ) statements ; ;pattern [ | pattern ] . . . ) statements ; ;. . .esac

    V d: in ra cc cu cho tng ng vi thi gian trong ngy

    #!/ bin / shecho " I s i t morning? Please answer yes or no"read timeofdaycase " $timeofday " in

    " yes " ) echo "Good Morning" ; ;"no" ) echo "Good Afternoon" ; ;"y" ) echo "Good Morning" ; ;"n" ) echo "Good Afternoon" ; ; ) echo "Sorry , answer not r e cogn i s ed " ; ;

    esac

    Cc lnh thot ra ngoi vng lp gm hai lnh chnh l

    break: thot hon ton ra khi vng lp

    continue: thot khi ln lp hin ti v chuyn sang ln lp k tip

    V d: s dng lnh break v continue

    #!/ bin /bashcounter=0until [ $counter eq 10 ] ; do

    ( ( counter++ ) )if [ $counter eq 5 ] ; then

    continueelif [ $counter eq 7 ] ; then

    breakfiecho $counter

    done

    Trong v d trn, gi tr ca bin counter xut ra mn hnh tng t 1 n 10, khi gi tr cacounter tng n 5 th gi tr ny s khng c in ra m chuyn n vng lp k tip vicounter = 6. Cn khi gi tr ca counter t ti 7 th lnh break s thot ra khi vng lp,cc gi tr t 7 tr i s khng c xut ra mn hnh.

    30

  • ng Nguyn Phng Ti liu ni b NMTP

    $ . / count . sh12346

    5.4 Hm

    Ngi dng c th t to hm hay th tc triu cc nhm lnh bn trong shell script. Ngoira, ta cng c th gi cc script con khc bn trong script chnh tng t nh vic gi hm, tuynhin vic ny thng tiu tn ti nguyn v khng hiu qu bng vic gi hm.

    nh ngha hm trong shell script, ta cn khai bo tn hm tip theo l cp ngoc n ( ),cc lnh ca hm nm trong cp ngoc nhn { }. C php khai bo hm nh sau

    function_name ( ) {Statements

    }

    V d: Vit hm tnh tng hai i s

    #!/ bin /bash

    sum ( ) {x=$1y=$2echo $ ( ( $x+$y ) )

    }

    sum $1 $2

    Bin khai bo bin cc b (local variable) ch c hiu lc bn trong hm, ta phi dng tkha local. Nu khng c t kha ny, cc bin s c xem l ton cc (global variable), cth tn ti v lu gi kt qu ngay sau khi hm chm dt. Bin ton cc c nhn thy vc th thay i bi tt c cc hm trong cng mt shell script. Trng hp c bin ton ccnhng li khai bo bin cc b cng tn, bin cc b s c gi tr u tin v hiu lc cho nkhi hm chm dt.

    V d: Vit hm tnh tng hai i s

    sum ( ) {local x=$1local y=$2echo $ ( ( $x+$y ) )

    }

    Tr v gi tr tr v gi tr ca hm, ta c th s dng lnh return

    V d: Vit hm tnh tng hai i s

    #!/ bin /bash

    sum ( ) {

    31

  • ng Nguyn Phng Ti liu ni b NMTP

    local x=$1local y=$2return $ ( ( $x+$y ) )

    }

    sum $1 $2echo "Tong hai so l a " $?

    tr v gi tr chui, ta c th dng lnh echo v chuyn hng ni dung kt xut ca hmkhi gi nh sau

    mystring ( ) {echo " s t r i n g value "

    }. . .x=$ ( mystring )

    Bin x s nhn tr tr v ca hm mystring() l string value. Cn mt cch khc ly gitr tr v ca hm, l s ng bin ton cc (do bin ton cc vn lu li tr ngay c khihm chm dt).

    6 Cch thc bin dch v thc thi chng trnh

    Cc chng trnh thc thi trn Linux c th c vit bi nhiu ngn ng nh C, Fortran,Pascal, Assembly, Perl,... Cc chng trnh ny tn ti hai dng: dng thc thi (executable)v dng m ngun (source code). c th thc thi c cc chng trnh, ta cn phi bindch cc m ngun ca chng trnh thnh cc tp tin thc thi. Qu trnh bin dch ny s docc b bin dch (compiler) m nhim.

    6.1 Trnh bin dch

    Trong hu ht cc phin bn Linux, trnh bin dch c mc nh ci t sn l GCC (GNUCompiler Collection), y l mt b cc trnh bin dch c kh nng bin dch nhiu ngn ngkhc nhau nh C (gcc), C++ (g++), Fortran (gfortran),...

    Tn gc ca GCC l GNU C Compiler do ban u n ch h tr dch ngn ng lp trnh C. Phinbn u tin GCC 1.0 c pht hnh vo nm 1987, sau c m rng h tr dch C++vo thng 12 cng nm . Sau , GCC c pht trin cho cc ngn ng lp trnh Fortran,Pascal, Objective C, Java, and Ada,... Bng di trnh by mt s trnh bin dch thng dngnht trong GCC.

    Ngn ng Trnh bin dchC gcc

    C++ g++Fortran gfortranPascal gpcJava gcjAda gnatD gdc

    VHDL ghdl

    6.2 Cc thc bin dch v thc thi chng trnh

    C php bin dch mt chng trnh nh sau

    32

  • ng Nguyn Phng Ti liu ni b NMTP

    compiler [ options ]

    Cc ty chn iu khin qu trnh bin dch-c to ra tp tin i tng (.o)-o filename to ra tp tin output c tn l filename-g bin dch ch debug (bo li khi c li xy ra)-Wall hin th thng ip cnh bo (warning)-l directory thm th vin trong qu trnh bin dch-I directory thm th mc cha cc header cn thit trong qu trnh bin dch-L directory thm th mc cha cc th vin cn thit trong qu trnh bin dch-On bin dch vi ch ti u, n = 1,2,3 (thng thng l 2)

    Cc trnh bin dch thng c t trong th mc /usr/bin hay /usr/local/bin. Trong qutrnh bin dch, nu khng c yu cu c th, trnh bin dch s mc nh tm kim cc tp tinheader v th vin trong cng th mc vi tp tin m ngun v cc th mc nh /usr/includehay /usr/lib.

    V d: bin dch v thc thi mt chng trnh ng dng vit bng ngn ng Fortran

    $ gfortran o helloworld helloworld . f$ . / helloworld

    Trong , helloworld.f l tp tin cha m ngun ca chng trnh, ty chnh -o cho ta xcnh trc tn ca tp tin ng dng c bin dch ra, trong trng hp ny l helloworld.Dng lnh th hai l dng lnh thc thi chng trnh ng dng va c to ra. Trongtrng hp m ngun c vit bng ngn ng C++, ta s s dng trnh bin dch g++

    $ g++ o helloworld helloworld . cpp

    6.3 Bin dch vi th vin

    Th vin l cc tp tin cha cc on m lnh v d liu (thng dng m nh phn) c tchc thnh cc hm hay cc lp nhm cung cp cc dch v, chc nng no cho cc chngtrnh chy trn my tnh. C 3 loi th vin trong Linux gm: tnh (static), ng (dynamic) vchia s (shared).

    Khi bin dch mt chng trnh ang dng m ngun sang dng thc thi th nhiu hm chcnng ca chng trnh c lin kt t cc th vin. V d, nu chng trnh ca bn c sdng hm print(), th bn khng cn cung cp chi tit m lnh ca hm print() ny, nhngphi m bo rng trn my c sn 1 tp tin th vin no cha ni dung ca hm ny.Khi trnh bin dch cn lin kt on m cho hm print(), n tm on m trong th vinkia v sao chp n vo chng trnh.

    Mt chng trnh c bin dch v thc thi mt cch hon ton c lp c coi l clin kt tnh (static linking) bi v n khng cn ph thuc vo s tn ti ca cc th vin chacc on m ngun to nn chng trnh na. Cc chng trnh c lin kt tnh c 1 sim hn ch nh

    Chng trnh s c kch thc ln, chim dng nhiu b nh do phi bao gm cc onm ca th vin c lin kt trong chng trnh.

    Gy ra s lng ph b nh RAM nu nhiu chng trnh ang chy ng thi cha ccon m ging nhau trong cng mt th vin.

    khc phc 2 nhc im trn, thay v lin kt tnh, cc chng trnh s c lin kt ng(dynamic linking) tc l

    33

  • ng Nguyn Phng Ti liu ni b NMTP

    Bn thn cc chng trnh ny khi c lu tr b nh khng cha cc on m trongth vin m ch cha khai bo tham kho ti on m . iu ny gip gim kch c cachng trnh.

    Khc vi lin kt tnh c vic lin kt ti th vin din ra ti thi im bin dch, tronglin kt ng vic lin kt gia cc tp tin thc thi ca chng trnh vi th vin ch dinra ti thi im chy chng trnh (runtime). Qu trnh gn kt ny do b lin kt (linker)m nhim gip cho php nhiu chng trnh c th s dng chung th vin trong b nh.

    Cc tp tin th vin c lin kt ng v c dng chung bi nhiu ng dng c gi l thvin chia s (shared library). Trong Windows cc th vin ny c phn m rng l .dll, cntrong Linux c phn m rng l .so. Bt k chng trnh no s dng lin kt ng u yucu c th vin chia s trn h thng. Nu cc th vin chia s cn thit khng c tm thy(hoc khng tn ti), khi chy chng trnh s a ra thng bo li.

    xc nh cc th vin cn thit cho 1 chng trnh, ta c th s dng lnh ldd

    ldd

    Lnh trn s hin th cc th vin chia s cn thit cng vi v tr ca chng cho chng trnhprogram.

    Khi cc chng trnh dng thc thi c s dng lin kt ng c chy, th ld.so s chutrch nhim tm kim v np vo b nh cc th vin chia s cn thit (thng c t trong/lib, /usr/lib hay /usr/local/lib) cho chng trnh . Nu ld.so khng th tm thy ccth vin th chng trnh s gp li v khng th chy c. hng dn cho ld.so tmkim th vin chia s trong cc th mc khc, ta c th thc hin mt trong hai cch sau

    Thm danh sch cc th mc vo bin mi trng LD_LIBRARY_PATH.

    To danh mc gm tn cc th vin v th mc, v lu vo trong tp tin /etc/ld.so.cache. lm c iu , u tin ta thm th mc cha cha cc th vin vo trong tp tincu hnh /etc/ld.so.conf, sau chy lnh ldconfig

    ldconfig [ options ]

    Lnh ldconfig s cp nht cho cache (ld.so.cache) vi thng tin cc th vin chia s nmtrong cc th mc lib_directories, v cc th mc c trong tp tin /etc/ld.so.conf. xem ni dung ca ld.so.cache ta g

    ldconfig pMi khi c s thay i trong cc th mc cha th vin chia s, ta nn chy li lnhldconfig m bo cache lun c cp nht.

    6.4 Bin dch vi Makefile

    Makefile l mt tp tin c bit dng m t v qun l qu trnh bin dch cc tp tin trongmt d n (project). Tp tin ny cha cc quy tc bin dch v xy dng mt th ph thucgia cc tp tin, th vin trong cng d n.

    bin dch vi Makefile ta s dng lnh make, lnh ny s c cc bc bin dch trong Makefile dch v sinh ra chng trnh thc thi.

    $ make

    Cu trc tp tin Makefile gm nhiu khi thc hin, mi khi gm c cc thng tin v cc thnhphn ph thuc (dependencies) v cch thc hay quy tc thc hin bin dch (rule).

    Quy tc to mt khi trong Makefile nh sau

    34

  • ng Nguyn Phng Ti liu ni b NMTP

    target : dependenciescommands

    Target: tn ca tp tin c to ra bi chng trnh hoc l cc ch nh thc thi mthoc mt lot tc v no , cc target khng c bt u bng du .

    Dependencies: cc tp tin u vo hoc ph thuc to ra target, khi cc tp tin nythay i (do chnh sa m ngun hoc thi gian lu b thay i) th target cn c bindch li.

    Commands: cc lnh m trnh make s thc thi. Mt quy tc (rule) c th c nhiu lnh,mi lnh thng c vit trn mt dng, trc mi dng cn phi c du tab.

    V d Makefile Gi s ta c mt lp MyClass c xy dng sn bng ngn ng lptrnh C++, lp ny c nh ngha trong hai tp tin MyClass.h v MyClass.cpp. Ta vit mtchng trnh c s dng lp MyClass (tp tin main.cpp), to tp tin thc thi cho chngtrnh ny ta c th thc hin vic bin dch ln lt nh sau

    $ g++ c MyClass . cpp$ g++ c main . cpp$ g++ main . o MyClass . o o myprogramDng cui cng lin kt hai tp tin c bin dch li to thnh tp tin thc thi myprogramm ta c th chy c qua lnh

    $ . / myprogram

    Tuy nhin, trong v d ny thay v thc hin bin dch theo cch trn, ta s vit mt Makefile bin dch t ng chng trnh ny.

    u tin, ta s dng trnh son tho vn bn to mt tp tin c tn l Makefile

    $ gedit Makefile

    Trong tp tin ny, ta khai bo trnh bin dch v cc ty chnh cn thit

    CC = g++FLAGS = c g WallKhai bo cc i tng (object) cn bin dch, trong trng hp ny ta cn hai i tng lmain.o v MyClass.o

    main . o : main . cpp MyClass . h$ (CC ) $ ( FLAGS ) main . cpp

    MyClass . o : MyClass . cpp MyClass . h$ (CC ) $ ( FLAGS ) MyClass . cpp

    Khai bo tp tin thc thi v phng thc lin kt

    myprogram : main . o MyClass . o$ (CC ) main . o MyClass . o o myprogram

    Khai bo thm ty chnh clean cho lnh make xa cc tp tin c bin dch

    clean :rm f . o myprogram

    Makefile hon chnh c ni dung nh sau

    35

  • ng Nguyn Phng Ti liu ni b NMTP

    CC = g++FLAGS = c g Wall

    main . o : main . cpp MyClass . h$ (CC ) $ ( FLAGS ) main . cpp

    MyClass . o : MyClass . cpp MyClass . h$ (CC ) $ ( FLAGS ) MyClass . cpp

    myprogram : main . o MyClass . o$ (CC ) main . o MyClass . o o myprogram

    clean :rm f . o myprogram

    thc thi vic bin dch vi Makefile, ti du nhc ta g

    $ make

    xa tt c cc tp tin va c bin dch, ta g

    $ make clean

    36

  • ng Nguyn Phng Ti liu ni b NMTP

    Ti liu

    [1] Hunh Thc Cc, Lp trnh trong mi trng shell, Vin Cng ngh Thng tin, 2008.

    [2] http://vi.wikipedia.org/wiki/Linux

    [3] http://vi.wikipedia.org/wiki/Nh%C3%A2n_h%E1%BB%87_%C4%91i%E1%BB%81u_h%C3%A0nh

    [4] http://www.ibm.com/developerworks/library/l-linux-kernel/

    [5] http://thuemaychuidc.blogspot.de/2013/04/ac-tinh-uu-viet-cua-linux.html#.Up9KBTjzS-M

    [6] http://zxc232.wordpress.com/2009/01/16/linux-hay-gnulinux-va-c%E1%BA%A5u-truc-nhan-linux/

    [7] http://viet.jnlp.org/nhap-mon-linux/shell-la-gi

    [8] http://www.learnlinux.org.za/courses/build/fundamentals/fundamentals-all.html

    [9] http://cauhoi.wordpress.com/2009/09/19/nh%E1%BB%AFng-hi%E1%BB%83u-bi%E1%BA%BFt-ban-d%E1%BA%A7u-v%E1%BB%81-unix-shells/

    [10] http://www.kiemlam.org.vn/download.aspx/9EEFAB692C8F432CAFB8C7AB95F6C765/1/Su_dung_Linux_Shell.pdf

    [11] http://www.estih.edu.vn/Documents/Doc/quan_tri_user.pdf

    [12] http://www.vn-zoom.com/f228/he-thong-tap-tin-va-thu-muc-tren-linux-31486.html

    [13] http://www.zun.vn/tai-lieu/quan-ly-tien-trinh-trong-linux-9220/

    [14] http://vi.wikipedia.org/wiki/B%E1%BB%99_tr%C3%ACnh_d%E1%BB%8Bch_GNU

    [15] http://manthang.wordpress.com/2010/12/04/quan-ly-cac-shared-library-trong-linux/

    [16] http://sk4eo.wordpress.com/2012/02/29/plugin-s%E1%BB%A9c-m%E1%BA%A1nh-c%E1%BB%A7a-gedit/#more-8

    [17] http://vi.wikipedia.org/wiki/Emacs

    [18] http://aragondt.0fees.net/web/news.php?idnews=8

    [19] http://tdanhit.blogspot.de/2013/05/lap-trinh-shell-xu-ly-mang.html

    [20] http://www.coltech.vnu.edu.vn/UserFiles/File/TaiLieuThamKhao/HeDieuHanh/Giao%20trinh%20he%20dieu%20hanh%20Linux%20va%20Unix.pdf

    37

    M uGii thiu v LinuxLinux l g?Nhn LinuxLich s hnh thnh LinuxKin trc cua LinuxMt s c tnh cua h iu hnh LinuxCc ban phn phi h iu hnh

    Linux co banShellTerminalCc lnh thao tc vi ti khoan ngui dngCc lnh thao tc vi thu muc v tp tinCc lnh iu khin tin trnhLnh ci t cc gi phn mm, ng dung

    Cc cng cu Linux thng dungLnh echoMt s lnh Linux co banCc k t c bitFilter v pipeMang v chuiTrnh soan thao van ban

    Shell scriptCch tao v thc thi shell scriptBinCu trc iu khinHm

    Cch thc bin dich v thc thi chuong trnhTrnh bin dichCc thc bin dich v thc thi chuong trnhBin dich vi thu vinBin dich vi Makefile

    Ti liu tham khao