dimarts, 6 de juliol del 2021

Introducció al treball amb el shell bash

Hi han dos tipus de interfície d'usuari del sistema operatiu: l’anomenada shell («closca») del sistema i els entorns d’escriptori gràfic. El shell en realitat és un programa que espera ordres (comandaments) de l’usuari; aquest escriu el comandament, el shell interpreta el que ha escrit, i si és la sintaxi és correcte l’executa.

La interfície tipus shell és freqüent en servidors dedicats: un administrador expert en shell pot ser molt més ràpid i eficient fent tasques concretes que no pas usant un entorn d’escriptori.  Els entorns gràfics es caracteritzen per ser fàcils d’utilitzar ... aparentment, doncs sovint es carreguen amb molts objectes, menús dintre de menús i finestres farcides d’opcions, i acaba sent difícil de trobar el que busques. 

Avantatges del shell sobre l’escriptori gràfic:

    • És complert: qualsevol cosa que l’usuari pugui fer amb el sistema es pot fer des del shell, en canvi hi ha operacions que no es poden fer des de l’entorn gràfic

    • És potent: amb una única instrucció es pot fer el mateix que obrint diverses finestres i menús i clicant diverses opcions

    • És flexible: els comandaments es poden combinar entre sí i personalitzar per formar comandaments complexes, sense límit algun; això no es pot fer amb les finestres i menús 

    • És estable: sovint les interfícies gràfiques canvien entre versions del sistema operatiu fent perdre temps buscant allò que ja no està on estava; en canvi els comandaments del shell varien poc, de fet hi ha comandaments tant en Windows com en Linux que tenen més de 30 anys d’existència i segueixen funcionant perfectament.

    • És automatitzable: les tasques repetitives d’administració, com ara crear diversos usuaris nous del sistema (per exemple quan entren nous contractats a la organització) en l’entorn gràfic obliguen a usar repetidament les mateixes opcions de menús, en canvi els comandaments equivalents es poden guardar en un fitxer de text i executar-se tots alhora. Aquest fitxer el podem guardar per reutilitzar-lo en un futur.

En aquest article fem una breu introducció al treball des del shell més conegut de Linux: el bash

Introduir comandaments

Quan tenim el shell del sistema obert podem començar a escriure comandaments, que podem veure com sol·licituds per que el sistema executi alguna acció,  en realitat cada comandament crida a un programa del sistema. 

En la imatge veiem que el shell mostra un text (en verd) que s'anomena el prompt que varia segons la versió del sistema, en aquest dóna: el nom de l'usuari que té oberta la sessió (jordi), separat pel caràcter @ el nom de la màquina (jordi-SVE1513CSE), després dels ":" es mostra el caràcter ~ que indica que dintre del sistema de fitxers estem situats en l'arrel dels directoris de l'usuari (que per norma és /home/usuari, en l'exemple /home/jordi) i després el caràcter $ que indica que l'usuari no és administrador que en Linux sempre s'anomena usuari root. A continuació del prompt escrivim el comandament date i fem <Intro>, el shell interpreta l'ordre, veu que és simplement executar el comandament date, ho fa mostrant el resultat, i torna a mostrar el prompt esperant la següent ordre:


El shell quan s'inicia sempre ens situa en l'arrel del directori de l'usuari; si ens movem de directori usant comandaments, el prompt canvia:


En el darrer prompt ja no es mostra el caràcter  ~ doncs em sortit de l'arrel del directori de l'usuari. Si entrem com administradors el prompt també canvia:

jordi@jordi-SVE1513C5E:/home$ sudo su
[sudo] contrasenya per a jordi:  
root@jordi-SVE1513C5E:/home#

El caràcter $ ha estat substituit pel # que està reservat per l'administrador. Si l'ordre que escrivim no existeix, el shell ens ho diu i ens proposa comandaments semblants:

jordi@jordi-SVE1513C5E:/home$ whi

No s'ha trobat l'ordre 'whi', volíeu dir:

 l'ordre 'hi' de l'snap hi (1.1)

 l'ordre 'ghi' del deb ghi (1.2.0-1)

 l'ordre 'who' del deb coreutils (8.30-3ubuntu2)

Vegeu 'snap info <nom de l'snap>' per a versions addicionals.


De vegades ens cal escriure com a part del comandament una paraula que conté espais en blanc; per defecte el shell interpreta els espais en blanc com a separadors d'ordres diferents, o de dades diferents; l'ordre cat mostra el contingut d'un fitxer de text, si tenim un que s'anomena "resum Azure AD" i fem:

jordi@jordi-SVE1513C5E:~$ cat resum Azure AD
cat: resum: El fitxer o directori no existeix
cat: Azure: El fitxer o directori no existeix
cat: AD: El fitxer o directori no existeix
jordi@jordi-SVE1513C5E:~$

el shell interpreta que són tres fitxers independents; una solució és escriure cat "resum Azure AD", una altre utilitza el caràcter d'escapament \ que indica que el següent caràcter és "especial" i el shell no l'ha de interpretar, cat resum\ Azure\ AD funcionarà bé doncs cada espai en blanc va precedit de la barra invertida i el shell no la interpreta com separador. 

La combinació de tecles Control + C s'interpreta com ordre d'aturar el comandament en curs; per exemple si llancem el comandament sleep 60 que simplement deixa esperant al shell 60 segons, podem interrompre la espera amb Control + C, que el shell visualitza com ^C:

jordi@jordi-SVE1513C5E:~$ sleep 60
^C
jordi@jordi-SVE1513C5E:~

La combinació de tecles Control + D tanca el shell i acaba la sessió.

El comandament man obre el manual de qualsevol altre comandament, per exemple el manual de date:

jordi@jordi-SVE1513C5E:~man date

DATE(1)                                             User Commands                                             DATE(1)

NAME
      date - print or set the system date and time

SYNOPSIS
      date [OPTION]... [+FORMAT]
      date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

DESCRIPTION
      Display the current time in the given FORMAT, or set the system date.

      Mandatory arguments to long options are mandatory for short options too.

      -d, --date=STRING
             display time described by STRING, not 'now'

      --debug
             annotate the parsed date, and warn about questionable usage to stderr

      -f, --file=DATEFILE

Es poden executar diversos comandaments en una única línia, separant-los per punt i coma; el següent exemple primer espera 6 segons (sleep 6) i després llista el contingut del directori actual

Jordi@jordi-SVE1513C5E:~$ sleep 6; ls
Baixades    Escriptori   Imatges                     Música       Públic            snap    'VirtualBox VMs'
Documents   hola.txt    'Mòduls específics de DAW'   Plantilles  'resum Azure AD'   Vídeos
jordi@jordi-SVE1513C5E:~$





Cap comentari:

Publica un comentari a l'entrada

Gestió d'usuaris i grups en Linux

Usuaris i grups Linux  Els comptes de Linux són com els comptes de Windows o MacOS; però els detalls no, així que cal explicar alguns detall...