Osnovne komande i dijagnostika Linux sistema

Sve komande se izvršavaju iz komandne linije, bilo da je to terminal po grafičkim okruženjem ili tekstualna konzola. Iz grafičkog okruženja terminal se može dobiti programom Konsole koji se nalazi u meniju System.

Kada se ulogujemo u komandnu liniju, nalazimo se u programu koji se zove shell. Osnovni shell koji se pokreće na većini modernih Linux sistema je BASH. Njegov prompt izgleda ovako:

milanb@kiklop:~$

milanb je username, kiklop je hostname, a znak $ označava da se radi o običnom korisniku. Administratorski nalog se zove root, i u njega se možemo ulogovati preko komande su:

milanb@kiklop:~$ su -
Password:
root@kiklop:/home/milanb#

Obratite pažnju da se ništa ne pojavljuje na ekranu dok se kuca lozinka.

Sledi spisak jednostavnijih komandi i njihovo značenje:

pwd Print Working Directory prikaži u kojem direktorijumu se nalazimo
cd Change Directory promeni tekući direktorijum
ls LiSt izlistaj sadržaj tekućeg direktorijuma
ls -l -l je skraćeno od Long izlistaj detaljno (velicina fajla i privilegije)
mc Midnight Commander fajl menadžer kao Total Commander ili Norton Commander
cat conCATenate files spoji i ispiši fajlove. Npr. cat fajl.txt će ispisati fajl.txt na ekranu

Provera slobodnog prostora na disku

Provera se može izvršiti komandom df koja ispisuje zauzeće svake particije u bajtovima. Da bi dobili malo čitljiviji prikaz koristimo parametar -h. Primer:

root@kiklop:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda4             207G  181G   17G  92% /
/dev/sda2              19G  6.1G   12G  34% /mnt/sda2

Dakle, imamo 17 GB slobodno na particiji sda4, i 12 GB na particiji sda2.

Ako hoćemo da vidimo sve particije, možemo izlistati sadržaj sistemskog fajla /proc/partitions sa komandom cat:

root@kiklop:~# cat /proc/partitions
major minor  #blocks  name
   8     0  312571224 sda
   8     1    4008186 sda1
   8     2   20008957 sda2
   8     3   68364607 sda3
   8     4  220186890 sda4

Ako želimo da vidimo kako je disk tačno isparticionisan i da li ima slobodnog mesta, možemo to pomoću komande fdisk sa parametrom -l

root@kiklop:~# fdisk -l /dev/sda

Disk /dev/sda: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x33286855

Device Boot Start End Blocks Id System
/dev/sda1 1 499 4008186 82 Linux swap
/dev/sda2 500 2990 20008957+ 83 Linux
/dev/sda3 2991 11501 68364607+ 83 Linux
/dev/sda4 11502 38913 220186890 83 Linux

Provera slobodne memorije

Memorija se može proveriti na 2 načina. Prvi je komanda free, a drugi je sistemski fajl /proc/meminfo

root@kiklop:~# free
total used free shared buffers cached
Mem: 2061076 1111092 949984 0 47240 562984
-/+ buffers/cache: 500868 1560208
Swap: 4008176 0 4008176

Treba razmeti da Linux uvek koristi svu raspoloživu memoriju da kešira fajlsistem. U gornjem primeru je mašina sa 2GB RAM-a i 4GB swapa. Mašina uopšte ne koristi swap, a od ukupno 1.11 GB utrošenog RAMa, oko 562MB memorije koristi za keširanje fajlsistema. Brojka 1560208 pokazuje koliki je u stvari slobodan RAM - negde oko 1.5GB.

Aktivni procesi

Lista svih aktivnih procesa može da se dobije sa komandom ps. Sa parametrima aux dobijate detaljne informacije:

root@kiklop:~# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 772 300 ? Ss 11:22 0:01 init [4]
root 2 0.0 0.0 0 0 ? S< 11:22 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S< 11:22 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S< 11:22 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 11:22 0:00 [migration/1]
apache 2937 0.0 0.3 67020 6524 ? S 11:22 0:00 /usr/sbin/httpd -k start
root@kiklop:~# kill 2937
root@kiklop:~# kill -9 2937
bash: kill: (2937) - No such process

