Shell commands in linux
Table of Contents
Introduzione #
Nei sistemi basati su unix, il terminale è il programma che ci permette di visualizzare a video una shell (generalmente bash, ma può essere anche sh, zsh, chs, fish). È lei che gestisce i comandi e ci permette di eseguirli.
Va inoltre notato che linux, a differenza di windows, è case-sensitive, cioè differenzia le maiuscole con le minuscole. Quindi un file chiamato testo sarà diverso da un file chiamato TeStO.
Non vengono utilizzate le estensioni, perché il tipo di file viene definito all’interno di esso.
Argomenti di un comando #
Di solito i comandi accettano argomenti per definire il proprio comportamento. Molti di questi seguono un preciso schema:
- Se l’argomento può essere rappresentato da una lettera si utilizza
-(per esempio l’argomento a per il comandols:ls -a). Essi si possono concatenare senza ripetere il trattino (ls -alè uguale als -a -l); - Se l’argomento viene rappresentato con più lettere si utilizza
--e non possono essere concatenati.
Codici di uscita #
Ogni programma, al termine della sua esecuzione, restituisce un codice che rappresenta l’uscita e il ritorno alla shell.
Generalmente questo numero non viene visualizzato automaticamente.
Con un’esecuzione senza errori il codice sarà 0, se invece si sarà incontrato un errore il codice rappresenterà quell’errore. È dunque necessario consultare la documentazione relativa al programma per capire di che errore si tratta.
Pagine man #
Quasi ogni comando/programma (soprattutto quelli preinstallati) offrono un comodo metodo per consultare un manuale.
Per visualizzare il manuale del comando ls, per esempio, basterà digitare:
man ls
Per ulteriori informazioni è possibile consultare il manuale di man:
man man
Navigazione nel filesystem #
Struttura del filesystem #
In linux tutto è un file, pure i dispositivi collegati come mouse e tastiera. Le directory sono dei file speciali che contengono altri file.
Tutte le cartelle partono dalla root directory, ovvero /, e per rappresentare un percorso le cartelle vengono separate anch’esse da /.
Per esempio la cartella documenti nella home dell’utente giulio (/home/giulio/) avrà come percorso:
/home/giulio/documenti
Ma se ci si troverà già nella home, il percorso potrà essere espresso in modo relativo come:
documenti
Per indicare la cartella attuale si può utilizzare ., per indicare la cartella genitore (quella appena prima) si utilizza .. e per indicare la cartella home dell’utente attuale ~.
File nascosti #
Per nascondere un file o una directory si utilizza . davanti al nome.
Per esempio .testo.png è un file nascosto.
Gerarchia #
I file sono generalmente organizzati secondo una precisa gerarchia:
- /bin: file eseguibile per il sistema;
- /boot: file necessari per il processo di boot;
- /dev: dispositivi fisici (harddisk, tastiere, microfoni, …);
- /etc: file di configurazione locali alla macchina;
- /home: contiene le cartelle home degli utenti;
- /media: generalmente vengono montati dispositivi rimovibili (gestita dal sistema);
- /mnt: utilizzata per montare dispositivi;
- /proc: contiene i processi del sistema;
- /root: home dell’utente root;
- /tmp: file temporanei, viene montata in RAM;
- /usr: file di sistema relativi agli utenti;
Per una lista più esaustiva utilizzare il comando:
man hier
ls #
Il comando ls (diminutivo di list) visualizza il contenuto di una directory.
ls /home/giulio
Se invocato senza argomento utilizza la directory attuale.
–recursive / -R #
ls -R
Visualizza il contenuto delle sottodirectory in modo ricorsivo.
–all / -a #
ls -a
Visualizza anche i file nascosti.
-l #
ls -l
Visualizza informazioni aggiuntive riguardanti i file.
Con --human/-h le dimensioni saranno rappresentate con una scala adeguata e non in byte.
pwd #
Il comando pwd (acronimo di print working directory) visualizza la cartella in cui ci troviamo.
cd #
Il comando cd (acronimo di change directory) ci permette di cambiare la cartella in cui ci troviamo.
cd /home/giulio/documenti
Se non viene fornito un percorso utilizza la cartella home.
mount #
Il comando mount permette di montare un filesystem in una directory del sistema.
mount /dev/sda1 /mnt
È possibile specificare le directory di default nel file /etc/fstab, compreso se eseguire l’auto-mount.
Lavorare con file e cartelle #
cp #
Copia un file.
cp testo.txt copiaTesto.txt
mv #
Muove un file.
mv testo.txt nuovoTesto.txt
rm #
Rimuove permanentemente un file.
rm testo.txt
–recursive / -r / -R #
Viene utilizzato per rimuovere una directory.
rm -r cartella
touch #
Il comando touch permette di creare un file vuoto in una directory.
touch testo.txt
Come per ogni comando è possibile specificare un percorso assoluto:
touch /home/giulio/testo.txt
mkdir #
Il comando mkdir viene usato per creare una directory.
mkdir cartella
–parents / -p #
Con il parametro -p le cartelle superiori vengono create se non esistono.
Se per esempio vogliamo creare una cartella /home/giulio/documenti/cartella, ma la cartella documenti non esiste, è possibile crearla automaticamente con -p.
chmod #
Per cambiare i permessi di lettura, scrittura ed esecuzione di un file o cartella si può utilizzare il comando chmod.
TODO: finire
chown #
Ogni file o cartella ha un utente proprietario e un gruppo proprietario.
Per modificarli si utilizza il comando chown.
TODO: finire
Gestione pacchetti #
TODO: finire
apt #
pacman #
Programmi utili #
dmesg #
Visualizza i log del kernel.
ip #
Visualizza e modifica le proprietà delle interfacce di rete.
address #
Con il parametro address è possibile visualizzare gli indirizzi ip e MAC.
ip address
Questo parametro può essere abbreviato fino ad a.
ip a
ssh #
Permette di connettersi ad un server remoto via ssh.
ssh giulio@pc.local
Se il nome utente non viene specificato viene utilizzato quello dell’utente che esegue il comando.
-p #
È possibile specificare la porta del server con il parametro -p.
ssh -p 2222 giulio@pc.local
La porta utilizzata normalmente è la 22.
scp #
scp permette di copiare file da un computer all’altro tramite il protocollo ssh.
La sintassi è identica a cp, il file remoto (sorgente o destinazione che sia) va preceduto da utente@hostname:.
Esempio di copia di un file locale a una macchina chiamata server:
scp file.txt giulio@server.local:file.txt
clear #
Pulisce l’output della console.
Può essere utilizzata la scorciatoia Ctrl + l.
exit #
Esce dalla sessione attuale.
Può essere utilizzata la scorciatoia Ctrl + d.
su #
Permette di cambiare utente attuale:
su franco
Se non viene specificato nessun utente viene utilizzato quello di root.
sudo #
Permette di eseguire un comando come utente root.
sudo cp file.txt testo.txt
halt / poweroff / shutdown #
Per spegnere il sistema si possono utilizzare molti comandi, alcuni dei quali:
- halt
- poweroff
- shutdown now
free #
Visualizza la memoria (RAM) libera.
Con --human/-h verrà utilizzata una scala adeguata.
top #
Visualizza una tabella che mostra le risorse del sistema e i processi in esecuzione.
Una versione più avanzata è htop.
ps #
Riporta i processi attuali.
Per vedere i processi nel sistema utilizzare i parametri aux.
pstree #
Riporta un albero dei processi.
uptime #
Riporta il tempo passato dall’accensione del sistema.
fdisk #
Utility per visualizzare i dettagli delle partizioni ed eventualmente formattarle, crearle ed eliminarle.
lsblk #
Mostra i dispositivi di archiviazione connessi e le rispettive partizioni.
id #
Visualizza l’id dell’utente e dei gruppi a cui appartiene.
id giulio
nano #
Editor di testo molto semplice.
Gestione degli utenti #
Aggiungere utenti #
useradd ciccio
Questo però non aggiunge la cartella home di questo utente. Per aggiungerla usare il parametro --create-home/-m.
TODO #
TODO: finire
raspi-config
lscpu
cat
gcc