Tämän sivun tarkoituksena on perehdyttää Linuxin käyttäjä konsolin ja virtuaalikonsolin käyttöön. Sivu tulee olemaan pitkään 'under construction' aineiston laajuuden takia - ja ajan puutteen takia. Sivulle on aluksi kerätty osa pääsivun aineistosta, ja pääsivua onkin tarkoitus keventää jakamalla aineisto pienempiin osa-alueisiin omille sivuilleen. Pahoittelen myös sivun epäloogista jaottelua näin alkuvaiheessa ja puutteita lukujen teksteissä.
Linux-oppaita suunnitellessa aineiston jakaminen omiksi selkeiksi kokonaisuuksikseen on aina vaikeaa ja mielestäni myös pitkälti makuasia. Itse haluan jakaa konsolin käytön omaksi osa-alueekseen, koska moni Windows-käyttäjä vierastaa jo koko ajatusta konsolista (tuo mieleen tekstipohjaisen Dosin ennen graafista Windowsia) eikä konsolin käyttö nykyisten 'windowsmaisten' Linux-jakeluiden aikana (kuten Mandrake) ole enää edes välttämätöntä Linuxin peruskäyttöä ajatellen.
Konsoli (jota voitaneen kutsua myös terminaaliksi, päätteeksi tai pääte-emulaattoriksi) on graafisessa tilassa omaan ikkunaansa käynnistettävä tekstipäätettä emuloiva ohjelma.
Tekstipäätteellä (se alkuperäinen 'tyhmä pääte') tarkoitetaan merkkipohjaista käyttöliittymää vastakohtana graafiselle käyttöliittymälle (Linuxissa X-ikkunointijärjestelmä), joka yleensä käynnistyy virtuaalikonsolille 7 (vt7). Linuxissa tekstipäätettä emuloivia ohjelmia ovat tekstitilassa (tekstimoodissa) toimivien virtuaalikonsolien (vt1 - vt6) lisäksi graafisessa tilassa käynnistettävässä virtuaalikonsolissa (vt7) käynnistettävät tekstipohjaiset ohjelmat:
Käytössä olevan päätteen tyypin (emuloinnin) näet TERM-ympäristömuuttujalla:
$ echo $TERM linux
Yleensä käytössä on linux mutta voit ottaa myös esim. vt100-emuloinnin käyttöön:
$ export TERM=vt100
Komentorivillä näkyvä $ (dollarimerkki) on tavallisen käyttäjän komentokehotteen tunnus ja # (risuaita) on rootin eli pääkäyttäjän tunnus. Voit väliaikaisesti siirtyä pääkäyttäjän tilaan kirjoittamalla su (tai su - joissakin distroissa) ja antamalla rootin salasanan.
Virtuaalikonsolille pitää erikseen kirjautua sisään (login) ennen kuin pääsee tekemään mitään. Vastaavasti käytön päätyttyä pitää kirjautua ulos virtuaalikonsolista (exit). Tällaista järjestelmässä sisälläoloa kirjautuneena kutsutaan istunnoksi (session).
Konsolista voidaan käynnistää myös graafisia ohjelmia vastakohtana virtuaalikonsolille, jossa käytetään vain komentotulkkia ja tekstipohjaisia ohjelmia.
Linux eroaa myös Dosista ja Windowsista siinä, että isojen ja pienten kirjaimien välillä on ero, joten jos käyttäjätunnus on tapsa, niin Tapsa ei silloin kelpaa. Yleensä Linuxin komennoissa käytetään pieniä kirjaimia mutta salasanoissa on tietenkin suositeltavaa käyttää sekä isoja että pieniä kirjaimia (sekä numeroita) sekaisin.
Konsoli on vähän samantapainen kuin Dos-tila Windowsissa mutta paljon tehokkaampi työkalu, ja siinä voi tehdä kaiken, mitä graafisilla apuohjelmillakin ja paljon enemmän. Lisäksi ohjelmien käynnistäminen konsolista on hyödyllistä mahdollisissa virhetilanteissa - konsolissa näet tulostuvat myös kaikki mahdolliset ohjelman ajonaikaiset virheilmoitukset. Katso myös luettelo virhekoodeista tiedostosta /usr/include/asm/errno.h.
Linuxin peruasennus tuo käyttäjän eteen graafisen login-ikkunan, josta voidaan erikseen käynnistää graafinen käyttöliittymä (X) virtuaalikonsolille 7 (vt7) tai siirtyä tietyillä näppäinyhdistelmillä kokonaan tekstipohjaisiin konsoleihin (vt1 - vt6). Linux voidaan asentaa myös pelkkänä tekstipohjaisena käyttöjärjestelmänä, jolloin vain tekstipohjaiset virtuaalikonsolit ovat käytettävissä ja käynnistettäessä tulee eteen pelkkä login-kehote. Oikeastaan tekstipohjainen tila on Linuxin peruskäynnistystila, josta haluttaessa voidaan erikseen käynnistää graafinen X startx-komennolla. Linuxia voidaan siis hyvin käyttää myös tekstitilassa ja esim. palvelinkäytössä olevaan koneeseen ei graafista käyttöliittymää yleensä edes asennetakaan.
Windows-käyttäjä hahmottaa asian ehkä paremmin, jos Linuxia verrataan Dosiin ja Linuxin graafista X:ää Dosin päällä toimivaan Windowsiin.
Virtuaalikonsoleilla (virtual terminal = vt) tarkoitetaan Linuxin käytettävissä olevia konsoleita, joiden välillä liikutaan näppäinyhdistelmällä Ctrl-Alt-Fn, jossa n = funktionäppäin 1-6. Esim. Ctrl-Alt-F1 tuo eteesi login-ikkunan, jossa voit kirjautua uudelleen sisään. Oletuksena on tekstimoodi, josta pääset takaisin alkuperäiseen graafiseen virtuaalikonsoliin (X:ään) näppäinyhdistelmällä Alt-F7. Tekstimoodissa konsolien välillä liikkumiseen ei siis tarvita Ctrl-näppäintä ja alkuperäisen konsolin funktionäppäimen numero on 7.
Virtuaalikonsoli ei siis tarkoita pelkkää tekstipäätettä vaan myös graafinen tila on yksi virtuaalikonsoleista (yleensä vt 7).
Virtuaalikonsolien määrää voidaan muuttaa muokkaamalla /etc/inittab-tiedostoa. Oletuksena on käytössä 6 tekstipohjaista konsolia (vt1-vt6) ja siitä eteenpäin olevat virtuaalikonsolit on varattu graafiseen käyttöön. Jos haluat lisätä konsoleita, ohita vt7 (tty7) ja lisää konsoleita siitä eteenpäin.
# Note that on most Debian systems tty7 is used by the X Window System, # so if you want to add more getty's go ahead but skip tty7 if you run X. # 1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4 5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6
Joskus Debianissa on ollut ongelmana hidas login virtuaalikonsoleihin vt2:sta eteenpäin. Ongelma ratkeaa lisäämällä polku tty2:sta eteenpäin:
2:23:respawn:/sbin/getty 38400 /dev/tty2
Jos teet muutoksia inittab-tiedostoon, niin telinit qlukee uudestaan inittab-tiedoston ja päivittää sen.
Usein virtuaalikonsolissa skandit eivät näy oikein, koska valittu näppäimistökartta (keymap) on väärä. Skandit saat näkyviin lataamalla oikean näppäimistökartan seuraavasti (toimii ainakin debian-pohjaisissa distroissa):
loadkeys fi-latin1
Jos kaikki toimii kuten pitääkin, voit asentaa oikean näppäimistökartan:
install-keymap fi-latin1
Virtuaalikonsolin tervetulotoivotus on tiedostossa /etc/motd ja voit muuttaa sen haluamaksesi.
Virtuaalikonsolit ovat käytettävissä vain paikallisesti - ei etäkäytössä.
Komentotulkki (command shell) on ohjelma, joka käynnistyy automaattisesti käyttäjän kirjautuessa sisään järjestelmään (login) ja tulkkaa käyttäjän komentokehotteessa (command prompt) komentorivillä (command line) antaman komennon ja päättää, mitä sen kanssa tehdään. Jos komento (tai ohjelma) on olemassa eikä komentotulkki anna virheilmoitusta, kerneli luo uuden prosessin komennon (ohjelman) suoritusta varten. Komentotulkkia voi käyttää komentojen suorittamisen lisäksi myös ohjelmointikielenä jolloin sillä voidaan ajaa komentotiedostoja, skriptejä.
Linuxissa on suuri määrä erilaisia komentotulkkeja, joista BASH (Bourne Again SHell) on yleisin ja alkuperäistä Unixin SH-tulkkia (Bourne SHell) huomattavasti monipuolisempi. BASH on myös Linuxin oletusshelli.
Windows-käyttäjät voivat verrata Linuxin komentotulkkia Dosin COMMAND.COM-tulkkiin.
Linuxeissa on siis yleensä bash-tulkki käytössä oletuksena. Muut Linuxiisi asennetut ja käytettävissä olevat shellit (komentotulkit) näet:
tapsa@abc:~$ cat /etc/shells
# /etc/shells: valid login shells /bin/ash /bin/bash /bin/csh /bin/sh /usr/bin/es /usr/bin/ksh /bin/ksh /usr/bin/rc /usr/bin/tcsh /bin/tcsh /usr/bin/zsh /bin/sash /bin/zsh /usr/bin/esh /bin/dash
Käytössä olevan komentotulkin näet:
root@abc:~# echo $SHELL /bin/bash
Voit katsoa sen myös komennolla which sh:
tapsa@abc:~$ which sh /bin/sh
jolloin sh on yleensä symbolinen linkki /bin-hakemistossa olevaan bash-shelliin:
lrwxrwxrwx 1 root root 4 2004-07-16 15:04 sh -> bash
Tähän syynä on skriptien tekijöiden skriptin alussa yleisesti käyttämä
#!/bin/sh
vaikka tarkoitus olisi käyttää bash-skriptikieltä:
#!/bin/bash
Skriptien tekijät voivat siis kirjoittaa edelleen sh mutta todellisesti käynnistyykin bash :)
Voit muuttaa shelliä väliaikaisesti kirjoittamalla komentokehotteessa haluamasi shellin nimen, esim. tcsh. Poistu shellistä takaisin kirjoittamalla exit.
Voit muuttaa oletuksena olevan komentotulkin chsh-komennolla (change shell).
tapsa@abc:~$ chsh -s /bin/tcsh tapsa
Jos kirjoitat vain pelkän chsh, näytetään nykyinen tulkki hakusuluissa ja voit joko muuttaa sen tai hyväksyä hakasuluissa olevan oletuksen:
tapsa@abc:~$ chsh
Password:
Vaihdetaan käyttäjän tapsa komentotulkki
Kirjoita uusi arvo, tai paina return käyttääksesi oletusarvoa
Komentotulkki sisäänkirjauduttaessa [/bin/bash]:
tapsa@abc:~$
Voit myös muuttaa oletusshelliä editoimalla suoraan /etc/passwd-tiedostoa.
Mutta mistä sitten muistaa kaikki sadat käskyt (komennot) tai suoritettavien ohjelmien nimet? Pitääkö ne oppia ulkoa? Ei tarvitse. Riittää kun kirjoittaa käskyn alkukirjaimen (tai useampia kirjaimia alusta) ja painaa kahdesti (tai tarvittaessa kolmesti) tab-näppäintä, niin Linux tuo näkyviin ko. kirjaimilla alkavat käskyt. Tietysti voit kirjoittaa vastaavasti myös useampia käskyjä peräkkäin (esim. 'apt-get dist-upgrade' Debianissa) vain painamalla kunkin käskyn paria alkukirjainta ja "autocomplete" hoitaa loput. Tämä toimii myös tiedostojen kohdalla, esim. 'cat LUEMINUT.txt' ei tarvitse kuin cat ja L ja parin tab-näppäimen painalluksen! Huomaa lisäksi, että kohdistimen ei tarvitse olla rivin lopussa vaan voit painaa enteriä missä tahansa kohtaa rivillä.
Täydellisen luettelon Linux-komennoista löydät sivulta Alphabetical Directory of Linux Commands.
Joskus Linuxin asennuksen jälkeen komentokehote voi näyttää hyvin erinskummalliselta kuten minulla Baltix-Knoppixin kiintolevyasennuksen jälkeen:
-bash-2.05b$
Tulostetaan ympäristömuuttuja PS1, josta nähdään miten komentokehote on asetettu:
-bash-2.05b$ echo $PS1 \s-\v\$
Ongelma liittyi kotihakemistossa oleviin kahteen tiedostoon .bash_profile (suoritetaan loginin yhteydessä) ja .bashrc (suoritetaan aina ajettaessa komentotulkkia). Tiedostossa .bash_profile oli kyllä valmiina rivi:
# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
...mutta se oli kommentoitu (#) pois käytöstä. Kommenttimerkkien poisto ratkaisi ongelman, jolloin .bashrc-tiedostossa oleva hieno komentotulkin määritys \u@\h:\w\$ saatiin käyttöön:
# set a fancy prompt
PS1='\u@\h:\w\$ '
Nyt komentokehote näyttää seuraavalta:
tapsa@abc:~$
Tulostetaan ympäristömuuttuja PS1 uudelleen, josta nähdään, millainen se on nyt loginissa:
tapsa@abc:~$ echo $PS1 \u@\h:\w\$
Lisätietoa näet sivulta http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/bash-prompt-escape-sequences.html.
Joissakin distroissa voi käyttäjän kotihakemistossa olla loginissa ajettavan .bash_profile-tiedoston tilalla .bash_login- tai .profile-niminen tiedosto, jotka ovat synonyymejä .bash_profile-tiedostolle, jolloin tarvittavat muutokset komentokehotteessa tehdään niihin.
Voit muuttaa kaikkien käyttäjien oletusasetuksia editoimalla /etc/bashrc ja /etc/profile-tiedostoja.
Asetetut kaikki paikalliset muuttujat näet bash-tulkissa komennolla set ja asetetut ympäristömuuttujat komennolla printenv (tcsh-tulkissa setenv).
Lisätietoa komentokehotteen muokkaamisesta saat sivulta Bash Prompt HOWTO.
Kaikki näppäilysi jäävät muistiin kotihakemistossasi olevaan .bash_history-tiedostoon, jonka voit vaikka tyhjentää halutessasi. Aikaisempia näppäilyjäsi voit selata nuolinäppäimillä (nuoli ylös; nuoli alas) eteen- ja taaksepäin. Voit myös tulostaa käyttämäsi komennot näytölle history-komennolla, jonka perään voi antaa myös näytetttävien komentojen lukumäärän:
$ history 10
Konsolissa tai virtuaalikonsolissa voit vierittää sivun tekstiä ylös ja alas Shift-PageUp ja Shift-PageDown. Vieritys on kätevä konsti esim. silloin, jos halutaan selata käynnistyksen aikaisia ilmoituksia dmesg:
$ dmesg
Normaalisti seuraavilla merkeillä on erikoismerkitys komentotulkissa:
\ ' " ` < > [ ] ? | ; # $ ^ & * ( ) = <välilyönti> <sarkain > <rivin vaihto>
Seuraavassa on lyhyt selostus joidenkin merkkien merkityksestä.
Lainausmerkkejä on neljä tyyppiä: kenoviiva (\), heittomerkki ('), lainausmerkki (") ja takahipsu (`).
< ja > -merkkejä käytetään syöttö- ja tulostusvirtojen (input / output streams) uudelleenohjaukseen (redirecting)
| (putki, pipe) putkittaa komennon, jolloin komennon syöte saadaan toisen komennon tulosteesta
; erottaa samalla rivillä olevat komennot toisistaan
& merkkiä edeltävä komento suoritetaan tausta-ajossa
* vastaa tiedostojen ollessa kyseessä mitä tahansa tiedostoa paitsi pisteellä alkavaa tiedostoa
? vastaa tiedostojen nimessä mitä tahansa yksittäistä merkkiä
&& on "AND" (looginen JA) kytkien kaksi komentoa toisiinsa. Toinen komento suoritetaan vain, jos ensimmäinen komento onnistuu (exit status 0)
$ edeltää käsiteltävän muuttujan nimeä kuten "$@", ks. man bash
Voit kirjoittaa samalle riville useamman kuin yhden suoritettavan komennon erottamalla ne välilyönnillä ja kahdella && -merkillä:
apt-get update && apt-get dist-upgrade
Lisätietoa operaattoreista man bash, jossa selostetaan, että toinen komento suoritetaan vain siinä tapauksessa, että ensimmäinen onnistui:
command && command2
command2 is executed if, and only if, command returns an
exit status of zero.
Normaalisti erottimena käytetetään puolipistettä (;), jolla siis erotetaan komennot toisistaan:
tapsa@abc:~$ ls -l ; ps -u tapsa yhteensä 16 drwx------ 3 tapsa tapsa 4096 2004-07-23 22:43 Desktop drwxr-xr-x 2 tapsa tapsa 4096 2004-07-23 12:01 Documents drwxr-xr-x 2 tapsa tapsa 4096 2004-07-23 12:01 downloads -rwxr--r-- 1 root root 64 2003-11-08 20:34 tapsa.txt PID TTY TIME CMD 1107 tty3 00:00:00 bash 1108 tty4 00:00:00 bash 1449 tty4 00:00:00 ps tapsa@abc:~$
Oletetaan, että haluat saada /tmp-hakemiston oikeudet kuntoon ajamalla nettisivulta löytämäsi komennot:
cd /tmp chmod -R a+rwx .X11-unix chmod 1777 .X11-unix chmod 1777 /tmp
...mutta et jaksaisi kopioda niitä kaikkia yksitellen. Onneksi voit kopioida ne tiedostoon maalaamalla em. komennot ja käynnistämällä esimerkiksi nano-editorin ja liittämällä tekstin hiiren rullaa painamalla Shift-näppäin pohjassa. Sitten lisäät puolipisteet rivien loppuun ja maalaat alueen uudelleen ja liität konsoliin hiiren rullaa painamalla:
cd /tmp ; chmod -R a+rwx .X11-unix ; chmod 1777 .X11-unix ; chmod 1777 /tmp
Nyt kaikki komennot ajettiin yhdellä kertaa :)
Muista, että & asettaa ohjelman tausta-ajoon.
Komennot suoritetaan niiden antamisjärjestyksessä.
Lainausmerkit poistavat erikoismerkin tietyn merkityksen ja sallivat näin sen käytön sellaisenaan. Mutta myös erikoismerkkejä (kuten lainausmerkki) voidaan käyttää tavallisina merkkeinä, jos merkin edessä on kenoviiva.
# huomaa seuraavien kirjoitustapojen ero: root@1[/]# echo \"tapsa\" "tapsa" root@1[/]# echo "tapsa" tapsa
Kenoviivalla voi poistaa seuraavan merkin erityismerkityksen:
# kokeillaan ensin ilman kenoviivaa: root@1[/]# echo <tapsa> bash: syntax error near unexpected token `newline' # sitten kenoviivan kanssa: root@1[/]# echo \<tapsa\> <tapsa>
Kenoviivan avulla voidaan käsitellä myös kaksiosaisia nimiä (tyhjä merkki välissä) kuten Windowsin 'Program Files' tai 'My Documents':
root@ttyp0[knoppix]# cd /mnt/hda2/Program\ Files/
Komennon voi jakaa useammalle riville lisäämällä rivin loppuun kenoviivan (\):
[root@tapsa mnt]# mount -t smbfs -o username=tapsa,password=salainen_sana \ //Vauhtihirmu/c /mnt/vauhtihirmu
Lisätietoa man bash:
A non-quoted backslash (\) is the escape character. It
preserves the literal value of the next character that
follows, with the exception of <newline>. If a \<newline>
pair appears, and the backslash is not quoted, the \<new-
line> is treated as a line continuation (that is, it is
effectively ignored).
Voit putkittaa komentoja peräkkäin putkimerkillä (|). Putkitus
(piping) tarkoittaa komentojen yhdistämistä, jolloin komennon syöte saadaan
toisen komennon tulosteesta. Putki-merkki (|) saadaan näppäimistöltä painamalla
AltGr + < -näppäimiä.
Seuraavassa on etsitty näytön virkistystaajuudet X:n konfigurointitiedostosta (XF86Config). Etsimiseen on käytetty sekä cat- että grep-komentoja putkimerkin kanssa:
[tapsa@tapsa tapsa]$ cat /etc/X11/XF86Config | grep Ver
VertRefresh 50.0 - 70.0
[tapsa@tapsa tapsa]$ cat /etc/X11/XF86Config | grep Hor
HorizSync 31.5 - 57.0
Etsitään vielä käynnistyksen aikaisia ilmoituksia putkimerkillä ja grep-komennolla (malliesimerkissä ndiswrapperin latautumista):
root@tty2[/]# dmesg | grep ndiswrapper ndiswrapper version 0.8 loaded ndiswrapper adding wmp11v27.sys wlan0: ndiswrapper ethernet device 00:06:25:22:6a:1f using driver wmp11v27.sys
Linux antaa mahdollisuuden muokata käyttöympäristöä (environment) halutunlaiseksi ympäristömuuttujilla.
Asetetut kaikki paikalliset muuttujat näet komennolla set ja asetetut ympäristömuuttujat komennolla printenv. Seuraavassa luettelossa on malliksi Baltix-Knoppixin pääkäyttäjän (root) ympäristömuuttujat:
root@:~# printenv HZ=100 TERM=linux SHELL=/bin/bash HUSHLOGIN=FALSE USER=root PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin:/usr/games MAIL=/var/mail/root COUNTRY=fi PWD=/root LANG=fi_FI@euro HOME=/root SHLVL=2 LANGUAGE=fi LOGNAME=root _=/usr/bin/printenv root@:~#
Voit katsoa käytössä olevia ympäristömuuttujia echo-komennolla, esim. käytössä olevan komentotulkin näet:
root@abc:~# echo $SHELL /bin/bash
Huomaa, että ympäristömuuttuja kirjoitetaan isoilla kirjaimilla ja echo-komennolla näytölle tulostettaessa sen eteen pannaan dollarimerkki ($).
Voit muuttaa käyttöympäristöäsi muokkaamalla kotihakemistossasi olevaa kahta tiedostoa, .bash_profile (suoritetaan loginin yhteydessä) ja .bashrc (suoritetaan aina ajettaessa komentotulkkia).
Joissakin distroissa voi käyttäjän kotihakemistossa olla loginissa ajettavan .bash_profile-tiedoston tilalla .bash_login- tai .profile-niminen tiedosto, jotka ovat synonyymejä .bash_profile-tiedostolle, jolloin tarvittavat muutokset komentokehotteessa tehdään niihin.
Voit muuttaa kaikkien käyttäjien oletusasetuksia editoimalla /etc/bashrc ja /etc/profile-tiedostoja.
Voit muuttaa tarvittaessa paikallista ympäristöäsi export-komennolla, esim.
tapsa@abc:~$ export LANGUAGE='fi'
tapsa@abc:~$ export LANG='fi_FI@euro'
Joskus asennettavat ohjelmat (kuten irssi) vaativat käytettäväksi vanhempaa C-kääntäjää kuin koneessa on käytössä. Voit muuttaa kääntäjää myös export-komennolla:
root@abc:~# export CC=/usr/bin/gcc-2.95
Kernelin käännössä käytetyn kääntäjän näet:
root@abc:~# cat /proc/version
...ja käytössä olevan kääntäjän näet:
root@abc:~# gcc --version
Kätevä pikkuohjelma pitkien tiedostojen selailussa on less, joka näyttää tekstiä ruudullisen kerrallaan. Edelliseen ruutuun voi palata nuolinäppäimillä. Ohjelman käyttö lopetetaan painamalla q-kirjainta. Kokeile seuraavaa esimerkkiä ilman | less ja sen kanssa. Vau! Tämähän alkaa jo sujua!
[tapsa@tapsa tapsa]$ cat /etc/X11/XF86Config | less
Nyt kun osaat käyttää less-ohjelmaa, tutki aikaisemmin mainittuja Linuxin käynnistysilmoituksia tarkemmin. Konehan käynnistyy niin nopeasti ettei niitä ehdi käynnistyksen yhteydessä lukea:
$ dmesg | less
Less-ohjelmassa voit etsiä tekstistä haluamaasi kohtaa kauttaviivalla (/) ja antamalla haluamasi sanan.
Etsitään seuraavassa oletusajotaso (initdefault)
/etc/inittab-tiedostosta grep-komennolla:
root@tty2[/]# grep 'initdefault' /etc/inittab id:5:initdefault:
Sama voidaan tehdä myös toisella tavalla käyttäen cat- ja grep-komentoja putkimerkin kanssa:
root@tty2[/]# cat /etc/inittab | grep initdefault id:5:initdefault:
Komento grep on hyvin hyödyllinen, jos haluaa etsiä pitkästä listauksesta jotakin tiettyä asiaa kuten seuraavassa X:n lokitiedoston hiirtä koskevia kohtia (mouse):
[tapsa@tapsa tapsa]$ cat /var/log/XFree86.0.log | grep mouse (II) LoadModule: "mouse" (II) Loading /usr/X11R6/lib/modules/input/mouse_drv.o (II) Module mouse: vendor="The XFree86 Project" (==) MGA(0): Silken mouse enabled
Voit myös putkittaa | less | grep peräkkäin, jos etsit esim. pitkästä tiedostosta joitakin kohtia, jotka eivät mahdu yhdelle ruudulliselle kerrallaan. Putkitus (piping) tarkoittaa komentojen yhdistämistä, jolloin komennon syöte saadaan toisen komennon tulosteesta. Putki-merkki (|) saadaan näppäimistöltä painamalla AltGr + < -näppäimiä.
Toki X:n konsolissa voit selata sivuja graafisessa tilassa sivupalkista muutenkin edestakaisin ja virtuaalikonsolissa Shift-PageUp ja Shift-PageDown (toimii myös X:n konsolissa).
Diff-ohjelmalla etsitään kahden tiedoston erot ja tulostetaan ne.
man diff: diff - compare files line by line
Käyttö on hyvin yksinkertaista: diff vanha_tiedosto uusi_tiedosto. Lisäksi voidaan käyttää erilaisia valitsimia, joista mainittakoon -u (unified output format), jolloin tulostus on monipuolisempi) ja -r (recursive), jolloin käydään hakemistot läpi).
Seuraava mallitulostus on perusmuodossa ilman valitsimia, jossa verrataan vanhaa ja uutta konsoli.htm-nimistä tiedostoa keskenään:
root@2[knoppix]# diff konsoli.htm konsoli_mod.htm 1840a1841,1842 > mount /dev/hda1 > tai tarvittaessa: 1842a1845,1854 > <p>Huom. Joskus pitää käyttää pitkää muotoa, koska muuten liittäminen ei onnistu:</p> > <pre> > # mount /dev/hdb6 > mount: väärä tiedostojärjestelmätyyppi, virheellinen valitsin, viallinen > superlohko laitteella /dev/hdb6, tai liian monta liitettyä > tiedostojärjestelmää > </pre> > <pre> > # mount -t hpfs /dev/hdb6 /mnt/hdb6 > </pre>
Seuraavassa on samojen tiedostojen vertailu käyttäen -u- valitsinta:
root@2[knoppix]# diff -u konsoli.htm konsoli_mod.htm --- konsoli.htm 2005-04-18 01:41:14.000000000 +0300 +++ konsoli_mod.htm 2005-04-23 20:04:48.000000000 +0300 @@ -1838,8 +1838,20 @@ <p>Kiintolevy voidaan myös liittää väliaikaisesti tekemättä muutoksia /etx/fstab-tiedostoon.</p> <pre> +mount /dev/hda1 + tai tarvittaessa: mount -t vfat /dev/hda1 /mnt/c </pre> +<p>Huom. Joskus pitää käyttää pitkää muotoa, koska muuten liittäminen ei onnistu:</p> +</pre> +# mount /dev/hdb6 +mount: väärä tiedostojärjestelmätyyppi, virheellinen valitsin, viallinen + superlohko laitteella /dev/hdb6, tai liian monta liitettyä + tiedostojärjestelmää +</pre> +</pre> +# mount -t hpfs /dev/hdb6 /mnt/hdb6 +</pre> <p>Valitsin <strong > t </strong> tarvitaan edeltämään annettavaa tiedostojärjestelmää:</p> <pre> root@2[knoppix]#
Nyt tulostus on paljon monipuolisempi. Valitsimen -u kanssa näytetään tiedostojen nimet, aikaleimat ja lisäksi muutama ylimääräinen rivi muutoskohtien molemmmin puolin. Poistuneita kohtia merkitään - ja lisättyjä kohtia +. Mallitekstissä ei ollut poistettu mitään vaan pelkästään lisätty tekstiä.
Tail listaa oletuksena 10 viimeistä riviä pitkästä tai kasvavasta tiedostosta (esim. lokitiedostot) ja vastaavasti head listaa oletuksena 10 ensimmäistä riviä tiedostosta. Voit tulostaa enemmänkin rivejä, esim. 30 kpl, antamalla haluamasi rivien lukumäärän komennon jälkeen:
tail -30 tiedosto.txt
Komento tail -f-option kanssa seuraa tiedoston kasvua sen suuretessa lähes reaaliaikaisesti, esim.
tail -f /var/log/messages
Lopeta komennon käyttö Ctrl-c. Itse olen seurannut em. tavalla dhcpd:n käynnistymistä ja IP-osoitteen pyyntöä, jos työasema (pääte, thin client) ei saa yhteyttä palvelimeen (server), ks. Linux Terminal Server Project (LTSP).
No entä kun X ei käynnisty ja pitäisi saada virheilmoitukset jotenkin kopioitua talteen newsseihin muidenkin tutkittavaksi? No eipä hätää mitään, kun voit ohjata tulostuksen tiedostoon nuolenpäällä (>), esim.:
$ dmesg | grep scsi > scsi_ei_toimi
Edellä oleva nuolenpää siis ohjaa (redirect) tulostuksen näppäimistöltä tiedostoon. On olemassa kolme tärkeää syöttö- / tulostusvirtaa (input / output stream):
Oletusten sijasta tulostusvirrat voi ohjata myös tiedostoon tai tulostimeen uudelleenohjaamalla (redirecting).
Edellä siis näppäimistöltä (stdin) uudelleenohjattiin tulostus tiedostoon (stdout) käyttämällä nuolenpäätä.
Voit tietysti myös kopioida jonkin olemassa olevan tiedoston kätevästi disketille em. tavalla uudelleenohjaamalla tulostuksen näytöltä disketille:
cat tiedosto > /dev/fd0
...tai ehkäpä haluatkin tulostaa tietoa laitteistostasi (esim. prosessori) kotihakemistoosi tiedostoksi:
$ cat /proc/cpuinfo > ~/cpu_tietoa
Virheet voi tulostaa tiedostoon käyttäen apuna uudelleenohjausoperaattoria (redirection operator) 2>&1. C-kielestä tuttua tulostusvirtaa stdout (standard output) merkitään numerolla 1 ja virheilmoitusvirtaa stderr (standard error output) numerolla 2. Edellä 2>&1 siis ohjaa virheilmoitukset tiedostoon. Pelkkä nuolenpää ohjaa tulosteen tiedostoon, mutta virheilmoitukset tulostuvat edelleen vain näytölle, jos et käytä 2>&1. Lisätietoa saat manuaalisivulta man bash sekä esim. sivuilta Streams and sed -- The Stream Editor (LINUX: Rute User's Tutorial and Exposition) ja Input/output redirection (LINUX NEWBIE ADMINISTRATOR GUIDE).
Tiedostoja voit katsoa komennolla ls (listaus, lyhyt muoto). Komento ls -l (pitkä muoto) taas näyttää kaikki muut paitsi piilotetut tiedostot. Pisteellä alkavat tiedostot ovat piilotiedostoja, jotka näet komennolla ls -la (näyttää kaikki tiedostot). Saman voi tehdä myös lyhyesti la (ainakin minulla 'la' on /etc/bashrc-tiedostossa aliaksena):
alias la='ls -la --color=auto'
Ls-komennolla voi myös listata esim. koneessa olevat pci-laitteet (lspci tai yksityiskohtaisessa muodossa lspci -v). Luettelon ls-komennoista saat kirjoittamalla ls ja kahdesti tab-näppäintä:
tapsa@TeraeNet:~$ ls ls lsmod.Lmodutils lspgpot lsusb lsattr lsmod.modutils lspnp lsdev lsof lsraid lsmod lspci lss16toppm tapsa@TeraeNet:~$
Mitä jos pitäisi tehdä jokin tiedosto? Pitääkö käynnistää jokin tekstieditori sen takia vai voiko tiedoston tehdä myös konsolissa? Kyllä voi ja vaihtoehtojakin on useampia - ainakin touch, >, echo ja cat.
Helpoiten teet uuden tiedoston touch-komennolla:
tapsa@TeraeNet:~$ touch uusi_tiedosto
Myös nuolenpäällä (>) voi kätevästi tehdä uuden tyhjän tiedoston:
tapsa@TeraeNet:~$ > uusi_tiedosto
Nuolenpään käytössä echo- ja cat-komentojen kanssa pitää olla tarkkana ettei vahingossa tuhoa olemassa olevaa tiedostoa.
Uusi tiedosto luodaan echo-komennolla :
tapsa@TeraeNet:~$ echo > oma_tiedosto
Kirjoitetaan tekstiä äsken tehtyyn 'oma_tiedosto' -tiedostoon:
tapsa@TeraeNet:~$ echo kirjoitetaan tekstiä tiedostoon > oma_tiedosto
Nyt siis oma_tiedosto-nimisessä tiedostossa lukee teksti: "kirjoitetaan tekstiä tiedostoon".
Jos haluat lisätä tekstiä tiedostoon, mutta kirjoitatkin kuten edellä yhden nuolenpään kanssa, niin aikaisempi teksti korvataan uudella:
tapsa@TeraeNet:~$ echo korvataan edellinen teksti tällä uudella > oma_tiedosto
Tekstiä voi lisätä käyttämällä kahta nuolenpäätä:
tapsa@TeraeNet:~$ echo lisätään tekstiä entisen perään >> oma_tiedosto
...ja tältä 'oma_tiedosto' sitten näyttää tekstin korvauksen ja lisäyksen jälkeen:
korvataan edellinen teksti tällä uudella lisätään tekstiä entisen perään
Echolla lisäät esim. ajureita näppärästi /etc/modules-tiedoston loppuun:
echo ndiswrapper >> /etc/modules
Komento cat toimii niin että tiedosto voidaan luoda ja kirjoittaa tekstiä samalla:
tapsa@TeraeNet:~$ cat > uusi_tiedosto Kirjoitetaan tähän vähän tekstiä. Kirjoitetaan vielä toisellekin riville .. ja kolmannelle
Riviä vaihdetaan enterillä ja tekstin kirjoitus lopetetaan Ctrl-d (tarkoittaa tiedoston loppumerkkiä EOF = End of file).
Nyt on luotu 'uusi_tiedosto' -niminen tiedosto ja kirjoitettu siihen samalla tekstiä. Itse kopioin usein tällä tavoin virtuaalikonsolissa lyhyitä tekstejä talteen tiedostoon valitsemalla ensin tekstin maalaamalla hiiren vasemmalla näppäimellä (joskus tarvitaan lisäksi Shift-näppäintä, esim. Midnight Commanderista tai Linksistä kopioitaessa) ja liittämällä sitten tekstin hiiren rullaa painamalla toisessa virtuaalikonsolissa auki olevaan cat-komennolla tehtävään tiedostoon. Sitten vain enter, Ctrl-d (tiedoston lopettamismerkki = EOF), ja teksti on tallessa! Tämä toimii tietysti myös samassakin virtuaalikonsolissa.
Samalla cat-käskyllä voit myös katsoa jonkin tiedoston sisältöä, esim. äsken tehtyä 'uusi_tiedosto' -tiedostoa:
tapsa@TeraeNet:~$ cat uusi_tiedosto Kirjoitetaan tähän vähän tekstiä. Kirjoitetaan vielä toisellekin riville .. ja kolmannelle tapsa@TeraeNet:~$
Nuolenpäätä käyttämällä voit tyhjentää nopeasti tiedoston sisällön:
cat > mbox
... ja Ctrl-d (= EOF, End of file), jonka jälkeen postilaatikko on tyhjä! Käytä tätä varoen, koska tyhjennettyä tiedostoa et saa enää palautettua takaisin.
Voit ohjata tulostuksen myös disketille eli kopioida tiedoston disketille:
cat tiedosto > /dev/fd0
Voit myös tehdä uuden tyhjän tiedoston ohjaamalla tulosteen /dev/null-tiedostoon:
cat /dev/null > uusi_tiedosto
Linuxissa voi tehdä myös aliaksia helpottamaan näppäilemistä. Alias on lyhenne monimutkaiselle tai usein käytetylle komennolle. Itselläni Debianissa on mm. oletuksena la aliaksena pitkälle listauksen muodolle ls -la, joka näyttää myös piilotetut tiedostot (alkavat pisteellä). Tehdään nyt malliksi 'näyttö'-alias helpottamaan näyttöasetusten selailua:
tapsa@abc:~$ alias näyttö="cat /etc/X11/XF86Config-4 | less"
Nyt kun kirjoitat lyhyesti näyttö, niin saatkin eteesi listauksen näyttöasetuksista less-ohjelmalla pätkittynä (lopeta less-ohjelma q-näppäimellä).
tapsa@abc:~$ näyttö
Debianin käyttäjät voivat helpottaa systeemin päivitystä vaikkapa seuraavalla aliaksella:
root@abc:~# alias apt="apt-get update && apt-get upgrade"
Linux käsittelee tekemääsi aliasta kuten muitakin ohjelmia ja komentoja, joten jos nyt otat listauksen n:llä alkavista ohjelmista ls, niin 'näyttö' on listauksessa mukana. Näet listauksen käyttäjätunnuksesi aliaksista kirjoittamalla alias:
root@abc:~# alias alias cp='cp -i' alias la='ls -la --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias where='type -all' alias which='type -path' root@abc:~#
Voit panna tekemäsi aliaksen tiedostoon /etc/bashrc (tai profile joissakin distroissa), jolloin se on kaikkien käyttäjien käytettävissä. Vain omaan käyttöösi tarkoitetun aliaksen lisäät tietysti kotihakemistosi .bashrc-tiedostoon :)
Voit poistaa aliaksen kirjoittamalla unalias ja aliaksen nimi:
tapsa@abc:~$ unalias näyttö
Konsolista käynnistettävät ohjelmat on hyödyllistä käynnistää suoraan tausta-ajoon (kuten esim. tietokannan päivitys, updatedb), jolloin konsoli ei jää varatuksi, lisäämällä ohjelman perään &-merkin (välimerkillä erotettuna):
root@abc:~# updatedb & [1] 12479 root@abc:~#
Ohjelman ajoa ei voi sammuttaa (Ctrl-c), jumiutunutta prosessia ei voi sammuttaa (kill PID) eikä ohjelman ajoa voi keskeyttää (Ctrl-z) tausta-ajossa vaan se on ensin siirrettävä taustalta etualalle kirjoittamalla fg (fg = foreground). Seuraavassa muutetaan ohjelman suoritus taustalta etualalle (fg) ja sitten keskeytetään ohjelman ajo (Ctrl-z):
root@abc:~# fg updatedb [1]+ Stopped updatedb root@abc:~#
Jatketaan seuraavaksi ohjelman ajoa taustalla (bg = background):
root@abc:~# bg [1]+ updatedb & root@abc:~#
Mistä ihmeestä voi sitten muistaa, mitkä ohjelmat on jätetty pyörimään taustalle tai pysäytetty? Tietysti Linuxissa tämänkin voi tarkistaa helposti konsolista. Taustalla ja pysäytettynä olevat ohjelmat näet jobs-komennolla:
root@abc:~# jobs [1]+ Running updatedb &
Siirretään vielä ohjelma uudestaan taustalta etualalle:
root@abc:~# fg updatedb updatedb: new database would be empty root@abc:~#
Hyödyllisiä näppäinyhdistelmiä ovat esim.
Luettelon näppäinyhdistelmistä näet:
root@abc:~# stty -a speed 38400 baud; rows 25; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon -iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke root@abc:~#
Voit myös muuttaa konsolikohtaisesti määrityksiä, esim.
root@abc:~# stty intr ^B
Edellä muutettin ohjelman keskeytyskomento (intr = interrupt, keskeytys) Ctrl-c:stä Ctrl-b:ksi. Jos nyt kirjaudut sisään toiseen virtuaalikonsoliin, niin uusi asetus ei ole siellä voimassa.
Katso lisätietoa man stty.
Käyttäjien käynnistämät prosessit näet kirjoittamalla ps -u ja jonkun tietyn käyttäjän prosessit lisäämällä perään käyttäjänimen, esim.
tapsa@TeraeNet:~$ ps -u tapsa
Ohjelman voi sammuttaa tai 'tappaa' jumiutuneen prosessin kirjoittamalla
kill prosessin_id-numero (PID)
tai käyttämällä vaihtoehtoisesti jobs-komennolla saatavaa työnumeroa %-merkin kanssa, esim.
kill %1
Tämä on normaali ohjelman lopetussignaali (15, SIGNTERM) mutta sitä voi käyttää myös jumiutuneen prosessin 'tappamiseen'. Normaalia lopetussignaalia ei tarvitse kirjoittaa lopetuskäskyyn, koska se on oletuksena. Joskus kuitenkin joudutaan sammuttamaan jumiutuneet prosessit käyttäen järeämpää lopetussignaalia (9 = SIGNKILL):
kill -9 pid
Jos tiedät, mikä laite jäi jumiin (esim. diskettiasema), voit käyttää myös fuser-komentoa seuraavasti:
tapsa@34:~$ fuser -mk /dev/fd0
Muut optiot on lueteltu seuraavassa:
tapsa@34:~$ fuser
usage: fuser [ -a | -s | -c ] [ -n space ] [ -signal ] [ -kimuv ] name ...
[ - ] [ -n space ] [ -signal ] [ -kimuv ] name ...
fuser -l
fuser -V
-a display unused files too
-c mounted FS
-f silently ignored (for POSIX compatibility
-k kill processes accessing that file
-i ask before killing (ignored without -k)
-l list signal names
-m mounted FS
-n space search in the specified name space (file, udp, or tcp)
-s silent operation
-signal send signal instead of SIGKILL
-u display user ids
-v verbose output
-V display version information
-4 search IPv4 sockets only
-6 search IPv6 sockets only
- reset options
udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]
Voit listata signaalien nimet (jos asia sattuu kiinnostamaan):
kill -l
Prosessin uudelleen käynnistävä signaali on HUP, keskeytyssignaali on INT, lopetussignaali on TERM ja kill-signaali on KILL - tärkeimpiä mainitaksemme.
Voit listata kaikki käynnissä olevat prosessit (ohjelmat) seuraavasti:
ps -aux | more
Komento killall eroaa kill-komennosta sillä tavalla, että parametrina käytetään prosessin nimeä eikä prosessin numeroa. Esimerkkinä X:n kaikki prosesssit voi sammuttaa lyhyesti ja ytimekkäästi:
killall X
Toinen käytännön esimerkki. Jos käynnistät Nautiluksen KDE:stä, niin se piirtää KDE:n työpöydän tilalle Gnomen työpöydän pysyvästi. Saat työpöydän takaisin oikeaksi tappamalla Nautiluksen prosessit kirjoittamalla killall nautilus terminaalissa. Oikea tapa käynnistää Nautilus KDE:stä onkin tehdä se lisäparametreilla nautilus --no-desktop, jolloin työpöytä ei vaihdu Gnomeksi.
Katso lisätietoa kill-komennosta man-sivuilta man kill ja man killall.
Kaikkia kiinnostaa varmasti myös eri prosessien vaatima prosessorin (CPU) kuormitus ja muistin käyttö. Ne saa selville top-ohjelmalla, joka lajittelee prosessit em. asioiden perusteella suurimmasta pienimpään:
top - 19:23:52 up 46 min, 4 users, load average: 1.33, 0.76, 0.50
Tasks: 76 total, 2 running, 74 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.7% us, 7.9% sy, 82.2% ni, 0.0% id, 4.9% wa, 4.3% hi, 0.0% si
Mem: 385300k total, 380592k used, 4708k free, 58688k buffers
Swap: 249944k total, 0k used, 249944k free, 164132k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3377 root 26 10 10000 6920 4620 S 79.0 1.8 0:42.83 scrollkeeper-up
1229 root 15 0 1824 632 1664 S 1.3 0.2 0:02.00 gpm
3695 root 27 10 4088 1120 3916 R 1.3 0.3 0:00.04 scrollkeeper-ge
148 root 15 0 0 0 0 S 0.7 0.0 0:02.23 kjournald
3589 root 17 0 2096 1056 1884 R 0.7 0.3 0:00.19 top
4 root 5 -10 0 0 0 S 0.3 0.0 0:04.75 events/0
1 root 16 0 1528 528 1376 S 0.0 0.1 0:00.69 init
2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0
5 root 5 -10 0 0 0 S 0.0 0.0 0:00.03 khelper
6 root 5 -10 0 0 0 S 0.0 0.0 0:00.82 kblockd/0
29 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pdflush
30 root 15 0 0 0 0 S 0.0 0.0 0:00.47 pdflush
32 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 aio/0
31 root 15 0 0 0 0 S 0.0 0.0 0:00.10 kswapd0
141 root 16 0 0 0 0 S 0.0 0.0 0:00.00 kseriod
411 root 18 0 0 0 0 S 0.0 0.0 0:00.00 khubd
428 root 15 0 0 0 0 S 0.0 0.0 0:00.08 kapmd
Pelkät käynnissä olevat prosessit näet top -i:
$ top -i
Lopeta ohjelman käyttö painamalla q-näppäintä.
Ohjelmien (prosessien) saamaa prosessoriaikaa voidaan priorisoida nice- ja renice-komennoilla. Nice-arvoa voidaan seurata top- ja ps lax -komennoilla, joissa se näkyy NI-arvona: korkein prioriteetti on -20 (vain pääkäyttäjä voi antaa miinusmerkkisiä arvoja) ja alhaisin on 19 (oletus 0). Nice-arvo on aina suhteessa muihin prosesseihin.
Todellinen, tietyllä hetkellä oleva, prioriteetti (joka muuttuu siis koko ajan) näkyy PR-arvona 'top'-komennolla ja PRI-arvona 'ps lax' -komennolla. Arvo 0 on tärkein ja 39 on vähiten tärkeä ja suoritetaan luppoajalla.
# top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 16 0 1528 528 1376 S 0.0 0.1 0:00.25 init
root@abc:~# ps lax F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 4 0 1 0 16 0 1528 528 - S ? 0:00 init [2]
Muutetaan kokeeksi top-komennon omaa prioriteettia renice-komennolla:
Top-ohjelman nice-arvo NI on oletuksena 0:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1423 root 17 0 2096 1032 1884 R 0.7 0.3 0:00.06 top ---
Muutetaan nice-arvo renice-komennolla 5:ksi:
root@abc:~# renice 5 1423 1423: old priority 0, new priority 5 root@abc:~#
Edellisen komennon muoto on siis:
renice uusi_arvo pid
Renice-komennossa pitää siis tietää prosessin ID-numero (PID), joka näkyy top-listauksessa. Nyt muutettu NI-arvo on 5:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1423 root 21 5 2096 1032 1884 R 0.3 0.3 0:00.44 top
Käynnistettävälle ohjelmalle voidaan vastaavasti nice-komennolla pyytää jotain muuta prioriteettia kuin käynnistettävälle komennolle tai ohjelmalle (prosessille) oletuksena oleva 10. Koska prosessin ID-numeroa ei tässä vaiheesa tiedetä, täytyy tilalla käyttää ohjelman nimeä.
Käynnistettävälle ohjelmalle siis pyydetään prioriteettia nice-komennolla ja jo käynnissä olevan prosessin prioriteettia muutetaan renice-komennolla.
Komento free näyttää systeemin käytetyn ja vapaana olevan muistin (myös swap):
root@abc:~# free
total used free shared buffers cached
Mem: 385296 61940 323356 0 3716 37016
-/+ buffers/cache: 21208 364088
Swap: 249944 0 249944
root@abc:~#
Kerneli kirjoittaa kirjoitusoperaatiot ensin välimuistiin (cache) suorituskyvyn optimoimiseksi. Flush (kernelin pdflush-prosessi) sitten kirjoittaa nämä operaatiot fyysisesti tallennusmedialle (esim. kiintolevylle) tietyin väliajoin. Flush the cache siis tarkoittaa välimuistin tyhjennystä.
Flushin käyttö auttaa myös tiedostojärjestelmää, kun joka operaation kohdalla ei pakoteta käyttöjärjestelmää välittömästi kirjoittamaan tietoa levylle.
Joskus kuitenkin saattaa olla tarpeellista ajaa flush manuaalisesti. Sen voi tehdä yksinkertaisesti vain ajamalla sync-komennon (sync - flush filesystem buffers):
sync
info sync: `sync': Synchronize data on disk with memory ============================================ `sync' writes any data buffered in memory out to disk. This can include (but is not limited to) modified superblocks, modified inodes, and delayed reads and writes. This must be implemented by the kernel; The `sync' program does nothing but exercise the `sync' system call. The kernel keeps data in memory to avoid doing (relatively slow) disk reads and writes. This improves performance, but if the computer crashes, data may be lost or the filesystem corrupted as a result. `sync' ensures everything in memory is written to disk.
Voit seurata flushin käyttöä esim. top-komennon pdflush-prosessin kohdalta.
Oletko koskaan törmännyt tilanteeseen, että levykkeelle kopioimasi tiedosto ei olekaan siellä vaikka varmasti kopioit sen oikein? Syy on juuri äsken selostettu kernelin käyttämä välimuisti, josta sitä ei ollutkaan vielä kirjoitettu levykkeelle ennen levykkeen poisottamista. Monesti flush suoritetaan pienten tiedostojen kohdalla vasta levykkeen irrottamisen (umount) yhteydessä, ja jos irrottaminen on unohdettu tehdä, voi tiedosto tosiaan olla kadonnut.
Ongelman voi myös ratkaista kätevästi lisäämällä sync-komennon /etc/fstab-tiedoston levykeosioon (esimerkki Lindowsista):
/dev/fd0 /mnt/floppy1 auto noauto,rw,user,noexec,sync 0 0
Rsync-ohjelma käyttää rsync-etäpäivitysprotokollaa nopeuttamaan jo olemassa olevien tiedostojen päivitystä. Rsync-protokolla sallii rsyncin siirtää vain eroavuudet tiedostojen välillä käyttäen tehokasta tarkistussummien etsintäalgoritmia (checksum-search algorithm) näin nopeuttaen tiedostojen siirtoa huomattavasti.
Rsync-ohjelmaa voi käyttää myös paikallisten tiedostojen kopioimiseen ja päivittämiseen. Ohjelman käyttö on yksinkertaista:
rsync optiot lähde kohde
Kohde voi olla myös toisella koneella (remote). Seuraavassa esimerkissä olen käyttänyt rsync-ohjelmaa linux-sivustoni varmuuskopiointiin toiselle kiintolevylle:
# rsync -r /mnt/hda2/www/linux/* /mnt/hdb1/www/linux
Edellä kopioidaan linux-hakemistosta vain muuttuneet tiedostot hda2-osiolta toisen levyn hdb1-osiolle (vrt. DOSin xcopy). Ilman -r-optiota (recursive) ei alihakemistoja tiedostoineen kopioitaisi.
Sivulla http://www.skolelinux.org/portal/get_started/download on esimerkki kuinka Skolinuxin iso-tiedosto päivitetään rsyncin avulla, jolloin vain muuttuneet kohdat haetaan ja päivitetään jo olemassa oleva iso-tiedosto:
rsync rsync.skolelinux.no::skolelinux-cd/skolelinux-i386-current.iso filename.iso
Edellä filename.iso on olemassa olevan iso-tiedoston nimi levylläsi (muuta nimi oikeaksi).
man rsync:
RSYNC:
rsync is a program that behaves in much the same way that rcp does, but
has many more options and uses the rsync remote-update protocol to
greatly speed up file transfers when the destination file already
exists.
The rsync remote-update protocol allows rsync to transfer just the dif-
ferences between two sets of files across the network connection, using
an efficient checksum-search algorithm described in the technical
report that accompanies this package.
Seuraavassa on joitakin esimerkkejä man-sivulta rsyncin käytöstä. Katso käytettyjen optioiden merkitys man rsync -manuaalisivulta:
USAGE
You use rsync in the same way you use rcp. You must specify a source
and a destination, one of which may be remote.
Perhaps the best way to explain the syntax is with some examples:
rsync *.c foo:src/
This would transfer all files matching the pattern *.c from the
current directory to the directory src on the machine
foo. If any of the files already exist on the remote system then
the rsync remote-update protocol is used to update
the file by sending only the differences. See the tech report for
details.
rsync -avz foo:src/bar /data/tmp
This would recursively transfer all files from the directory src/bar
on the machine foo into the /data/tmp/bar direc-
tory on the local machine. The files are transferred in "archive"
mode, which ensures that symbolic links, devices,
attributes, permissions, ownerships etc. are preserved in the
transfer. Additionally, compression will be used to
reduce the size of data portions of the transfer.
rsync -avz foo:src/bar/ /data/tmp
A trailing slash on the source changes this behavior to avoid
creating an additional directory level at the destina-
tion. You can think of a trailing / on a source as meaning "copy the
contents of this directory" as opposed to "copy
the directory by name", but in both cases the attributes of the
containing directory are transferred to the contain-
ing directory on the destination. In other words, each of the
following commands copies the files in the same way,
including their setting of the attributes of /dest/foo:
rsync -avz /src/foo /dest
rsync -avz /src/foo/ /dest/foo
You can also use rsync in local-only mode, where both the source
and destination don't have a ':' in the name. In
this case it behaves like an improved copy command.
rsync somehost.mydomain.com::
This would list all the anonymous rsync modules available on the host
somehost.mydomain.com. (See the following sec-
tion for more details.)
Katso lisätietoa Rsync-ohjelmasta sivulta http://rsync.samba.org/, jossa on myös esimerkkejä Rsyncin käytöstä backup-tiedostojen ottoon.
Konsolista voi käynnistää myös graafisia ohjelmia kirjoittamalla käynnistyvän ohjelman nimen, (esim. kwrite tai mozilla). Tällöin niille voi antaa myös lisäparametreja, esim. 'env LANG=fi_FI.iso88591 gaim ', jolloin gaim-'nyystin' näyttää RH 9:ssä skandit oikein :) Myös ongelmatapauksissa konsoliin tulostuvat virheilmoitukset auttavat ongelmien selvityksessä.
Leikepöydän käsittelylle (copy - paste) ei Linuxissa ole olemassa yhtenäistä standardia mutta graafisella puolella, esim. KDE:ssä, ohjelmat alkavat yhä enemmän noudattaa Windowsissa käytettyä tapaa, Ctrl-c (kopioi), Ctrl-v (liitä), Ctrl-x (leikkaa). Tekstitilassa ei taas Ctrl-c:tä voi käyttää, koska se on Unixin yleinen ohjelman lopetuskomento.
Mutta voiko konsolissa sitten kopioida tekstiä hiirellä? Kyllä voi,
jos gpm on asennettu (gpm - a cut and paste utility and mouse server
for virtual consoles). Debianissa voit asentaa sen esim. Aptilla
apt-get install gpm
Nyt vaan valitset alueen painamalla vasenta hiiren näppäintä ja raahaamalla hiirtä halutulla alueella. Tekstin voi sitten liittää painamalla hiiren keskimmäistä näppäintä tai rullaa. Voit kopioida ja liittää tekstiä halutessasi myös eri konsoleissa.
Joissakin ohjelmissa voit joutua painamaan myös Shift-näppäintä samanaikaisesti, kun maalaat tekstiä (esim. links-tekstipohjainen selain) ja samoin myös kun liität tekstiä (esim. mc). Katso lisätietoa tekstin kopioimisesta man gpm.
Jos gpm on asennettu, mutta hiiri ei kuitenkaan toimi virtuaalikonsolissa, kokeile seuraavaa ps/2-hiirellä:
gpm -m /dev/mouse -t ps2
Ja sama lyhemmin, koska /dev/mouse on oletuksena:
gpm -t ps2
Näit saat hiiren toimimaan esim. Knoppix 3.6:n live-CD:llä. Katso lisätietoa man-sivuilta man gpm. Seuraavassa selvitys em. -m ja -t -optioiden merkityksestä:
-m filename
Choose the mouse file to open. It defaults to /dev/mouse'.
-t name
Set the mouse type. Use -t help' to get a list of allowable
types. Since version 1.18.1, the list also shows
which protocols are available as repeaters (see -R above), by
marking them with an asterisk (`*'').
Jälkimmäisestä optiosta (-t) saat luettelon mahdollisista hiirityypeistä:
gpm -t help
Jos haluat kopioda tekstiä hiirellä virtuaalikonsolista esin. Mozilla News -ohjelmassa kirjoittamaasi viestiin, joudut ehkä tallentamaan viestin ensin ja sitten 'välikäden' kautta kopioimaan sen news-lukijaan.
Levytilan käyttö Linuxissa on monelle mysteeri. Kuitenkin sen seuranta on hyvin helppoa df (tai df -h) -komennolla, joka näyttää sillä hetkellä liitetyt osiot ja niiden käyttämän levytilan:
-bash-2.05b# df -h Tiedostojärjestelmä Koko Käyt Vapaa Käy% Liitospiste /dev/hdb5 2,2G 2,1G 44M 98% / tmpfs 189M 0 189M 0% /dev/shm /dev/hda1 4,0G 3,4G 643M 85% /mnt/windows
-bash-2.05b# df Tiedostojärjestelmä 1K-lohkot Käytetty Vapaana Käy% Liitospiste /dev/hdb5 2273968 2113508 44948 98% / tmpfs 192648 0 192648 0% /dev/shm /dev/hda1 4192752 3534436 658316 85% /mnt/windows
Jos edellä olisi ollut jokin muukin osio tai vaikkapa cd-asema liitettynä, niin sekin näkyisi listauksessa. Huomaa ero mount-komentoon, joka näyttää vain liitetyt osiot mutta ei niiden käyttämää levytilaa.
Huomaa, että df ei näytä swap-osiota. Sen saa näkyviin free-komennolla.
Yksityiskohtaisemman tiedon tilankäytöstä saat du-komennolla (disk usage), joka tulostaa hakemistojen ja alihakemistojen tilankäytön. Seuraavassa esimerkissä rajataan haku vain tiettyihin valittuihin hakemistoihin ja tulos ilmoitetaan megatavuina:
root@:/etc# du /etc /home /var /usr /tmp -ms 41 /etc 18 /home 124 /var 1774 /usr 1 /tmp
Näin voit seurata esim. kotihakemiston viemää levytilaa. Luettelon eri valitsimista näet komennolla man du.
Täydellisen listauksen kaikista koneessa olevista osioista saat fdisk -l:
-bash-2.05b# fdisk -l Disk /dev/hda: 4303 MB, 4303272960 bytes 255 heads, 63 sectors/track, 523 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 523 4200966 b W95 FAT32 Disk /dev/hdb: 2625 MB, 2625005568 bytes 128 heads, 63 sectors/track, 635 cylinders Units = cylinders of 8064 * 512 = 4128768 bytes Device Boot Start End Blocks Id System /dev/hdb1 1 62 249952+ 82 Linux swap /dev/hdb2 63 635 2310336 5 Extended /dev/hdb5 * 63 635 2310304+ 83 Linux -bash-2.05b#
Huomaa listauksessa tähdellä (*) merkityt osiot, jotka tarkoittavat boottaavia osioita.
Linuxin kerneli käsittelee käyttäjätunnuksia (UID) ja ryhmätunnuksia
(GID) numeerisina arvoina nimien sijaan. Alle sadan olevat UID-arvot
(UID < 100) ovat pääkäyttäjän ja palveluiden käytössä (eutoikeutetut
käyttäjät, priviledged users). Ohjelmat käyttävä arvoja sadan ja viidensadan
välillä ja tavallisten käyttäjien UID-arvot alkavat vasta viidestäsadasta
ylöspäin (UID > 500) ja Debianissa tuhannesta ylöspäin.
Käyttäjien tiedot ovat kolmessa hakemistossa:
/etc/passwd /etc/shadow /etc/group
Käyttäjätiedot on määritelty /etc/passwd-tiedostossa (jokaisella käyttäjällä on oma rivinsä):
root@abc:~# cat /etc/passwd tapsa:x:1002:1002:Tapani Räikkönen,,,:/home/tapsa:/bin/bash
Käyttäjätiedot ovat yhdellä rivillä seitsemässä kentässä, jotka erotellaan kaksoispisteellä (:) toisistaan:
Selvennetäänpä vielä hieman edellä esiteltyjen kenttien merkityksiä:
Jos /etc/passwd-tiedoston salasana-kentässä on x salasanan kohdalla, silloin on käytössä kryptatut sasanat, jotka sijaitsevat /etc/shadow-tiedostossa.
Käyttäjäryhmät riveittäin on määritelty /etc/group-tiedostossa (poimittu vain tapsa-käyttäjän GID-ryhmä):
root@abc:~# cat /etc/group tapsa:x:1002:
Käyttäjä voi kuulua myös useampiin ryhmiin samanaikaisesti. Seuraavassa on audio-ryhmään lisätty käyttäjät tapsa ja samu (/etc/group-tiedosto):
audio:x:29:tapsa,samu
Jos tapsa-käyttäjä ei olisi kuulunut audio-ryhmään aikaisemmin, lisäys ryhmään olisi voitu tehdä adduser-komennolla seuraavasti:
adduser tapsa audio
Näet ryhmät, joihin kuulut groups-komennolla (vrt. id-komento):
tapsa@abc:~$ groups tapsa audio tapsa@abc:~$
Salasanat ovat /etc/passwd-tiedostossa mutta nykyään käytetään salattuja (kryptattuja) salasanoja, jolloin /etc/passwd-tiedostossa on salasanan kohdalla vain x. Salatut salasanat ovat /etc/shadow-tiedostossa (mallitiedostoa muutettu):
root@abc:~# cat /etc/shadow tapsa:$1$KhWwY2ay$6D6dlSXwo2eMCqUcyEOEy/:12627:0:99999:7:::
Käyttäjä voidaan asettaa väliaikaiseen käyttökieltoon panemalla /etc/shadow-tiedoston salasanakenttään tähden (*) tai huutomerkin (!). Käyttäjän kaikki tiedot ovat silloin tallessa mutta sisäänkirjautuminen on estetty. Käyttäjä voi taas kirjautua normaalisti sisään, kun lisätty merkki on poistettu.
Käyttäjät ovat Linuxin kernelille pelkkiä numeroita (nopeampi prosessoroida kuin tekstiä sisätävät nimet) ja jokaiselle käyttäjälle on oma tunnistenumero user id (tai uid). Jokaiselle user id:lle on sitten olemassa käyttäjänimi (username) erillisessä tietokannassa.
Käyttäjän lisääminen tehdään perinteisesti adduser-käskyllä ja poistaminen deluser-käskyllä (userdel -r kayttajatunnus, poistaa myös kotihakemiston ja /var/spool/mail/käyttäjätunnus-hakemiston). Ryhmän lisääminen tehdään vastaavasti addgroup- ja poistaminen delgroup-käskyllä. Useimmissa uusimmissa distroissa on myös erillinen graafinen ohjelma käyttäjätietojen muuttamiseen (esim. redhat-config-users). Käyttäjän lisäämisen (adduser) yhteydessä luodaan myös samanninimen käyttäjäryhmä. Esimerkiksi 'samu'-nimisen käyttäjän luonnin yhteydessä luodaan myös 'samu'-käyttäjäryhmä samulle.
Käyttäjän lisääminen adduser-komennolla kysyy myös kaikki muut tarvittavat tiedot ja tekee kotihakemiston ja antaa normaalin käyttäjän käyttöoikeudet. Seuraavassa on mallina 'samu'-nimisen käyttäjän lisääminen Debianissa:
tapsa:/home/tapsa# adduser
Enter a username to add: samu
Adding user samu...
Adding new group samu (1002).
Adding new user samu (1002) with group samu.
Creating home directory /home/samu.
Copying files from /etc/skel
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for samu
Enter the new value, or press return for the default
Full Name []: Samuel Räikkönen
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [y/n] y
tapsa:/home/tapsa#
Kuten edellä olevasta esimerkistä huomataan, niin hakemistot ja tiedostot uuden käyttäjän kotihakemistoon kopioidaan /etc/skel-hakemistosta (Copying files from /etc/skel). Systeemin ylläpitäjä voi säätää uusien käyttäjien työpöydän jo ennakolta mahdollisimman hienoksi muokkaamalla /etc/skel-hakemistoa halutunlaiseksi. Yleensä kylläkin /etc/skel-hakemisto kannattaa pitää mahdollisimman yksinkertaisena.
Jos haluat muuttaa jälkeenpäin esim. käyttäjän täydellistä nimeä, niin sen voit tehdä komennolla chfn (change the full name). Katso lisätietoa sivulta Changing user properties.
Käyttäjän luonnin yhteydessä käyttäjällä on vain yksi samanniminen käyttäjäryhmä, johon hän kuuluu. Käyttäjälle voi lisätä helposti eri käyttäjäryhmään addgroup-käskyllä. Seuraavassa esimerkissä samu lisätään sudo-ryhmään.
tapsa:/home/tapsa# addgroup samu sudo Adding user samu to group sudo... Done. tapsa:/home/tapsa#
Voit myös muuttaa käyttäjän ensisijaisen ryhmän newgrp-komennolla.
Jos adduser ei toimi omassa distrossasi, kokeile useradd-komentoa. Sen käyttö on hieman hankalampaa ja vaatii mm. käyttöoikeuksien antamisen erikseen (luultavasti distrossasi on silloin graafinen apuohjelma käyttöoikeuksien määrittelemiseen, jonka käyttö on aloittelijalle suositeltavampaa). Seuraavassa esimerkissä on kuitenkin mallina 'useradd'-komennon käyttö:
tapsa:/home/tapsa # useradd tera
Edellä on luotu uusi käyttäjä 'tera', jolle annetaan vielä salasana:
tapsa:/home/tapsa # passwd tera Changing password for tera. New password: Password changed tapsa:/home/tapsa #
Katso man adduser saadaksesi lisätietoa uusien käyttäjien lisäämisestä. Huolehdi myös uusien käyttäjien oikeuksista (rwx) ainakin omaan kotihakemistoonsa (pitäisi saada oikeudet kyllä oletuksena).
Btw, moni on ihmetellyt, miksi uuden käyttäjän kotihakemistoon on muilla oletuksena lukuoikeus, jolloin oikeudet 'ls -l' -komennolla ovat drwxr-xr-x (0755). Jos ei halua kaikkien käyttäjien lukevan omia tiedostojaan, voi oikeudet muuttaa hyvinkin, esim. 'chmod 0751' (drwxr-x--x) tai 'chmod 0750' (drwxr-x---). Ehkäpä hyvät oletusoikeudet olisivatkin pelkästään 'drwx------', jotka saat 'chmod 0700'. Ensimmäinen numero jätetään yleensä pois, jos se on nolla (0), koska se on silloin tarpeeton.
Debianissa voit muuttaa uusien käyttäjien oletusoikeutta kirjoittamalla konsolissa:
# dpkg-reconfigure --priority low adduser
jonka jälkeen eteesi tulee seuraava teksti (sama kuin Debianin asennuksen aikana, jolloin siihen ei yleensä kiinnitetä mitään huomoiota):
Adduser
Normally, home directories can be viewed by all users on the system. If
you want to increase the security/privacy on your system, you might want
your home directories only readable by the user. If you are unsure,
enable system wide readable home directories.
This will only affect home directories of users added with the adduser program later.
Do you want system wide readable home directories?
<Kyllä> <Ei>
Jos vastaat 'ei', niin uusien käyttäjien kohdalla muiden lukuoikeudet on poistettu drwxr-x--x (chmod 751), kun okeudet aikaisemmin olivat oletuksena drwxr-xr-x (chmod 755).
Salasanaa vaihdetaan komennolla passwd. Ensin kysytään
vanhaa salasanaa ja sitten syötetään uusi salasana. Uusi salasana ei saa olla
liikaa entisen kaltainen eikä liian yksinkertainen eikä yli 8 merkin pituinen,
jos MD5-salasanoja (max. 256 merkkiä) ei ole valittu käyttöön.
Seuraavassa esimerkissä on kaikki vaihtoehdot esillä:
tapsa@tapsa:~> passwd Changing password for tapsa. Old Password: New password: Bad password: too similar New password: Bad password: too simple New password: Password will be truncated to 8 characters Re-enter new password: Password changed
Onko sinua koskaan askarruttanut, mistä Linux hakee asetukset,
kun uusia käyttäjätunnuksia luodaan? Eipä siinä mitään mystistä ole - Linux
vain kopioi /etc/skel-hakemiston sellaisenaan uusille käyttäjille. Hakemisto
/etc/skel onkin eräänlainen suppea 'luuranko'-hakemisto, jossa olevat
tiedostot ja alihakemistot kopioidaan automaattisesti uuden käyttäjän
hakemistoon, kun käyttäjätunnus luodaan.
Voit myös tehdä muutoksia /et/skel-hakemistoon ja vaikkapa kopioda sinne omat asetuksesi, jolloin ne tulevat käyttöön kaikille uusille käyttäjille automaattisesti. Yleensä suositellaan kuitenkin hakemiston pitämistä mahdollisimman suppeana - 'luurankomaisena'.
Tiedosto /etc/fstab on laitteiden (devices) määritystiedosto,
jossa määritellään, mitkä laitteet (liitokset) joko otetaan automaattisesti
käyttöön käynnistymisen yhteydessä tai ovat tarvittaessa otettavaksi käyttöön.
Huomaa myös, että Linux tukee vain niitä tiedostojärjestelmiä (filesystems),
joille on tuki kernelissä.
Linuxissa ei käytetä asematunnuksia A, C, D jne. kuten Windowsissa vaan laitenimiä (/dev/fd0, /dev/hda1, /dev/hda2 jne.) ja laitteet (devices) pitää ensin liittää (mount) hakemistorakenteeseen ennen kuin niitä voi käyttää.
Laitteita on kahdenlaisia: lohkolaitteita (random-access block devices, tyyppi b) ja merkkilaitteita (character devices, tyyppi c). Laitteet voidaan liittää tiedostojärjestelmään vasta kun ne on luotu. Normaalisti tarvittaville laitteille luodaan laitetiedostot Linuxin asennuksen yhteydessä mutta niitä voidaan myös tehdä jälkeenpäin lisää MAKEDEV-skriptillä, esim.:
# /dev/MAKEDEV -v ttyS0 create ttyS0 c 4 64 root:dialout 0660
Edellä luotiin laitetiedosto sarjaportille (ttyS0 = COM1).
Voit luoda myös laitetiedoston mknod-komennolla, jos MAKEDEV-skripti ei tunnista laitettasi.
# mknod /dev/ttyS0 c 4 64 Selite: komento laitenimi laitetyyppi major-nro minor-nro
Edellä olevassa piti tietää laitteen pää- (major) ja alinumero (minor), jotka löytyvät /usr/src/linux/Documentation/devices.txt-tiedostosta, jos kernelin lähdekoodipaketti on asennettu. Käyttäjille tarvitsee antaa laitteiden luonnin jälkeen myös tarvittavat käyttöoikeudet.
Lisätietoa laitetiedostojen luonnista saat mm. sivulta http://www.faqs.org/docs/lnag/lnag_basic_conf.html#devices.
Kiintolevyt (hd = hard disk) nimetään
Linuxissa (IDE-levy) seuraavasti: 1. levy = /dev/hda, 2. levy = /dev/hdb, 3.
levy = /dev/hdc, 4. levy = /dev/hdd, 5. levy = /dev/hde jne. Jos asentaa
Linuxin ensimmäiselle kiintolevylle ja sen ensimmäiselle osiolle
(Windowsissahan usein on juuri näin), niin laitenimi on silloin
/dev/hda1. Ensimmäinen looginen asema (logical drive) jatko-osiolla
(extended partition) taas on /dev/hda5 (Linuxit asentuvat usein oletuksena
loogisille asemille).
Haluttu osio (partitio) tai kiintolevy voidaan liittää automaattisesti Linuxin käynnistyessä lisäämällä se tiedostoon /etc/fstab ja antamalla tarvittavat optiot. Käynnistyksen yhteydessä automaattisesti liitettävät laitteet näkyvät riveinä, joissa on defaults, ja koska ne liitetään jo valmiiksi käynnistyksen yhteydessä, mount-komentoa ei enää tarvita.
/dev/hda1 /mnt/c vfat defaults 0 0
Tässä esimerkissä vfat = FAT32-osio ja /dev/hda1 = C:\. Näillä 'perusasetuksilla' osio liitetään automaattisesti mutta vain pääkäyttäjä voi käyttää sitä.
Usein on kuitenkin hyödyllistä antaa myös tavalliselle käyttäjälle oikeuksia osion liittämiseen ja ohjelmien suorittamiseen osiolta, jolloin seuraava /etc/fstab-tiedoston rivi voisi olla käyttökelpoinen:
/dev/hda1 /mnt/c vfat noauto,users,exec,umask=000 0 0
Edellä on /mnt-hakemistoon tehty c-niminen alihakemisto valmiiksi (/mnt/c). Hakemisto voi tietysti olla minkä niminen tahansa jos /etc/fstab-tiedostossa on vastaava hakemisto, esim. /mnt/win98 tai /mnt/XP.
Huomaa, että voit lisätä rivejä fstab-tiedostoon ja kokeilla eri asetuksia, kun vain kommentoit pois ne rivit, joita et halua käyttää, esim.:
# /dev/hda1 /mnt/c vfat defaults 0 0 /dev/hda1 /mnt/c vfat noauto,users,exec,umask=000 0 0
Jos ajat vielä komennon mount -a, niin muutokset tulevat heti voimaan eikä koneen uudelleen käynnistystä tarvita. Samalla myös ilmoitetaan mahdollisista virheistä fstab-rivillä. Huomaa, että /etc/fstab-tiedoston viimeisenä merkkinä pitää olla rivinvaihto - älä siis lopeta tiedoston viimeisen rivin kirjoittamista rivin loppuun vaan paina vielä lopuksi enteriä. Muuten saat ilmoituksen syntaksivirheestä.
Kiintolevy voidaan myös liittää väliaikaisesti ja irrottaa tekemättä muutoksia /etx/fstab-tiedostoon.
mount /dev/hda1
umount /dev/hda1
Joskus joudutaan liittämisessä käyttämään pitkää muotoa, jos liittäminen ei muuten onnistu:
mount -t vfat /dev/hda1 /mnt/c
Jos liittäminen ei onnistu käyttäen lyhyttä muotoa, saadaan seuraavantapainen ilmoitus:
# mount /dev/hdb6
mount: väärä tiedostojärjestelmätyyppi, virheellinen valitsin, viallinen
superlohko laitteella /dev/hdb6, tai liian monta liitettyä
tiedostojärjestelmää
# mount -t hpfs /dev/hdb6 /mnt/hdb6
Edellä siis liitettiin jouduttiin käyttämään pitkää muotoa OS/2:n HPFS-osion liittämiseen.
Valitsin -t tarvitaan edeltämään annettavaa tiedostojärjestelmää:
-t vfstype
The argument following the -t is used to indicate the file sys-
tem type. The file system types which are currently supported
are: adfs, affs, autofs, coda, coherent, cramfs, devpts, efs,
ext, ext2, ext3, hfs, hpfs, iso9660, jfs, minix, msdos, ncpfs,
nfs, ntfs, proc, qnx4, reiserfs, romfs, smbfs, sysv, tmpfs,
udf, ufs, umsdos, vfat, xenix, xfs, xiafs. Note that coherent,
sysv and xenix are equivalent and that xenix and coherent will
be removed at some point in the future -- use sysv instead.
Since kernel version 2.1.21 the types ext and xiafs do not
exist anymore.
Myös levykeasema pitää ensin liittää (mount)
järjestelmään ennen kuin se on käytettävissä. Laitetiedostot (device files)
ovat /dev-hakemistossa ja levyke (fd = floppy disk) liitetään
(mount) ja irrotetaan (umount) seuraavasti:
mount /dev/fd0 umount /dev/fd0
Jos fstabissa ei ole /dev/fd0-alkuista riviä valmiina, täytyy käyttää pitempää muotoa (yleensä vain root voi käyttää):
# mount -t vfat /dev/fd0 /floppy
Tässä levyke (haluttu käytettäväksi Windowsin vfat-tiedostojärjestelmää, vfat = FAT32) liitetään juuressa olevaan floppy-hakemistoon, jonka pitää olla luotu valmiiksi. Yleensä täyspitkää liittämismuotoa ei oletuksena sallita tavalliselle käyttäjälle vaan käyttäjän on pakko käyttää lyhyempää muotoa mount /floppy. Joissakin distroissa levyke näkyy /mnt-hakemiston alla (/mnt/floppy), jolloin on käytettävä muotoa 'mount /mnt/floppy'.
Oikea paikka levykkeen liittämiselle olisi FHS:n mukaan /media/-hakemisto (/media : Mount point for removeable media; /mnt : Mount point for a temporarily mounted filesystem).
Levykkeen liittämiselle annetaan 'ohjeet' käynnistyksen yhteydessä /etc/fstab-tiedostossa annettujen määritysten mukaan, jossa määritellään myös kaikki muutkin laitteet, mitä liitetään hakemistojärjestelmään ja miten. Seuraavassa malliksi Lindowsin, Knoppixin ja SUSE:n levyke-osio /etc/fstab-tiedostosta:
LindowsOS:
/dev/fd0 /mnt/floppy1 auto noauto,rw,user,noexec,sync 0 0
Knoppix 3.3
/dev/fd0 /floppy vfat defaults,user,noauto,showexec,umask=022 0 0
SUSE LINUX 9.1
/dev/fd0 /media/floppy subfs fs=floppyfss,procuid,nodev,no,sync 0 0
Huomaa erityisesti optio noauto, koska muuten levyke yritettäisiin liittää automaattisesti joka käynnistyksen yhteydessä ja sehän on huono idea - etenkin jos asemassa ei ole levykettä! Myös user on tärkeä, koska muuten tavalliselle käyttäjälle ei anneta oikeutta liittää eli 'mountata' levykettä.
Lindows ja SUSE käyttää myös sync-määritettä, jolloin levyke synkronoidaan automaattisesti välimuistin kanssa eli tieto kirjoitetaan välittömästi levykkeelle eikä se jää välimuistiin. Yleensä välimuisti tyhjennetään ja tieto kirjoitetaan levykkeelle vasta levykkeen irrotuksen (umount) yhteydessä ja jos se jää tekemättä, tieto saattaa kadota bittiavaruuteen :-/
SUSEssa on myös nosuid-optio käytössä, joka tarkoittaa, että SUID-ohjelmia (Set User ID, Substitute User ID) ei voi ajaa suid-oikeuksin. Ohjelman omistaja voi sallia ohjelmansa käytön muille omilla oikeuksillaan, jolloin ohjelmaa kutsutaan SUID-ohjelmaksi.
Muista siis ajaa umount-komento ennen kuin poistat levykkeen asemasta, jos sync-määrettä ei ole fstabissa levykeasemarivillä!
Voit poistaa SUSEn submount-tiedostojärjestelmän (subfs) käytöstä ja vaihtaa sen normaalin kommentoimalla alkuperäisen rivin pois ja lisäämällä /etc/fstab-tiedostoon uuden rivin seuraavasti:
# /dev/fd0 /media/floppy subfs fs=floppyfss,procuid,nodev,nosuid,sync 0 0 /dev/fd0 /media/floppy auto noauto,user,exec,sync 0 0
Vertaa oman fstab-tiedostosi levyke-osiota edelliseen ja kotitehtäväksi jääköön ottaa selvää, mitä muut määreet tarkoittavat. Lisätietoa saat man-sivuilta man fstab ja man mount. Ja itseopiskelussa muista, että Google on aina ystäväsi :)
Ja ettei nyt tärkein asia unohtuisi, niin lisää user,noauto fstabiin levykeosio-riville, jos ne puuttuvat sieltä, koska silloin levykettä ei liitetä käynnistyksen yhteydessä (noauto) ja käyttäjä (user) voi mountata levykkeen yksinkertaisesti mount /floppy ja irrottaa levykkeen lyhyesti umount /floppy - tai miksipäs ei vaikkapa mount /korppu, jos olet tehnyt sen nimisen hakemiston ja pannut sen fstabiin levyke-osion nimeksi! Itse käytän kyllä 'virallista' mount /dev/fd0, jota suosittelen muidenkin käytettäväksi, koska se on kaikissa Linuxeissa oletuksena eikä koneelta toiselle vaihtaessa tarvitse miettiä, mitä siellä fstabissa nyt lukikaan juuri tässä koneessa.
Voit myös käyttää user tilalla users, joka antaa kaikille käyttäjille oikeuden levykkeen liittämiseen (mount) ja irrottamiseen (umount). Users on oikeastaan suositeltavampi, koska jos tavallinen käyttäjä jättää esim. CD-levyn asemaan eikä ole irrottanut sitä, niin pelkällä user-asetuksella asema olisi lukittu eikä toiset käyttäjät saisi sitä pois vaan ainoastaan user itse, joka on sen liittänyt, tai root.
Muista aina testata fstabin oikeellisuus mount -a muutoksien jälkeen (ilmoittaa mahdolliset virheet ja liittää fstabissa olevat laitteet) ettei seuraavan käynnistyksen yhteydessä tule ikäviä yllätyksiä.
Joskus saatat törmätä ilmoitukseen mount: fs type supermount not supported by kernel (kuten vaikkapa itselläni kävi itse käännetyn kernelin kanssa, jossa ei ole tukea supermountille):
root@abc:~# mount /floppy mount: fs type supermount not supported by kernel
Ratkaisu on yksinkertaisesti liittää levyasema käyttäen pitkää muotoa, jonka jälkeen 'mount /floppy' toimii:
root@abc:~# mount -t vfat /dev/fd0 /floppy
Tietysti supermount kannattaa myös poistaa /etc/fstab-tiedostosta, jolloin virheilmoituksia ei vastaisuudessa tule.
Cd-asema liitetään hakemistojärjestelmään
mount-komennolla samalla tavalla kuin diskettiasema ja kiintolevyn
osiot:
$ mount /mnt/cdrom
Useissa jakeluissa on lisäksi tehty symbolinen linkki /mnt/cdrom-hakemistosta /cdrom-hakemistoon:
ln -s /mnt/cdrom /cdrom
jolloin liittäminen onnistuu myös:
$ mount /cdrom
Jos cd-asemaa ei ole mainittu /etc/fstab-tiedostossa, pitää käyttää pitkää muotoa (vain root), jossa kerrotaan, mikä laite liitetään ja miten:
# mount -t iso9660 /dev/hdc /mnt/cdrom
Seuraava virheilmoitus osoittaa selvästi, mistä on kysymys:
root@abc:~# mount /dev/hdc mount: can't find /dev/hdc in /etc/fstab or /etc/mtab
Yritetäänpä liittämistä uudelleen käyttäen pitkää muotoa:
root@abc:~# mount -t iso9660 /dev/hdc /mnt/cdrom mount: block device /dev/hdc is write-protected, mounting read-only root@abc:~# umount /dev/hdc
CD-levyn saa pois päinvastaisella umount-komennolla (älä yritä ottaa cd:tä ulos väkisin!). Asema ei saa olla varattuna tai muuten saat ilmoituksen 'device busy' eikä irrottaminen onnistu. Joskus Konqueror-selain KDE:ssä saattaa jättää aseman varatuksi vaikka CD:n mikään hakemisto ei enää olisikaan auki. Tarvittaessa voit katsoa, mikä prosessi käyttää CD-asemaa komennolla:
fuser -vum /mnt/cdrom
Voit myös käyttää irrottamiseen 'lazy umount' -optiota:
umount -l /mnt/cdrom
Hakemiston /mnt/cdrom pitää olla valmiiksi luotuna - liittämisen yhteydessä sitä ei tehdä. Yleensä distrot tekevät cd-asemille hakemiston /mnt-hakemiston alihakemistoiksi /mnt/cdrom ja /mnt/cdrom2 tai suoraan juurihakemiston alle /cdrom, mutta muitakin hakemistoja on käytössä - ainakin SuSE 8.1 käyttää /media-nimistä hakemistoa ja tekee alihakemistot sinne, esim. /media/cdrecorder polttavalle asemalle.
Cd-aseman tunnus on yleensä joko /dev/hdc tai /dev/hdd, koska CD-asema on kiinni ide-ohjaimen toisessa liitännässä, ensimmäisessähän on normaalisti kiintolevy(t).
Polttava asema näkyy kuitenkin 2.4-sarjan kerneleillä scsi-laitteena, esim. /dev/scd0 ja aseman vaihto scsi-laitteeksi tehdään käynnistyslataajan parametrilla hdc=ide-scsi (CD-asema tässä /dev/hdc), jos sitä ei ole jo ytimessä (kernelissä) valmiina. Onneksi asennusohjelma huolehtii yleensä tarvittavista asetuksista automaattisesti eikä niistä tarvitse itse huolehtia. 2.6-sarjan kernelissä ei scsi-emulointia enää tarvita ja jos käynnistyslataajassa on ko. parametrit, ne ohitetaan.
Ide-liitännän tunnukset:
1. master = /dev/hda
1. slave = /dev/hdb
2. master = /dev/hdc (yleensä 1. cd-asema)
2. slave = /dev/hdd (yleensä 2. cd-asema)
Usb-muistitikut näkyvät Linuxissa
scsi-laitteina. Oletus on /dev/sda1, jos koneessa on ide-kiintolevy.
Jos käytössä on scsi-kiintolevy, usb-laite näkyy /dev/sdb1 jne.
Usb-muisteja voidaan käyttää kuten mitä tahansa muutakin levyasemaa.
Usb-muistin mbr voidaan tyhjentää, luoda uusi mbr, luoda osioita, formatoida
osiot jne. Itse kokeilemassani tikussa (SanDisk Cruzer Micro, 256 MB) ainoana
rajoituksena on, että ensimmäisen osion pitää olla ensiöosio
(primary partition).
Seuraavassa vielä malliksi tiedostojärjestelmien luominen muistitikulle, jolle on luotu cfdiskillä ensiöosio (/dev/sda1) ja looginen osio (/dev/sda5):
sda1 Ensiö FAT16 46,45 sda5 Looginen Linux ext3 209,02
Osioille on luotu tiedostojärjestelmät vfat ja ext3 seuraavasti:
root@ttyp0[knoppix]# mkfs.vfat /dev/sda1 mkfs.vfat 2.10 (22 Sep 2003) root@ttyp0[knoppix]#
root@ttyp0[knoppix]# mke2fs -j /dev/sda5
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
51200 inodes, 204088 blocks
10204 blocks (5.00%) reserved for the super user
First data block=1
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
root@ttyp0[knoppix]#
Muistitikku on formatoitu oletuksena FAT-tiedostojärjestelmää käyttäen ja osio pitää liittää (mount) kuten muutkin osiot, jotta sitä voitaisiin käyttää, esim.:
mount -t vfat /dev/sda1 /mnt/sda1
Tarvittava tiedostojärjestelmä ja halutut optiot voidaan myös ilmoittaa valmiiksi /etc/fstab-tiedostossa:
/dev/sda1 /mnt/tikku auto noauto,users 0 0
Nyt muistitikun voi littää lyhyesti:
mount /dev/sda1
Swap-osio on RAM-muistin jatke kiintolevyllä, joten sitä kutsutaan
virtuaalimuistiksi (VM = Virtual Memory). Swap-osio tehdään yleensä
Linuxin asennuksen yhteydessä ja sen kooksi suositellaan 2 x RAM-muistin
määrää. Swap-osiota ei normaalissa työpöytäkäytössä kuitenkaan välttämättä
tarvita lainkaan, jos keskusmuistia on yli 512 Mt.
Swap-osion voi myös tehdä jälkeenpäin (esimerkissä /dev/hda2), jolloin sille pitää tehdä ensin tiedostojärjestelmä mkswap-komennolla:
# mkswap /dev/hda2
Swap-osio otetaan käyttöön swapon-komennolla ja pois käytöstä swapoff-komennolla.
# swapon /dev/hda2
# swapoff /dev/hda2
Kaikki virtuaalimuisti otetaan pois käytöstä:
# swapoff -a
Swap-osio tulee pysyvästi käyttöön lisäämällä se /etc/fstab-tiedostoon:
/dev/hda2 none swap defaults 0 0
Aja fstab-tiedoston muokkauksen jälkeen mount -a, niin ei tarvitse käynnistää konetta uudelleen vaan muutokset tulevat heti käyttöön.
Swap-osion sijasta voidaan tehdä myös swap-tiedosto:
# Tee swap-tiedosto 128 Mt:
dd if=/dev/zero of=/swapfile bs=1048576 count=128
# Muuta halutessasi swapfilen oikeuksia, esim. rw vain rootilla
chmod 600 /swapfile
# Tehdään tiedostojärjestelmä swap-tiedostolle
mkswap /swapfile
# Ajetaan sync-komento, jotta tiedosto varmasti otetaan käyttöön
sync
# otetaan swap-tiedosto käyttöön
swapon /swapfile
Käytössä olevan swap-muistin määrän näet free-komennolla.
Voit
liittää myös toisen koneen osioita mount-komennolla käyttäen
smbfs-tiedostojärjestelmää (tuki oltava kernelissä):
# mount -t smbfs -o username=tapsa,password=salasanasi //Vauhtihirmu/c /mnt/vauhtihirmu
Edellä on liitetty oman koneen /mnt/vauhtihirmu-hakemistoon toisen Vauhtihirmu-nimisen Windows-koneen c-asema. Verkkoaseman tunnuksena on käytettävä // (kaksi kauttaviivaa). Liitoskohdassa (//Vauhtihirmu/c) ei voi olla tyhjiä välilyöntejä.
Seuraavassa vielä pysyvä littäminen /etc/fstab-tiedostoon:
//Vauhtihirmu/c /mnt/vauhtihirmu smbfs defaults,username=tapsa,password=tähän_salasanasi 0 0
Huomaa, että edellä Sambaa käytetään kaikkein yksinkertaisemmalla ja samalla myös tietoturvattomimmalla tavalla.
Myös NFS-levyjaoissa on /etc/fstab-tiedostossa tieto siitä,
mitkä tiedostojärjestelmät liitetään, mihin, ja millä optioilla. Seuraava
esimerkki on man sivulta (man nfs) ja siitä ilmenee NFS-jaon periaate:
palvelimen nimi ja hakemisto, paikallinen hakemisto (mount point),
tiedostojärjestelmä ja nfs-tiedostojärjestelmän optiot:
server:/usr/local/pub /pub nfs rsize=8192,wsize=8192,timeo=14,intr
Palataan vielä hetkeksi tutkimaan, mitä fstab-rivillä oikeastaan kerrotaan.
# filesystem mountpoint type options dump pass # 1. 2. 3. 4. 5.6. /dev/hda1 /mnt/c vfat noauto,users,exec,umask=000 0 0
The first field, (fs_spec), describes the block special device or
remote filesystem to be mounted.
For ordinary mounts it will hold (a link to) a block special device
node (as created by mknod(8)) for the device to be mounted, like
`/dev/cdrom' or `/dev/sdb7'. For NFS mounts one will have
<host>:<dir>, e.g., `knuth.aeb.nl:/'. For procfs, use `proc'.
Instead of giving the device explicitly, one may indicate the (ext2 or
xfs) filesystem that is to be mounted by its UUID or volume label (cf.
e2label(8) or xfs_admin(8)), writing LABEL=<label> or UUID=<uuid>,
e.g., `LABEL=Boot' or `UUID=3e6be9de-8139-11d1-9106-a43f08d823a6'.
This will make the system more robust: adding or removing a SCSI disk
changes the disk device name but not the filesystem volume label.
The second field, (fs_file), describes the mount point for the filesys-
tem. For swap partitions, this field should be specified as `none'. If
the name of the mount point contains spaces these can be escaped as
`\040'.
The third field, (fs_vfstype), describes the type of the filesystem.
Linux supports lots of filesystem types, such as adfs, affs, autofs,
coda, coherent, cramfs, devpts, efs, ext2, ext3, hfs, hpfs, iso9660,
jfs, minix, msdos, ncpfs, nfs, ntfs, proc, qnx4, reiserfs, romfs,
smbfs, sysv, tmpfs, udf, ufs, umsdos, vfat, xenix, xfs, and possibly
others. For more details, see mount(8). For the filesystems currently
supported by the running kernel, see /proc/filesystems. An entry swap
denotes a file or partition to be used for swapping, cf. swapon(8). An
entry ignore causes the line to be ignored. This is useful to show
disk partitions which are currently unused.
The fourth field, (fs_mntops), describes the mount options associated
with the filesystem.
It is formatted as a comma separated list of options. It contains at
least the type of mount plus any additional options appropriate to the
filesystem type. For documentation on the available options for non-
nfs file systems, see mount(8). For documentation on all nfs-specific
options have a look at nfs(5). Common for all types of file system are
the options ``noauto'' (do not mount when "mount -a" is given, e.g., at
boot time), ``user'' (allow a user to mount), and ``owner'' (allow
device owner to mount), and ``_netdev'' (device requires network to be
available). The ``owner'' and ``_netdev'' options are Linux-specific.
For more details, see mount(8).
The fifth field, (fs_freq), is used for these filesystems by the
dump(8) command to determine which filesystems need to be dumped. If
the fifth field is not present, a value of zero is returned and dump
will assume that the filesystem does not need to be dumped.
The sixth field, (fs_passno), is used by the fsck(8) program to deter-
mine the order in which filesystem checks are done at reboot time. The
root filesystem should be specified with a fs_passno of 1, and other
filesystems should have a fs_passno of 2. Filesystems within a drive
will be checked sequentially, but filesystems on different drives will
be checked at the same time to utilize parallelism available in the
hardware. If the sixth field is not present or zero, a value of zero
is returned and fsck will assume that the filesystem does not need to
be checked.
Kolmas kenttä fstab-rivillä on tiedostojärjestelmän tyyppi (fs_vfstype). Linux tukee useita tiedostojärjestelmätyyppejä:
-t vfstype
The argument following the -t is used to indicate the file sys-
tem type. The file system types which are currently supported
are: adfs, affs, autofs, coda, coherent, cramfs, devpts, efs,
ext, ext2, ext3, hfs, hpfs, iso9660, jfs, minix, msdos, ncpfs,
nfs, ntfs, proc, qnx4, reiserfs, romfs, smbfs, sysv, tmpfs,
udf, ufs, umsdos, vfat, xenix, xfs, xiafs. Note that coherent,
sysv and xenix are equivalent and that xenix and coherent will
be removed at some point in the future -- use sysv instead.
Since kernel version 2.1.21 the types ext and xiafs do not
exist anymore.
Valitsin -t tarvitaan edeltämään annettavaa tiedostojärjestelmää, jos laite liitetään väliaikaisesti tekemättä muutoksia /etc/fstab-tiedostoon. Seuraavassa ide-levyn ensimmäinen osio liitetään liitospisteeseen /mnt/c käyttäen Windowsin liittämiseen tarvittavaa vfat-tiedostojärjestelmää:
mount -t vfat /dev/hda1 /mnt/c
Kernelin tunnistamat tiedostojärjestelmät (file systems) näet cat /proc/filesystems (uudelleenohjataan tulostus näytöltä filesystems-nimiseen tiedostoon rootin kotihakemistoon):
root@abc:~# cat /proc/filesystems > ~/filesystems nodev sysfs nodev rootfs nodev bdev nodev proc nodev sockfs nodev futexfs nodev tmpfs nodev pipefs nodev eventpollfs nodev devpts ext2 nodev ramfs nodev hugetlbfs vfat iso9660 nodev mqueue nodev selinuxfs nodev usbfs nodev usbdevfs ext3 hpfs nodev autofs
Edellinen tulostus on Knoppix 3.7:n live-CD:ltä (kerneli 2.6.7) omalta koneeltani. Joskus tuki tarvittavalle tiedostojärjestelmälle on jätetty kernelistä pois, jolloin kerneli on käännettävä itse ja lisättävä tuki ko. tiedostojärjestelmälle. Itselläni kävi näin Red Hatin kanssa, joka ei tunnistanut OS/2:n hpfs-tiedostojärjestelmää.
Neljäs kenttä fstab-rivillä on liitosoptiot (fs_mntops).
Seuraavassa on lueteltu muutamia yleisimpiä optioita:
Kiinnitä edellä huomota etenkin defaults ja user-optioihin, jotka ovat osittain toisensa poissulkevia. Jos /etc/fstab-tiedostossa on esim. rivi:
/dev/hda1 /mnt/windows vfat defaults 0 0
user-option lisääminen (defaults,user) poistaisi ohjelmien ajo-oikeuden (noexec), joka kuitenkin on defaults-optiossa oletuksena mukana (exec).
Usein on kuitenkin hyödyllistä antaa myös tavalliselle käyttäjälle oikeuksia liittämiseen ja ohjelmien suorittamiseen Windows-osiolta, jolloin seuraava /etc/fstab-tiedoston rivi voisi olla käyttökelpoinen:
/dev/hda1 /mnt/windows vfat auto,users,exec,umask=000 0 0
Katso lisätietoa optioista man mount.
Iso-loppuisen image-tiedoston sisällön (esimerkissä boot.iso-niminen tiedosto) näet Linuxissa kuten minkä tahansa muunkin laitteen mount-komennolla liittämällä sen jonnekin, esim. /mnt-hakemistoon:
# mount -o loop boot.iso /mnt
Voit myös käyttää '# mount -t auto -o loop boot.iso /mnt'.
Tavallisen /mnt-hakemiston sisällön saat näkyviin taas:
# umount boot.iso /mnt
Huomaa, että kernelissä täytyy olla tuki loop-laitteelle tai saat seuraavan virheilmoituksen:
# mount -o loop /boot.iso /mnt
mount: Could not find any loop device. Maybe this kernel does not know
about the loop device? (If so, recompile or `modprobe loop'), or
maybe /dev/loop# has the wrong major number?
Iso-imaget tehdään mkisofs-ohjelmalla (MaKe ISO File System). Tehdään seuraavassa esimerkissä /etc-hakemistosta iso-tiedosto, joka poltetaan sitten myöhemmin CD-RW:lle:
root@abc:~# mkisofs -R -J -o /home/tapsa/etc.iso /etc
Edellä -R tarkoittaa Linuxin Rock Ridge -laajennoksia ja -J tarkoittaa Joliet-laajennuksia, joita tarvitaan, jos levyä halutaan lukea Windowsissa. Iso-tiedoston teko ja poltto CD:lle on kätevä tapa tehdä backup tarpeellisista hakemistoista (asetukset, kotihakemisto ym.).
Tyhjennetään seuraavaksi käytetty CD-RW-levy:
root@abc:~# cdrecord blank=fast dev=/dev/hdc
Poltetaan CD (käytössä 2.6-sarjan kerneli):
root@abc:~# cdrecord -v speed=4 dev=/dev/hdc /home/tapsa/etc.iso
Tarpeellista tietoa ohjelman käytöstä löytyy mm. CD-Writing HOWTO -sivulta http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html ja IBM:n sivulta Burning CDs on Linux.
Vielä malliksi iso-imagen poltto CD:ksi koneessa, jossa on 2.4-sarjan
kerneli:
$ cdrecord -v -eject speed=4 dev=0,0,0
tiedosto.iso
Hakemistopuuhun liitetyt laitteet näet pelkällä mount-komennolla:
tapsa@abc:~$ mount /dev/hdb5 on / type ext3 (rw,errors=remount-ro) proc on /proc type proc (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) sysfs on /sys type sysfs (rw) usbdevfs on /proc/bus/usb type usbdevfs (rw) automount(pid1386) on /mnt/auto type autofs (rw,fd=5,pgrp=1386,minproto=2,maxproto=4)
Mikä sitten on /etc/mtab-tiedosto? Tiedosto mtab listaa tällä hetkellä liitetyt laitteet eli aktiivisena olevat osiot. Mtab päivittyy automaattisesti aina kun mount-komentoa käytetään. Huomaa, että muutokset liitoksissa pitää aina tehdä /etc/fstab-tiedostoon - ei mtabiin!
tapsa@abc:~$ cat /etc/mtab /dev/hdb5 / ext3 rw,errors=remount-ro 0 0 proc /proc proc rw 0 0 devpts /dev/pts devpts rw,gid=5,mode=620 0 0 sysfs /sys sysfs rw 0 0 usbdevfs /proc/bus/usb usbdevfs rw 0 0 automount(pid1386) /mnt/auto autofs rw,fd=5,pgrp=1386,minproto=2,maxproto=4 0 0
Voit myös hakea tiedot liitetyistä tiedostojärjestelmistä suoraan kerneliltä cat /proc/mounts. Proc-hakemistoa ei ole 'oikeasti' olemassa kiintolevyllä vaan se on kernelin muistiin luoma virtuaalitiedosto.
tapsa@abc:~$ cat /proc/mounts rootfs / rootfs rw 0 0 /dev/root / ext2 rw 0 0 proc /proc proc rw 0 0 devpts /dev/pts devpts rw 0 0 sysfs /sys sysfs rw 0 0 usbdevfs /proc/bus/usb usbdevfs rw 0 0 automount(pid1386) /mnt/auto autofs rw 0 0
Seuraavassa on malli fstab-tiedostosta, jossa mainitut osiot liitetään automaattisesti käynnistyksen yhteydessä:
tapsa@abc:~$ cat /etc/fstab # /etc/fstab: filesystem table. # # filesystem mountpoint type options dump pass /dev/hdb5 / ext3 defaults,errors=remount-ro 0 1 proc /proc proc defaults 0 0 /dev/fd0 /floppy vfat defaults,user,noauto,showexec,umask=022 0 0 usbdevfs /proc/bus/usb usbdevfs defaults 0 0 sysfs /sys sysfs defaults 0 0 /dev/dvd /dvd iso9660 defaults,ro,user,noexec,noauto 0 0 /dev/cdaudio /cdaudio iso9660 defaults,ro,user,noexec,noauto 0 0 # Added by KNOPPIX /dev/hdb1 none swap defaults 0 0 tapsa@abc:~$
Jos käynnistät Linuxin Grubista (tai Lilosta) single user -tilaan boot: linux single tai:
boot: linux 1
saatat joutua liittämään juuriosion uudelleen, koska tiedostojärjestelmä on kirjoitussuojattu (read-only - vain lukuoikeus):
mount -o remount,rw /
Komentoa fsck käytetään tiedostojärjestelmien (file systems) tarkistamiseen ja korjaamiseen. Tiedostojärjestelmä voi olla mm. osio (esim. /dev/hdb1) tai liitospiste (esim. / tai /home). Jos tiedostojärjestelmää ei anneta, niin fsck käy läpi /etc/fstab-tiedostossa olevat tiedostojärjestelmät.
Nykyisillä journaloivilla tiedostojärjestelmillä (esim. ext3) ei tarkistusta enää välttämättä tarvita, koska tiedostojärjestelmä pitää itse kirjaa siitä, mihin kohtaa levyä se aikoo seuraavaksi kirjoittaa, ja jos kirjaaminen ei onnistu (esim. sähkökatkos), kirjoitustapahtuma vain yksinkertaisesti hylätään seuraavan käynnistyksen yhteydessä.
Oikeastaan komento fsck on vain apuohjelma (frontend) erilaisille tiedostojärjestelmien tarkistusohjelmille, jotka löytyvät /sbin-hakemistosta Tarkistusohjelmia ei tarvitse erikseen käynnistää, koska fsck käynnistää ohjelman automaattisesti. Seuraavassa on luettelo omasta koneestani löytyvistä tarkistusohjelmista:
root@abc:~# ls /sbin/fsck* /sbin/fsck /sbin/fsck.ext3 /sbin/fsck.msdos /sbin/fsck.vfat /sbin/fsck.cramfs /sbin/fsck.jfs /sbin/fsck.nfs /sbin/fsck.xfs /sbin/fsck.ext2 /sbin/fsck.minix /sbin/fsck.reiserfs root@abc:~#
Huomaa, että tiedostojärjestelmä, joka aiotaan tarkistaa, ei saa olla liitettynä (irrota se umount-komennolla):
root@abc:~# fsck fsck 1.35 (28-Feb-2004) e2fsck 1.35 (28-Feb-2004) /dev/hdb5 is mounted. WARNING!!! Running e2fsck on a mounted filesystem may cause SEVERE filesystem damage.
Turvallisinta on käynnistää Linux Grubista (tai Lilosta) single user -tilaan boot: linux single. Tuossa linuxin tilalla pitää tietysti olla se label, jolla käynnistät linuxin normaalistikin mutta pelkkä 'linux' on yleensä oletuksena asennuksen jälkeen. Single user -tilaan pääset myös lisäämällä ykkösen (1) labelin jälkeen välilyönnillä erotuttuna boot: linux 1.
Fsck-komennolle voidaan antaa myös optioita, joista ainakin -a ja -V ovat harkinnan arvoisia normaalikäytössä:
-a Automatically repair the file system without any questions (use
this option with caution). Note that e2fsck(8) supports -a for
backwards compatibility only. This option is mapped to e2fsck's
-p option which is safe to use, unlike the -a option that some
file system checkers support.
-V Produce verbose output, including all file system-specific com-
mands that are executed.
root@abc:~# fsck -aV /dev/hdb5
Joskus fsck:n ajo ei onnistu levyn vioittuneen superlohkon takia:
fsck.ext2: Bad magic number in super-block while trying to open /dev/hdb5:
The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193 <device>
Ratkaisu on ajaa e2fsck -b-optiolla, joka palauttaa levyn ensimmäisen lohkon (superblock) varmuuskopion. Huomaa kuitenkin, että varmuuskopion paikka vaihtelee tiedostojärjestelmän lohkokoon mukaan. Lohkokoko (blocksize) 8193 on vain esimerkki ja pätee 1k lohkokoolla mutta nykyisin on käytössä 4k lohkokoko, joten arvo on silloin 32768, man 2sfsck:
-b superblock
Instead of using the normal superblock, use an
alternative superblock specified by superblock.
This option is normally used when the primary
superblock has been corrupted. The location of the
backup superblock is dependent on the filesystem's
blocksize. For filesystems with 1k blocksizes, a
backup superblock can be found at block 8193; for
filesystems with 2k blocksizes, at block 16384; and
for 4k blocksizes, at block 32768.
Superlohkon palautus onnistuu siis seuraavasti hdb5:lle:
e2fsck -b 32768 /dev/hdb5
Tiedostojärjestelmän tarkistus voidaan myös suorittaa käynnistyksen yhteydessä muuttamalla /etc/fstab-tiedostossa olevien rivien viimeinen numero eli kuudes kenttä (fs_passno) nollasta ykköseksi tai kakkoseksi. Ja tietysti päinvastoin saat tarkistuksen pois muuttamalla viimeiseksi numeroksi nollan. Fsck-ohjelma saa tiedon levyn tarkistamisesta käynnistyksen yhteydessä seuraavasti:
Tarkista muutoksien jälkeen fstab-tiedoston oikeellisuus:
root@abc:~# mount -a
Vanhemman ext2-tiedostojärjestelmän voi vaihtaa jälkeenpäin ext3:ksi seuraavasti:
tune2fs -j /dev/hdXX
No miten ext3-osio sitten tehdään jälkeenpäin?
mke2fs -j /dev/hdXX
Edellä -j -valitsin osoittaa, että kyse on ext3-järjestelmästä, joka on journaloitu ext2-tiedostojärjestelmä! Katso lisätietoa tiedostojärjestelmien luonnista 'Alphabetical Directory of Linux Commands' -oppaasta mke2fs (= mkfs.ext2) ja mkfs
Vioittuneen ext3-tiedostojärjestelmän voi korjata seuraavasti:
e2fsck -fy /dev/hdXX
Linuxin asennuksen yhteydessä asennetaan myös Linuxin
manuaali eli käsikirja, jota voi tutkia
man-komennolla (man - an interface to the on-line reference
manuals) antamalla sen perään halutun komennon nimen, esim. man fstab.
Man-sivut löytyvät /usr/share/man-hakemiston alihakemistoista ja sivuja on yhdeksän (man1 - man9) seuraavan jaottelun mukaan:
1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd
6 Games
7 Miscellaneous (including macro packages and conven-
tions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]
Ohjeet ovat oletuksena englantia mutta myös suomenkielisiä ohjeita on ja ne löytyvät (jos on asennettu) fi-alihakemistosta (/usr/share/man/fi).
Man-sivut on pakattu gzip-ohjelmalla (pääte .gz) tilankäytön minimoimiseksi ja lukemisessa käytetään apuna less-ohjelmaa, jolla manuaaleja voi lukea sivu kerrallaan (nuolinäppäimillä ja PageUp - PageDown). Sivuilta voi etsiä tekstiä /-kirjaimella (kauttaviiva). Man-sivujen lukeminen lopetetaan q-kirjaimella.
Konsolissa ja virtuaalikonsolissa käytettävän man-komennon lisäksi sivuja voi tutkia myös X:ssä (hiiren oikea näppäin ja Työpöydän ohje).
Jos komennon tarkkaa nimeä ei muisteta, voidaan etsimisessä käyttää apuna k-optiota (k = keyword), esim. man -k fstab. Myös apropos-komento (apropos - search the manual page names and descriptions) on suosittu ja sitä käytetään omana komentonaan, esim. apropos fstab. Kokeile molempia tapoja, niin huomaat, että saat saman tulosteen. Jos tutkit seuraavaa man-komennon ohjetta, niin huomaat, että man-komento k-valitsemen kanssa on vastaava kuin apropos, jota siis voi käyttää myös omana komentonaan.
usage: man [-c|-f|-k|-w|-tZT device] [-i|-I] [-adlhu7V] [-Mpath] [-Ppager]
[-Cfile] [-Slist] [-msystem] [-pstring] [-Llocale] [-eextension]
[section] page ...
-a, --all find all matching manual pages.
-d, --debug emit debugging messages.
-e, --extension limit search to extension type `extension'.
-f, --whatis equivalent to whatis.
-k, --apropos equivalent to apropos.
-w, --where, --location print physical location of man page(s).
-W, --where-cat,
--location-cat print physical location of cat file(s).
-l, --local-file interpret `page' argument(s) as local filename(s).
-u, --update force a cache consistency check.
-i, --ignore-case look for pages case-insensitively (default).
-I, --match-case look for pages case-sensitively.
-r, --prompt string provide the `less' pager with a prompt
-c, --catman used by catman to reformat out of date cat pages.
-7, --ascii display ASCII translation of certain latin1 chars.
-E, --encoding encoding use the selected nroff device and display in pager.
-t, --troff use groff to format pages.
-T, --troff-device device use groff with selected device.
-H, --html use lynx or argument to display html output.
-Z, --ditroff use groff and force it to produce ditroff.
-X, --gxditview use groff and display through gditview (X11):
-X = -TX75, -X100 = -TX100, -X100-12 = -TX100-12.
-D, --default reset all options to their default values.
-C, --config-file file use this user configuration file.
-M, --manpath path set search path for manual pages to `path'.
-P, --pager pager use program `pager' to display output.
-S, --sections list use colon separated section list.
-m, --systems system search for man pages from other unix system(s).
-L, --locale locale define the locale for this particular man search.
-p, --preprocessor string string indicates which preprocessors to run.
e - [n]eqn p - pic t - tbl
g - grap r - refer v - vgrind
-V, --version show version.
-h, --help show this usage message.
Lisätietoa man-komennosta saat man man.
Linuxissa linkit tehdään ln-komennolla ja ne voivat olla joko kovia linkkejä (hard link) tai symbolisi