Pubblicato il 10/02/2024 da alnao nella categoria Debian

Questo articolo vuole essere un riassunto il più possibile completo e chiaro riguardo ai comandi di GNU Liunx e le varie possibilità di utilizzo della shell.

La shell bash mette a disposizione una serie di scorciatoie che è possibile usare da riga di comando:

  • tasto TAB espande il nome di un file o di un comando
  • !! ri-esegue l’ultimo comando eseguito
  • !n riesegue l’ennesimo comando presente nella storia, dove ‘n’ e’ il numero del comando da rieseguire
  • !stringa riesegue l’ultimo comando che inizia con i caratteri specificati in stringa
  • !stringa:p visualizza l’ultimo comando che inizia con i caratteri specificati in stringa
  • !?comando? ricerca il comando specificato tra punti interrogativi
  • history visualizza l’elenco di tutti i comandi eseguiti
  • CTRL-U cancella tutta la riga dalla posizione del cursore all’inizio della riga
  • CTRL-K cancella tutta la riga dalla posizione del cursore alla fine della riga
  • CTRL-W cancella una parola dalla posizione del cursore all’inizio della riga
  • ALT-D cancella una parola dalla posizione del cursore alla fine della riga
  • CTRL-A sposta il cursore all’inizio della riga
  • CTRL-E sposta il cursore alla fine della riga
  • ALT-F sposta il cursore alla fine della parola successiva (F sta per forward)
  • CTRL-B sposta il cursore all’inizio della parola precedente (B sta per backward)
  • CTRL-T inverte gli ultimi due caratteri a sinistra del cursore (T sta per transpose)
  • ALT-T inverte le ultime due parole a sinistra del cursore
  • ALT-U trasforma in maiuscolo la parola su cui si trova il cursore (U sta per uppercase)
  • ALT-L trasforma in minuscolo la parola su cui si trova il cursore (L sta per lowercase)

Nei sistemi basati su GNU Linux, tutte le shell hanno un path base spesso detto semplicemente path utilizzato per abbreviare i comandi ed evitare all’utente di dover inserire il path base ogni volta che esegue un comando; per esempio il comando cp, utilizzato per copiare files o cartelle, si trova quasi sempre nella cartella /bin/ e, per evitare che l’utente inserisca il path ogni volta, viene impostato nel path base la cartella bin così la shell cerca i comandi inseriti dall’utente anche in quella cartella. In poche parole il path base è l’elenco delle cartelle dove la shell deve cercare un comando inserito dall’utente, questo elenco è modificabile e personalizzabile: un utente può aggiungere e togliere cartelle da questo elenco visto che questo valore è salvato in una variabile d’ambiente chiamata

$PATH

e il cui contenuto può essere visualizzato con il comando:

$ echo $PATH

e si visualizza l’elenco delle cartelle in sequenza con il separatore due-punti, per esempio:

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Se si vuole aggiungere all’elenco una cartella basta lanciare il comando

$ export PATH=$PATH:/cartella/da/aggiungere

ma eseguendo questo comando la modifica sarebbe solo temporanea fino al successivo riavvio del sistema, per rendere definitiva la modifica al path base bisogna modificare il file

~/.bashrc

aggiungendo lo stesso comando, in questo modo verrà eseguito ad ogni login dell’utente.


Gli alias sono dei comandi personalizzati che la shell bash permette di creare a piacimento dell’utente, questo può essere una chiamata ad un comando standard GNU Linux o ad un comando eseguibile (come uno script sh). Un semplice esempio è creare un nuovo alias che cancella i file di una determinata cartella basta lanciare il comando:

alias cancella="rm -fr /mnt/Dati/toDel/*"

poi nella bash basta lanciare il comando cancella per eseguire l’alias che eseguirà il comando indicato. La definizione di alias viene però persa al riavvio del sistema e/o alla log-out dell’utente, per rendere permanente un comando occorre modificare il file:

~/.baschrc

che si trova dentro la cartella home dell’utente (~), quindi capite che ogni utente può avere i propri alias compreso l’utente root, si può aggiungere in questo file una riga per ogni alias (meglio alla fine del file), per esempio (se non esistono già) si possono aggiungere queste righe:

alias ls='ls --color=auto'
alias cancella="rm -fr /tmp/* "

