Linux bàsic

De Cacauet Wiki
Salta a la navegació Salta a la cerca
El sistema operatiu fa d'intermediari entre les aplicacions i els recursos hardware (wikipedia)

Mostrarem en aquest capítol quatre directrius per iniciar-se a explorar Linux.

Tots els exercicis i comandes s'han realitzat amb la distribució Ubuntu Linux versió 10.04 (Lucid Lynx).

Aclarirem alguns conceptes i entrarem de ple a utilitzar les comandes del sistema operatiu.


Sistema operatiu

Segons la wikipedia: un sistema operatiu és un conjunt de programes que corre sobre un ordinador, administrant els recursos de hardware i proveint serveis per l'execució eficient de les aplicacions.

Dit d'una altra manera: el sistema operatiu és el primer programa que s'executa en un PC. Bé, per ser exactes primer el precedeixen l'arranc de la BIOS (Basic Input Output System) i el bootloader contingut en el MBR del disc dur (veure Arrencada_del_PC). Però un cop arrencat el PC el sistema operatiu és l'amo de la màquina.

Acaba sent un intermediari entre el hardware i les aplicacions. Si un programa vol executar alguna funció que impliqui el hardware, no ho pot fer directament: ha de demanar-li al sistema operatiu (crida de sistema) i aquest realitza la tasca i retorna el resultat a l'aplicació. El programes no poden, doncs, accedir al hardware directament, només a través del sistema operatiu.

Exemples: el Firefox no controla la targeta de xarxa, sinó que demana al S.O. que envii un determinat paquet a una determinada adreça IP i el sistema ho fa. O per exemple, per enviar l'àudio a la targeta un programa com el VLC pot descomprimir les dades del mp3 però les ha de posar a disposició del S.O. el qual realitza la transferència final cap al buffer de sortida de la targeta d'àudio.

Parts del sistema operatiu

Els drivers són específics del hardware i del sistema operatiu: coneixen exactament com adreçar-se al maquinari concret.

Un S.O. és un conjunt força ample de programes, no un de sol. Els elements més importants que volem distingir son:

  • Kernel o nucli del sistema operatiu: és l'element central i s'encarrega d'engegar i controlar l'execució de les aplicacions i d'administrar l'accés a la memòria d'aquestes.
  • Device drivers (o controladors): son programes que enllacen el kernel amb els diferents dispositius electrònics. El nucli no pot conèixer tots els dispositius del mercat, pel que es carreguen només aquells mòduls del hardware que disposem. Així, un driver és específic del hardware utilitzat. És el programa que coneix exactament com està fet cada dispositiu.

El sistema operatiu "mana" sobre els fabricants de hardware, indicant com el sistema operatiu ha d'utilitzar un tipus de hardware determinat. El driver traduirà aquestes directives en instruccions concretes cap el xip particular que el fabricant ha dissenyat.

El kernel i els diferents mòduls.

Per suposat, això no és tot: un S.O. ha de disposar de moltíssimes aplicacions per poder tenir un mínim d'operativitat:

  • Shell o consola: programa que permet interactuar amb el S.O. a través de comandes.
  • Editor de text: programa que permet crear axius de text.
    • Per consola (vi, nano, emacs, ...)
    • Per entorn gràfic (notepad, gedit, geany, ...)
  • Mòdul d'autenticació (en Linux: PAM): és un subsistema que s'encarrega de validar l'entrada d'usuaris i d'autoritzar les operacions que l'usuari demana.
  • Filesystem o sistema d'arxius: subsistema encarregat de l'emmagatzematge, és a dir, l'organització de dades en sistemes persistents com els discs durs, pendrives o CD/DVDs.
  • Sistema d'entorn gràfic i escriptori: subsistema que gestiona com es mostren i organitzen les quotidianes finestres. El sistema bàsic d'entorn gràfic de GNU son les X-windows i els sistemes típics d'escriptori son el Gnome i el KDE.
  • ... i un llarg etcètera...

Estructura d'arxius del Linux

Consola del gestor d'escriptori Gnome mostrant els arxius de l'arrel (root) "/" del sistema.

El Linux ha copiat el model del Unix, pel que ha heretat d'aquest el nom dels directoris que el conformen. Si mirem l'arrel del sistema:

$ ls /