Kolona PID označava Process ID koji možete koristiti ako želite da neki program zaustavite, komandom kill. Na primer, komandom:

root@kiklop:~# kill 2937

bih zaustavili jedan Apache proces. Normalno je da na sistemu istovremeno radi više Apache procesa iako nema ni jednog korisnika koji radi u browseru. Razlog za to je što Apache unapred pokrene nekoliko procesa da bi opterećenje bilo manje kasnije. Kao i kod svih komandi, u slučaju da je komanda kill uspešna, nećete dobiti nikakvu poruku. Poruka se javlja samo ako komanda ne uspe.

root@kiklop:~# kill 2937
bash: kill: (2937) - No such process

U slučaju da proces i dalje radi, to znači da se potpuno zaglavio da ne može da odreguje na kill signal. Postoji način i da se takvi procesi zaustave, tako što se komandi doda parametar -9:

root@kiklop:~# kill -9 2937

U sličaju da želimo da odjednom zaustavimo sve Apache procese, možemo koristiti komandu killall, koja isto podržava parametar -9. Na primer:

root@kiklop:~# killall -9 httpd

Pregled procesa koji zauzimaju najviše resursa (procesor) se dobija naredbom top:

root@kiklop:~# top
top - 14:51:47 up 3:29, 3 users, load average: 0.00, 0.02, 0.00
Tasks: 139 total, 4 running, 135 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.2%us, 0.7%sy, 0.0%ni, 97.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2061076k total, 1131260k used, 929816k free, 48500k buffers
Swap: 4008176k total, 0k used, 4008176k free, 570768k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
25276 milanb 20 0 112m 34m 22m S 4 1.7 2:49.60 amarokapp
2924 root 20 0 372m 39m 5496 S 3 2.0 7:58.88 X
6402 milanb 20 0 30688 13m 10m R 1 0.7 0:00.74 konsole
25244 milanb 20 0 32460 15m 12m S 1 0.8 0:24.60 kded
25279 milanb 20 0 25944 10m 8856 S 1 0.5 0:00.60 klipper
25323 milanb 20 0 301m 123m 21m S 0 6.1 2:53.87 firefox-bin
1 root 20 0 772 300 260 S 0 0.0 0:01.50 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd

Lista se obnavlja jednom u sekundi. Sa tasterom q se prekida praćenje. Sa tasterom O (veliko slovo O) se može birati kriterijum za sortiranje liste.

Dijagnoza problema sa hardverom

Najkorisnija alatka je komanda dmesg koja ispisuje poruke Linux kernela.

root@kiklop:~# dmesg
Linux version 2.6.24.5-smp (root@midas) (gcc version 4.2.3) #2 SMP Wed Apr 30 13:41:38 CDT 2008
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 000000007f680000 (usable)
sda: sda1 sda2 sda3 sda4
ata3: SATA max UDMA/133 cmd 0xac00 ctl 0xa880 bmdma 0xa400 irq 18
EXT3-fs: mounted filesystem with ordered data mode.
sky2 eth0: enabling interface
sky2 eth0: Link is up at 100 Mbps, full duplex, flow control both

Kada dijagnostikujemo neki problem, obično gledamo poslednjih 10-tak redova koje komanda izbaci i tu tražimo probleme. Kada je problem sa hard diskom, vide se razni I/O errori, ako je problem sa SATA kontrolerom vide se "drive not responding" ili slične poruke, a kada je problem sa mrežnom karticom (npr. kabl koji nije dobro utaknut pa ispada i sporadično gubi kontakt) pominje se eth0 ili eth1 interfejs.

Komanda dmesg je korisna i da se detekuju uređaji. Zbog velikog broja poruka koje prikazuje, poželjno ih je filtrirati komandom grep. Na primer, ako želimo da vidimo neke podatke o mrežnoj (ethernet) kartici, možemo zadati sledeću komandu:

