lunedì, Ottobre 14, 2024

8 errori di battitura da evitare su Linux

Ricontrolla di aver digitato correttamente il comando prima di premere “Invio”. Su Linux, un errore di battitura può avere ripercussioni distruttive. Usa il completamento tramite tabulazione per compilare automaticamente il maggior numero possibile di voci della riga di comando. Anche gli alias per comandi lunghi e complicati sono un’ottima idea.

La riga di comando di Linux offre una grande potenza. Il problema è che l’uso corretto di quel potere dipende dall’accuratezza della tua digitazione. Ecco otto errori di battitura che non vorresti mai fare.

La riga di comando di Linux

La riga di comando di Linux è un portale di grande potere, ma un errore di battitura è tutto ciò che serve perché quel potere si rivolti contro di te. Abbiamo tutti sentito parlare del comando che non dovresti mai eseguire. Quello di cui stiamo parlando qui sono i comandi che vuoi eseguire, ma dove un errore può significare un disastro.

Quando premi “Invio”, tutto ciò che hai digitato viene elaborato dalla shell. Gli alias e le variabili vengono espansi. Vengono identificati comandi, opzioni e parametri. Questo si chiama analisi. Il passaggio successivo passa il tuo input analizzato ai comandi che eseguiranno le tue istruzioni.

Se commetti un errore quando digiti i tuoi comandi, potrebbe essere intrappolato come un errore di sintassi. Ma se il tuo errore crea un’altra riga di comando valida, verrà eseguita.

Un semplice errore di battitura può essere veramente distruttivo. Il livello di distruzione dipende dal comando e dall’errore. Potresti perdere tempo. Potresti perdere un file. Potresti perdere un intero file system.

1. Non dimenticare la -a

Potrebbe essere necessario aggiungere qualcuno a un gruppo per consentire loro, ad esempio, di utilizzare un particolare software. Ad esempio, VirtualBox richiede che gli utenti facciano parte del gruppo “vboxusers”. Possiamo farlo con usermod.

Il groupscomando elenca i gruppi di un utente .

gruppi

Aggiungeremo l’utente davea un nuovo gruppo. L’ opzione -a(aggiungi) aggiunge il nuovo gruppo all’elenco dei gruppi esistenti in cui si trova l’utente. L’ -Gopzione (gruppi) identifica il gruppo.

sudo usermod -a -G vboxusers dave

Aggiunta di un utente a un nuovo gruppo, utilizzando il comando usermod

Il nuovo gruppo viene visualizzato dopo l’accesso e la disconnessione dell’utente.

gruppi

Il gruppo vboxusers visualizzato nell'elenco dei gruppi in cui si trova questo utente

Ora è nel gruppo “vboxusers”. Tuttavia, se si dimentica di utilizzare l’ -aopzione (aggiungi), tutti i gruppi esistenti dell’utente vengono rimossi. L’unico gruppo in cui saranno, è il nuovo gruppo.

Questo è il   comando errato :

sudo usermod -G vboxusers dave

Aggiunta di un utente a un gruppo senza utilizzare l'opzione -a append

Quando accedono successivamente, scopriranno di essere solo in un gruppo.

gruppi

L'utente è ora in un singolo gruppo

Se hai un singolo utente configurato e gli fai questo, avrai seri problemi. Per prima cosa, l’utente non è più un membro del gruppo “sudo” , quindi non puoi usarlosudo  per iniziare a correggere le cose.

2. Utilizzo dell’identificatore di unità errato con dd

Il ddcomando scrive blocchi di dati nei file system. Viene spesso utilizzato per scrivere immagini ISO su memory stick USB .

Lo schema di denominazione di Linux per i dispositivi di archiviazione utilizza una singola lettera per l’identificazione. Il primo disco rigido si chiama “/dev/sda”, il secondo è “/dev/sdb”, il terzo è “/dev/sdc” e così via. Le partizioni sono identificate da un numero. La prima partizione sul primo disco rigido è “/dev/sda1”, la seconda è “/dev/sda2” e così via.

Se si masterizza un’immagine su una memory stick USB, è necessario conoscere l’identificatore dell’unità della memory stick USB. Lo troveremo eseguendo il piping lsblkattraverso grep, cercando le voci con “sd” al loro interno.

lsblk | grep sd

Usando grep per cercare righe con "sd" al loro interno, nell'output del comando lsblk

Possiamo vedere che il disco rigido “/dev/sda” è un’unità da 32 GB con tre partizioni. Una delle partizioni è la partizione “/boot” e la partizione “/dev/sda3” è montata su “/”, che è la radice del file system.

Il disco rigido “/dev/sdb” viene segnalato come un’unità da 7,5 GB. È montato in “/media/dave/Pink”. Chiaramente, l’unità “/dev/sda” è il disco rigido principale di questo computer e “/dev/sdb” è la memory stick USB.

Il comando per scrivere un file ISO che si trova nella directory “~/Downloads” sulla nostra memory stick USB è:

sudo dd bs=4M if=Download/distro-image.iso of=/dev/sdb conv=fdatasync status=progress