Trobarem aquests directoris (entre d'altres):

  • /home: directoris d'usuari amb preferències, descàrregues, dades, documents, imatges, etc. Equival al "Documents and settings" del Windows.
  • /var: directoris per emmagatzemar dades d'aplicacions (bases de dades MySQL, Apache, etc.)
  • /tmp: arxius temporals, per exemple els vídeos del YouTube que estem veient en aquest moment.
  • /boot: sistema gestor d'arrencada (LILO/GRUB).
  • /etc: arxius de configuració del sistema (IP de la xarxa, carpetes compartides, usuaris amb accés permès, coontrassenyes, etc.)
  • /bin: aplicacions (programes, comandes, etc.)
  • /sbin: aplicacions d'administrador (superuser)

Aquests dos casos son especials i NO son arxius normals al disc:

  • /dev: accés directe als DEVices (dispositius). NO conté arxius, sinó enllaços als dispositius hardware. Podem així dirigir-nos a un dispositiu mitjançant la línia de comandes.
    Per exemple, els discs durs estan a /dev/sda, /dev/sdb, etc. (i les seves particions serien /dev/sda1, /dev/sda2, etc.).
  • /proc: ens permet accedir a algunes funcions del KERNEL i la configuració del sistema.
    Per exemple, una instrucció cat /proc/cpuinfo ens mostraria la informació que el kernel té sobre les CPUs que ha trobat.
enric@pepino:/proc$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 15
model name	: Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
stepping	: 11
cpu MHz		: 1600.000
cache size	: 4096 KB
[...etc...]


Directori d'usuari

El nostre directori d'usuari està a /home. Per exemple, si el meu usuari és "enric", el meu home directory seria /home/enric. Per abreujar es sol posar com la "tilde" de la "ñ", és a dir això: ~

El símbol "~" es pot fer amb el ALTGR+ñ, i si no us funciona el podeu fer mantenint apretada la tecla ALT i posant el número 126 al teclat numèric (el símbol ~ és el número 126 del joc de caràcters ASCII).

Si vull anar al meu directori d'usuari només cal que faci "cd" a seques:

enric@pepino:/var$ cd
enric@pepino:~$ 

Però si estic "lluny" del meu directori d'usuari i vull anar a dins d'un directori (per exemple, l'Escriptori), ho puc fer així:

enric@pepino:/var/www$ cd ~/Escriptori
enric@pepino:~/Escriptori$

Com podeu veure, al prompt (el què hi ha abans del signe del dòlar de la consola) hi figura sempre la informació més bàsica: el nom d'usuari, el nom de la màquina i el directori on estic, per poder saber on soc en tot moment.


Comandes bàsiques del Shell

La shell és una aplicació que ens permet interactuar amb el kernel i executar comandes. Hi ha molts tipus de shell (Korn shell, C shell, etc.) però la més extesa amb el sistema Linux és la Bourne-Again Shell (bash).

IMPORTANT: per saber més sobre una comanda podem utilitzar en tot moment la comanda man (manual). Per exemple:

enric@pepino:~$ man ls
LS(1)                                       User Commands                                       LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]... 

DESCRIPTION
       List  information about the FILEs (the current directory by default).  Sort entries alphabeti‐
       cally if none of -cftuvSUX nor --sort.
[...etc...]

Com hem pogut veure, el primer que ens surt és el prompt amb el nom d'usuari, màquina i directori. Les primeres comandes que cal que sapiguem son:

  • pwd : ens diu en quin directori som (tot i que ja apareix en el prompt).
enric@pepino:~$ pwd
/home/enric
  • ls : ens mostra els continguts d'un directori (equival al DIR del MS-DOS o Windows).
enric@pepino:~$ ls /
bin    dev   initrd.img      lib32       media  proc  scripts  sys  var
boot   etc   initrd.img.old  lib64       mnt    root  selinux  tmp  vmlinuz
cdrom  home  lib             lost+found  opt    sbin  srv      usr  vmlinuz.old
  • ll : igual que el ls però afegeix més informació dels permisos (rwx: lectura, escriptura, execució), propietari de l'arxiu, data de creació, etc.
enric@pepino:~$ ll /
total 136
drwxr-xr-x  24 root root  4096 2011-02-03 18:33 ./
drwxr-xr-x  24 root root  4096 2011-02-03 18:33 ../
drwxr-xr-x   2 root root  4096 2010-12-29 11:00 bin/
drwxr-xr-x   3 root root  4096 2010-12-29 11:06 boot/
drwxr-xr-x   2 root root  4096 2010-06-28 19:18 cdrom/
drwxr-xr-x  18 root root  4220 2011-02-03 21:44 dev/
drwxr-xr-x 163 root root 12288 2011-02-03 21:44 etc/
[...etc...]

Fixeu-vos en els dos primers directoris: el punt (.) significa el mateix directori on estic, i els doble punt (..) al directori pare. Per "pujar" un directori, faria:

enric@pepino:/var/www$ cd ..
enric@pepino:/var$
  • cat ens mostraria el contingut d'un arxiu de text. Per exemple, per mostrar els contingut de l'arxiu resolv.conf dins la carpeta /etc fariem:
enric@pepino:~$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1
enric@pepino:~$
  • more ens mostra un arxiu de text molt llarg a poc a poc. Per avançar podem fer-ho amb el ENTER (1 línia), amb l'espai (1 pàgina) i podem sortir prement la "q". Per exemple:
enric@pepino:~$ more /etc/samba/smb.conf
#
# Sample configuration file for the Samba suite for Debian GNU/Linux.
#
#
# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options most of which 
# are not shown in this example
--Més--(7%)
  • head ens mostra les primeres línies d'un arxiu de text. Per exemple, per mostrar les 5 primeres línies d'un arxiu:
enric@pepino:~$ head -n 5 /etc/samba/smb.conf
#
# Sample configuration file for the Samba suite for Debian GNU/Linux.
#
#
# This is the main Samba configuration file. You should read the
  • tail ens mostra les darreres línies d'un arxiu de text. Per mostrar les darreres 4 línies faríem:
enric@pepino:~$ tail -n 5 /etc/samba/smb.conf
[musica]
path = /media/newmedia/musica
read only = yes
guest ok = yes
  • top : ens mostra els processos més actius del sistema i la ocupació de les CPUs i memòria. Molt important per administrar un sistema com un servidor. Es refresca cada 3 segons per defecte. OJU, per sortir premeu "q".

Top-consola.png

  • grep: permet filtrar les línies d'un arxiu de text que continguin la paraula que vulguem. En el següent exemple volquem una sola execució del top a l'arxiu top.txt. Després filtrem les línies en què apareix "enric" (usuari):
enric@pepino:~$ top -n 1 > top.txt
enric@pepino:~$ grep enric top.txt 
 4460 enric     20   0  212m  16m  10m S    2  0.4   0:06.38 gnome-terminal           

El què estem veient, doncs, és el procés de l'usuari enric que està entre els més actius del sistema (top).


Algunes funcions de la shell

La bash shell disposa d'alguns mètodes molt útils per manipular les comandes:

  • Redirecció de la sortida estàndard (text de pantalla)
  • Pipe: encadenament de comandes.


Redirecció de la sortida estàndard

Hi ha 2 tipus de redirecció:

  • ">": crea un fitxer de text. Si ja existia l'esborra i el crea de nou.
  • ">>": afegeix el text al fitxer indicat.

Podem redirigir el text de pantalla a un arxiu mitjançant el símbol ">". Per exemple, si faig:

enric@pepino:~$ ls > directori.txt
enric@pepino:~$

No ha sortir res per la línia de comandes. En canvi, s'ha generat un arxiu directori.txt (hi conté el que hauria hagut de sortir per la línia de comandes). Amb la comanda següent veurem tots els arxius que comencen per "dir" (utilitzant l'asterisc):