root@kiklop:~# dmesg | grep -i eth
sky2 eth0: addr 00:1f:c6:89:7b:cf
sky2 eth0: enabling interface
ADDRCONF(NETDEV_UP): eth0: link is not ready
sky2 eth0: Link is up at 100 Mbps, full duplex, flow control both
ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
eth0: no IPv6 routers present

Parametar -i znači da pretraga bude case-insensitive, tj. da prihvata poruke bez obzira da li sadrže tekst ETH, Eth ili eth.

U slučaju kada se mrežna kartica pojavljuje kao eth1, potrebno je u fajlu /etc/rc.d/rc.inet1.conf zameniti prve dve sekcije, tj. iskonfigurisati da se koristi eth1. Evo primera kako izgleda izmenjen fajl za mašinu koja treba da ima IP adresu 192.168.0.2:

# Config information for eth0:
IPADDR[0]=""
NETMASK[0]=""
USE_DHCP[0]=""
DHCP_HOSTNAME[0]=""

# Config information for eth1:
IPADDR[1]="192.168.0.2"
NETMASK[1]="255.255.255.0"
USE_DHCP[1]=""
DHCP_HOSTNAME[1]=""

Primer kako izgleda rezultat komande dmesg kada postoji hardverski problem sa hard diskom:

[30951.632489] Buffer I/O error on device hdc, logical block 2077670
[30951.693072] hdc: command error: status=0x51 { DriveReady SeekComplete Error }
[30951.693083] hdc: command error: error=0x54 { AbortedCommand LastFailedSense=0x05 }

Skeniranje diska nakon nestanka struje

Nekada može da se desi da nakon nestanka struje sistem neće da se podigne i ispiše grešku:

Give root password for maintenance (or type Control-D to continue):

U tom slučaju treba ukucati root lozinku. Napomena: prilikom kucanja se ništa ne vidi na ekranu. Nakon unosa ispravne lozinke bi trebalo da dobijete root prompt, tj. komandnu liniju sa oznakom #

Repair file system1#

Ovo je u stvari minimalni shell, iz kojeg možete pokrenuti program fsck za proveru diska (slično kao scandisk na Windowsu).

Repair file system1# fsck /dev/hda2

Naravno, neće uvek biti u pitanju /dev/hda2. To možete proveriti sa komandom cat /proc/partitions ili dmesg koje su već objašnjene iznad. U slučaju da ne možete nikako da otkrijete koja ja particija, možete podići sistem sa Slackware CD-a (samo udarite Enter dok ne dobijete komandnu liniju) i onda pokrenete uradite cat /proc/partitions.

Ako postoje značajna oštećenja diska, fsck komanda će na nekoliko mesta postaviti razna pitanja. Na sva pitanja je bezbedno odgovoriti sa yes, odnosno Y.

Podešavanje mrežne kartice

Mreža se podešava programom netconfig, koji se mora pokrenuti kao root. Nakon unosa podešavanja, potrebno je restartovati mrežu pomoću sledećih komandi:

root@kiklop:~# /etc/rc.d/rc.inet1 stop
root@kiklop:~# /etc/rc.d/rc.inet1 start

Ili restartovati računar. Ukoliko mreža ne radi posle toga, prvo proveriti da li je sistem detektovao mrežnu karticu komandom ifconfig. Ukoliko se pojavi sledeća greška:

root@kiklop:~# ifconfig eth0
eth0: error fetching interface information: Device not found

...postoji mogućnost da je mrežna kartica pomerena na sledeći interfejs. Ovo se dešava kada se menja mrežna kartica, pa nova ima drugačiju MAC adresu. Potrebno je obrisati povezivanje MAC adrese i eth interfejsa u sledećem fajlu:

root@kiklop:~# mcedit /etc/udev/rules.d/70-persistent-net.rules

Nakon ove izmene je najjednostavnije restartovati računar da bi se uređaj video pod drugim interfejsom.

