samuli@localhost:~$ apropos package apt (8) - Advanced Package Tool apt-cache (8) - APT package handling utility - cache manipulator apt-extracttemplates (1) - Utility to extract DebConf config and templates from Debian packages apt-get (8) - APT package handling utility - command-line interface apt-sortpkgs (1) - Utility to sort package index files aptitude (8) - high-level interface to the package manager dpkg (8) - a medium-level package manager for Debian dpkg-deb (1) - Debian package archive (.deb) manipulation tool dpkg-divert (8) - override a package's version of a file dpkg-preconfigure (8) - let packages ask questions prior to their installation dpkg-reconfigure (8) - reconfigure an already installed package dpkg-split (8) - Debian package archive split/join tool dselect (8) - Debian package management frontend mdoc (7) - quick reference guide for the -mdoc macro package sources.list (5) - Package resource list for APT samuli@localhost:~$
samuli@localhost:~$ whatis ifconfig ifconfig (8) - configure a network interface samuli@localhost:~$
samuli@localhost:~$ pwd /home/samuli samuli@localhost:~$
samuli@localhost:~$ pwd /home/samuli samuli@localhost:~$ cd /tmp samuli@localhost:/tmp$ pwd /tmp samuli@localhost:/tmp$
samuli@localhost:~$ ls -l /usr/local/bin total 14060 lrwxrwxrwx 1 root staff 32 Oct 27 15:02 acroread -> /usr/local/Acrobat7/bin/acroread -rwsr-xr-x 1 root staff 48968 Dec 3 11:41 fusermount lrwxrwxrwx 1 root staff 7 Oct 9 20:56 gmplayer -> mplayer -rwxr-xr-x 1 root staff 5816828 Oct 9 20:56 mencoder -rwxr-xr-x 1 root staff 6359836 Oct 9 20:56 mplayer -rwxr-x--- 1 root staff 140874 Oct 16 11:56 rkhunter -rwxr-xr-x 1 root staff 1986753 Dec 19 18:35 sdlquake samuli@localhost:~$
samuli@localhost:/tmp/new$ ls -l total 4 -rw-r--r-- 1 samuli samuli 9 Dec 26 15:37 teksti.txt samuli@localhost:/tmp/new$ cp teksti.txt teksti.bak samuli@localhost:/tmp/new$ ls -l total 8 -rw-r--r-- 1 samuli samuli 9 Dec 26 15:39 teksti.bak -rw-r--r-- 1 samuli samuli 9 Dec 26 15:37 teksti.txt samuli@localhost:/tmp/new$
samuli@localhost:/tmp/new$ ls -l total 4 -rw-r--r-- 1 samuli samuli 9 Dec 26 15:39 teksti.txt samuli@localhost:/tmp/new$ mv teksti.txt teksti.bak samuli@localhost:/tmp/new$ ls -l total 4 -rw-r--r-- 1 samuli samuli 9 Dec 26 15:39 teksti.bak samuli@localhost:/tmp/new$
samuli@localhost:/tmp/new$ ls -l total 4 -rw-r--r-- 1 samuli samuli 9 Dec 26 15:39 teksti.txt samuli@localhost:/tmp/new$ ln -s teksti.txt linkki_teksti.txt samuli@localhost:/tmp/new$ ls -l total 4 lrwxrwxrwx 1 samuli samuli 10 Dec 26 15:48 linkki_teksti.txt -> teksti.txt -rw-r--r-- 1 samuli samuli 9 Dec 26 15:39 teksti.txt samuli@localhost:/tmp/new$
Jos linkin nimeksi kelpaa alkuperäisen tiedoston nimi, voidaan käyttää yksinkertaisempaa kirjoitusasua:
samuli@localhost:/tmp/new$ ls -l /usr/local/bin/mplayer -rwxr-xr-x 1 root staff 6140192 2006-06-03 09:08 /usr/local/bin/mplayer samuli@localhost:/tmp/new$ ln -s /usr/local/bin/mplayer samuli@localhost:/tmp/new$ ls -l yhteensä 0 lrwxrwxrwx 1 samuli samuli 22 2007-02-04 12:54 mplayer -> /usr/local/bin/mplayer samuli@localhost:/tmp/new$
samuli@localhost:/tmp/new$ ls -l total 8 drwxr-xr-x 2 samuli samuli 4096 Dec 26 15:56 hakemisto -rw-r--r-- 1 samuli samuli 9 Dec 26 15:39 teksti.txt -rw-r--r-- 1 samuli samuli 0 Dec 26 15:56 teksti2.txt samuli@localhost:/tmp/new$ rm teksti2.txt samuli@localhost:/tmp/new$ ls -l total 8 drwxr-xr-x 2 samuli samuli 4096 Dec 26 15:56 hakemisto -rw-r--r-- 1 samuli samuli 9 Dec 26 15:39 teksti.txt samuli@localhost:/tmp/new$ rm -r hakemisto samuli@localhost:/tmp/new$ ls -l total 4 -rw-r--r-- 1 samuli samuli 9 Dec 26 15:39 teksti.txt samuli@localhost:/tmp/new$
samuli@localhost:/usr/local/bin$ file mencoder mencoder: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped samuli@localhost:/usr/local/bin$ file /usr/local/bin/mencoder /usr/local/bin/mencoder: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped samuli@localhost:/usr/local/bin$ file ~/VeraIt.ttf /home/samuli/VeraIt.ttf: TrueType font data samuli@localhost:/usr/local/bin$ file ~/IMG_1962.JPG /home/samuli/IMG_1962.JPG: JPEG image data, EXIF standard 2.2 samuli@localhost:/usr/local/bin$
Xargs tulee toisinaan tarpeeseen, vaikka useimmiten ilman sitäkin pärjää. Xargs lukee standardisyötteestä rivejä ja käynnistää annetun komennon annetuilla argumenteilla kutakin riviä kohti.
Käytännön sovelluksia ovat erityisesti erilaiset tiedostojenkäsittelyoperaatiot. Esimerkiksi joissain lähdekoodista käännetyissä ohjelmissa ei ole nk. "uninstall" -sääntöä, eli niitä ei voi poistaa komennolla "make uninstall". Locate, find, grep ja xargs-komentoja käyttäen asennuksen poisto kuitenkin onnistuu:
localhost:~# locate gnutella|grep local /usr/local/bin/gtk-gnutella /usr/local/lib/gtk-gnutella --- snip --- /usr/local/share/applications/gtk-gnutella.desktop /usr/local/share/locale/de/LC_MESSAGES/gtk-gnutella.mo /usr/local/share/locale/el/LC_MESSAGES/gtk-gnutella.mo /usr/local/share/locale/es/LC_MESSAGES/gtk-gnutella.mo /usr/local/share/locale/fr/LC_MESSAGES/gtk-gnutella.mo /usr/local/share/locale/hu/LC_MESSAGES/gtk-gnutella.mo /usr/local/share/locale/ja/LC_MESSAGES/gtk-gnutella.mo /usr/local/share/locale/nl/LC_MESSAGES/gtk-gnutella.mo /usr/local/share/locale/uk/LC_MESSAGES/gtk-gnutella.mo /usr/local/share/locale/zh_CN/LC_MESSAGES/gtk-gnutella.mo /usr/local/share/pixmaps/gtk-gnutella.png /usr/local/share/pixmaps/gtk-gnutella.svg localhost:~# locate gnutella|grep local|xargs rm localhost:~# find /usr/local/ -name "*gnutella*" localhost:~#
Chmod-komennolla muutetaan tiedostojen ja hakemistojen luku-, kirjoitus- ja käynnistysoikeuksia. Lisäksi sillä voidaan asettaa tiedostojen SUID- (set-user-id), GUID- (set-group-id) ja sticky-bitit. Tiedostojen oikeuksia voidaan muuttaa kahdella tavalla: joko lisäämällä tai poistamalla olemassaolevia oikeuksia tai määrittelemällä oikeudet absoluuttisesti.
Oikeuksien absoluuttinen määrittely voidaan tehdä antamalla halutut oikeudet kolmi- tai nelinumeroisena oktaalilukuna: mikäli luku on kolminumeroinen, ei erityisbittejä muuteta. Oktaalijärjestelmässä eli 8-järjestelmässä on käytössä vain luvut 0-8.
Oikeuksien määrittely oktaalilukuna voi vaikuttaa aluksi hämmentävältä, mutta sitä ei ole vaikea oppia. Aivan kylmiltään se ei kuitenkaan onnistu, sillä ensin tulee tietää, miten chmod oktaalilukuja tulkitsee. Allaolevassa taulukossa ovat chmod-ohjelman käyttämät koodit:
| Koodi | Oikeudet | Erityisbitti |
| 0 | Ei mitään oikeuksia | Ei erityisbittiä |
| 4 | Lukuoikeus | Set-user-id |
| 2 | Kirjoitusoikeus | Set-group-id |
| 1 | Käynnistysoikeus | Sticky-bitti |
Absoluuttisia tiedosto-oikeuksia määriteltäessä käytetään syntaksia "chmod sugo tiedosto", jossa s,u,g, ja o ovat oktaalilukuja (0-7). Kohdassa s määritellään tiedoston erityisbitit. Kohdissa u, g, ja o määritellään käyttäjän, ryhmän ja muiden (engl. user, group ja other) oikeudet tiedostoon.
Oktaaliluku saadaan selville laskemalla halutut bitit yhteen. Esimerkiksi jos halutaan tiedostoon luku-, kirjoitus- ja käynnistysoikeudet, saadaan oktaaliluvuksi 4+2+1 = 7 (luku+kirjoitus+käynnistys). Vastaavasti jos halutaan vain luku- ja kirjoitusoikeudet, saadaan 4+2 = 6 (luku+kirjoitus). Muutama esimerkki valottanee asiaa parhaiten:
samuli@localhost:/tmp/hakemisto$ ls -l total 0 -rw-r--r-- 1 samuli samuli 0 Jan 22 15:11 eka -rw-r--r-- 1 samuli samuli 0 Jan 22 15:11 kolmas -rw-r--r-- 1 samuli samuli 0 Jan 22 15:11 toka samuli@localhost:/tmp/hakemisto$ chmod 0444 eka samuli@localhost:/tmp/hakemisto$ chmod 0644 toka samuli@localhost:/tmp/hakemisto$ chmod 0700 kolmas samuli@localhost:/tmp/hakemisto$ ls -l total 0 -r--r--r-- 1 samuli samuli 0 Jan 22 15:11 eka -rwx------ 1 samuli samuli 0 Jan 22 15:11 kolmas -rwx------ 1 samuli samuli 0 Jan 22 15:11 toka samuli@localhost:/tmp/hakemisto$
Lisättäessä tai vähennettäessä olemassaolevia oikeuksia käytetään syntaksi "chmod [ugoa][+/-][srwx] tiedosto". U,g,o ja a määrittelevät, keitä muutos koskee: käyttäjää, ryhmää, muita tai kaikkia (engl. all).
samuli@localhost:/tmp/hakemisto$ ls -l totale 0 -rw-r--r-- 1 samuli samuli 0 2006-02-14 14:28 aa -rw-r--r-- 1 samuli samuli 0 2006-02-14 14:28 bee -rw-r--r-- 1 samuli samuli 0 2006-02-14 14:29 cee samuli@localhost:/tmp/hakemisto$ chmod u+x aa samuli@localhost:/tmp/hakemisto$ chmod ug+rwx bee samuli@localhost:/tmp/hakemisto$ chmod o-r cee samuli@localhost:/tmp/hakemisto$ ls -l totale 0 -rwxr--r-- 1 samuli samuli 0 2006-02-14 14:28 aa -rwxrwxr-- 1 samuli samuli 0 2006-02-14 14:28 bee -rw-r----- 1 samuli samuli 0 2006-02-14 14:29 cee samuli@localhost:/tmp/hakemisto$
Komentoa chmod käytetään usein vivun -R kanssa. Sen avulla saadaan muutettua hakemiston ja kaikkien sen alla olevien tiedostojen ja hakemistojen oikeudet kerralla:
root@localhost:/tmp# ls -l test yhteensä 0 -rw-r--r-- 1 root root 0 2007-02-03 16:12 tiedosto_1.txt -rw-r--r-- 1 root root 0 2007-02-03 16:12 tiedosto_2.txt -rw-r--r-- 1 root root 0 2007-02-03 16:12 tiedosto_3.txt -rw-r--r-- 1 root root 0 2007-02-03 16:12 tiedosto_4.txt -rw-r--r-- 1 root root 0 2007-02-03 16:12 tiedosto_5.txt root@localhost:/tmp# chmod -R 775 test root@localhost:/tmp# ls -l test yhteensä 0 -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_1.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_2.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_3.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_4.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_5.txt root@localhost:/tmp#
Usein on tarpeen muuttaa kaikkien hakemistossa olevien tiedostojen oikeudet kerralla, mutta jättää hakemistot koskematta. Tämä on mahdollista käyttämällä chmod-komennon lisäksi komentoa find:
root@localhost:/tmp/hakemisto# ls -lR
.:
yhteensä 12
drwxr-xr-x 2 root root 4096 2007-02-03 16:27 alihakemisto_1
drwxr-xr-x 2 root root 4096 2007-02-03 16:27 alihakemisto_2
drwxr-xr-x 2 root root 4096 2007-02-03 16:27 alihakemisto_3
./alihakemisto_1:
yhteensä 0
-rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_1.txt
-rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_2.txt
./alihakemisto_2:
yhteensä 0
-rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_3.txt
./alihakemisto_3:
yhteensä 0
-rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_4.txt
-rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_5.txt
root@localhost:/tmp/hakemisto# find /tmp/hakemisto -type f -exec chmod 600 {} \;
root@localhost:/tmp/hakemisto# ls -lR
.:
yhteensä 12
drwxr-xr-x 2 root root 4096 2007-02-03 16:27 alihakemisto_1
drwxr-xr-x 2 root root 4096 2007-02-03 16:27 alihakemisto_2
drwxr-xr-x 2 root root 4096 2007-02-03 16:27 alihakemisto_3
./alihakemisto_1:
yhteensä 0
-rw------- 1 samuli samuli 0 2007-02-03 16:12 tiedosto_1.txt
-rw------- 1 samuli samuli 0 2007-02-03 16:12 tiedosto_2.txt
./alihakemisto_2:
yhteensä 0
-rw------- 1 samuli samuli 0 2007-02-03 16:12 tiedosto_3.txt
./alihakemisto_3:
yhteensä 0
-rw------- 1 samuli samuli 0 2007-02-03 16:12 tiedosto_4.txt
-rw------- 1 samuli samuli 0 2007-02-03 16:12 tiedosto_5.txt
root@localhost:/tmp/hakemisto#
Komennolla chown muutetaan tiedostojen ja hakemistojen omistajia ja ryhmiä. Komennon käyttö on varsin yksinkertaista, kuten alta näkyy:
root@localhost:/tmp/test# ls -l yhteensä 0 -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_1.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_2.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_3.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_4.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_5.txt root@localhost:/tmp/test# chown root:users tiedosto_1.txt root@localhost:/tmp/test# chown samuli:samuli tiedosto_2.txt root@localhost:/tmp/test# ls -l yhteensä 0 -rwxrwxr-x 1 root users 0 2007-02-03 16:12 tiedosto_1.txt -rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_2.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_3.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_4.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_5.txt root@localhost:/tmp/test#
Komennon chmod tapaan chown-komennon kanssa voidaan käyttää vipua -R:
root@localhost:/tmp# ls -l yhteensä 20 drwx------ 3 samuli samuli 4096 2007-02-02 16:45 gconfd-samuli drwx------ 2 samuli samuli 4096 2007-02-03 15:30 orbit-samuli drwx------ 2 samuli samuli 4096 2007-02-02 16:45 ssh-nqerxL3641 drwx------ 2 samuli samuli 4096 2007-02-02 16:45 ssh-oqerxL3641 drwxrwxr-x 2 root root 4096 2007-02-03 16:12 test root@localhost:/tmp# ls -l test yhteensä 0 -rwxrwxr-x 1 root users 0 2007-02-03 16:12 tiedosto_1.txt -rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_2.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_3.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_4.txt -rwxrwxr-x 1 root root 0 2007-02-03 16:12 tiedosto_5.txt root@localhost:/tmp# chown -R samuli:samuli test root@localhost:/tmp# ls -la test yhteensä 8 drwxrwxr-x 2 samuli samuli 4096 2007-02-03 16:12 . drwxrwxrwt 10 root root 4096 2007-02-03 16:20 .. -rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_1.txt -rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_2.txt -rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_3.txt -rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_4.txt -rwxrwxr-x 1 samuli samuli 0 2007-02-03 16:12 tiedosto_5.txt root@localhost:/tmp#
Etsii tiedostoja erinäisten hakukriteerien perusteella. Find on erittäin monipuolinen komento, sen mahdollisuuksiin kannattaa tutustua sen man-sivujen avulla. Findia käytettäessä kannattaa muistaa, ettei se pysty etsimään kuin hakemistoista, joihin sen käyttäjällä on oikeus. Näinollen esimerkiksi /etc -hakemistosta etsittäessä kannattaa haku käynnistää pääkäyttäjän oikeuksin: muutoin tulokset jäävät vajaiksi.
Seuraavassa esimerkissä etsitään kaikki ne tiedostot /usr/bin -hakemistosta, joiden nimessä on jossakin kohtaa "xm":
samuli@localhost:~$ find /usr/bin/ -name "*xm*" /usr/bin/xmlcatalog /usr/bin/xmllint /usr/bin/xml2po /usr/bin/dh_installxmlcatalogs /usr/bin/fixmswrd.pl /usr/bin/xmms /usr/bin/wmxmms samuli@localhost:~$
Seuraavassa esimerkissä etsitään nykyisestä hakemistosta (.) ne tiedostot, jotka on avattu viimeisen viidentoista minuutin sisällä:
samuli@localhost:~$ find . -amin -15 ./.gconf/apps/gnumeric/plugins/%gconf.xml ./.gconf/apps/gnumeric/printsetup/%gconf.xml ./.gconfd/saved_state ./.mozilla/firefox/ku57kclm.default/lock ./.mozilla/firefox/ku57kclm.default/XUL.mfasl ./.fonts.cache-1 samuli@localhost:~$
Seuraavassa etsitään hakemistosta /dev kaikki ne laitteet, joiden omistava ryhmä on cdrom. Yleensä tällaiset laitteet ovat cd- tai dvd-asemia. Virheilmoitus johtuu siitä, ettei tavallisella käyttäjällä ole oikeuksia tarkastella /dev/.static -hakemiston tiedostoja.
samuli@localhost:~$ find /dev -group cdrom /dev/hdb find: /dev/.static: Permission denied samuli@localhost:~$
samuli@localhost:~$ locate whatis /usr/bin/whatis /usr/share/man/de/man1/whatis.1.gz /usr/share/man/es/man1/whatis.1.gz /usr/share/man/it/man1/whatis.1.gz /usr/share/man/ja/man1/whatis.1.gz /usr/share/man/man1/whatis.1.gz samuli@localhost:~$
samuli@localhost:~$ whereis xmms xmms: /usr/bin/xmms /usr/lib/xmms /usr/share/xmms /usr/share/man/man1/xmms.1.gz samuli@localhost:~$
samuli@localhost:~$ whereis gmplayer gmplayer: /usr/bin/gmplayer /usr/local/bin/gmplayer /usr/share/man/man1/gmplayer.1.gz samuli@localhost:~$ which gmplayer /usr/local/bin/gmplayer samuli@localhost:~$
Komento du on tarkoitettu hakemistojen levynkäytön analysointiin. Sitä käyttämällä voidaan tarkistaa esimerkiksi paljonko tilaa hakemistot vievät. Tavallisesti komentoa käytetään esimerkiksi vivun -m kanssa:
root@localhost:/var/cache/apt# ls apt-file archives pkgcache.bin srcpkgcache.bin root@localhost:/var/cache/apt# du -m 1 ./archives/partial 1 ./archives 32 ./apt-file 45 . root@localhost:/var/cache/apt#
Komennon avulla on myös mahdollista näyttää vain juurihakemistojen tilankäyttö, ja jättää alihakemistot luetteloimatta:
root@localhost:/# du -mcs /var /tmp /bin 251 /var 1 /tmp 4 /bin 254 yhteensä root@localhost:/#
Levynkäytön yleistilaa on on helppo seurata df-komennolla (engl. disk free). Jos käyttöjärjestelmä alkaa käyttäytyä omituisesti, on usein syynä levytilan loppuminen. Asia on kuitenkin helppo tarkistaa, kuten alta on nähtävissä:
root@localhost:~# df -m Tiedostojärjestelmä 1M-lohkot Käytetty Vapaana Käy% Liitospiste /dev/hda4 8924 6605 1866 78% / tmpfs 126 0 126 0% /lib/init/rw udev 10 1 10 1% /dev tmpfs 126 1 126 1% /dev/shm /dev/hda1 21 3 18 11% /boot root@localhost:~#
Erilaisten verkkolevyjen tilankäyttö ei välttämättä näy df:n tulosteessa oikein.
Komento tree on kätevä hakemistojen rakenteiden visualisoinnissa, mihin se onkin tarkoitettu:
root@localhost:/tmp# ls
gconfd-samuli hakemisto orbit-samuli ssh-nqerxL3641 ssh-oqerxL3641
root@localhost:/tmp# tree hakemisto
hakemisto
|-- alihakemisto_1
| |-- tiedosto_1.txt
| `-- tiedosto_2.txt
|-- alihakemisto_2
| `-- tiedosto_3.txt
`-- alihakemisto_3
|-- tiedosto_4.txt
`-- tiedosto_5.txt
3 directories, 5 files
root@localhost:/tmp#
localhost:~# ls -l /media/cdrom0 totale 0 localhost:~# mount /media/cdrom0 localhost:~# ls -l /media/cdrom0 totale 72 dr-xr-xr-x 2 root root 4096 2005-12-22 14:48 Varmuuskopioita dr-xr-xr-x 2 root root 2048 2005-12-22 14:48 Omia tiedostoja dr-xr-xr-x 2 root root 2048 2005-12-22 14:48 Koulutyöt
localhost:~# ls -l /media/cdrom0 totale 72 dr-xr-xr-x 2 root root 4096 2005-12-22 14:48 Varmuuskopioita dr-xr-xr-x 2 root root 2048 2005-12-22 14:48 Omia tiedostoja dr-xr-xr-x 2 root root 2048 2005-12-22 14:48 Koulutyöt localhost:~# umount /media/cdrom0 localhost:~# ls -l /media/cdrom0 totale 0
samuli@localhost:~$ vi uusi.txt < painettiin vi-editorissa Ctrl-Z > [1]+ Stopped vi uusi.txt samuli@localhost:~$ sleep 1000 < painettiin Ctrl-Z > [2]+ Stopped sleep 1000 samuli@localhost:~$ jobs [1]- Stopped vi uusi.txt [2]+ Stopped sleep 1000 samuli@localhost:~$ fg %1 vi uusi.txt < painettiin vi-editorissa jälleen Ctrl-Z > [1]+ Stopped vi uusi.txt samuli@localhost:~$ kill %2 samuli@localhost:~$ jobs [1]+ Stopped vi uusi.txt [2]- Terminated sleep 1000 samuli@localhost:~$ kill %1 samuli@localhost:~$ jobs [1]+ Terminated vi uusi.txt samuli@localhost:~$ jobs samuli@localhost:~$ samuli@localhost:~$ vi toinen.txt & [1] 17754 samuli@localhost:~$ jobs [1]+ Stopped vi toinen.txt samuli@localhost:~$
samuli@localhost:~$ ps ux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND samuli 17046 0.0 0.6 4628 1788 tty1 S+ 12:12 0:00 -bash samuli 17849 0.0 0.4 6656 1124 ? Ss 12:55 0:00 /usr/lib/WindowMaker/ WindowMaker samuli 17930 0.0 0.3 3128 944 ? Ss 12:55 0:00 /usr/bin/ssh-agent /usr/bin/ssh-agent /usr/bin/wmaker samuli 17931 0.0 0.3 3124 940 ? Ss 12:55 0:00 /usr/bin/ssh-agent /usr/bin/wmaker samuli 17932 0.2 1.8 8428 4812 ? S 12:55 0:01 /usr/lib/WindowMaker/ WindowMaker --for-real samuli 17938 0.0 0.4 2660 1136 ? S 12:55 0:00 wmbattery samuli 17939 0.0 0.4 2656 1120 ? R 12:55 0:00 wmcpuload samuli 17940 0.0 0.4 2884 1280 ? S 12:55 0:00 wmCalClock samuli 17941 0.0 0.6 3612 1600 ? S 12:55 0:00 wmmixer -w samuli 17942 0.0 0.8 5108 2272 ? S 12:55 0:00 xscreensaver samuli 17944 6.5 5.9 24220 15160 ? Ss 12:55 0:28 bluefish samuli 17946 0.0 1.4 7012 3804 ? S 12:55 0:00 /usr/lib/libgconf2-4/ gconfd-2 13 samuli 17947 1.0 9.2 72168 23600 ? Ssl 12:55 0:04 /usr/lib/mozilla-firefox/ firefox-bin -a firefox samuli 17975 3.3 4.0 27940 10356 ? Rsl 13:02 0:00 gnome-terminal samuli 17977 1.3 1.1 6900 2876 ? Ss 13:02 0:00 /usr/lib/bonobo-activation/ bonobo-activation-server --ac-act samuli 17978 0.0 0.2 2336 684 ? S 13:02 0:00 gnome-pty-helper samuli 17979 0.8 0.8 5128 2056 pts/0 Ss 13:02 0:00 bash samuli 17984 0.0 0.4 4332 1060 pts/0 R+ 13:02 0:00 ps ux samuli@localhost:~$
samuli@localhost:~$ lsof /dev/dvd lsof: WARNING: can't stat() ext3 file system /dev/.static/dev Output information may be incomplete. COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME tccat 30724 samuli 3r BLK 22,64 3759 /dev/hdd tccat 30731 samuli 3r BLK 22,64 3759 /dev/hdd samuli@localhost:~$
samuli@localhost:~$ ps ux|grep gnome samuli 17975 0.0 4.0 28072 10488 ? Rsl 13:02 0:02 gnome-terminal samuli 17978 0.0 0.2 2336 684 ? S 13:02 0:00 gnome-pty-helper samuli 18091 0.0 0.3 3528 808 pts/0 S+ 18:54 0:00 grep gnome samuli@localhost:~$ grep dhcp /etc/network/* /etc/network/interfaces:iface eth0 inet dhcp /etc/network/interfaces:iface eth1 inet dhcp /etc/network/interfaces.pre-etherconf:iface eth0 inet dhcp samuli@localhost:~$
samuli@localhost:/etc/hibernate$ date ke joulukuun 28. 14:38:58 EET 2005 samuli@localhost:/etc/hibernate$ date|tr ":" "." ke joulukuun 28. 14.39.02 EET 2005 samuli@localhost:/etc/hibernate$ date|tr -d " " kejoulukuun28.14:39:06EET2005 samuli@localhost:/etc/hibernate$
samuli@localhost:/etc/hibernate$ ls -l total 20 -rw-r--r-- 1 root root 1448 2005-07-28 10:17 blacklisted-modules -rw-r--r-- 1 root root 4926 2005-12-27 12:17 hibernate.conf -rw-r--r-- 1 root root 2986 2005-07-13 17:08 ram.conf drwxr-xr-x 2 root root 4096 2005-07-28 10:17 scriptlets.d samuli@localhost:/etc/hibernate$ ls -l|cut -d " " -f 7 2005-07-28 2005-12-27 2005-07-13 2005-07-28 samuli@localhost:/etc/hibernate$ cd ~ samuli@localhost:~$ date ti joulukuun 28. 21:08:29 EET 2005 samuli@localhost:~$ date|cut -d " " -f 1,2,3,6 ti joulukuun 28. 2005 samuli@localhost:~$
Sed eli "StreamEDitor" on melko monimutkainen, mutta voimallinen komento tekstisyötteitä muokattaessa. Erityisen hyödyllinen se on silloin, kun yksinkertaisemmat komennot eivät riitä. Esimerkiksi tiedostojen muuttamisessa muodosta toiseen sed on erinomainen.
Alla olevassa esimerkissä sed korvaa ensimmäisen, toisen tai kolmannen numero kakkosen syötteestä, riippuen viimeisestä argumentista.
samuli@localhost:/tmp$ cat testi Teksti 123 123 123 123 123 samuli@localhost:/tmp$ cat testi|sed s/"2"/""/1 Teksti 13 123 123 123 123 samuli@localhost:/tmp$ cat testi|sed s/"2"/""/2 Teksti 123 13 123 123 123 samuli@localhost:/tmp$ cat testi|sed s/"2"/""/3 Teksti 123 123 13 123 123
Seuraavassa esimerkissä korvataan tekstistä kaikki ne kohdat (/g), joissa lukee Pelin_nimi tekstillä Ultimate Warfighter, eli pelin oikealla nimellä.
samuli@localhost:/tmp$ cat testi Pelin_nimi on ylhäältä kuvattu räiskintä, jossa vaikeustaso on säädetty riittävän korkealle. Pelin_nimi tarjoaa kuitenkin aloittelijoille harjoittelutason, jolla voi valmistautua todelliseen Pelin_nimi koitokseen. samuli@localhost:/tmp$ cat testi|sed s/"Pelin_nimi"/"Ultimate Warfighter"/g Ultimate Warfighter on ylhäältä kuvattu räiskintä, jossa vaikeustaso on säädetty riittävän korkealle. Ultimate Warfighter tarjoaa kuitenkin aloittelijoille harjoittelutason, jolla voi valmistautua todelliseen Ultimate Warfighter koitokseen.
Sed on sen verran monimutkainen ohjelma, että sen kunnollinen opettelu vaatii runsaasti aikaa. Man-sivuilta löytyy tietoa vain rajoitetusti, sillä varsinaiset ohjeet ovat info-muodossa. Ylläolevat esimerkit ovat hyvin yksinkertaisia, ja säännöllisiin lausekkeisiin (regular expressions) yhdistettynä sed on erittäin voimallinen työkalu. Asiaan perehtymättömille sedin käyttö ja argumentit voivat kuitenkin vaikuttaa täysin käsittämättömiltä.
localhost:/home/samuli# useradd pera localhost:/home/samuli# cat /etc/passwd|grep pera pera:x:1002:100::/home/pera: localhost:/home/samuli# ls -l /home|grep pera localhost:/home/samuli#Komennolla userdel voidaan poistaa käyttäjä järjestelmästä järjestelmästä. Komento ei poista käyttäjän kotihakemistoa, käytetä syntaksia userdel -r. Kotihakemisto on tietenkin helppo poistaa myöhemminkin komennolla rm -r.
localhost:/home/samuli# userdel pera localhost:/home/samuli# cat /etc/passwd|grep pera localhost:/home/samuli# ls -l /home|grep pera drwxr-xr-x 2 pera pera 4096 2006-01-10 14:38 peraKomento adduser on komennosta useradd poiketen interaktiivinen. Se soveltuukin paremmin normaaliin käyttäjien lisäämiseen. Komento luo käyttäjälle kotihakemiston, kysyy käyttäjän salasanaa ja kaikenlaisia muita tietoja.
localhost:/home/samuli# adduser
Enter a username to add: tomppa
Adding user `tomppa'...
Adding new group `tomppa' (1002).
Adding new user `tomppa' (1002) with group `tomppa'.
Creating home directory `/home/tomppa'.
Copying files from `/etc/skel'
Enter new UNIX password: salasana
Retype new UNIX password: salasana
passwd: password updated successfully
Muutetaan käyttäjän tomppa tietoja
Kirjoita uusi arvo, tai paina ENTER käyttääksesi oletusarvoa
Koko nimi []: Tomppa
Huoneen numero []: 1
Työpuhelin []: 0500-0500
Kotipuhelin []: 0500-0500
Muuta []: Eipä tässä
Is the information correct? [y/N] y
localhost:/home/samuli# cat /etc/passwd|grep tomppa
tomppa:x:1002:1002:Tomppa,1,0500-0500,0500-0500,Ei ole:/home/tomppa:/bin/bash
localhost:/home/samuli# ls -l /home|grep tomppa
drwxr-xr-x 2 tomppa tomppa 4096 2006-01-10 14:42 tomppa
localhost:/home/samuli# ls -la /home/tomppa
yhteensä 16
drwxr-xr-x 2 tomppa tomppa 4096 2006-01-10 14:42 .
drwxrwsr-x 6 root staff 4096 2006-01-10 14:42 ..
-rw-r--r-- 1 tomppa tomppa 567 2006-01-10 14:42 .bash_profile
-rw-r--r-- 1 tomppa tomppa 1834 2006-01-10 14:42 .bashrc
localhost:/home/samuli#
Komento deluser vastaa pääosin komentoa userdel, sillä sekin poistaa käyttäjän järjestelmästä. Käyttäjän saa pois kotihakemistoineen kaikkineen komennolla deluser --remove-home.
samuli@localhost:~$ su toro Password: toro@localhost:/home/samuli$ passwd Changing password for toro (current) UNIX password: nahka Enter new UNIX password: nahkio Retype new UNIX password: nahkio Bad: new and old password are too similar Enter new UNIX password: tapetti Retype new UNIX password: tapetti Bad: new password is too simple Enter new UNIX password: ertFAA20 Retype new UNIX password: ertFAA20 passwd: password updated successfully toro@localhost:/home/samuli$
localhost:/home/samuli# groups root localhost:/home/samuli# groups samuli samuli : samuli adm lp dialout cdrom floppy audio src video plugdev users lpadmin camera scanner fuse localhost:/home/samuli#
localhost:/home/samuli# addgroup Enter a groupname to add: apurit Adding group `apurit' (1002)... Done. localhost:/home/samuli# cat /etc/group|grep apurit apurit:x:1002: localhost:/home/samuli# delgroup apurit Removing group `apurit'... done. localhost:/home/samuli# cat /etc/group|grep apurit localhost:/home/samuli# groupadd uudet localhost:/home/samuli# cat /etc/group|grep uudet uudet:x:1002: localhost:/home/samuli# groupdel uudet localhost:/home/samuli# cat /etc/group|grep uudet localhost:/home/samuli#
samuli@LoSan:~/tiedostot$ ls -l total 12 -rw-r--r-- 1 samuli samuli 686 Jan 18 10:46 kotihakemisto.txt -rw-r--r-- 1 samuli samuli 241 Jan 18 10:46 juurihakemisto.txt -rw-r--r-- 1 samuli samuli 0 Jan 18 10:46 uusi drwxr-xr-x 2 samuli samuli 4096 Jan 18 10:47 uusi_hakemisto samuli@LoSan:~/tiedostot$ tar -cf arkisto.tar * samuli@LoSan:~/tiedostot$ ls -l total 24 -rw-r--r-- 1 samuli samuli 10240 Jan 18 10:47 arkisto.tar -rw-r--r-- 1 samuli samuli 686 Jan 18 10:46 kotihakemisto.txt -rw-r--r-- 1 samuli samuli 241 Jan 18 10:46 juurihakemisto.txt -rw-r--r-- 1 samuli samuli 0 Jan 18 10:46 uusi drwxr-xr-x 2 samuli samuli 4096 Jan 18 10:47 uusi_hakemisto samuli@LoSan:~/tiedostot$Arkistoja luotaessa on usein tiivistää ne samantien esim. gzip tai bzip2 -ohjelmilla. Tiivistyksen voi tehdä käsipelillä arkiston luonnin jälkeen, mutta helpommalla pääsee lisämäällä tarin paremetreihin -j (bzip2) tai -z (gzip). Samoja parametreja käytetään haluttiinpa luoda tai purkaa tiivistetty arkisto, tai katsoa tiivistetyn arkiston sisälle.
samuli@LoSan:~/downloads$ ls -l total 11872 drwxr-xr-x 2 samuli samuli 4096 Apr 12 2005 essential-20050412 -rw-r--r-- 1 samuli samuli 9349060 Jan 18 11:02 essential-20050412.tar.bz2 drwxr-xr-x 4 samuli samuli 4096 Dec 3 13:02 xmoto-0.1.10 -rw-r--r-- 1 samuli samuli 2776333 Jan 18 10:55 xmoto-0.1.10-src.tar.gz samuli@LoSan:~/downloads$ tar -jcf xmoto-uusi.tar.bz2 xmoto-0.1.10 samuli@LoSan:~/downloads$ ls -l total 14528 drwxr-xr-x 2 samuli samuli 4096 Apr 12 2005 essential-20050412 -rw-r--r-- 1 samuli samuli 9349060 Jan 18 11:02 essential-20050412.tar.bz2 drwxr-xr-x 4 samuli samuli 4096 Dec 3 13:02 xmoto-0.1.10 -rw-r--r-- 1 samuli samuli 2776333 Jan 18 10:55 xmoto-0.1.10-src.tar.gz -rw-r--r-- 1 samuli samuli 2713783 Jan 18 11:10 xmoto-uusi.tar.bz2 samuli@LoSan:~/downloads$Tar-arkiston sisältämät tiedostot voidaan tarkistaa komennolla tar -tf. Tiedostojen tiedot saadaan esille lisäämällä parametreihin -v.
samuli@LoSan:~/tiedostot$ tar -tvf arkisto.tar -rw-r--r-- samuli/samuli 686 2006-01-18 10:46:16 kotihakemisto.txt -rw-r--r-- samuli/samuli 241 2006-01-18 10:46:40 juurihakemisto.txt -rw-r--r-- samuli/samuli 0 2006-01-18 10:46:59 uusi drwxr-xr-x samuli/samuli 0 2006-01-18 10:47:21 uusi_hakemisto/ samuli@LoSan:~/tiedostot$Tavallinen kotikäyttäjä törmää tar-komentoon erityisesti silloin, kun hänen pitää purkaa esimerkiksi ohjelman lähdekoodipaketti. Gzip-tiivistetty tar-tiedosto puretaan komennolla tar -zxf:
samuli@LoSan:~/downloads$ ls -l total 2716 -rw-r--r-- 1 samuli samuli 2776333 Jan 18 10:55 xmoto-0.1.10-src.tar.gz samuli@LoSan:~/downloads$ tar -zxf xmoto-0.1.10-src.tar.gz samuli@LoSan:~/downloads$ ls -l total 2720 drwxr-xr-x 4 samuli samuli 4096 Dec 3 13:02 xmoto-0.1.10 -rw-r--r-- 1 samuli samuli 2776333 Jan 18 10:55 xmoto-0.1.10-src.tar.gz samuli@LoSan:~/downloads$ cd xmoto-0.1.10 samuli@LoSan:~/downloads/xmoto-0.1.10$ ls AUTHORS ChangeLog Makefile.am NEWS aclocal.m4 configure depcomp missing COPYING INSTALL Makefile.in README bin configure.in install-sh mkinstalldirs src samuli@LoSan:~/downloads/xmoto-0.1.10$Bzip2-tiivistetty tar-arkisto puretaan komennolla tar -jxf:
samuli@LoSan:~/downloads$ cp ../essential-20050412.tar.bz2 . samuli@LoSan:~/downloads$ tar -jxf essential-20050412.tar.bz2 samuli@LoSan:~/downloads$ ls -l total 11872 drwxr-xr-x 2 samuli samuli 4096 Apr 12 2005 essential-20050412 -rw-r--r-- 1 samuli samuli 9349060 Jan 18 11:02 essential-20050412.tar.bz2 drwxr-xr-x 4 samuli samuli 4096 Dec 3 13:02 xmoto-0.1.10 -rw-r--r-- 1 samuli samuli 2776333 Jan 18 11:00 xmoto-0.1.10-src.tar.gz samuli@LoSan:~/downloads$
samuli@LoSan:/tmp$ ls -l *.txt -rwxr-x--- 1 samuli samuli 282 Jun 23 2005 README.txt samuli@LoSan:/tmp$ gzip README.txt samuli@LoSan:/tmp$ ls -l *txt* -rwxr-x--- 1 samuli samuli 183 Jun 23 2005 README.txt.gzTiedostot puretaan komennoilla "gunzip tiedosto" tai "bunzip2 tiedosto":
samuli@LoSan:/tmp$ ls -l *txt* -rwxr-x--- 1 samuli samuli 183 Jun 23 2005 README.txt.gz samuli@LoSan:/tmp$ gunzip README.txt.gz samuli@LoSan:/tmp$ ls -l *txt* -rwxr-x--- 1 samuli samuli 282 Jun 23 2005 README.txt samuli@LoSan:/tmp$
samuli@LoSan:/tmp$ ls -l|grep uusi drwxr-xr-x 3 samuli samuli 4096 Jan 18 12:44 uusihakemisto samuli@LoSan:/tmp$ zip -r uusi.zip uusihakemisto adding: uusihakemisto/ (stored 0%) adding: uusihakemisto/tiedosto1.txt (deflated 9%) adding: uusihakemisto/tiedosto2.txt (deflated 11%) adding: uusihakemisto/muut/ (stored 0%) adding: uusihakemisto/muut/teksti.txt (deflated 10%) samuli@LoSan:/tmp$ ls -l|grep uusi drwxr-xr-x 3 samuli samuli 4096 Jan 18 12:44 uusihakemisto -rw-r--r-- 1 samuli samuli 811 Jan 18 12:45 uusi.zip samuli@LoSan:/tmp$ rm -r uusihakemisto samuli@LoSan:/tmp$ unzip uusi.zip Archive: uusi.zip creating: uusihakemisto/ inflating: uusihakemisto/tiedosto1.txt inflating: uusihakemisto/tiedosto2.txt creating: uusihakemisto/muut/ inflating: uusihakemisto/muut/teksti.txt samuli@LoSan:/tmp$ ls -l|grep uusi drwxr-xr-x 3 samuli samuli 4096 Jan 18 12:44 uusihakemisto -rw-r--r-- 1 samuli samuli 811 Jan 18 12:45 uusi.zip samuli@LoSan:/tmp$
Ohjelmat fdisk ja cfdisk on tarkoitettu kovalevyosioiden luomiseen. Niitä ei voi käyttää käytössä olevien kovalevyosioiden pienentämiseen. Fdiskin man-sivun mukaan on suositeltavinta käyttää cfdisk-ohjelmaa jos mahdollista, sillä se on fdisk-ohjelmaa luotettavampi. Itselläni ei ole ollut kummankaan kanssa ongelmia, mutta cfdisk on huomattavasti helppokäyttöisempi ja selkeämpi. Molemmat ohjelmat ymmärtävät kymmeniä erilaisia kovalevyosiotyyppejä (engl. partition type): myös Windowsin FAT12/16/32 sekä NTFS ovat tuettuja.
On hyvä huomioida, että sekä fdisk että cfdisk täytyy käynnistää pääkäyttäjän oikeuksin. Fdisk vaatii lisäksi parametrikseen kovalevyosion laitetiedoston nimen. Esimerkiksi ensimmäisen IDE-väylän ensimmäinen laite (nk. master) osioitaisiin komennolla "fdisk /dev/hda".
Ohjelmaa fsck käytetään tiedostojärjestelmien virheiden tarkistamiseen ja niiden korjaamiseen. Tiedostojärjestelmiin syntyy virheitä erityisesti silloin, kun tietokone sammuu yllättäen esimerkiksi sähkökatkoksen takia. Linux ajaa fsck -ohjelman itse aika ajoin, joten sen ajamiseen käsin tulee harvemmin tarvetta. Fsck tukee lukuisia tiedostojärjestelmiä ja sillä voidaan tiedostojärjestelmän virheiden lisäksi tarkistaa, onko kovalevyllä ns. vaurioituneita lohkoja (engl. bad blocks).
HUOM: liitettyjen tiedostojärjestelmien tarkistaminen on erittäin vaarallista, joten järjestelmän toiminnan kannalta oleelliset osiot on helpointa tarkistaa käynnistämällä Linux yhden käyttäjän tilaan (engl. single user mode). Vaihtoehtoisesti tarkistus voidaan tehdä erillisestä Linux-ympäristöstä (esim. Knoppix LiveCD/DVD) käsin, jolloin kovalevyosiot voidaan tarkistaa turvallisesti. Sellaiset osiot, jotka sisältävät ainoastaan datatiedostoja, voi yksinkertaisesti irroittaa umount -komennolla järjestelmän ollessa käynnissä.
Erityisesti lähiverkon toiminnan testaamisessa ping on kätevä työkalu. Sillä voidaan tarkistaa, onko verkkoyhteys kahden tietokoneen välillä kunnossa. On kuitenkin syytä huomata, että pakettisuotimet (palomuurit) saattavat estää pingin normaalin toiminnan. Ping ei myöskään toimi, jos testattavan tietokoneen verkkoasetukset ovat pielessä. Alla yksinkertaisin mahdollinen esimerkki:
samuli@localhost:~$ ping www.google.fi PING www.l.google.com (64.233.183.99) 56(84) bytes of data. 64 bytes from nf-in-f99.google.com (64.233.183.99): icmp_seq=1 ttl=240 time=34.5 ms 64 bytes from nf-in-f99.google.com (64.233.183.99): icmp_seq=2 ttl=240 time=38.2 ms 64 bytes from nf-in-f99.google.com (64.233.183.99): icmp_seq=3 ttl=240 time=33.5 ms 64 bytes from nf-in-f99.google.com (64.233.183.99): icmp_seq=4 ttl=240 time=34.1 ms --- www.l.google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3000ms rtt min/avg/max/mdev = 33.510/35.122/38.262/1.865 ms samuli@localhost:~$
Kuten yltä näkyy, Googlen palvelimelta saatiin vastaus. Se on siis ainakin jotakuinkin toimintakunnossa. On kuitenkin syytä huomata, etteivät palvelimen tarjoamat palvelut (esim. ssh, ftp) ole automaattisesti kunnossa, vaikka palvelin pingiin vastaisikin. Pingillä voidaan kartoittaa myös useiden tietokoneiden tila yhtäaikaisesti käyttämällä yleislähetysvipua -b (engl. "broadcast"), siis esimerkiksi "ping -b 192.168.0.255". Kaikkien kuulolla olevien, oikein konfiguroitujen tietokoneiden tulisi kertoa olemassaolostaan.
Netstat on yksi tärkeimmistä verkkotyökaluista. Itse käytän sitä lähinnä tarkistaessani mitä palveluita käyttöjärjestelmä tarjoaa verkon kautta ulkopuolisille, kuten alla. HUOM: Ilman grep-komennolle putkittamista tulosteeseen olisi sisällytetty myös käytössä olevat UNIX-pistokkeet, ulkopuolisiin palveluihin muodostetut yhteydet yms.
samuli@localhost:~$ netstat -a|grep tcp|grep LISTEN tcp 0 0 localhost:sunrpc *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 localhost:smtp *:* LISTEN tcp6 0 0 *:ssh *:* LISTEN samuli@localhost:~$
Ylläolevasta esimerkistä kannattaa huomioida se, että kaikki palvelut SSH-palvelinta lukuunottamatta vastaanottavat pyyntöjä ainoastaan tältä tietokoneelta (localhost). SSH-palvelin vastaa mistä tahansa tuleviin pyyntöihin, minkä näkee merkistä *. Ne palvelut, joita ei tarvitse jakaa ulospäin, ei myöskään kannata jakaa ulospäin.
Myös tietokoneeseen muodostetut verkkoyhteydet voi tarkistaa netstat-komennolla:
samuli@localhost:~$ netstat -a|grep ESTABLISHED udp 0 0 localhost:32770 localhost:ntp ESTABLISHED samuli@localhost:~$
Ylläolevassa esimerkissä tietokone ei ole kiinni missään verkossa, joten ainoa verkkoyhteys on muodostettu paikalliseen (localhost) NTP-palvelimeen, joka pitää koneen kellon ajan tasalla.
Komento fuser on kätevä etsittäessä prosessia, joka pitää jotakin tiedostoa tai hakemistoa lukittuna. Se on kätevä myös verkkotyökaluna, sillä sitä ja netstat-komentoa käyttämällä on helppo löytyy ne prosessit, jotka esimerkiksi kuuntelevat jotakin porttia:
root@localhost:~# fuser -v 111/tcp
USER PID ACCESS COMMAND
111/tcp: daemon 2213 F.... portmap
root@localhost:~#
HUOM. komento on suoritettava pääkäyttäjänä tai se ei anna mitään tulostetta. Lisätietoja saa komennon man-sivulta.
Komennolla lsof voidaan näyttää paitsi avoimia tiedostoja, myös se, mikä prosessi kuuntelee jotakin tiettyä porttia. Allaolevassa esimerkissä tarkistetaan kuka vastaa pyyntöihin portissa 22:
root@localhost:~# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME sshd 2939 root 3u IPv6 7737 TCP *:ssh (LISTEN) root@localhost:~#
HUOM. komento on suoritettava pääkäyttäjänä tai se ei anna oikeanlaista tulostetta. Lisätietoja saa komennon man-sivulta.
Verkko-ongelmien selvittäminen on hankalaa, jos itse verkkoliikenteeseen ei pääse käsiksi. Avuksi tulee tcpdump, joka on erittäin tehokas työkalu verkkoliikenteen analysointiin. Sen avulla on mahdollista seurata mitä paketteja verkossa kulkee. Paketit voidaan kaapata joko kokonaisuudessaan tai niistä voidaan lukea vain otsaketiedot. Yksinkertaisissa verkko-ongelmissa pelkkien otsaketietojen tutkiminen saattaa riittää ongelman ratkaisuun. Tcpdump on siinä määrin monimutkainen ohjelma, että suuri osa sen potentiaalista jää hyödyntämättä, ellei käy sen man-sivua perinpohjaisesti läpi. Jos käytössä on graafinen ympäristö, voi tcpdumpin sijaan kokeilla esimerkiksi graafista wireshark-ohjelmaa.
Yksinkertaisin tcpdumpin käyttötapa on kaapata kaikkien tiettyyn verkkoliitäntään saapuvien pakettien otsakkeet. Ensin käynnistetään tcpdump:
root@localhost:~# tcpdump -i eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
Seuraavaksi kokeillaan, vastaako palvelin www.google.fi pingiin:
samuli@localhost:~$ ping www.google.fi PING www.l.google.com (64.233.183.99) 56(84) bytes of data. 64 bytes from nf-in-f99.google.com (64.233.183.99): icmp_seq=1 ttl=240 time=34.5 ms 64 bytes from nf-in-f99.google.com (64.233.183.99): icmp_seq=2 ttl=240 time=38.2 ms 64 bytes from nf-in-f99.google.com (64.233.183.99): icmp_seq=3 ttl=240 time=33.5 ms 64 bytes from nf-in-f99.google.com (64.233.183.99): icmp_seq=4 ttl=240 time=34.1 ms --- www.l.google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3000ms rtt min/avg/max/mdev = 33.510/35.122/38.262/1.865 ms samuli@localhost:~$
Lopuksi tarkastetaan, mitä tcpdump sai kaapattua:
root@localhost:~# tcpdump -i eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 13:14:52.394874 IP 192.168.0.150.1032 > local.gateway.domain: 42715+ A? www.google.fi. (31) 13:14:52.395808 IP 192.168.0.150.1033 > local.gateway.domain: 41896+ PTR? 254.0.168.192.in-addr.arpa. (44) 13:14:52.396602 IP local.gateway.domain > 192.168.0.150.1032: 42715 6/6/6 CNAME[|domain] 13:14:52.402843 IP local.gateway.domain > 192.168.0.150.1033: 41896*- 1/0/0 (97) 13:14:52.404498 IP 192.168.0.150.1034 > local.gateway.domain: 51540+ PTR? 150.0.168.192.in-addr.arpa. (44) 13:14:52.404643 IP 192.168.0.150 > nf-in-f99.google.com: ICMP echo request, id 46436, seq 1, length 64 13:14:52.417486 IP local.gateway.domain > 192.168.0.150.1034: 51540 NXDomain 0/1/0 (115) 13:14:52.417995 IP 192.168.0.150.1034 > local.gateway.domain: 53535+ PTR? 99.183.233.64.in-addr.arpa. (44) 13:14:52.419675 IP local.gateway.domain > 192.168.0.150.1034: 53535 1/4/4 (214) 13:14:52.439197 IP nf-in-f99.google.com > 192.168.0.150: ICMP echo reply, id 46436, seq 1, length 64 13:14:52.439961 IP 192.168.0.150.1034 > local.gateway.domain: 53401+ PTR? 99.183.233.64.in-addr.arpa. (44) 13:14:52.441784 IP local.gateway.domain > 192.168.0.150.1034: 53401 1/4/4 (214) 13:14:53.405169 IP 192.168.0.150 > nf-in-f99.google.com: ICMP echo request, id 46436, seq 2, length 64 13:14:53.443398 IP nf-in-f99.google.com > 192.168.0.150: ICMP echo reply, id 46436, seq 2, length 64 13:14:53.443737 IP 192.168.0.150.1034 > local.gateway.domain: 27366+ PTR? 99.183.233.64.in-addr.arpa. (44) 13:14:53.445418 IP local.gateway.domain > 192.168.0.150.1034: 27366 1/4/4 (214) 13:14:54.405017 IP 192.168.0.150 > nf-in-f99.google.com: ICMP echo request, id 46436, seq 3, length 64 13:14:54.438494 IP nf-in-f99.google.com > 192.168.0.150: ICMP echo reply, id 46436, seq 3, length 64 13:14:54.438832 IP 192.168.0.150.1034 > local.gateway.domain: 21235+ PTR? 99.183.233.64.in-addr.arpa. (44) 13:14:54.445969 IP local.gateway.domain > 192.168.0.150.1034: 21235 1/4/4 (214) 13:14:55.404864 IP 192.168.0.150 > nf-in-f99.google.com: ICMP echo request, id 46436, seq 4, length 64 13:14:55.438976 IP nf-in-f99.google.com > 192.168.0.150: ICMP echo reply, id 46436, seq 4, length 64 13:14:55.439320 IP 192.168.0.150.1034 > local.gateway.domain: 62166+ PTR? 99.183.233.64.in-addr.arpa. (44) 13:14:55.441131 IP local.gateway.domain > 192.168.0.150.1034: 62166 1/4/4 (214)
Ylläolevassa esimerkissä on paljon hälyä, joka johtuu NAT-osoitteenmuunnoksen tekevästä ADSL-modeemista. Jos verkossa on paljon taustamelua (=liikennettä), on usein järkevä kaapata vain osa paketeista. Rajaustapoja on useita, mutta helpoimmasta päästä ovat src, dst ja host, joilla määritetään mistä osoitteista tulevat paketit tai mihin osoitteisiin lähtevät paketit hyväksytään. Jos olisi haluttu nähdä vain osoitteesta www.google.fi tulevat paketit, olisi voitu käyttää seuraavaa komentoa:
root@localhost:~# tcpdump -i eth0 src www.google.fi tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 13:20:21.055218 IP nf-in-f99.google.com > 192.168.0.150: ICMP echo reply, id 24165, seq 1, length 64 13:20:22.054512 IP nf-in-f99.google.com > 192.168.0.150: ICMP echo reply, id 24165, seq 2, length 64 13:20:23.049614 IP nf-in-f99.google.com > 192.168.0.150: ICMP echo reply, id 24165, seq 3, length 64
Avainsanan host jälkeen tuleva osoite täsmää sekä paketin lähettäjään (src) että paketin vastaanottajana (dst).