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 el GNU/Linux.

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

Abans de llegir aquest article potser et convé llegir sobre el què és un sistema operatiu.


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 avançar premem ENTER (1 línia), espai (1 pàgina) i per sortir premem la tecla "q". 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, son el(s) procés(sos) de l'usuari enric que està(n) 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:~$ ls > directori.txt
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.