enric@pepino:~$ ls dir*
directori.txt

Apareix el nostre arxiu directori.txt. Si volem veure què hi ha a dins podem utilitzar la comanda que hem vist abans (cat):

enric@pepino:~$ cat directori.txt
Baixades
blowhorn.jpg
cacahuet.jpg
[...etc...]

Això pot resultar molt útil quan apareix una comanda amb un text llarguíssim. Això és el què passa amb dmesg (informació del hardware del sistema enregistrat pel kernel a l'arrencar la màquina):

enric@pepino:~$ dmesg

Com que surt tanta info no la mostrem. En canvi, podem enviar-la a un arxiu de text i després obrir-la amb un editor de text més còmode com el gedit:

enric@pepino:~$ dmesg > dmesg.txt
enric@pepino:~$ gedit dmesg.txt

També haguéssim pogut obrir el gedit des de l'escriptori del Gnome a Aplicacions -> Accessoris -> Editor de text gedit. Un cop dins d'aquest podriem "obrir" i triar l'axiu "dmesg.txt". Tot això ho hem fet amb una sola comanda (gedit dmesg.txt).

Afegint text a un arxiu

Si al nostre arxiu li volem afegir una línia més de text es pot fer amb el símbol ">>":

enric@pepino:~$ echo "DARRERA LINIA" >> directori.txt
enric@pepino:~$ tail -n 3 directori.txt
vlc-log.txt
www
DARRERA LINIA
enric@pepino:~$


Pipe "|"

Pipe significa "tub" en anglès. En la shell és el signe que és com un pal vertical (|) i de vegades està dividit per la meitat. El podem escriure amb ALTGR+1.

Ens permet encadenar comandes i reenviar el resultat d'una d'elles a la següent comanda.

Per exemple, si volem filtrar (amb la comanda grep) totes les línies del dmesg que continguin la paraula "cpu" podem fer-ho així:

enric@pepino:~$ dmesg | grep CPU
[    0.000000] SMP: Allowing 4 CPUs, 0 hotplug CPUs
[    0.000000] NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:4 nr_node_ids:1
[    0.000000] PERCPU: Embedded 30 pages/cpu @ffff880028200000 s91544 r8192 d23144 u524288
[    0.000000] Initializing CPU#0
[    0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.013585] CPU: L1 I cache: 32K, L1 D cache: 32K
[    0.013587] CPU: L2 cache: 4096K
[...etc...]

Com podeu comprovar, la meva màquina "pepino" disposa de 4 CPUs (Intel Quad Core).

Si volem que el grep no distingeixi majúscules de minúscules podem afegir-li el paràmetre "-i":

enric@pepino:~$ dmesg | grep -i cpu

Executeu les dues comandes i veureu que el resultat és diferent.

Si no disposéssim del pipe hauríem de redirigir el text del dmesg a un arxiu i despreś filtrar-ho amb el grep. D'aquesta manera ho fem tot en una sola línia.