Če ste novinec v Unixu in Linuxu, vas morda malce straši obsežnost in očitna kompleksnost sistema pred vami. To poglavje ne gre v podrobnosti niti ne pokriva naprednih tem. Namesto tega želimo, da stojite na trdnih tleh in da vaš sistem teče.
Tukaj ne predpostavljamo posebnega predznanja, razen morda, da ste kolikor toliko domači z osebnimi računalniškimi sistemi in MS-DOS-om. Vendar tudi če niste uporabnik MS-DOS-a, bi morali biti sposobni razumeti vse od tukaj. Na prvi pogled je Linux precej podoben MS-DOS-u - konec koncev, deli MS-DOS-a so se zgledovali po operacijskem sistemu CP/M, ki se je zgledoval po Unixu. Vendar le najbolj površinske lastnosti Linuxa spominjajo na MS-DOS. Tudi če ste popoln novinec v svetu osebnih računalnikov, vam naj bi ta učbenik pomagal.
In, preden začnemo: Ne bojte se eksperimentiranja. Sistem vas ne bo ugriznil. Ničesar ne morete uničiti, če delate na sistemu. Linux ima vgrajene varnostne zapore, da prepreči ,,navadnim`` uporabnikom poškodbo datotek, ki so nujno potrebne za sistem. Celo tedaj je najhujše, kar se vam lahko zgodi, da pobrišete nekaj ali vse vaše datoteke in boste morali ponovno namestiti sistem. Torej na tej točki nimate česa izgubiti.
Linux je večopravilni, večuporabniški operacijski sistem, kar pomeni, da lahko več ljudi hkrati poganja več različnih aplikacij na enem samem računalniku. To se razlikuje od MS-DOS-a, kjer sistem hkrati uporablja le ena oseba. Pod Linuxom se morate, kot dokaz vaše istovetnosti, prijaviti, kar vključuje vnos vašega uporabniškega imena (imena, pod katerim vas sistem identificira) in vnos gesla, ki je vaš osebni ključ za prijavo v vaš račun. Ker le vi poznate vaše geslo, se nihče drug ne more prijaviti v sistem pod vašim uporabniškim imenom.
Na tradicionalnih sistemih Unix vam sistemski upravitelj določi uporabniško ime in začetno geslo, ko vam odpre račun na sistemu. Vendar ker ste na vašem Linuxu vi sistemski upravitelj, morate usposobiti vaš lastni račun, preden se lahko prijavite vanj. Za nadaljnje razprave bomo uporabljali izmišljeno uporabniško ime, ,,larry``.
Nadalje, vsakemu sistemu je prirejeno ime gostitelja. To ime gostitelja določa ime vašega stroja, mu daje značaj in šarm. Ime gostitelja se uporablja za identifikacijo posameznih strojev na mreži, a tudi če vaš stroj ni omrežen, mora imeti ime gostitelja. Za naše nadaljnje primere naj bo gostiteljsko ime ,,mousehouse``.
Za izdelavo svojega računa se prijavite kot root in uporabite ukaz useradd ali adduser. Glejte razdelek 4.7 za informacije o tem postopku.
mousehouse login:Vnesite vaše uporabniško ime in pritisnite Enter. Naš junak larry bi napisal:
mousehouse login: larryPotem vnesite svoje geslo. Znaki, ki jih boste vnašali, se ne bodo videli na zaslonu, zato tipkajte previdno. Če se zatipkate pri vnosu gesla, boste videli sporočilo o napačni prijavi
Password:
Login incorrectin boste morali ponovno poskusiti postopek prijave.
Ko ste enkrat pravilno vnesli uporabniško ime in geslo, ste uradno prijavljeni na sistem in lahko se pričnete klatiti po njem.
Za demonstracijo tega se najprej prijavite v vaš sistem. Potem pritisnite Alt-F2. Spet bi morali videti prijavni pozornik login:. Gledate drugo navidezno konzolo (VC). Za preklop na prvo VC, pritisnite Alt-F1. Voila! Vrnili ste se v prvo prijavno sejo.
Novo-nameščeni sistem Linux vam verjetno dovoljuje dostop le do prvega pol ducata (ali kaj takega) navideznih konzol, s pritiskom kombinacij od Alt-F1 do Alt-F4 oziroma kolikor VC je pač nastavljenih na vašem sistemu. Možno je omogočiti do 12 VC - po eno za vsako funkcijsko tipko na vaši tipkovnici. Kot vidite, je uporaba VC lahko zelo zmogljiva, saj lahko delate v precej različnih sejah hkrati.
Medtem ko je uporaba VC včasih omejujoča (konec koncev, naenkrat lahko gledate le eno VC), vam naj bi vendarle dala občutek večopravilnostnih zmožnosti Linuxa. Medtem ko počnete eno stvar na prvi VC, lahko preklopite na drugo VC in delate na nečem drugem.
Takoj ko se prijavite v sistem, ta zažene ukazno lupino in začnete lahko z vnosom ukazov. Tukaj je kratek primer. Larry se prijavi in čaka v pozorniku (angl. prompt) ukazne lupine.
mousehouse login: larryZadnja vrstica tega teksta je pozornik ukazne lupine, ki nakazuje, da je ukazna lupina pripravljena sprejemati ukaze. (Več o tem, kaj pomeni sam pozornik, kasneje.) Poskusimo naročiti sistemu, da naredi kaj zanimivega:
Password: larryjevo geslo
Welcome to Mousehouse!
/home/larry$
/home/larry$ make love
make: *** No rule to make target `love'. Stop.
/home/larry$
No, kot se izkaže, je make ime pravega programa na sistemu, in ukazna lupina je izvedla ta program, ko smo ji tako ukazali. (Žal je bil sistem neprijazen.)
To nas privede do žgočega vprašanja: Kaj je ukaz? Kaj se zgodi, ko vpišete ,,make love``? Prva beseda v ukazni vrstici, ,,make``, je ime ukaza, ki naj se izvede. Vse drugo v ukazni vrstici šteje za argument temu ukazu. Primer:
/home/larry$ cp foo barIme tega ukaza je ,,cp``, argumenta sta ,,foo`` in ,,bar``.
Ko vnesete ukaz, naredi ukazna lupina precej stvari. Najprej preveri ukaz ter pogleda ali je vgrajen v ukazno lupino. (Se pravi, ali je to ukaz, ki ga zna izvesti sama lupina. Obstaja vrsta takih ukazov in vanje se bomo poglobili pozneje.) Lupina tudi preveri, ali je ukaz vzdevek (angl. alias) ali nadomestno ime za drug ukaz. Če noben od teh pogojev ni izpolnjen, ukazna lupina na disku poišče program z danim imenom. Če je pri iskanju uspešna, lupina požene program in mu pošlje argumente, podane v ukazni vrstici.
V našem primeru ukazna lupina išče program, imenovan make, in ga požene z argumentom love. Make je program, ki se pogosto uporablja pri prevajanju velikih programov in vzame za argumente imena ,,cilja`` (angl. target) za prevod. V primeru ukaza ,,make love`` smo naročili programu make, naj prevede cilj love. Ker make ne more najti cilja s tem imenom, se pritoži s šegavim sporočilom o napaki in nas postavi v ukazno vrstico.
Kaj se zgodi, če vpišemo ukaz v ukazno lupino in lupina ne more najti programa z določenim imenom? No, poskusimo lahko naslednje:
/home/larry$ eat dirtPrecej preprosto, če ukazna lupina ne more najti programa z imenom, danim v ukazni vrstici (tukaj ,,eat``), izpiše sporočilo o napaki. Pogosto boste videli to sporočilo o napaki, če boste zatipkali ukaz (na primer, če ste napisali ,,mkae love`` namesto ,,make love``).
eat: command not found
/home/larry$
/home/larry$ exitza odjavo. Obstajajo tudi drugi načini odjave iz sistema, a ta je najbolj otročje lahek.
Datoteke (angl. files) se prepoznavajo po njihovih imenih datotek (angl. file names). Na primer, datoteka z vašim seminarjem iz zgodovine se lahko posname z imenom datoteke zgodovinski-seminar. Ta imena navadno določajo datoteko in njeno vsebino v neki obliki, ki ima za vas pomen. Za imena datotek ni standardnega formata, kot je pod MS-DOS-om in nekaterimi drugimi operacijskimi sistemi; v splošnem lahko ime datoteke vsebuje katerikoli znak (razen znaka ,,/`` - glejte razpravo o imenih poti spodaj) in je po dolžini omejeno na 256 znakov.
S pojmom datotek pride tudi pojem imenikov. Imenik je zbirka datotek. Predstavljate si ga lahko kot ,,mapo``, ki vsebuje mnoge različne datoteke. Imenikom so prirejena imena, pod katerimi jih lahko istovetite. Nadalje, imeniki so vzdrževani v drevesu podobni strukturi; se pravi, imeniki lahko vsebujejo druge imenike.
Na datoteko se lahko torej sklicujete z njenim imenom poti (angl. path name), ki jo sestavlja ime datoteke, pred katerim je ime imenika, ki vsebuje datoteko. Na primer, denimo, da ima Larry imenik z imenom papers, ki vsebuje tri datoteke: history-final, english-lit in masters-thesis. Vsaka od teh treh datotek vsebuje informacije o treh Larryjevih projektih. Za sklicevanje na datoteko english-lit lahko Larry določi ime datoteke kot v:
papers/english-lit
Kot vidite, imenik in ime datoteke ločuje ena sama poševnica
(/). To je razlog, da sama imena datotek ne morejo vsebovati
znaka /. Uporabnikom MS-DOS-a se bo zdelo to pravilo domače,
čeprav se v svetu MS-DOS-a namesto tega uporablja poševnica vznak
(\
).
Kot smo že omenili, se imeniki tudi lahko gnezdijo drug v drugega. Na primer, denimo, da obstaja še en imenik znotraj papers, imenovan notes. Imenik notes vsebuje datoteke math-notes in cheat-sheet. Ime poti do datoteke cheat-sheet bi bilo
papers/notes/cheat-sheet
Torej je ime poti res kot pot do datoteke. Imenik, ki vsebuje dani podimenik, je znan kot starševski imenik. Tukaj je imenik papers starševski imenik imenika notes.
Vsak uporabnik ima svoj domači imenik, ki je imenik, namenjen uporabnikovem shranjevanju svojih datotek. V zgornjih primerih so vse Larryjeve datoteke (kot cheat-sheet in history-final) shranjene v njegovem domačem imeniku. Navadno so uporabniški domači imeniki vsebovani pod imenikom /home in so poimenovani po uporabniku, ki je lastnik tega imenika. Larryjev domači imenik je /home/larry.
Diagram na strani kaže primer drevesa imenikov, ki
naj bi vam dal predstavo, kako je organizirano drevo imenikov na vašem
sistemu.
/ -+- bin +- dev +- etc +- home ---+- larry | +- sam +- lib +- proc +- tmp +- usr ----+- X11R6 | +- bin | +- emacs | +- etc | +- g++-include | +- include | +- lib | +- local ---+- bin | | +- emacs | | +- etc | | +- lib | +- man | +- src +- var ----+- spool ----- linux +- tmp |
Tukaj je primer. Larry ima imenik papers, in imenik papers vsebuje datoteko history-final. Če želi Larry pogledati vsebino te datoteke, lahko uporabi ukaz
/home/larry$ more /home/larry/papers/history-finalUkaz more preprosto izpiše datoteko, po en zaslon naenkrat. A ker je Larryjev trenutni imenik /home/larry, se lahko namesto tega sklicuje na datoteko relativno glede na svojo trenutno lokacijo, z uporabo ukaza
/home/larry$ more papers/history-finalČe imena datoteke (kot papers/final) ne začnete z znakom /, se sklicujete na datoteko v izrazih, relativnih glede na vaš trenutni delovni imenik. To je znano kot relativno ime poti.
Po drugi strani, če začnete ime datotek z znakom /, ga sistem tolmači kot polno ime poti - se pravi, ime poti, ki vključuje celotno pot do datoteke, začenši od korenskega imenika, /. To je znano kot absolutno ali polno ime poti.
/home/larry$ more ~/papers/history-finalje ekvivalenten ukazu
/home/larry$ more /home/larry/papers/history-finalUkazna lupina nadomesti znak ~ z imenom vašega domačega imenika.
Z znakom za tildo lahko določate tudi domače imenike drugih uporabnikov. Ime poti ~karl/letters ukazna lupina tolmači kot /home/karl/letters (če je /home/karl domači imenik uporabnika karl). Uporaba tilde je preprosto bližnjica; ni imenika, imenovanega ~ - to je le skladenjski posladek, ki ga priskrbi ukazna lupina.
Preden začnemo, je pomembno vedeti, da Linux razlikuje med velikimi in malimi črkami pri vseh imenih datotek in ukazov (za razliko od operacijskih sistemov, kot je MS-DOS). Na primer, ukaz make je zelo različen od Make ali MAKE. Isto velja za imena datotek in imenikov.
Ukaz za premikanje po strukturi imenikov se imenuje cd (iz angleškega izraza ,,change directory``, sprememba imenika). Mnogo pogosto uporabljanih ukazov Linuxa je dolgih dve ali tri črke. Uporaba ukaza cd je
cd imenikkjer je imenik ime imenika, za katerega želite, da postane vaš trenutni delovni imenik.
Kot je bilo že omenjeno, ob prijavi začnete v svojem domačem imeniku. Če bi Larry želel preklopiti v podimenik papers, bi uporabil ukaz
/home/larry$ cd papersKot lahko vidite, se Larryjev pozornik spreminja, da odraža njegov trenutni delovni imenik (tako, da ve, kje je). Zdaj, ko je v imeniku papers, lahko pogleda svoj zaključni spis iz zgodovine z ukazom
/home/larry/papers$
/home/larry/papers$ more history-final
Zdaj je Larry obtičal v podimeniku papers. Za premik nazaj v naslednji višji (ali starševski) imenik, uporabite ukaz
/home/larry/papers$ cd ..(Pazite na presledek med ,,cd`` in ,,..``.) Vsak imenik ima vnos, imenovan ,,..``, ki se nanaša na njegov starševski imenik. Podobno, vsak imenik ima vnos, imenovan ,,.``, ki se nanaša na njega. Torej nas ukaz
/home/larry$
/home/larry/papers$ cd .pusti v istem imeniku.
Z ukazom cd lahko uporabljate tudi absolutna imena poti. Za cd v Karlov domači imenik lahko uporabimo ukaz
/home/larry/papers$ cd /home/karl
/home/karl$
Tudi uporaba cd brez argumentov nas bo vrnila v naš lastni domači imenik.
/home/karl$ cd
/home/larry$
/home/larry$ ls
letters
papers
/home/larry$
Tukaj vidimo, da ima Larry tri vnose v svojem trenutnem imeniku: Mail, letters in papers. To nam ne pove veliko - so to imeniki ali datoteke? Lahko uporabimo izbiro -F ukaza ls za podrobnejše informacije.
/home/larry$ ls -FIz znaka /, ki je pripet vsakemu imenu datoteke, vemo, da so ti trije vnosi pravzaprav podimeniki.
Mail/
letters/
papers/
/home/larry$
Uporaba ls -F lahko v izpisu tudi pripne ,,*`` na konec imena datoteke, kar pomeni, da je datoteka izvedljiva oziroma program, ki se lahko požene. Če ni ničesar pripetega imenu datoteke ob uporabi ls -F, je datoteka ,,navadna stara datoteka``, se pravi, ni niti imenik niti izvedljiva datoteka.
V splošnem vsak ukaz Unixa lahko vzame številne izbire poleg drugih argumentov. Te izbire se navadno začenjajo z znakom ,,-``, kot smo videli zgoraj pri izbiri -F. Izbira -F pove ukazu ls, naj izda več informacij o tipu datotek - v tem primeru izpiše / za vsakim imenom imenika.
Če podate ukazu ls ime imenika, bo sistem izpisal vsebino tega imenika.
/home/larry$ ls -F papers
english-lit
history-final
masters-thesis
notes/
/home/larry$
Za bolj zanimiv izpis poglejmo, kaj je v sistemskem imeniku /etc.
/home/larry$ ls /etc Images group pac rpcinfo adm inet passwd securetty bcheckrc init printcap services brc init.d profile shells brc¸ initrunlvl psdatabase startcons csh.cshrc inittab rc swapoff csh.login inittab.old rc.new swapon default issue rc0.d syslog.conf disktab lilo rc1.d syslog.pid fdprm lpc rc2.d syslogd.reload fstab magic rc3.d termcap ftpaccess motd rc4.d umount ftpusers mount rc5.d update getty mtab rmt utmp gettydefs mtools rpc wtmp /home/larry$
Če ste uporabnik MS-DOS-a, boste opazili, da so imena datotek lahko daljša od 8 znakov in lahko vsebujejo pike na kateremkoli položaju. V imenu datoteke lahko uporabljate celo več kot eno piko.
Premaknimo se na vrh drevesa imenikov in potem navzdol do drugega imenika, z ukazi
/home/larry$ cd ..V imenike se lahko premikate tudi v enem koraku kot v ukazu cd /usr/bin.
/home$ cd ..
/$ cd usr
/usr$ cd bin
/usr/bin$
Poskusite se premikati po različnih imenikih in uporabljajte
ls in cd. V nekaterih primerih trčite
ob slabo znamenje v obliki sporočila o napaki zavrnitve dostopa
(,,Permission denied``). To je le varnost Unixa, ki se
oglaša: če želite uporabljati ukaza ls ali cd,
morate imeti za to potrebna dovoljenja. O tem bomo spregovorili več
od strani naprej.
Čas je, da se naučimo, kako ustvariti imenike. To vključuje uporabo ukaza mkdir. Poskusite naslednje:
/home/larry$ mkdir foo
/home/larry$ ls -F
Mail/
foo/
letters/
papers/
/home/larry$ cd foo
/home/larry/foo$ ls
/home/larry/foo$
Čestitamo! Naredili ste nov imenik in se premaknili vanj. Ker v tem novem imeniku še ni datotek, se naučimo, kako prepišete datoteke z enega mesta na drugo.
/home/larry/foo$ cp /etc/termcap .
/home/larry/foo$ cp /etc/shells .
/home/larry/foo$ ls -F
shells termcap
/home/larry/foo$ cp shells bells
/home/larry/foo$ ls -F
bells shells termcap
/home/larry/foo$
Ukaz cp prepiše datoteke, navedene v ukazni vrstici, v datoteko ali imenik, določen z zadnjim argumentom. Tu uporabljamo ,,.`` za sklicevanje na trenutni imenik.
/home/larry/foo$ mv termcap sells
/home/larry/foo$ ls -F
bells sells shells
/home/larry/foo$
S tem smo datoteko termcap preimenovali v sells. Ukaz mv lahko uporabljate tudi za premikanje datoteke v popolnoma nov imenik.
¤ Pozor! Ukaza mv in cp bosta prepisala ciljno datoteko z istim imenom, ne da bi vas vprašala. Bodite previdni pri premikanju datoteke v drugi imenik. Morda je tam že datoteka z istim imenom, ki jo boste prepisali!
/home/larry/foo$ rm bells sellsOstalo nam ni nič drugega kot shells, a ne bomo se pritoževali. Vedite, da vas ukaz rm, privzeto, ne bo vprašal, ali naj izbriše datoteko - zato bodite previdni.
/home/larry/foo$ ls -F
shells
/home/larry/foo$
Ukazu rm je soroden ukaz rmdir. Ta ukaz izbriše imenik, a le, če je ta prazen. Če imenik vsebuje kakšno datoteko ali podimenik, ga rmdir ne bo pobrisal, ampak se bo pritožil.
Za ogled datoteke shells uporabite ukaz
/home/larry/foo$ more shells
V primeru, da vas zanima, kaj vsebuje datoteka shells: to je seznam veljavnih programov za ukazno lupino na vašem sistemu. Na večini sistemov to vključuje /bin/sh, /bin/bash in /bin/csh. O teh različnih vrstah ukaznih lupin bomo spregovorili kasneje.
Med uporabo more pritisnite Space (tipko presledek) za izpis naslednje strani s tekstom in b za izpis prejšnje strani. V pripomočku more so dostopni tudi drugi ukazi, ta dva sta le osnova. Pritisk na q bo zaključil more.
Zapustite more in poskusite cat /etc/termcap. Besedilo bo verjetno letelo prehitro, da bi ga sploh lahko brali. Ime ,,cat`` pravzaprav izhaja iz angleške besede ,,concatenate``, ki pomeni ,,povezati``, ,,spenjati`` in res opisuje uporabo tega programa. Ukaz cat se lahko uporablja za spenjanje vsebine različnih datotek in shranjevanje rezultata v drugo datoteko. To bo na vrsti ponovno v razdelku 3.14.1.
Skoraj vsak sistem Unix, vključno z Linuxom, priskrbi pripomoček, znan kot strani priročnika (angl. manual pages). Te strani priročnika vsebujejo dokumentacijo, dostopno na zvezi, za sistemske ukaze, vire, nastavitvene datoteke in tako naprej.
Ukaz, ki se uporablja za dostop do strani priročnika, se imenuje man. Če bi radi izvedeli več o drugih izbirah ukaza ls, lahko napišete
/home/larry$ man lsin prikazana bo stran priročnika o ukazu ls.
Žal je večina strani priročnika napisana za tiste, ki vsaj približno že vedo kaj počne ukaz ali vir. Zato strani priročnika navadno vsebujejo le tehnične podrobnosti o ukazu, brez veliko razlage. Vendar so strani priročnika neprecenljiv vir za osvežitev vašega spomina, če pozabite skladnjo nekega ukaza. Strani priročnika vam bodo povedale tudi o ukazih, ki jih ne pokrivamo v tej knjigi.
Priporočam, da uporabite man za ukaze, ki smo jih že
spoznali, in tako vsakič, ko uvedemo nov ukaz. Nekateri od teh ukazov
ne bodo imeli strani v priročniku, iz različnih vzrokov. Najprej,
strani priročnika morda še niso bile napisane. (Dokumentacijski
projekt za Linux je odgovoren tudi za strani priročnika v Linuxu.
Sčasoma pridobivamo večino strani priročnika, dostopnih za sistem.)
Drugič, ukaz je lahko notranji ukaz ukazne lupine (razložen na
strani ) ali vzdevek, ki ne bo imel svoje
strani v priročniku. En primer je že cd, ki je notranji ukaz
lupine. Ukazna lupina pravzaprav sama izvede cd - ni
posebnega programa, ki bi izvedel ta ukaz.
Običajen način za dostop do datotek za MS-DOS je priklop dosovske particije ali diskete pod Linuxom, kar vam dovoljuje dostop do datotek neposredno skozi datotečni sistem. Na primer, če imate disketo za MS-DOS v /dev/fd0, jo bo ukaz
# mount -t msdos /dev/fd0 /mntpriklopil pod /mnt. Glejte razdelek 4.9.4 za več informacij o priklopu disket.
Priklopite lahko tudi particije za MS-DOS na vašem trdem disku ter potem dostopate do njih. Če je particija z MS-DOS-om /dev/hda1, jo priklopi ukaz
# mount -t msdos /dev/hda1 /mntPoskrbite, da boste particijo odklopili z umount, ko jo nehate uporabljati. Particija za MS-DOS se lahko samodejno priklopi, če vključite ustrezen vnos v datoteko /etc/fstab. Glejte razdelek 4.5 za podrobnosti. Naslednja vrstica v /etc/fstab bo priklopila particijo za MS-DOS /dev/hda1 v imenik /dos.
/dev/hda1 /dos msdos defaults
Priklopite lahko tudi datotečne sisteme VFAT, ki jih uporablja Windows 95:
# mount -t vfat /dev/hda1 /mntTo dovoljuje dostop do dolgih imen datotek sistema Windows 95. To se nanaša le na particije, ki imajo zares shranjena dolga imena datotek. Tega ne morete uporabiti, da bi priklopili navadni datotečni sistem FAT16 in uporabljali dolga imena datotek.
Za dostop do datotek za MS-DOS se lahko uporablja tudi programje Mtools. Ukazi mcd, mdir in mcopy se vsi obnašajo kot njihovi ekvivalenti v MS-DOS-u. Če namestite Mtools, bi morale biti dostopne tudi strani priročnika za te ukaze.
Dostopanje do datotek za MS-DOS je ena stvar; poganjanje programov za MS-DOS je druga. Za Linux se razvija program MS-DOS Emulator, emulacija MS-DOS-a; dostopen je na široko in vključen v večino distribucij. Vzamete ga lahko s številnih lokacij, vključno z različnimi mesti za prenos datotek Linuxa po FTP, naštetimi v dodatku B. Za MS-DOS Emulator poročajo, da je dovolj zmogljiv, da z njim tečejo v Linuxu številne aplikacije, vključno z WordPerfectom. Vendar sta Linux in MS-DOS nadvse različna operacijska sistema. Zmogljivost vsakega emulatorja za MS-DOS pod Unixom je omejena. Poleg tega se razvija tudi emulacija Microsoft Windows, ki teče pod grafičnim sistemom X Window.
Ta razdelek predstavlja nekatere od najbolj uporabnih osnovnih ukazov sistema Unix, vključno s tistimi, ki so pokriti v prejšnjih razdelkih.
Upoštevajte, da se izbire navadno začnejo z znakom ,,-``, in v večini primerov lahko določite več kot eno izbiro z enim samim znakom ,,-``. Na primer, namesto da bi uporabljali ukaz ls -l -F, lahko uporabljate ls -lF.
Namesto da bi vam izpisali vsako izbiro vsakega ukaza, vam predstavljamo le v tem času uporabne ali pomembne ukaze. Pravzaprav ima večina teh ukazov izbire, ki jih ne boste nikoli uporabljali. Strani priročnika o vsakem posameznem ukazu si lahko ogledate z uporabo man, ki izpiše seznam vseh dostopnih izbir.
Upoštevajte tudi, da veliko ukazov vzame kot argument seznam datotek ali imenikov, označenih v tej tabeli kot ,,datoteka1 ...datotekaN``. Na primer, ukaz cp vzame za argument seznam datotek za prepis, ki mu sledi ciljna datoteka ali imenik. Ko prepisujete več kot eno datoteko, mora biti cilj imenik.
Datotečni sistem je zbirka datotek in hierarhije imenikov na sistemu. Prišel je čas, da vas pospremimo skozi datotečni sistem.
Zdaj imate veščine in znanje, da razumete datotečni sistem Linuxa, in
imate tudi zemljevid (poglejte na diagram na strani ).
Najprej pojdite v korenski imenik (cd /) in vnesite ls -F za izpis njegove vsebine. Verjetno boste videli naslednje imenike3.2: bin, dev, etc, home, install, lib, mnt, proc, root, tmp, user, usr in var.
Zdaj si oglejmo vsakega od teh imenikov.
Z uporabo ls -F boste videli, da ima večina (če ne vse)
datotek v imeniku /bin za imenom zvezdico (,,*``).
To pomeni, da so te datoteke izvedljive, kot je bilo opisano na
strani .
Datoteke, katerih imena se začenjajo s fd, so disketniške naprave. fd0 je prvi disketnik in fd1 je drugi. Morda ste opazili, da je naštetih več disketnih naprav kot le dve zgoraj omenjeni: te predstavljajo različne tipe disket. Na primer, fd1H1440 dostopa do 3,5"-disket visoke gostote v prvem disketniku.
Sledi seznam nekaterih najpogosteje uporabljanih datotek naprav. Četudi morda nimate vseh fizičnih naprav, naštetih spodaj, imate verjetno v imeniku /dev vseeno gonilnik zanjo.
Različni imeniki, opisani zgoraj, so nujni za delovanje sistema, a večina postavk v imeniku /usr je izbirnih. Vendar je sistem uporaben in zanimiv prav zaradi teh izbirnih delov. Brez imenika /usr bi imeli dolgočasen sistem, ki bi podpiral le programe, kot sta cp in ls. /usr vsebuje večino večjih programskih paketov in namestitvene datoteke, ki jih spremljajo.
Veliko lastnosti, ki jih pokrivamo v tem razdelku, ponuja sama ukazna lupina. Bodite previdni, da ne boste zamešali Linuxa (pravega operacijskega sistema) z ukazno lupino - lupina je le vmesnik do spodaj ležečega sistema. Ukazna lupina priskrbi funkcionalnost poleg samega Linuxa.
Ukazna lupina ni le tolmač za interaktivne ukaze, ki jih vpisujete v
pozornik, ampak ima vgrajen tudi zmogljiv programski jezik. Omogoča
vam pisanje lupinskih skriptov (angl. shell scripts) za
,,pakiranje`` različnih lupinskih ukazov v skupno datoteko. Če
poznate MS-DOS, boste prepoznali podobnost s ,,paketnimi datotekami``.
Lupinski skripti so zelo zmogljivo orodje, ki vam omogoča
avtomatizacijo in razširitev vaše uporabe Linuxa. Glejte
stran za več informacij.
V svetu Linuxa obstajajo različni tipi ukaznih lupin. Dva glavna tipa sta ,,Bournova lupina`` in ,,lupina C`` (C shell). Bournova lupina uporablja ukazno skladnjo, podobno originalni ukazni lupini na zgodnjih sistemih Unix, kot je System III. Ime Bournove lupine na večini sistemov Linux je /bin/sh (kjer sh pomeni ,,shell``, ukazno lupino). Lupina C uporablja drugačno skladnjo, nekako podobno programskem jeziku C, in je na večini sistemov Linux imenovana /bin/csh.
Pod Linuxom so dostopne različne variacije teh ukaznih lupin. Dve najpogosteje uporabljani sta ukazna lupina Bourne Again Shell ali ,,Bash`` (/bin/bash) in ,,Tcsh`` (/bin/tcsh). bash je oblika Bournove lupine, ki vključuje veliko naprednih značilnosti, ki jih najdemo v lupini C. Ker bash podpira nadmnožico skladnje Bournove lupine, bo lupinski skript, napisan v standardni Bournovi lupini, deloval tudi z lupino bash. Če raje uporabljate skladnjo lupine C, Linux podpira tcsh, ki je razširjena različica izvorne lupine C.
Tip uporabljane ukazne lupine, za katerega se odločite, je predvsem religiozno vprašanje. Nekaterim je ljubša skladnja Bournove lupine z naprednimi odlikami bash-a, drugim je ljubša bolj strukturirana skladnja lupine C. Kar se tiče navadnih ukazov, kot sta cp in ls, ukazna lupina, ki jo uporabljate, ni pomembna - skladnja je enaka. Le kadar začnete pisati lupinske skripte ali uporabljati napredne značilnosti lupine, igrajo vlogo razlike med različnimi tipi ukaznih lupin.
Ko razlagamo značilnosti različnih ukaznih lupin, bomo opazili različnosti med Bournovo in lupino C. Vendar so za potrebe tega priročnika te razlike večinoma minimalne. (Če ste na tej točki zares radovedni, preberite strani priročnika o lupinah bash in tcsh).
Glavna značilnost večine ukaznih lupin Linuxa je zmožnost sklicevanja na več kot eno datoteko z uporabo posebnih znakov. Ti džokerji (angl. wildcards) vam omogočajo sklicevanje na, denimo, vsa imena datotek, ki vsebujejo znak ,,n``.
Džoker ,,*`` lahko zamenja katerikoli znak ali niz znakov v imenu datoteke. Ko v imenu datoteke uporabite znak ,,*``, ga ukazna lupina zamenja z vsemi mogočimi zamenjavami iz imen datotek, ki so v imeniku, v katerem se sklicujete.
Tukaj je preprost primer. Denimo, da ima Larry v svojem trenutnem imeniku datoteke frog, joe in stuff.
/home/larry$ ls
frog joe stuff
/home/larry$
Za določitev vseh datotek, katerih ime vsebuje črko ,,o``, uporabite ukaz
/home/larry$ ls *o*Kot lahko vidite, je vsaka pojavitev ,,*`` zamenjana z vsemi nadomestitvami, ki ustrezajo džokerju iz imen datotek v trenutnem imeniku.
frog joe
/home/larry$
Uporaba samega znaka ,,*`` preprosto ustreza vsem imenom datotek, saj vsi znaki ustrezajo džokerju.
/home/larry$ ls *
frog joe stuff
/home/larry$
Tukaj je še nekaj več primerov:
/home/larry$ ls f*
frog
/home/larry$ ls *ff
stuff
/home/larry$ ls *f*
frog stuff
/home/larry$ ls s*f
stuff
/home/larry$
Proces spremembe ,,*`` v seznam imen datotek se imenuje razvitje džokerjev (angl. wildcard expansion) in ga opravi ukazna lupina. To je pomembno: posamezen ukaz, kot je ls,nikoli ne vidi ,,*`` v svojem seznamu parametrov. Ukazna lupina razvije džoker tako, da vključi vsa imena datotek, ki mu ustrezajo. Torej ukaz
/home/larry$ ls *o*razvije ukazna lupina v ukaz
/home/larry$ ls frog joe
Pomembno opozorilo o džokerju ,,*``: ta ne ustreza imenom datotek, ki se začenjajo s piko (,,.``). Te datoteke veljajo za skrite datoteke - čeprav niso zares skrite, se ne prikažejo v običajnih izpisih programa ls in jih uporaba džokerja ,,*`` ne zadeva.
Tukaj je primer. Omenili smo že, da vsak imenik vsebuje dva posebna vnosa: ,,.`` se nanaša na trenutni imenik, in ,,..`` na starševski imenik. Vendar ko uporabljate ls, se ta dva vnosa ne prikažeta.
/home/larry$ lsČe uporabite stikalo -a ukaza ls, pa lahko prikažete imena datotek, ki se začenjajo s piko. Poglejte:
frog joe stuff
/home/larry$
/home/larry$ ls -aSeznam vsebuje dva posebna vnosa, ,,.`` in ,,..``, kot tudi dve drugi ,,skriti`` datoteki - .bash_profile in .bashrc. Ti dve datoteki sta začetni datoteki, ki ju uporablja bash, ko se larry prijavi v sistem. Opisani sta od strani
. .. .bash_profile .bashrc frog joe stuff
/home/larry$
Upoštevajte, da se ob uporabi džokerja ,,*`` ne prikaže nobeno ime datoteke, ki se začne z ,,.``.
/home/larry$ ls *To je varnostna lastnost: če bi znak ,,*`` ustrezal imenom datotek, ki se začnejo z ,,.``, bi tudi ustrezal imenom imenikov ,,.`` in ,,..``. To je lahko pri uporabi nekaterih ukazov nevarno.
frog joe stuff
/home/larry$
Še en džoker je ,,?``. Džoker ,,?`` se lahko zamenja v en sam znak. Torej, ,,ls ?`` prikaže vsa imena datotek z enim samim znakom. In ,,ls termca?`` bi prikazalo ,,termcap`` a ne tudi ,,termcap.backup``. Tukaj je še en primer:
/home/larry$ ls j?e
joe
/home/larry$ ls f??g
frog
/home/larry$ ls ????f
stuff
/home/larry$
Kot lahko vidite, vam džokerji dovoljujejo določitev veliko datotek
hkrati. V pregledu ukazov, ki se začenja na
strani , smo dejali, da lahko ukaza
cp in mv pravzaprav prepisujeta ali premikata več
kot eno datoteko naenkrat. Na primer,
/home/larry$ cp /etc/s* /home/larryprepiše vse datoteke iz /etc, ki se začenjajo s ,,s``, v imenik /home/larry. Oblika uporabe ukaza cp je v resnici
cp datoteke ciljkjer datoteke naštevajo ime datotek za prepis in je cilj ciljna datoteka ali imenik. mv ima identično skladnjo.
Če prepisujete ali premikate več kot eno datoteko, mora biti cilj imenik. Le eno samo datoteko lahko prepišete ali premaknete v drugo datoteko.
Tukaj je primer uporabe ukaza cat. Navadno bere cat podatke iz vseh datotek, določenih v ukazni vrstici, in pošlje te podatke neposredno na stdout. Torej uporaba ukaza
/home/larry/papers$ cat history-final masters-thesisizpiše vsebino datoteke history-final, ki ji sledi vsebina datoteke masters-thesis.
A če ne določite imena datoteke, cat bere podatke iz stdin in jih pošilja na stdout. Tukaj je primer:
/home/larry/papers$ catVsaka vrstica, ki ste jo vpisali, takoj odmeva nazaj v cat-u. Ko berete s standardnega vhoda, določite, da je vaš vnos ,,končan`` tako, da pošljete signal za konec teksta, imenovan signal EOT (iz angl. end-of-text signal), v splošnem ga dobite s pritiskom Ctrl-D.
Pozdravljeni.
Pozdravljeni.
Na svidenje.
Na svidenje.
Ctrl-D
/home/larry/papers$
Tukaj je še en primer. Ukaz sort prebere vrstice teksta (spet iz standardnega vhoda, razen če določite eno ali več datotek) in pošlje urejen izhod na standardni izhod. Poskusite naslednje.
/home/larry/papers$ sortZdaj lahko svoj nakupovalni spisek uredimo po abecedi ... mar ni Linux uporaben?
korenje
banane
jabolka
Ctrl-D
banane
jabolka
korenje
/home/larry/papers$
Kot lahko vidite, se rezultat ukaza sort ni prikazal, a je shranjen v datoteki, imenovani nakupovalni-spisek. Poglejmo vsebino te datoteke:/home/larry/papers$ sort > nakupovalni-spisek korenje banane jabolka Ctrl-D /home/larry/papers$
/home/larry/papers$ cat nakupovalni-spisekZdaj lahko uredite vaš nakupovalni spisek in ga tudi shranite! A denimo, da shranjujete neurejen, izvorni nakupovalni spisek v datoteko stvari. En način urejanja te informacije in shranjevanja v datoteko bi bil, da daste ukazu sort ime datoteke za branje namesto standardnega vhoda, in preusmerite standardni izhod, kot smo to naredili zgoraj. Torej takole:
banane
jabolka
korenje
/home/larry/papers$
Vendar obstaja tudi druga pot za dosego tega. Ne le, da lahko preusmerite standardni izhod, preusmerite lahko tudi standardni vhod, z uporabo znaka ,,<``./home/larry/papers$ sort stvari > nakupovalni-spisek /home/larry/papers$ cat nakupovalni-spisek banane jabolka korenje /home/larry/papers$
Tehnično je ,,sort < stvari`` ekvivalenten ,,sort stvari``, a vam omogoča demonstracijo naslednje stvari: sort < stvari se obnaša, kot da bi bili podatki v datoteki stvari vtipkani na standardnem vhodu. Ukazna lupina ureja preusmerjanje. Ukazu sort ni dano ime datoteke (stvari), s katere naj bere; kar se tiče sort-a, še vedno bere s standardnega vhoda, kot če bi vnesli podatke z vašo tipkovnico./home/larry/papers$ sort < stvari banane jabolka korenje /home/larry/papers$
To uvaja koncept filtra. Filter je program, ki bere podatke s standardnega vhoda, jih na nek način obdela in pošlje obdelane podatke na standardni izhod. Z uporabo preusmerjevanja (angl. redirection) se na standardni vhod in izhod lahko sklicujete iz datotek. Kot smo omenili, stdin in stdout privzeto ustrezata tipkovnici in zaslonu, po vrsti. Pripomoček sort je preprost filter. Uredi vhodne podatke in pošlje rezultat na standardni izhod. Pripomoček cat je še preprostejši. Ničesar ne naredi z vhodnimi podatki, le izpiše, kar pač že dobi.
Pokazali smo že, kako uporabljati sort kot filter. Vendar ti primeri predpostavljajo, da imate podatke nekje shranjene v datoteki ali ste pripravljeni sami vpisati vse podatke standardnega vhoda. Kaj, če podatki, ki jih želite urediti, pridejo kot izhod nekega drugega ukaza, kot je ls?
Izbira -r ukaza sort uredi podatke v obratnem abecednem vrstnem redu. Če želite našteti imena datotek v vašem trenutnem imeniku v obratnem vrstnem redu, je en način za to naslednji:
/home/larry/papers$ lsZdaj preusmerimo izhod ukaza ls v datoteko, imenovano file-list:
english-list
history-final
masters-thesis
notes
Tukaj shranjujemo izhod ukaza ls v datoteko, in potem na tej datoteki poženemo sort -r. A to je nepripravno in uporablja začasno datoteko za shranjevanje podatkov iz ls./home/larry/papers$ ls > file-list /home/larry/papers$ sort -r file-list notes masters-thesis history-final english-list /home/larry/papers$
Rešitev je uporaba cevovoda (angl. pipeline). To je lastnost ukazne lupine, ki poveže niz ukazov s ,,cevjo`` (angl. pipe). Standardni izhod prvega ukaza se pošlje na stdin drugega ukaza. V tem primeru želimo poslati stdout ukaza ls na stdin ukaza sort. Uporabimo znak ,,|`` za ustvarjanje cevi, kot sledi:
/home/larry/papers$ ls | sort -rTa ukaz je krajši in lažji za vnos.
notes
masters-thesis
history-final
english-list
/home/larry/papers$
Tukaj je še en uporaben primer, ukaz
/home/larry/papers$ ls /usr/binizpiše dolg seznam imen datotek, večina od njih preleti zaslon prehitro, da bi jih lahko prebrali. Zato uporabimo more za prikaz seznama datotek v /usr/bin.
/home/larry/papers$ ls /usr/bin | moreZdaj se lahko pomikate po seznamu teh datotek po svoji volji.
A zabava se tu še ne konča! S cevmi lahko povežete skupaj tudi več kot dva ukaza. Ukaz head je filter, ki prikaže prve vrstice vhodnega toka (v tem primeru, vhod iz cevi). Če želite prikazati ime datoteke v trenutnem imeniku, zadnje po abecednem redu, uporabljajte ukaze, kot so naslednji:
/home/larry/papers$ ls | sort -r | head -1kjer head -1 izpiše prvo vrstico vhoda, ki jo sprejme (v tem primeru tok podatkov iz ls, urejenih po obratnem abecednem redu).
notes
/home/larry/papers$
/home/larry/papers$ ls > file-listprepiše vsebino datoteke file-list. Če namesto tega preusmerjate s simbolom ,,>>``, bo izhod pripet na (dodan na konec) poimenovano datoteko, namesto da bi jo prepisal. Na primer,
/home/larry/papers$ ls >> file-listpripne izhod ukaza ls na datoteko file-list.
Zavedajte se, da so preusmerjanje in cevi lastnosti ukazne lupine - ki podpira uporabo ,,>``, ,,>>`` in ,,|``. To nima nič opraviti s samimi ukazi.
Ker je na sistemu Linux tipično več kot en uporabnik, Linux ponuja mehanizem, znan kot dovoljenja datotek, ki ščiti vaše uporabniške datoteke pred brkljanjem drugih uporabnikov. Ta mehanizem omogoča datotekam in imenikom, da so ,,last`` določenega uporabnika. Na primer, ker je Larry ustvaril datoteke v svojem domačem imeniku, je Larry njihov lastnik in ima do njih dostop.
Linux tudi dovoljuje delitev datotek med uporabniki in skupinami uporabnikov. Če Larry tako želi, lahko onemogoči dostop do svojih datotek, da do njih ne bo mogel dostopati noben drug uporabnik. Vendar je na večini sistemov privzeto dovoliti drugim uporabnikom branje svojih datotek, ne pa tudi njihovo spreminjanje ali brisanje.
Vsako datoteko si lasti določen uporabnik. Vendar so datoteke tudi last določene skupine (angl. group) uporabnikov sistema. Vsak uporabnik se ob stvaritvi uporabniškega računa dodeli vsaj v eno skupino. Sistemski upravitelj pa lahko podeli uporabniku dostop do več kot ene tovrstne skupine.
Skupine navadno določa vrsta uporabnikov, ki dostopajo do stroja. Na primer, na univerzitetnem sistemu Linux so lahko uporabniki razdeljeni v skupine studenti, osebje, predavatelji ali gostje. Obstaja tudi nekaj sistemsko definiranih skupin (kot sta skupini bin in admin), ki jih uporablja sam sistem za nadzor dostopa do virov - zelo redko v ti sistemski skupini spadajo pravi uporabniki.
Dovoljenja so razdeljena v tri glavne oddelke: branje, pisanje in izvajanje. Ta dovoljenja so lahko dana trem razredom uporabnikov: lastniku datoteke, skupini, kateri pripada datoteka, in vsem uporabnikom, ne glede na skupino.
Dovoljenje za branje pusti uporabniku brati vsebino datoteke ali, v primeru imenikov, izpis vsebine imenika (z uporabo ls). Dovoljenje za pisanje dovoljuje uporabniku pisanje ali spreminjanje datoteke. Pri imenikih, dovoljenje za pisanje dovoljuje uporabniku ustvarjanje novih datotek ali brisanje starih datotek v tem imeniku. Končno, dovoljenje za izvajanje dovoljuje uporabniku pogon datoteke kot programa ali skripta ukazne lupine (če je datoteka program ali skript ukazne lupine). Pri imenikih omogoča posest dovoljenja za izvajanje uporabniku cd v ta imenik.
/home/larry/foo$ ls -l stuff
-rw-r--r-- 1 larry users 505 Mar 13 19:05 stuff
/home/larry/foo$
Prvo polje v izpisu predstavlja dovoljenja za uporabo datoteke. Tretje polje vsebuje lastnika datoteke (to je larry) in četrto polje je skupina, kateri datoteka pripada (users). Zadnje polje je očitno ime datoteke (stuff). Druga polja bomo obravnavali pozneje.
To datoteko si lasti larry, in pripada skupini users. Niz -rw-r--r-- po vrsti našteva dovoljenja, dana lastniku datoteke, skupini datoteke in vsem ostalim.
Prvi znak niza dovoljenj (,,-``) predstavlja tip datoteke. Znak ,,-`` pomeni, da je to običajna datoteka (za razliko od imenika ali gonilnika naprave). Naslednji trije znaki (,,rw-``) predstavljajo dovoljenja, podeljena lastniku datoteke larry. Črka ,,r`` pomeni ,,branje`` (angl. read) in črka ,,w`` pomeni ,,pisanje`` (angl. write). Torej, larry ima dovoljenja za branje in pisanje datoteke stuff.
Kot smo omenili, poleg dovoljenj za branje in pisanje obstaja tudi dovoljenje za ,,izvajanje`` (angl. execute) - predstavlja ga črka ,,x``. Vendar je tukaj namesto ,,x`` naštet ,,-``, torej Larry nima dovoljenja za poganjanje te datoteke. To je v redu, saj datoteka stuff ni program kakršnekoli vrste. Seveda, ker je Larry lastnik te datoteke, si lahko podeli dovoljenja za izvajanje datoteke stuff, če tako želi. (O tem bomo spregovorili v kratkem.)
Naslednji trije znaki, (,,r--``), predstavljajo dovoljenja skupine do uporabe datoteke. Skupina, ki si lasti to datoteko, se imenuje users. Ker se tukaj pojavlja le ,,r``, lahko vsak uporabnik, ki pripada skupini users, bere to datoteko.
Zadnji trije znaki, tudi (,,r--``), predstavljajo dovoljenja, podeljena vsem uporabnikom sistema (razen lastnika datoteke in uporabnikom skupine users). Spet, ker je prisoten le ,,r``, lahko drugi uporabniki berejo datoteko, a ne morejo vanjo pisati ali je izvajati.
Tukaj je nekaj drugih primerov dovoljenj:
Z drugimi besedami, če želite sploh dostopati do datoteke, morate imeti izvajalni dostop do vseh imenikov po poti datoteke in dovoljenje za branje (ali izvajanje) same datoteke.
Uporabniki na sistemu Linux so, navadno, zelo radodarni s svojimi datotekami. Običajen nabor dovoljenj za dostop do datotek je -rw-r--r--, kar omogoča branje datoteke drugim uporabnikom, a brez vsakih sprememb. Običajen nabor dovoljenj za imenike je -rwxr-xr-x, kar omogoča drugim uporabnikom sprehod po imenikih, a brez ustvarjanja ali brisanja datotek v njih.
Vendar veliko uporabnikov želi obdržati druge uporabnike čimdlje od njihovih datotek. Nastavitve dovoljenj datoteke na -rw------- bo preprečevala vsem drugim uporabnikom dostop do datoteke. Podobno, nastavitev dovoljenj imenika na -rwx------ prepreči vstop drugim uporabnikom v ta imenik.
chmod {a,u,g,o}{+,-}{r,w,x} imena_datotek
Na kratko, podajte eno ali več od črk ,,a`` (vsi, angl. all), ,,u`` (uporabnik, angl. user), ,,g`` (skupina, angl. group) ali ,,o`` (ostali, angl. other). Potem določite, ali naj se pravice dodajo (+) ali odvzamejo (-). Končno, določite še eno ali več dovoljenj za branje (angl. read), pisanje (angl. write) in izvajanje (angl. execute). Nekateri primeri legalnih ukazov so:
/home/larry$ ls -i fooTukaj ima foo v datotečnem sistemu prirejeno število inode 22192. Takole lahko ustvarite še eno povezavo, po imenu bar, do foo:
22192 foo
/home/larry$
/home/larry$ ln foo barZ uporabo ls -i boste videli, da imata ti dve datoteki isto število inode.
/home/larry$ ls -i foo barZdaj lahko do iste datoteke dostopate prek imena foo ali pa bar. Če naredite spremembe v datoteki foo, se te spremembe pojavijo tudi v datoteki bar. Za vse namene sta foo in bar ista datoteka.
22192 bar 22192 foo
/home/larry$
Tovrstne povezave so znane kot trde povezave (angl. hard links), saj ustvarijo neposredno povezavo na inode. Upoštevajte, da lahko trdo povežete datoteki le, če ležita na istem datotečnem sistemu; simbolne povezave (glejte spodaj) nimajo te omejitve.
Ko pobrišete datoteko z rm, pravzaprav pobrišete le eno povezavo do nje. Če uporabite ukaz
/home/larry$ rm foose pobriše le povezava, imenovana foo, bar bo še vedno obstajala. Datoteka je zares odstranjena s sistema le, ko ni več povezav do nje. Navadno imajo datoteke le po eno povezavo, zato uporaba ukaza rm pobriše datoteko. Vendar če ima datoteka več povezav do nje, bo uporaba rm pobrisala le eno povezavo; za brisanje datoteke morate pobrisati vse povezave do nje.
Ukaz ls -l prikaže število povezav do datoteke (med ostalimi informacijami).
/home/larry$ ls -l foo barDrugi stolpec v izpisu, ,,2``, prikazuje število povezav do datoteke.
-rw-r--r-- 2 root root 12 Aug 5 16:51 bar
-rw-r--r-- 2 root root 12 Aug 5 16:50 foo
/home/larry$
Kot se izkaže, je imenik pravzaprav le datoteka, ki vsebuje informacije o zvezah med povezavami in inodi. Vsak imenik vsebuje tudi vsaj dve trdi povezavi: ,,.`` (povezavo, ki kaže nanj) in ,,..`` (povezavo, ki kaže na starševski imenik). Povezava ,,..`` korenskega imenika (/) kaže le nazaj na /. (Z drugimi besedami, starševski imenik korenskega imenika je sam korenski imenik.)
Ukaz ln -s ustvari simbolno povezavo do datoteke. Na primer, če uporabljate ukaz
/home/larry$ ln -s foo barboste ustvarili simbolno povezavo, imenovano bar, ki kaže na datoteko foo. Če uporabite ls -i, boste videli, da imata ti dve datoteki zares različni števili inode.
/home/larry$ ls -i foo barVendar z uporabo ls -l vidimo, da je datoteka bar simbolna povezava, ki kaže na foo.
22195 bar 22192 foo
/home/larry$
/home/larry$ ls -l foo bar
lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar -> foo
-rw-r--r-- 1 root root 12 Aug 5 16:50 foo
/home/larry$
Dovoljenja datoteke se pri simbolni povezavi ne uporabljajo (vedno so oblike rwxrwxrwx). Namesto tega se uporabljajo dovoljenja cilja simbolne povezave (v našem primeru datoteke foo).
Funkcionalno so trde in simbolne povezave podobne, a obstajajo razlike. Ena od njih je, da lahko ustvarite simbolno povezavo do datoteke, ki ne obstaja; kar ne velja za trde povezave. Simbolne povezave obdela jedro drugače kot trde, kar je le tehnična, a včasih pomembna, razlika. Simbolne povezave so nam v pomoč, ker določajo datoteko, na katero kažejo; pri trdih povezavah ni preprostega načina za ugotovitev, katere datoteke so povezane na ista števila inode.
Povezave se uporabljajo v sistemu Linux na veliko mestih. Simbolne
povezave so posebej pomembne pri slikah deljenih knjižnic v imeniku
/lib. Glejte stran za več
informacij.
Nadzor opravil (angl. job control) je lastnost, ki jo ponuja mnogo ukaznih lupin (vključno z bash in tcsh), ki vam omogoča nadzor več tekočih ukazov ali opravil naenkrat. Preden se potopimo globlje, moramo spregovoriti o procesih.
Vsakič, ko poženete program, začnete to, kar se imenuje proces. Ukaz ps izpiše spisek procesov, ki trenutno tečejo, kot je prikazano tukaj:
/home/larry$ psŠtevilka PID v prvem stolpcu je identifikacijska številka procesa, unikatna številka, dodeljena vsakemu tekočemu procesu. Zadnji stolpec, COMMAND, je ime tekočega ukaza. Tukaj gledamo le procesa, ki ju trenutno poganja sam Larry. (Na sistemu obstajajo tudi drugi tekoči procesi - ,,ps aux`` jih vse izpiše.) To sta bash (Larryjeva ukazna lupina) in sam ukaz ps. Kot vidite, teče bash vzporedno z ukazom ps. bash je izvedel ukaz ps, ko ga je Larry vtipkal. Ko ps preneha delovati (po izpisu tabele procesov), se nadzor vrne procesu bash, ki izpiše pozornik, pripravljen na naslednji ukaz.
PID TT STAT TIME COMMAND
24 3 S 0:03 (bash)
161 3 R 0:00 ps
/home/larry$
Tekoči proces se tudi imenuje opravilo (angl. job). Izraza proces in opravilo sta zamenljiva. Vendar se o procesu navadno govori kot o ,,opravilu``, ko se uporablja v povezavi z nadzorom opravil - značilnosti ukazne lupine, da vam omogoča preklapljanje med različnimi neodvisnimi opravili.
V večini primerov uporabniki poganjajo le eno opravilo hkrati - katerikoli ukaz so pač zadnji vnesli v ukazno lupino. Vendar pa z uporabo nadzora opravil lahko hkrati poganjate več opravil in po potrebi preklapljate med njimi.
Kako je lahko to uporabno? Denimo, da urejate tekstovno datoteko in bi radi prekinili vaše urejanje in naredili nekaj drugega. Z nadzorom opravil lahko začasno odložite urejevalnik, se vrnete v pozornik ukazne lupine in začnete delati na nečem drugem. Ko ste opravili, lahko preklopite nazaj v urejevalnik in ste tam, kjer ste bili, kot da sploh ne bi zapustili urejevalnika. Obstaja mnogo praktičnih uporab nadzora opravil.
Opravila so lahko v ospredju (angl. foreground) ali v
ozadju (angl. background). Hkrati je lahko v ospredju le
eno opravilo. Opravilo v ospredju je opravilo, s katerim vzajemno
delujete - sprejema vhod s tipkovnice in pošilja izhod na zaslon
(razen seveda, če ste preusmerili vhod ali izhod, kot je opisano od
strani naprej). Po drugi strani, opravila v
ozadju ne sprejemajo vhoda s terminala - v splošnem tečejo tiho,
brez potrebe po interakciji.
Nekatera opravila potrebujejo dolgo časa, da se končajo, in ne počnejo ničesar zanimivega, dokler tečejo. Prevajanje programov je takšno opravilo kot tudi komprimiranje velike datoteke. Ni razloga, da bi posedali naokrog in se dolgočasili, dokler ta opravila ne končajo svojih nalog; preprosto jih poženite v ozadju. Dokler opravila tečejo v ozadju, lahko po mili volji poganjate druge programe.
Opravila so lahko odložena. Odloženo opravilo (angl. suspended job) je opravilo, ki je le začasno ustavljeno. Ko odložite opravilo, mu lahko poveste, naj nadaljuje v ospredju ali ozadju, če je to potrebno. Nadaljevanje odloženega opravila nikakor ne spremeni stanja opravila - opravilo nadaljuje s tekom tam, kjer je ostalo.
Odložitev opravila ni enaka prekinitvi opravila. Ko prekinete (angl. interrupt) tekoči proces (s pritiskom prekinitvene tipke, ki je navadno Ctrl-C)3.3, se proces ubije, za vedno. Ko se opravilo ubije, ni upanja za njegovo nadaljevanje. Ponovno boste morali pognati ukaz. Nekateri programi pa prestrežejo prekinitev tako, da pritisk Ctrl-C ne ubije opravila takoj. To je zato, da se programu omogoči vse potrebne čistilne operacije, preden se konča. Pravzaprav vam nekateri programi sploh ne dovoljujejo, da jih ubijete s prekinitvijo.
Začnimo s preprostim zgledom. Ukaz yes je navidezno neuporaben ukaz, ki pošilja neskončen tok črk y na standardni izhod. (To je celo uporabno. Če s cevjo povežete izhod ukaza yes do drugega ukaza, ki vprašuje niz vprašanj tipa da/ne (angl. yes/no), bo tok črk y potrdil vsa vprašanja.)
Preizkusite:
/home/larry$ yesIzpis ipsilonov se bo nadaljeval ad infinitum. Proces lahko ubijete s pritiskom na prekinitveno tipko, ki je navadno Ctrl-C.
y
y
y
y
y
Da nam ne bo treba spet shajati z mučnim tokom ipsilonov, preusmerimo standardni izhod programa yes na napravo /dev/null. Kot se spomnite, /dev/null deluje kot ,,črna luknja`` za podatke. Vsi podatki, poslani vanjo, izginejo. To je zelo učinkovita metoda za utišanje sicer zgovornega programa.
/home/larry$ yes > /dev/nullAh, veliko bolje. Nič se ne izpiše, a pozornik ukazne lupine se ne prikaže nazaj. To je zato, ker yes še vedno teče, in pošilja te nesmiselne ipsilone na /dev/null. Spet za ubijanje opravila pritisnite prekinitveno tipko.
Denimo, da želite, da ukaz yes nadaljuje s tekom, a želite dobiti pozornik ukazne lupine nazaj, da boste lahko delali na drugih zadevah. Ukaz yes lahko postavite v ozadje, in mu s tem omogočite tek brez potrebe za vzajemno delovanje.
En način za postavljanje procesa v ozadje je, da pripnemo znak ,,&`` na konec ukaza.
Kot lahko vidite, se je pozornik ukazne lupine vrnil. A kaj pomeni ta ,,/home/larry$ yes > /dev/null & [1] 164 /home/larry$
[1] 164
``? In ali ukaz yes zares teče?
Oznaka ,,[1]
`` predstavlja številko opravila za
trenutni proces yes. Ukazna lupina dodeli številko opravila
vsakemu tekočemu opravilu. Ker je yes edino opravilo, ki
teče, mu je dodeljena številka opravila 1. Oznaka
,,164`` je ID procesa ali PID, številka, ki jo opravilu
dodeli sistem. Katerokoli od teh dveh številk lahko uporabite za
sklicevanje na opravilo, kot boste videli pozneje.
Zdaj vam v ozadju teče proces yes, ki nenehno pošilja tok črk y na /dev/null. Za preverbo statusa tega procesa uporabite notranji lupinski ukaz jobs.
/home/larry$ jobsTukaj je, dovolj prepričljivo. Uporabili bi lahko tudi ukaz ps, opisan zgoraj, za preverbo statusa opravila.
[1]+ Running yes >/dev/null &
/home/larry$
Za pokončanje opravila uporabite ukaz kill. Ta ukaz vzame za svoj argument bodisi številko opravila, bodisi številko ID procesa. To je bilo opravilo številka 1, zato uporaba ukaza
/home/larry$ kill %1pobije opravilo. Ko se sklicujete na opravilo s številko opravila, morate pred številko dodati znak za odstotek (,,%``).
Zdaj ko ste pobili opravilo, spet uporabite ukaz jobs za njegovo preverbo:
/home/larry$ jobsOpravilo je zares mrtvo, in če spet uporabite ukaz jobs, se ne bo izpisalo nič.
[1]+ Terminated yes >/dev/null
/home/larry$
Opravilo lahko pobijete tudi z uporabo številke ID procesa (PID), ki je prikazana poleg ID opravila, ko zaženete opravilo. V našem primeru je ID procesa 164, zato je ukaz
/home/larry$ kill 164ekvivalenten ukazu
/home/larry$ kill %1Kadar se sklicujete na opravilo z njegovo številko ID procesa, navedete številko PID brez znaka za odstotek.
Najprej, poženite proces yes v ospredju, kot ste storili že prej:
/home/larry$ yes > /dev/nullSpet, ker yes teče v ospredju, ne bi smeli dobiti nazaj pozornika.
Zdaj, namesto da prekinete opravilo s Ctrl-C, odložite opravilo. Odložitev opravila ne pobije: le začasno ustavi opravilo, dokler ga ponovno ne poženete. Za to pritisnite tipko za odložitev, ki je navadno Ctrl-Z.
Ko je opravilo odloženo, preprosto ne teče. Za opravilo se ne uporablja nič procesorskega časa. Vendar lahko ponovno zaženete opravilo, kar povzroči, da opravilo spet teče, kot da se ni nikoli nič zgodilo. Opravilo bo nadaljevalo s tekom tam, kjer je končalo./home/larry$ yes > /dev/null Ctrl-Z [1]+ Stopped yes >/dev/null /home/larry$
Za ponovni zagon opravila v ospredju, uporabite ukaz fg (iz angl. ,,foreground``, ospredje).
/home/larry$ fgUkazna lupina spet izpiše ime ukaza, tako da se zavedate, katero opravilo ste pravkar postavili v ospredje. Spet ustavite opravilo s Ctrl-Z. Tokrat uporabite bg in postavite opravilo v ozadje. To povzroča, da ukaz teče, kot da bi ga zagnali z ukazom z ,,&``, kot smo videli v zadnjem razdelku.
yes >/dev/null
/home/larry$ bgIn spet imate nazaj svoj pozornik. Ukaz jobs naj bi poročal, da yes zares teče, in opravilo lahko pobijete z ukazom kill, kot smo že naredili.
[1]+
yes >/dev/null &
/home/larry$
Kako lahko ponovno ustavite to opravilo? Uporaba Ctrl-Z ne bo delovala, saj je opravilo v ozadju. Odgovor je, da postavite opravilo v ospredje s fg in ga potem ustavite. Kot se izkaže, lahko uporabljate fg na ustavljenih opravilih ali opravilih v ozadju.
Obstaja velika razlika med opravilom v ozadju in opravilom, ki je ustavljeno. Ustavljeno opravilo ne teče - ne uporablja procesorskega časa in ne opravlja nobenega dela (opravilo še vedno zaseda sistemski pomnilnik, čeprav je morda izmenjano na disk). Opravilo v ozadju teče in uporablja pomnilnik, kot tudi zaključuje neko nalogo, medtem ko vi delate kaj drugega.
Včasih opravilo v ozadju poskuša na vašem terminalu prikazati tekst, kar je lahko nadležno, če poskušate delati kaj drugega. Na primer, če ste uporabili ukaz
/home/larry$ yes &brez preusmeritve stdout na /dev/null, bo na zaslonu prikazovan tok črk y, ne da bi ga lahko prekinili. (Za prekinitev opravil v ozadju ne morete uporabiti Ctrl-C.) Za ustavitev neskončnih ipsilonov uporabite ukaz fg, da prenesete opravilo v ospredje, potem uporabite Ctrl-C, da ga pobijete.
Še eno sporočilo. Ukaza fg in bg navadno prizadeneta le opravilo, ki je bilo zadnje ustavljeno (prikazano z znakom ,,+`` poleg številke opravila, ko uporabite ukaz jobs). Če hkrati poganjate več opravil, lahko postavljate opravila v ospredje ali ozadje tako, da podate številko opravila kot argument ukazu fg ali bg, kot v primeru
/home/larry$ fg %2(za postavitev opravila številka 2 v ospredje), ali
/home/larry$ bg %3(za postavitev opravila številka 3 v ozadje). Z ukazoma fg in bg ne morete uporabljati številk ID procesov (PID).
Nadalje, uporaba same številke opravila, kot v
/home/larry$ %2je ekvivalentna uporabi
/home/larry$ fg %2
Spomnite se le, da je uporaba nadzora opravil lastnost ukazne lupine. Ukazi fg, bg in jobs so notranji ukazi ukazne lupine. Če iz nekega razloga uporabljate lupino, ki ne podpira nadzora opravil, ne pričakujte, da bodo ti ukazi dostopni.
Poleg tega obstajajo nekateri vidiki nadzora opravil, ki se razlikujejo med ukaznima lupinama bash in tcsh. Nekatere ukazne lupine sploh ne ponujajo nadzora opravil - večina ukaznih lupin, dostopnih za Linux, pa ga ponuja.
Urejevalnik besedil (angl. text editor) je program, ki se uporablja za urejanje datotek, ki so sestavljene iz besedila: pismo, program v C-ju ali sistemska nastavitvena datoteka. Medtem ko je za Linux na voljo veliko takšnih urejevalnikov, je edini urejevalnik, ki ga boste zajamčeno našli na vsakem sistemu Unix ali Linux, urejevalnik vi - tako imenovani ,,vizualni urejevalnik`` (angl. visual editor). Urejevalnik vi ni najpreprostejši urejevalnik za uporabo niti uporaba ni zelo samoumevna. A ker je vi tako pogost v svetu Unixa/Linuxa in včasih nujno potreben, si zasluži tukajšnji opis.
Izbira vašega urejevalnika je predvsem vprašanje osebnega okusa in stila. Veliko uporabnikov ima najraje baročni, samoumevni in zmogljivi emacs - urejevalnik z več zmožnostmi kot katerikoli drugi posamični program v svetu Unixa. Na primer, Emacs ima vgrajeno lastno narečje programskega jezika LISP in ima mnogo razširitev (ena od njih je program umetne inteligence, podoben Elizi). Vendar ker je Emacs s svojo podporo relativno velik, morda na nekaterih sistemih ne bo nameščen. Urejevalnik vi, po drugi strani, je majhen in zmogljiv, a zapleten za uporabo. A ko ga enkrat obvladate, je vi pravzaprav zelo enostaven.
Ta razdelek predstavlja uvod v vi - ne bomo razlagali vseh njegovih značilnosti, le tiste, ki jih potrebujete, da začnete. Pogledate lahko stran referenčnega priročnika o vi, če bi se radi naučili več o značilnostih tega urejevalnika. Ali pa preberete knjigo Learning the vi Editor založbe O'Reilly and Associates ali VI Tutorial založbe Specialized Systems Consultants (SSC) Inc. Glejte dodatek A za informacije.
Ko poženete vi, ste v ukaznem načinu. Ta način vam omogoča uporabo ukazov za urejanje datotek ali spremembo v druga dva načina. Na primer, če v ukaznem načinu pritisnete x, pobrišete znak pod kazalcem. Tipke s puščicami med urejanjem premikajo kazalec po datoteki. V splošnem so ukazi, uporabljani v ukaznem načinu, dolgi en ali dva znaka.
Besedilo zares vrivate ali urejate v načinu za vstavljanje. Ko boste uporabljali vi, boste verjetno preživeli večino vašega časa v tem načinu. Način za vstavljanje poženete z uporabo ukaza, kot je i (iz angl. ,,insert``, vstavi) iz ukaznega načina. Dokler ste v načinu za vstavljanje, lahko vstavljate besedilo v spis na trenutnem mestu kazalca. Za konec načina za vstavljanje in vrnitev v ukazni način, pritisnite Esc.
Način zadnje vrstice je poseben način, ki daje določene razširjene ukaze urejevalniku vi. Ko vpisujete te ukaze, se prikazujejo v zadnji vrstici zaslona (odtod ime). Na primer, ko vpisujete v ukaznem načinu ,,:``, skočite v način zadnje vrstice in lahko uporabljate ukaze, kot sta ,,wq`` (iz angl. write & quit, za zapis datoteke in izhod iz vi), ali ,,q!`` (za izhod iz vi brez shranjevanja sprememb). Način zadnje vrstice se v splošnem uporablja za ukaze v vi, ki so daljši kot en znak. V načinu zadnje vrstice lahko vnesete enovrstični ukaz in pritisnete Enter za njegovo izvajanje.
Skladnja za klic vi je
vi datotekakjer je datoteka ime datoteke za ureditev.
Poženite vi z vnosom
/home/larry$ vi testza urejanje datoteke test. Videti bi morali nekaj kot
~ ~ ~ ~ ~ ~"test" [New file]
Stolpec znakov ,,~`` nakazuje, da ste na koncu datoteke. Podčrtaj ,, `` predstavlja kazalec.
Program vi je zdaj v ukaznem načinu. Vnesite besedilo v datoteko s pritiskom i, kar postavi urejevalnik v način za vstavljanje, in začnite tipkati. Morda boste trenutno imeli še probleme z vnosom šumnikov, odvisno od vaše distribucije in tega, kako ste nastavili tipkovnico. Če imate tovrstne težave, pišite ,,CSZ`` namesto ,,ČŠŽ``. Ureditev vnosa slovenskih znakov je podrobno opisana v spisu Slovenian HOWTO, glejte dodatek A za informacije o tem, kje ga dobite.
Zdaj je čas za vse dobre može, da pridejo pomagat zabavi. ~ ~ ~ ~ ~
Vpišite toliko vrstic, kot želite (po vsaki pritisnite Enter). Napake lahko popravite z Backspace.
Za konec načina za vstavljanje in vrnitev v ukazni način pritisnite Esc.
V ukaznem načinu lahko uporabljate tipke s puščicami za premikanje po datoteki. (Če imate le eno vrstico besedila, bo poskus uporabe tipk s puščicama navzgor ali navzdol verjetno povzročil le, da vam bo vi zapiskal.)
Poleg ukaza i obstaja še precej drugih načinov za vstavljanje besedila. Ukaz a vstavi besedilo, začenši za trenutnim položajem kazalca, namesto na trenutnem položaju kazalca. Na primer, uporabite levo puščico za premik kazalca med besedi ,,dobre`` in ,,može``.
Pritisnite a za začetek načina za vstavljanje, napišite ,,figa`` in potem pritisnite Esc za vrnitev v ukazni način.
Zdaj je čas za vse dobre može, da pridejo pomagat zabavi. ~ ~ ~ ~ ~
Zdaj je čas za vse dobre figamože, da pridejo pomagat zabavi. ~ ~ ~ ~ ~
Za začetek vstavljanja besedila v naslednjo vrstico uporabite ukaz o. Pritisnite o in vnesite še vrstico ali dve:
Zdaj je čas za vse dobre figamože, da pridejo pomagat zabavi. Potem bomo šli ven na pizzo in pivo. ~ ~ ~ ~
Zdaj pritisnite a in vstavite nekaj besedila, nato pa Esc:
Zdaj je čas za vse dobre figamože, da pridejo pomagat zabavi. Potem bomo šli ven na pizzo in ~ ~ ~ ~
Zdaj je čas za vse dobre figamože, da pridejo pomagat zabavi. Potem bomo šli ven na pizzo in dietno kokto. ~ ~ ~ ~
Celotne vrstice lahko pobrišete z ukazom dd (se pravi, dvakrat zaporedoma pritisnite d). Če je kazalec na drugi vrstici in vpišete dd, boste videli:
Zdaj je čas za vse dobre figamože, da pridejo pomagat zabavi. ~ ~ ~ ~ ~
Za izbris besede, na kateri je kazalec, uporabite ukaz dw. Postavite kazalec na besedo ,,dobre``, in vtipkajte dw.
Zdaj je čas za vse figamože, da pridejo pomagat zabavi. ~ ~ ~ ~ ~
Uporaba R za urejevanje besedila je podobna ukazoma i in a, toda R prepiše besedilo, namesto, da bi ga vstavljal.
Zdaj je čas za vse figamože, da pridejo pomagat lačnim. ~ ~ ~ ~ ~
Ukaz r nadomesti en sam znak pod kazalcem. Na primer, postavite kazalec na začetek besede ,,Zdaj``, in pritisnite r, ki mu sledi K. Videli boste:
Kdaj je čas za vse figamože, da pridejo pomagat lačnim. ~ ~ ~ ~ ~
Ukaz ,,~`` spremeni velikost črk pod kazalcem iz velikih v male in obratno. Na primer, če postavite kazalec na ,,d`` v ,,Kdaj``, zgoraj, in zaporedoma pritiskate ~, boste končali z:
KDAJ JE čAS ZA VSE FIGAMOžE, DA PRIDEJO POMAGAT LAčNIM. ~ ~ ~ ~ ~
Če se velikost slovenskih črk ,,čšž`` pri tem ohrani, kot v zgornjem
primeru, jih popravite na roke, denimo z ukazom r. V tem
primeru boste najbrž želeli prikrojiti svoj sistem po navodilih iz
spisa Slovenian HOWTO (glejte dodatek A) -
ključna sta predvsem izvoz in nastavitev okoljske spremenljivke, ki določa uporabo
slovenske abecede (export LC_CTYPE=sl_SI
v lupini
bash).
Ukaz w premakne kazalec na začetek naslednje besede; ukaz b ga premakne na začetek prejšnje besede.
Ukaz 0 (to je tipka z ničlo) premakne kazalec na začetek trenutne vrstice, in ukaz $ ga premakne na konec vrstice.
Ko urejate velike datoteke, se boste želeli pomikati po datoteki po en zaslon hkrati navzgor ali navzdol. Pritisk Ctrl-F premakne kazalec en zaslon naprej, Ctrl-B ga premakne zaslon nazaj.
Za premik kazalca na konec datoteke pritisnite G. Lahko ga tudi premaknete na poljubno vrstico; na primer, vnos ukaza 10G bi premaknil kazalec na vrstico 10 v datoteki. Za premik na začetek datoteke uporabite 1G.
Premikalne ukaze lahko združujete z drugimi ukazi, kot so tisti za brisanje besedila. Na primer, ukaz d$ pobriše vse od kazalca do konca vrstice, dG pobriše vse od kazalca do konca datoteke in tako najprej.
V načinu zadnje vrstice so dostopni nekateri razširjeni ukazi. Eden od njih je q!, ki zapusti vi brez shranjevanja. Ukaz :wq shrani datoteko in potem zapusti vi. Ukaz ZZ (iz ukaznega načina, brez ,,:``) je ekvivalenten ukazu :wq. Če datoteka ni bila spremenjena od zadnjega shranjevanja, le zapusti urejevalnik in ohrani čas spremembe datoteke. Ne pozabite, da morate po ukazu, vnešenem v načinu zadnje vrstice, pritisniti Enter.
KDAJ JE ČAS ZA VSE FIGAMOŽE, DA PRIDEJO POMAGAT LAČNIM. ~ ~ ~ ~ ~:
Za shranitev datoteke brez zapuščanja vi uporabite :w.
Če uporabite :e, ne da bi najprej shranili datoteko, boste dobili sporočilo o tovrstni napaki
KDAJ JE ČAS ZA VSE FIGAMOŽE, DA PRIDEJO POMAGAT LAČNIM. ~ ~ ~ ~ ~:e foo
kar pomeni, da vi noče urejevati nove datoteke, dokler ne shranite prvotne. Na tej točki lahko uporabite :w za shranitev prvotne datoteke in potem uporabite :e, ali pa lahko uporabite ukaz
No write since last change (":edit!" overrides)
Klicaj ,,!`` pove urejevalniku vi, da to res mislite - urejevanje nove datoteke, ne da bi shranili spremembe v prvotno.
KDAJ JE ČAS ZA VSE FIGAMOŽE, DA PRIDEJO POMAGAT LAČNIM. ~ ~ ~ ~ ~:e! foo
:r foo.txtvstavi vsebino datoteke foo.txt v besedilo na mestu kazalca.
:r! ls -Fboste končali z
KDAJ JE ČAS ZA VSE FIGAMOŽE, DA PRIDEJO POMAGAT LAČNIM. pisma/ razno/ spisi/ ~ ~
Lahko se tudi ,,preselite`` v ukazno lupino iz urejevalnika vi, z drugimi besedami, poženete ukaz iz njega in se vrnete v urejevalnik, ko ste končali. Na primer, če uporabite ukaz
:! ls -Fse bo ukaz ls -F pognal in bo rezultat prikazan na zaslonu, a ne bo vstavljen v datoteko, ki jo urejate. Če uporabite ukaz
:shellbo vi zagnal izvod ukazne lupine in vam omogočil, da začasno postavite vi ,,na čakanje``, dokler izvajate druge ukaze. Za vrnitev v vi se le odjavite iz ukazne lupine (z uporabo ukaza exit).
Ukazna lupina ponuja veliko mehanizmov za prilagoditev vašega delovnega okolja. Kot smo omenili zgoraj, je ukazna lupina več kot le tolmač posamičnih ukazov - je tudi tolmač za zmogljiv programski jezik. Čeprav je pisanje skriptov ukazne lupine široko področje, bi vas radi seznanili z nekaterimi načini za poenostavitev vašega dela na sistemu Linux brez uporabe teh naprednih odlik ukazne lupine.
Kot je bilo že omenjeno, različne ukazne lupine uporabljajo različno skladnjo, ko izvajajo skripte ukazne lupine. Na primer, Tcsh uporablja C-ju podobno skladnjo, medtem, ko Bournove lupine uporabljajo drugo vrsto skladnje. V tem razdelku ne bomo opazili velikih razlik med tema dvema, a bomo privzeli, da se skripti ukazne lupine izvajajo z uporabo skladnje Bournove lupine.
združijo datoteke poglavje1, poglavje2, in poglavje3 in postavijo rezultat v datoteko knjiga. Drugi ukaz prikaže prešteto število vrstic v datoteki knjiga, tretji ukaz lp knjiga pa natisne datoteko knjiga./home/larry$ cat poglavje1 poglavje2 poglavje3 > knjiga /home/larry$ wc -l knjiga /home/larry$ lp knjiga
Namesto da pišete vse te ukaze, jih lahko poberete skupaj v lupinski skript. Lupinski skript, uporabljan za tek vseh teh ukazov, bi se lahko glasil takole:
Lupinski skripti so le preproste tekstovne datoteke; ustvarite jih lahko s katerimkoli urejevalnikom, kot je emacs ali vi, ki je opisan od strani#!/bin/sh # Lupinski skript za ustvarjanje in natis knjige cat poglavje1 poglavje2 poglavje3 > knjiga wc -l knjiga lp knjiga
Poglejmo ta lupinski skript. Prva vrstica, ,,#!/bin/sh``, identificira datoteko kot lupinski skript in naroči ukazni lupini, kako naj izvede skript. Naroči ukazni lupini, naj prepusti skript v izvajanje /bin/sh, kjer je /bin/sh sam program za ukazno lupino. Zakaj je to pomembno? Na večini sistemih Linux je /bin/sh ukazna lupina Bournovega tipa, kot je bash. Prisila lupinskega skripta, da teče z uporabo /bin/sh, zagotavlja, da se bo pognal pod ukazno lupino Bournove skladnje (namesto pod lupino C). To bo povzročilo, da bo vaš skript tekel z uporabo Bournove skladnje, tudi če uporabljate tcsh (ali drugo podobno ukazno lupino) kot vašo prijavno lupino.
Druga vrstica je komentar. Komentar se začne z znakom ,,#`` in se nadaljuje do konca vrstice. Ukazna lupina ignorira komentarje - pogosto se jih uporablja, da predstavijo lupinski skript programerju in ga naredijo lažje umljivega.
Ostanek vrstic v skriptu so preprosto ukazi, kot bi jih vpisali neposredno v ukazno lupino. Ukazna lupina tako prebere vsako vrstico skripta in požene to vrstico, kot da bi jo vpisali v pozornik ukazne lupine.
Za lupinske skripte so pomembna dovoljenja. Če ustvarite skript
ukazne lupine, poskrbite, da imate dovoljenja za izvajanje skripta, če
bi ga radi poganjali. Ko ustvarjate tekstovne datoteke, privzeta
dovoljenja navadno ne vključujejo dovoljenja za izvajanje, in tega
morate navesti eksplicitno. Glejte razpravo o dovoljenjih za dostop
do datotek na strani za podrobnosti. Na
kratko, če bi bil zgornji skript shranjen v datoteki, imenovani
narediknjigo, bi lahko uporabili ukaz
/home/larry$ chmod u+x narediknjigoda bi si dali dovoljenje za izvajanje lupinskega skripta narediknjigo.
Za poganjanje vseh ukazov v skriptu lahko tedaj uporabite ukaz
/home/larry$ ./narediknjigo
¤ Ukazna lupina tcsh, kot tudi druge ukazne lupine tipa C, uporabljajo drugačen mehanizem za nastavitev spremenljivk od tukaj opisanega. Ta razprava predpostavi uporabo Bournove ukazne lupine, kot je bash. Glejte stran priročnika o tcsh za podrobnosti.
Ko spremenljivki določite vrednost (z uporabo operatorja ,,=``), lahko dostopate do spremenljivke s predpono ,,$`` njenemu imenu, kot je pokazano spodaj.
/home/larry$ foo="zdravo tam"Spremenljivki foo je dana vrednost ,,zdravo tam``. Na to vrednost se lahko potem sklicujete z imenom spremenljivke, ki mu spredaj dodate znak ,,$``. Na primer, ukaz
/home/larry$ echo $foodoseže enak rezultat, kot
zdravo tam
/home/larry$
/home/larry$ echo "zdravo tam"
zdravo tam
/home/larry$
Te spremenljivke so notranje ukazni lupini, kar pomeni, da do njih lahko dostopa le lupina. To je lahko uporabno v lupinskih skriptih; če si morate, na primer, zabeležiti ime datoteke, ga lahko shranite v spremenljivko kot zgoraj. Uporaba ukaza set prikaže seznam vseh definiranih lupinskih spremenljivk.
Ukazna lupina pa vam dovoljuje izvoz spremenljivk v okolje. Okolje (angl. environment) je nabor spremenljivk, ki so dostopne vsem ukazom, ki jih izvajate. Ko enkrat definirate spremenljivko znotraj ukazne lupine, njen izvoz naredi, da postane tudi ta spremenljivka del okolja. Za izvoz spremenljivke v okolje uporabite ukaz export.
¤ Spet, tukaj razlikujemo med bash in tcsh. Če uporabljate tcsh, se za nastavitev okoljskih spremenljivk uporablja druga skladnja (uporablja se ukaz setenv). Glejte stran priročnika o ukazni lupini tcsh za več informacij.
Okolje je za sistem Unix zelo pomembno. Dovoljuje vam nastavitev nekaterih ukazov le z nastavitvijo spremenljivk, ki jih ti ukazi poznajo.
Tukaj je kratek primer. Okoljska spremenljivka PAGER se uporablja v ukazu man in določa ukaz, ki naj se uporablja za prikaz strani referenčnega priročnika, po eno stran naenkrat. Če nastavite spremenljivko PAGER na ime ukaza, uporablja namesto (privzetega) ukaza more novi ukaz za prikaz strani priročnika.
Nastavite PAGER na ,,cat``. To povzroča, da se izhod priročnika man prikaže naenkrat na zaslonu, brez premora med stranmi.
/home/larry$ PAGER=catZdaj izvozimo PAGER v okolje.
/home/larry$ export PAGERPoskusite ukaz man ls. Stran priročnika bi morala zleteti mimo vašega zaslona, ne da bi čakala na vas.
Če zdaj nastavimo PAGER na ,,more``, se bo za prikaz strani priročnika uporabljal ukaz more.
/home/larry$ PAGER=moreUpoštevajte, da ni več treba uporabiti ukaza export, ko smo spremenili vrednost spremenljivke PAGER. Spremenljivko moramo izvoziti le enkrat; od takrat naprej se bodo vse njene spremembe samodejno prenesle v okolje.
Pogosto je nize nujno navesti med narekovaji, ali naj se prepreči ukazni lupini, da bi upoštevala njihove različne znake kot posebne. Na primer, niz boste morali zapisati med narekovajema, če želite lupini preprečiti tolmačenje posebnega pomena znakov, kot so ,,*``, ,,?`` ali presledek. Obstaja veliko drugih znakov, ki jih je treba zaščititi pred tolmačenjem. Podrobna razlaga in opis citiranja je opisana v knjigi Bourne Shell Tutorial založbe SSC.
Strani priročnika za določen ukaz vam povedo, če ukaz uporablja okoljske spremenljivke. Na primer, stran priročnika o ukazu man razlaga, da se za določitev izpisovalnika uporablja spremenljivka PAGER.
Nekateri ukazi delijo okoljske spremenljivke. Na primer, mnogi ukazi uporabljajo okoljsko spremenljivko EDITOR za določitev privzetega urejevalnika za uporabo, ko je ta potrebna.
Okolje se uporablja tudi za zapis sledi pomembnih informacij o vaših prijavnih sejah. Primer je okoljska spremenljivka HOME, ki vsebuje ime vašega domačega imenika.
/home/larry/papers$ echo $HOME
/home/larry
Druga zanimiva okoljska spremenljivka je PS1, ki definira glavni pozornik ukazne lupine. Na primer,
/home/larry$ PS1="Vaš ukaz, prosim: "Za nastavitev pozornika na prvotno vrednost (ki vsebuje trenutni delovni imenik, ki mu sledi znak ,,$``), uporabite
Vaš ukaz, prosim:
Stran priročnika o bash opisuje skladnjo, potrebno za nastavitev pozornika.Vaš ukaz, prosim: PS1="\w\$ " /home/larry$
Na primer, vaša spremenljivka PATH je lahko nastavljena na
/bin:/usr/bin:/usr/local/bin:.To je seznam imenikov, ki naj jih ukazna lupina poišče. Imeniki so ločeni z ,,:``. Ko uporabljate ukaz ls, ukazna lupina najprej pogleda za /bin/ls, potem /usr/bin/ls, in tako naprej.
Upoštevajte, da PATH nima ničesar opraviti z iskanjem običajnih datotek. Na primer, če uporabite ukaz
/home/larry$ cp foo barukazna lupine ne uporablja PATH za iskanje datotek foo in bar - za ti imeni datotek se predpostavlja, da sta popolni. Ukazna lupina uporablja PATH samo, da najde izvedljivo datoteko cp.
To vam prihrani čas, in pomeni, da si vam ni treba zapomniti, kje se shranjujejo vsi izvajalni ukazi. Na veliko sistemih so izvedljive datoteke razmetane po veliko mestih, kot so imeniki /usr/bin, /bin ali /usr/local/bin. Namesto da podate polno ime poti ukaza (kot je /usr/bin/cp), lahko nastavite spremenljivko PATH na seznam imenikov, za katere želite, da jih ukazna lupina samodejno preišče.
Upoštevajte, da PATH vsebuje ,,.``, kar je trenutni delovni imenik. To vam omogoča ustvarjanje lupinskega skripta ali programa in njegovo poganjanje iz trenutnega imenika, ne da bi ga bilo treba določiti neposredno (kot ./narediknjigo). Če imenik ni v vaši poti PATH, potem ga ukazna lupina ne bo preiskovala za ukaze, ki se lahko izvedejo; to vključuje tudi trenutni imenik.
Inicializacijski skripti sami so skripti ukazne lupine, vendar inicializirajo vaše okolje s samodejno izvedbo ukazov ob vaši prijavi. Če vedno uporabljate ukaz mail za preverbo vaše pošte, ko se prijavite v sistem, lahko ta ukaz položite v inicializacijski skript, da se bo izvedel samodejno.
Obe ukazni lupini, bash in tcsh, ločita med prijavno ukazno lupino (angl. login shell) in drugimi priklici ukazne lupine. Prijavna lupina je lupina, ki se izvede, ko se prijavite v sistem. Navadno je to edina ukazna lupina, ki jo uporabljate. Vendar če se ,,spravite v lupino`` drugega programa, kot je vi, zaženete drugi primerek ukazne lupine, ki ni vaša prijavna ukazna lupina. Poleg tega, če zaženete lupinski skript, samodejno začnete novo pojavitev lupine, ki izvaja skript.
Inicializacijske datoteke, ki jih uporablja bash, so: /etc/profile (nastavi jo sistemski upravitelj in se izvede pri vseh uporabnikih lupine bash v času prijave), $HOME/.bash_profile (izvede jo prijavna seja bash-a), in $HOME/.bashrc (izvedejo jo neprijavne pojavitve bash-a). Če datoteka .bash_profile ni prisotna, se namesto nje uporablja .profile.
tcsh uporablja naslednje inicializacijske skripte: /etc/csh.login (ob prijavi se izvede vsem uporabnikom lupine tcsh), $HOME/.tcshrc (izvede se ob prijavi in ob novih pojavitvah tcsh-ja), in $HOME/.login (izvede se v času prijave, takoj za .tcshrc). Če .tcshrc ne obstaja, se uporablja .cshrc.
Popoln vodnik po programiranju ukaznih lupin bi presegal obseg te knjige. Glejte strani priročnika o ukazni lupini bash ali tcsh za nadaljnje učenje o prilagoditvi vašega okolja Linux.
To poglavje bi vam moralo dati dovolj informacij za osnovno uporabo Linuxa. Strani referenčnega priročnika so nepogrešljivo orodje za dodatno učenje o Linuxu. Sprva se lahko zdijo zmedene, a če se prekopljete pod površino, predstavljajo pravi zaklad informacij.
Predlagamo tudi, da najprej preberete dobro splošno referenčno knjigo o Linuxu. Linux ima več odlik, kot se sprva zdi nevajenemu očesu. Žal je večina od njih izven dosega te knjige. Druge priporočene knjige o Linuxu so naštete v dodatku A.