Scrivere un'immagine su una memory stick USB con il comando dd

Ci viene richiesta la nostra password, quindi ci ddtuffiamo in azione. Non ci sono “Sei sicuro?” avvertimenti o possibilità di ritirarsi. La scrittura parte subito.

L'avanzamento dd viene visualizzato mentre scrive un'immagine su una memory stick USB

Tuttavia, se digiti la lettera sbagliata per l’identificatore dell’unità e corrisponde a un disco rigido esistente, sovrascriverai quell’unità anziché la memory stick.

Questo è il   comando errato :

sudo dd bs=4M if=Download/distro-image.iso of=/dev/sda conv=fdatasync status=progress

La scrittura errata di un'immagine sul disco rigido principale termina con un messaggio di errore

Abbiamo detto dddi usare “/dev/sd a “, così è stato. L’azione di scrittura è molto più veloce, ma termina con un avviso. Hai appena distrutto la tua installazione di Linux.

Controlla e ricontrolla gli identificatori di unità prima di premere “Invio”.

3. Utilizzo dell’identificatore di unità errato con mkfs

Esistono altri comandi che accettano identificatori di unità come parte della loro riga di comando, come gli mkfsstrumenti . Questi formattano le unità creando file system sulle partizioni.

Su questo computer abbiamo un’unità da 25 GB e un’unità da 10 GB.

L'output di lsblk è stato inviato tramite pipe a grep, visualizzando i dischi rigidi in un computer

Se vogliamo creare un file system Ext4 sulla prima partizione dell’unità da 10 GB, utilizzeremo questi comandi.

sudo umount /dev/sdb1
sudo mkfs.ext4 /dev/sdb1

Creazione di un file system ext4 su una memory stick USB

Ma se commettiamo l’errore di utilizzare una “a” invece di una “b” nell’identificatore dell’unità, cancelleremo una delle partizioni sull’unità da 25 GB e renderemo il nostro computer non avviabile.

Questo è il   comando errato :

sudo umount /dev/sda1
sudo mkfs.ext4 /dev/sda1

Formattazione errata dell'unità principale di un computer

Quella piccola lettera è un pugno, quindi assicurati di colpire l’unità giusta.

4. Non eliminare il tuo file crontab

Il crondemone esegue le attività in orari prestabiliti per te. Prende la sua configurazione da un crontabfile. Ogni utente, incluso root, può avere un crontabfile . Per modificare il tuo crontab, usa questo comando:

crontab -e

Il comando per modificare il tuo file crontab: crontab -e

Il crontabfile viene aperto in un editor . Puoi apportare modifiche e aggiungere nuovi comandi.

Un file crontab aperto in un editor

Ma se digiti male il comando e premi “r” invece di “e”, rimuoverai, come in  delete , il tuo crontabfile.

Questo è il   comando errato :

crontab -r

Il comando che elimina il tuo file crontab: crontab -r

La prossima volta che usi il crontab -ecomando, vedrai un file vuoto predefinito.

Questo è un errore facile da fare, perché “e” e “r” sono uno accanto all’altro sulla maggior parte delle tastiere . Ricostruire un file complicato crontabnon è divertente.

5. Storia ripetuta

L’uso del historycomando è ottimo quando stai cercando di ridurre le sequenze di tasti e risparmiare tempo. Se riesci a estrarre un comando prolisso dalla storia, guadagni velocità e precisione. Finché selezioni il comando giusto dalla cronologia.

Il historycomando elenca i comandi precedenti nella finestra del terminale. Sono numerati. Per riutilizzare un comando, far precedere il suo numero da un punto esclamativo ” !” e premere il tasto “Invio”.

storia

Supponiamo di aver clonato un repository Git , averci fatto un pasticcio e averlo eliminato. Dobbiamo clonarlo ancora una volta. Scorrendo nella finestra del terminale, possiamo presto individuare il git clonecomando. Possiamo rieseguirlo digitando:

!60

Ma se abbiamo solo dato un’occhiata allo schermo e letto male il numero, potremmo scegliere per errore il numero successivo:

!61

Questo esegue il comando successivo nell’elenco, rm *. Ciò elimina tutti i file nella directory corrente.

È inoltre possibile utilizzare il !punto esclamativo ” ” con una stringa di testo. Il primo comando corrispondente viene eseguito per te. Non viene visualizzato in modo che tu possa verificare che sia quello a cui stavi pensando, viene eseguito immediatamente.

Immagina lo scenario in cui hai uno script chiamato “restart.sh”. Questo script imposta come predefinito un set di file di configurazione per alcuni software che stai scrivendo. Periodicamente, mentre sviluppi e collaudi, devi pulire la lavagna, quindi chiami il tuo script.

Questo comando dovrebbe essere sufficiente per trovare e abbinare il comando nella cronologia e per eseguirlo.

!rif

Ma se hai utilizzato il rebootcomando  dall’ultima volta che hai utilizzato lo script, è il rebootcomando che viene trovato ed eseguito immediatamente.

Il comando rm * viene eseguito per errore