dopo aver salvato il file, basterà che scriviate sul terminale il nuovo alias affinché venga eseguito il comando, si può utilizzare questa semplice procedura potete crearvi tutti i comandi che vi servono, comprese alias che richiamino script sh oppure programmi eseguibili non standard della shell bash.


Esistono dei comandi specifici per ogni esigenza: se è essere necessario rinominare un gruppo di file dentro una cartella specifica, per farlo è possibile con uno semplice script per la shell Bash per evitare di dover ripetere l’operazione per ogni file, per esempio per modificare l’estensione di tutti i file si può usare

$ for i in *.from; do mv $i $(basename $i .from).to; done

oppure scrivere lo script

for file in *.from; do
mv $file ${file%.from}.to
done

In alternativa allo script in bash, esiste un comando molto più veloce e sicuro, mmv (Multiple Move) che serve a spostare o copiare file multipli e che possano essere raggruppati con un carattere jolly, questa azione viene effettuata in modo sicuro, ovvero non ci sono cancellazioni di file inaspettate dovute a collisioni dei nomi dei file di destinazione con nomi di file già esistenti, inoltre non ci sono problemi nel caso in cui i nomi dei file contengano spazi. Un esempio di utilizzo è:

$ mmv 'aaa*bbb?' 'pinco#1pallino#2'

e con questo comando vengono rinominati tutti i file contenenti le stringe “aaa” e “bbb” e terminanti con un carattere e verrà dato il nome “pinco” + ciò che trova l’asterisco + “pallino” + ciò che trova il punto di domanda. Un esempio più semplice:

$ mmv '*.ps' '#1.eps'

per rinominare tutti i file da .ps a .eps, per maggiori informazioni e una guida completa potete vedere il comando man di mmv. Il metodo più semplice rimangono i programmi di gestione file del desktop che tutti quanti usano mmv ma basta un semplice click per eseguire il comando, è possibile provare in Dolphin, Konqueror, Total Commander o qualsiasi altro filemanager presente nel sistema Debian.


Durante l’installazione al passo Copia del sistema base e impostazioni finali è stato installato nel proprio sistema il sistema Grub, questo è il componente della piattaforma GNU Linux che avvia il sistema operativo all’accensione del sistema: dopo l’accensione infatti compare con una schermata che permette di avviare il sistema GNU Linux in diverse modalità ed eventualmente sistemi operativi diversi se sono installate diverse versioni del KernelLinux o altri sistemi operativi, un utente non esperto deve evitare di eseguire modifiche lasciando i valori di default ma un utente più esperto potrà avviare il sistema ottimizzato a seconda delle proprie esigenze.

New grub theme for debian 12! So hyped for debian 12 "bookworm"! : r/debian

Questo pacchetto è importante perché permette di installare più sistemi operativi nello stesso sistema e poi scegliere quale avviare al momento dell’accensione (chiamata appunto boot del sistema oppure bootloader), in tutti gli altri sistemi operativi (come MS Windows e MacOX) questo componente non è presente per questo un utente non abituato a Grub non riesce a capirne l’utilità, è persino possibile installare più versioni di Debian o diverse distribuzioni nel sistema e poi gestirne l’avvio di sistemi operativi con Grub. Per gli utenti Debian di oggi, Grub viene installato durante la fase di installazione del sistema base e viene auto-configurato quindi l’utente non deve inserire nessuna configurazione: l’auto-configurazione rileva la presenza di altri sistemi operativi e li inserisce nell’elenco di quelli che Grub può avviare, ovviamente se il sistema operativo è stato installato dopo l’installazione di Grub bisogna rilanciarne la configurazione.

Il menù di avvio viene regolato dal file

/boot/grub/grub.cfg

ma non bisogna MAI modificarlo a mano visto che ci sono una serie di comandi che permettono di modificare le configurazioni, come per esempio lo sfondo e il carattere usato infatti di default viene usato uno sfondo semplice e un tema base. Per maggiori dettagli sulla configurazione del bootloader vi rimando al sito ufficiale oppure ad una guida italiana. Il problema principale di Grub è che, se si cambiano i componenti del sistema come gli HardDisk, può succedere che rimanga disallineato rispetto all’effettiva architettura del sistema, per ripristinare il bootloader bisogna seguire una guida molto chiara dove sono spiegati tutti i passi per il ripristino e la riattivazione, in particolare il comando

