jun 15
L’intèrpret de comandes
L'intèrpret de comandes a linux, altrament anomenat Shell o consola, és un interpret orientat a línies, mode text.
A linux hi ha una gran varietat d'intèrprets de comandes, entre els que destaquen Bash, Bourne Shell, C-Shell, Dorn Shell, TC-Shell, Z-Shell....
Aquest intèrprets de comandes difereixen en la seva sintaxis, és a dir, en funció de amb quin Shell estiguem treballant, hem d'escriure les instruccions d'una manera o una altra, donant també opcions a treballar amb la Shell més adient en funció de que es vulgui fer.
En aquesta entrada al bloc ens centrarem en Bash, doncs sol ser el shell per defecte a la majoria de distribucions de linux.
Ara mostraré un recull de les comandes més bàsiques, aquelles en les que algú que ve de windows sol estar més perdut, doncs no són sempre iguals en ambdos sistemes operatius, de fet no molt XD:
- exit/logout: Serveixen per eixir d'una sessió. Cal tenir en compte la diferència amb logout i exit. En el cas de logout sortirem d'una sessió 'anidada', ja es veurà que amb su es pot canviar d'usuari, però no tancarem mai la sessió original. En canvi amb exit tancarem la sessió.
- cd: Serveix per a canviar de directori. Cal dir que a diferència de Windows sempre hi ha d'haver un espai després de cd, és a dir, si volguéssim anar a directori inferior faríem "cd ..", amb l'espai.
- ls: Serveix per a llistar el contingut d'un directori. Seria com a Windows la comanda dir. Aquesta comanda pot mostrar molts detalls de fitxers i de moltes maneres, depen de les opcions que s'hi afegeixin a ls quan es crida el que mostri.
- su: Serveix per canviar d'usuari, sempre i quan coneguem la clau d'accés d'aquest usuari, cal dir que a l'usuari root no l'hi fa falta saber-la, hi entra directament (per alguna cosa és el superusuari). Per emprar-lo és "su nom_usuari" per entrar com un altre usuari o "su" sense res més per a entrar com a root, si en tenim la clau.
- chsh: Aquesta comanda serveix per a canviar de shell. Cal dir que s'ha de vigilar amb aquesta comanda, perquè si ens equivoquem de ruta a la shell que canviem, ens podem quedar sense la mateixa.
Altre funció molt útil i moltes vegades no emprada per usuaris de Windows és l'autocompletar del shell. Quan escrivim el nom d'un arxiu, si premem la tecla tabulador, s'acabarà descriure el nom d'arxiu, sempre i quan no hi hagi cap altre coincidència, en aquest cas ens mostraria els noms d'arxius disponibles. També funciona amb les comandes. És molt útil acostumar-se a aquesta comanda.
A vegades també ens pot interessar saber quina comanda vàrem emprar per fer x cosa, i que ara no recordem. Una manera simple de veure el que es va fer és escrivint "history", mostraria totes les comandes anteriors guardardes (unes 500), o "history x", on x és el nombre de comandes que volem que es mostrin, en ordre cronològic invers.
Altre funció interessant és echo, que mostra per pantalla el que li demanem. Si per exemple, fem "echo Hola", escriurà "Hola" per pantalla. La veritable gràcia ve quan volem saber una variable de sistema, en que podem emprar l'echo de la següent manera: "echo $LC_ALL", que mostrarà el contingut de la variable LC_ALL. Com veieu, les variables van precedides pel símbol $.
L'espai per al shell té un significat especial, pel que sempre que fem un espai en blanc, haurem d'afegir-hi abans una contrabarra (). Així doncs per esborrar un arxiu seria:
rm nom de l'arxiu
Fixeu-vos que ' també és un caracter especial, aquí uns quants: ? * [ ] { } ( ) ! ~ $ # < > | & ' " ` ; <espai> <nova línia>
Amb tots aquests s'ha d'afegir al davant, si volem que shell els entengui literalment i no faci una operació vinculada a aquests símbols.
Altre manera de fer-ho és emprant la cometa simple (') o la doble cometa ("), que fa que el shell consideri literal tot el que hi a entre elles, passant a ser l'exemple anterior:
rm "nom de l'arxiu" (en aquest cas emprem " per a evitar la cometa simple de "l'arxiu").
Com hem vist abans, amb echo podem veure el valor d'una variable de sistema. Per assignar-li a una variable un valor, o modificar-lo, s'empra la següent sintaxi:
valor=1000
I per tant, per veure':
echo $valor
Com hem dit, hi ha una serie de variables d'entorn, però com saber quines son? Amb la comanda evn, que ens mostrarà un llistat de les variables d'entorn i el seu valor.
No totes les variables que declarem i definim són afegides a l'entorn, per a fer-ho em de fer us de la variable export:
export valor
Quan tornem a executar env, la veurem llistada i amb el seu valor assignat.
També tenim la opció d'emprar alies de comandes, és a dir, definir noves comandes, que en el fons seran una crida a altres comandes, amb uns paràmetres concrets. Per exemple, ls -a ens mostrarà un llistat dels fitxers d'un directori, incloent els arxius ocults. Volem crear un alies que ho faci directament, sense haver d'escriure cada vegada el -a:
alias la='ls -a'
Ara escrivint la, se'ns mostraran els fitxers del directori, incloent els fitxers ocults.
Com podem veure tot això és interessant, però aquest canvis no són guardats enlloc, és a dir, una vegada tanquem la consola, es perden. Per no haver d'estar una i altre vegada redefinint alies i variables d'entorn hem d'incloure les mateixes en un fitxer que el shell llegeix al arrencar.
Primerament es llegeix el fitxer /etc/profile, per a tots els usuaris, pel que si volem aplicar una modificació a TOTS els usuaris, l'hauríem de fer aquí. Si ho volem personal o no tenim accés de superusuari a la màquina on estem, haurem de modificar l'arxiu ".bash_profile", que es troba a l'arrel del nostre directori, típicament "/home/usuari".
Altrament, també hi ha el ".bash_logout", que realitza el que li diguem quan deixem la sessió.
Altre cosa important a saber, és com fer treballar en "background" a programes, és a dir, que treballin sense 'bloquejar-nos' la consola. Això és fa afegint al final un espai i el caracter &:
ordre &
Això farà que s'executi la comanda ordre però ens deixi seguir emprant el termina. Com es pot veure, l'aplicació que iniciem d'aquesta manera no pot requerir una interacció amb l'usuari des de consola, doncs al fer-la funcionar en background, no li podem realitzar dita interacció, pel que el programa es pararia.
Per exemple, podem emprar la següent comanda:
yes > /dev/null &
Aquesta comanda anirà enviant "y" per pantalla. Al posar el & al final, no ho veurem, doncs estarà en mode background. Si volem saber si s'està executant, podem emprar la paraula jobs, que ens mostra les aplicacions en background. A més amb si estem fent anar una aplicació, al prèmer "Ctrl+z" aquesta quedarà pausada, i després escrivint "bg %1" on 1, es el número de l'aplicació, el mostra la comanda jobs, la posarem a treballar en mode background.
Si tenim una aplicació ocupant la consola i la volem parar ho podem fer amb "ctrl+c", que es coneix com matar un treball en execució.
Altrament, com podem passar una feina a background amb la comanda bg, també la podem passar a consola, amb fg: "fg %1".
Per matar a una aplicació ho podem fer amb kill. Si ens fixem, al passar un treball a background ens surten dos valors, tipus [1] 1999. El primer valor entre [] és número de treball, i el segon número és l'identificador del procés. Així doncs podem matar el procés de dues maneres, per el seu número de treball o per el seu número de procés.
Per número de treball seria "kill %num_treball" i per número de procés seria "kill num_procés".
Finalment, si voleu veure tots els processos executant-se al vostre sistema es pot fer us de la comanda ps, que els mostrarà tots amb "ps aux".
Una eina molt útil a la shell és la concatenació de comandes, és a dir, que faci diverses accions en cascada, això és far amb pipes (tecla |). Per exemple, per buscar tots els processos de bash faríem:
ps aux|grep bash
Aquesta comanda primer obtindria amb "ps aux" tots els processos actius al sistema operatiu, i després agafaria el resultat d'aquesta operació i els enviaria a la instrucció "grep bash". La comanda grep compara el paràmetre que se li dona amb les línies que li dona la comanda "ps aux", i mostra totes les línies que en alguna part tenen la paraula "bash". És una manera fàcil i ràpida de saber quin número de procés té alguna aplicació que s'estigui executant, si per exemple, la volem matar amb un kill.
Una altra comanda imprescindible per linux, és man. Aquesta comanda s'empra de la següent manera:
man <aplicació>
El que fa aquesta comanda és mostrar-nos un manual de text de la aplicació, amb totes les seves opcions i combinacions, molt útil per aprendre a veure com van les diferents eines. Sortirem del manual prement la tecla "q".
Ni de bon troç estan les posibilitats de shell, en concret de bash, però és una introducció suficient per a fer les primeres passes remenat la shell de linux, i no anar perdut.
He de dir que aquest mini-manual és un resum ràpid dels meus apunts de la Salle, on vàrem fer una breu introducció a linux i a les comandes més bàsiques (tot i que sigui usuari de linux, em van sobrar força els totxos que hi van haver abans d'història sobre linux...).