Podešavanje grafičke kartice

U većini slučajeva sistem bi trebao automatski da prepozna grafičku karticu i monitor i da odabere optimalnu rezoluciju. Ako to nije slučaj, treba pokrenuti komandu xorgsetup. U slučaju da je sistem već radio i da se menja grafička kartica, on je već u grafičkom režimu rada (init level 4) i potrebno ga je prvo spustiti u konzolni režim (3). U slučaju da nemate login prompt, možete ga dobiti kombinacijom tastera Ctrl+Alt+F6. Kada se ulogujete ukucajte init 3. Može da se desi da nakom toga izgubite ekran, pa ponovo pritisnite Ctrl+Alt+F6.

root@kiklop:~# init 3
root@kiklop:~# xorgsetup

U xorgsetup-u na sva pitanja treba samo potvrditi ponuđene opcije sa OK, pritiskanjem Entera. Kada se xorgsetup završi, pokušajte pokrenuti grafički sistem komandom startx

root@kiklop:~# startx

Ukoliko se grafički mod ispravno podigne, restartujte računar i time je podešavanje završeno. Ako se računar zaglavi ili prikazuje lošu rezoluciju pa ne možete odabrati željene opcije grafičkog okruženja, možete zaustaviti grafički mod i vratiti se u konzolu sa Ctrl+Alt+BackSpace. Backspace je taster za brisanje "na levo".

Ukoliko podešavanje ne može da se uradi preko xorgsetupa, imate 2 moguće opcije. Jedna je da se koristi automatska detekcija Xorg-a, tako što će se obrisati xorg konfiguracioni fajl:

root@kiklop:~# rm /etc/X11/xorg.conf
root@kiklop:~# startx

A druga je da se pokuša sa VESA konfiguracijom:

root@kiklop:~# cp /etc/X11/xorg.conf-vesa /etc/X11/xorg.conf
root@kiklop:~# startx

Kao što se vidi, u oba slučaja pokušavamo sa startx da probamo da li sistem radi. Kao što je već navedeno, ako ne radi, može se prekinuti sa Ctrl+Alt+BackSpace.

U slučaju da je slika prikazana, ali rezolucija koju računar odabere nije dobra, može se ista podesiti unutar KDE okruženja. Desnim klikom na desktop se dobija stavka menija Configure desktop, gde treba izabrati opciju Display i zatim iz padajućeg menija Screen size izabrati rezoluciju.

U slučaju da se željena rezolucija ne nalazi na spisku, može se ista podesiti pomoću programa gtf koji se pokreće u terminalu. Evo primera za rezoluciju 1024x768 na 60Hz:

root@kiklop:~# gtf 1024 768 60

  # 1024x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 64.11 MHz
  Modeline "1024x768_60.00"  64.11  1024 1080 1184 1344  768 769 772 795  -HSync +Vsync

Ova dva reda koji su rezultat komande treba iskopirati u fajl /etc/X11/xorg.conf u sekciju Monitor. Primer:

Section "Monitor"
    Identifier  "My Monitor"
    HorizSync   31.5 - 50.0
    VertRefresh 40-90
    # 1024x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 64.11 MHz
    Modeline "1024x768_60.00"  64.11  1024 1080 1184 1344  768 769 772 795  -HSync +Vsync
EndSection

Naziv moda (u gornjem primeru "1024x768_60.00") ubaciti u podsekciju Display sekcije Screen. Primer:

Section "Screen"
    Identifier  "Screen 1"
    Device      "VESA Framebuffer"
    Monitor     "My Monitor"
    DefaultDepth 24
    Subsection "Display"
        Depth       24
        Modes "1024x768_60.00" "800x600"
    EndSubsection
EndSection

U slučaju da i pored ovoga neće da radi, potražite koje su vrednosti za horizontalnu i vertikalnu frekvenciju monitora i upišite ispravne opsege u gore-navedenu Monitor sekciju. Opsege možete pronaći u uputstvu za monitor ili pretragom tog modela na Internetu.