# grub-install --root-directory=/mnt /dev/sdX

ripristina la versione di Grub2 nel sistema, ovviamente i parametri mnt e sdX devono essere modificati con la configurazione del sistema.


La gestione del cestino viene gestita dai vari Desktop (GNOME, KDE o XFCE), e come per altri sistemi, anche in Debian il cestino in realtà è una semplice cartella particolare dove vengono parcheggiati temporaneamente i file in attesa di una cancellazione definitiva, in realtà il Kernel di GNU Linux non gestisce nativamente il cestino, infatti se un utente usa i comandi:

$ rm
$ rmdir

la cancellazione di file o delle cartelle è definitiva e il file non viene spostato in nessun cestino temporaneo quindi bisogna sempre prestare attenzione quando si usano questi comandi. Bisogna sempre tenere conto che il cestino dei Desktop può lasciare della sporcizia nei sistemi, cioè il cestino potrebbe non essere svuotato oppure capita che alcuni desktop non eseguano la cancellazione definitiva ma postano i file in un altra cartella nascosta nonostante il lancio della funzione di svuota il cestino, questa sporcizia può essere lasciata in una cartella specifica che potete trovare al path:

/home/nomeutente/.local/share/Trash/file/

che dovrebbe essere controllata e svuotata periodicamente con il comando

$ rm -rf ~/.local/share/Trash/files/*

per esempio è possibile inserire questo comandi nello script rc.local per svuotare il cestino (in maniera definitiva) ad ogni avvio del sistema. Se avete dei dischi montati con il comando mount, i vari desktop manager e i programmi di gestione dei file come Dolphin creano delle directory Trash (cestino) all’interno dei volumi montati, per esempio

/mnt/Dati/.Trash-1000/files

e anche in questo caso basta pulire queste cartelle a mano oppure semplicemente svuotare il cestino dal desktop.


Il comando sudo consente agli utenti senza privilegi di amministratore, di eseguire i comandi come super-utente senza dover effettuare la login come super-utente e senza conoscere la password dell’utente amministratore, in alcune distribuzioni derivate da Debian come Knoppix o Ubuntu questo comando è impostato di default perché non viene usato l’utente root mentre per chi usa Debian o altre distribuzioni GNU Linux questo comando è sconsigliato ma è possibile configurare il comando sudo, di default questo comando non viene installato durante la fase di installazione del sistema base e per averlo a disposizione basta installare il pacchetto sudo, con il comando:

# apt-get install sudo

per poi lanciare il comando

# visudo

e inserire alla fine del file la riga

nomeutente ALL=(ALL:ALL) ALL

dove ovviamente nomeutente è l’username dell’utente da abilitare per questo comando, questo comando va a scrivere un file sudoers che contiene le impostazioni del comando. Ogni volta che viene lanciato il comando sudo viene chiesta una password, che non è la password dell’utente root, ma è la password dell’utente, l’uso di sudo in Debian può diventare utile per chi vuole scrivere script (in sh per esempio) utilizzando comandi che solo il super-utente può lanciare, un esempio classico è la modifica veloce del file fstab, usando invece un semplice script in sh la cosa si fa molto più veloce e interessante, infatti basta creare un file, dandogli estensione sh (solo per comodità perché come sempre visto le estensioni non sono significative) e scrivere al suo interno le righe:

#!/bin/sh
sudo kwrite /etc/fstab

purtroppo questo non funziona al meglio perché richiede la password dell’utente che lancia lo script, per risolvere il problema dell’inserimento della password basta inserire il comando echo che simula la digitazione di caratteri nel sistema:

#!/bin/sh
echo password | sudo -S kwrite /etc/fstab

e lo script digiterà automaticamente la password al posto dell’utente, in questo modo si ha a disposizione uno script per eseguire il comando sudo che digita automaticamente la password. Se la installazione del sistema Debian viene avviata dalla versione live, il comando sudo viene installato di default e non viene impostata la password dell’utenza root, per impostarla basta lanciare il comando:

$ sudo passwd root <nuovapassword>

questo perché in quasi tutte le live il comando sudo viene usato al posto dell’utenza root e questo viene ereditato nelle installazioni che vengono avviate da sistemi live.

MENU