Sul tuo computer di casa per utente singolo probabilmente è solo un fastidio. Su un server condiviso è un fastidio anche per molte altre persone.

6. La calamità degli spazi

Gli spazi nei nomi dei file e nei percorsi delle directory possono causare problemi. Ecco perché dovrebbero sempre essere sfuggiti o citati.

I problemi con gli spazi possono essere evitati utilizzando il completamento tramite tabulazione. Premi il tasto “Tab” quando stai digitando un nome file o un percorso di directory e la shell completerà automaticamente quanto più percorso o nome file possibile. Potrebbe essere necessario digitare una lettera per distinguere tra il file desiderato e qualsiasi altro file che condivide parte dello stesso nome, ma un’altra pressione del tasto “Tab” completerà il resto del nome del file per te .

Ciò consente di risparmiare sulle sequenze di tasti, impedisce agli spazi di insinuarsi a causa di errori di battitura e sfugge correttamente a eventuali spazi legittimi in modo che non causino problemi.

Supponiamo di avere una directory “Development” che contiene altre due directory, “geocoder” e “bin”. C’è anche una directory “bin” all’interno della directory “geocoder”.

Per eliminare i file nella directory “geocoder/bin” e rimuovere la directory, utilizzare questo comando.

rm -r geocodificatore/bin

Eliminazione della directory geocoder/bin

Ora immagina di aver aggiunto inavvertitamente uno spazio dopo “geocoder/”, in questo modo.

Questo è il   comando errato :

rm -r geocodificatore/bin

Eliminazione errata delle directory geocoder e bin

Boom. La directory “Sviluppo” ora è vuota. Le directory “Development/geocoder”, “Development/geocoder/bin” e “Development/bin” sono state completamente cancellate.

Ricorda, il completamento della scheda è tuo amico.

7. Usando > Invece di >>

Il reindirizzamento invia l’output di un processo a un file. Usiamo il segno maggiore di ” >” per catturare l’output di un processo. Se il file esiste, viene prima svuotato.

Diciamo che stiamo indagando su una perdita di memoria . Abbiamo uno script chiamato “memlog.sh”. Visualizza le statistiche della memoria una volta al secondo. Lo reindirizzeremo in un file chiamato “memory.txt”, per un’analisi successiva.

memlog.sh > memoria.txt
head memory.txt

Acquisizione e visualizzazione dell'output dallo script memlog.sh

Il giorno dopo, vogliamo continuare con la nostra indagine e riavviamo la sceneggiatura. Questa volta dobbiamo usare due segni di maggiore di ” >>” in modo che i nuovi dati  vengano aggiunti  al file.

memlog.sh >> memoria.txt

Aggiunta di nuovi dati alla fine di un file esistente

Se usiamo un singolo segno maggiore di “>”, perderemo i dati di ieri perché il file viene svuotato prima.

8. Reindirizzamento nella direzione sbagliata

Il reindirizzamento può utilizzare il contenuto di un file come input per un programma.

Abbiamo un file chiamato “placenames.sql” che vogliamo importare in sqlite3. Il file dello schema descrive come ricreare le tabelle del database. Contiene anche i dati che vogliamo archiviare nel database. Con 1,3 GB e oltre 11 milioni di righe, è un file di grandi dimensioni.

ls -hl toponimi.sql
wc placenames.sql

Controllo della dimensione di un file con ls e wc

Possiamo creare un nuovo database chiamato “places.sqlite3” con questo comando.

sqlite3 luoghi.sqlite3 < toponimi.sql

Importazione di uno schema da un file in sqlite3

Il più delle volte, quando stiamo reindirizzando usiamo il carattere “>”. Devi concentrarti per evitare di digitare “>” per abitudine. In tal caso, qualsiasi output sqlite3generato viene scritto nel file dello schema, cancellandolo.

Questo è il   comando errato :

sqlite3 luoghi.sqlite3 > toponimi.sql

Reindirizzamento errato in un file di schema da sqlite3

Il nostro file schema è stato distrutto, sovrascritto dal messaggio di benvenuto della sqlite3shell.

cat placenames.sql

Il file dello schema sovrascritto contenente il messaggio di benvenuto sqlite3

Ciao ciao, 1,3 GB di dati.

Come evitare errori di battitura della riga di comando

Ci sono buone abitudini che puoi adottare per evitare di commettere questo tipo di errori.

Usa il completamento tramite tabulazioni ove possibile. Eviterai problemi con gli spazi nei percorsi delle directory e nei nomi dei file.

Crea i tuoi alias brevi e memorabili per comandi lunghi e complicati che devi usare occasionalmente. In questo modo, non sbaglierai utilizzando le opzioni e i parametri sbagliati.

È notoriamente difficile correggere le bozze della tua scrittura, ma è quello che devi fare sulla riga di comando. Leggi cosa c’è davvero. Non limitarti a guardarlo e pensare che dica cosa intendevi digitare. Cosa dice veramente? Perché è quello che farà davvero.

ARTICOLI COLLEGATI:

ULTIMI ARTICOLI: