Banner

Imparare Linux

Imparare Linux. Sono due anni che sbatto la testa contro questo sistema operativo, senza peraltro fare grandi progressi. Quando finalmente credo di avere capito qualcosa di importante, scopro che ho solo aggiunto un piccolo tassello ad un mosaico molto, ma molto ampio. La maggiore parte delle volte mi limito a copiare soluzioni create da altri senza comprenderne appieno il significato.
Stufo di questo stato di cose ho preso una decisione: installare una distribuzione minimale che mi consenta di usare solo il terminale. Voglio mettermi nelle condizioni di essere obbligato a usare soltanto la riga di comando.
Sì, perché Linux, per quanto sia provvisto di numerosi ambienti grafici, è strutturato in modo che OGNI cosa può (e in alcuni casi DEVE) essere fatta con i comandi del terminale; e non c'è utente, ingenuo o esperto, che prima o poi non debba utilizzare questo strumento potente. L'ambiente grafico, NON è così maturo, da permettere la gestione totale del S.O. È impossibile avvicinarsi a Linux pensando di evitare la riga di comando.

Linux è "la riga di comando".

Facciamocene una ragione. imparare Linux significa imparare la shell....

Di seguito vi illustro il mio modo di affrontare il percorso per imparare Linux.

Scelta della Distro:

Poiché la uso da più di un anno, ho pensato di adottare Debian Squeeze Gnome, a cui ho eliminato il menù dalla barra degli strumenti in alto, in modo da non essere tentato di usarlo. Ho pure impostato l'avvio automatico del terminale quando accedo al Sistema Operativo, così da avere la shell in bella mostra al centro dello schermo pronta per essere usata.
È un pò da pazzi, ma ho formattato la partizione che ospita Linux per installarlo nuovamente, in modo da essere obbligato, fin da subito di usare la shell. Il mio portatile, un Mac Book Pro 13" 8.1 dell'Aprile 2011, necessita di varie configurazioni prima di poter essere usato al meglio con Debian: ho bisogno di installare i driver per la scheda video e per la scheda WiFi, di passare al kernel 3.2, di aggiornare la lista dei repository per poter installare Google Chrome, di modificare la tabella delle partizioni fstab e altri piccoli dettagli che richiedono l'uso della shell. Quind la situazione ideale per cominciare ad usare il terminale.

Cosa sapere:

È ovviamente necessario avere un minimo di cognizioni per essere quantomeno in grado di muovere i primi passi. Non c'è niente di più frustrante che avere il terminale davanti agli occhi e non sapere cosa fare.
Ho consultato diversi siti sulle basi di Linux, su ciò che è necessario sapere per fare qualcosa, ma credo che le informazioni essenziali siano le seguenti:

  • Uso di apt
  • Uso minimale dei comandi per muoversi nel filesystem
  • Uso minimale dei comandi per gestire i file: creazione, copia, eliminazione, spostamento e modifica permessi di ogni file.
  • Distinzione fra Amministratore e Utente normale
  • Uso di sudo. Non è essenziale ma aiuta.
  • Conoscenza del filesystem
  • Tanta, tanta, tanta pazienza e moltissima curiosità

Uso di apt:

apt (Advanced Package Tool) è un insieme di strumenti necessari per l'installazione e successiva gestione dei programmi risolvendo le dipendenze.
Vediamo i comandi più utili:

# apt-get install nome_pacchetto1, nome_pacchetto2,... nome_pacchetto3

il comando scarica, installa/aggiorna i pacchetti indicati risolvendo le dipendenze.

# apt-get remove nome_pacchetto1, nome_pacchetto2,... nome_pacchetto3

il comando rimuove/disinstalla i pacchetti indicati.

# apt-get purge nome_pacchetto1, nome_pacchetto2,... nome_pacchetto3

il comando rimuove/disinstalla i pacchetti indicati e tutti i loro file di configurazione.

# apt-get update

il comando aggiorna la lista dei pacchetti e le relative informazioni contenute nel file /etc/apt/sources.list

# apt-get upgrade

il comando permette l'aggiornamento dei programmi che sono installati nel sistema se sono presenti nuove versioni.

per ulteriori info vedere man apt-get.

# apt-cache search stringa

il comando permette la ricerca di un pacchetto il cui nome, descrizione o metadati contengono la stringa indicata.

# apt-cache search --name-only stringa

il comando permette la ricerca di un pacchetto in base al solo nome, che deve contenere la stringa data.

# apt-cache show nome_pacchetto

il comando fornisce le informazioni relative al pacchetto dato: versione, descrizione, dipendenze...

per ulteriori info vedere man apt-cache.

Facciamo un esempio.
Supponiamo di volere cercare un CAD. La prima cosa da fare è cercare un pacchetto che contenga il termine "CAD" all'interno del suo nome o della descrizione.

# apt-cache search cad

poiché l'output genera una lista molto lunga, ben oltre lo spazio a disposizione della finestra del terminale, re-inserisco il comando provvisto dell'opzione "less" per poter vedere tutte le voci scorrendole lentamente:

# apt-cache search cad | less

Scorrendo la lista ho trovato vari programmi che potrebbero fare al caso mio:

  • freecad
  • cadubi
  • kicad
  • pythoncad
  • librecad

Per avere maggiori info su ciascuno di essi, uso i seguenti comandi:

# apt-cache show freecad
# apt-cache show cadubi
# apt-cache show kicad
# apt-cache show pythoncad
# apt-cache show librecad

Dopo avere letto tutte le info ricavate dai comandi precedenti, decido che librecad è il programma che fa per me, quindi lo installo:

# apt-get install librecad

Dopo l'installazione, se tutto è andato a buon fine, è sufficiente digitare "librecad" per iniziare a disegnare.

Filesystem:

È quasi obbligatorio avere una minima idea di come sono organizzati i files e le directory, se non altro per sapere dove iniziare a cercare qualcosa che ci serve.
In Linux ogni cosa è un file: Lettore DVD, Stampante, Disco Esterno USB, Chiavetta USB, Hard Disk interno, Schede di Memoria e ogni altra cosa è trattata dal sistema come un file.

In Linux esiste una directory principale, denominata "root" e indicata con il simbolo " /"; ogni files e cartella, compresi quelli che individuano le varie periferiche a cui ho accennato sopra, sono contenuti in questa directory.
Se in un terminale impartiamo il seguente comando:

$ ls /

otteniamo la lista delle directory contenute nel primo livello:

bin - contiene i file binari, ossia i file eseguibili, i comandi per la gestione del sistema.

boot - contiene l'immagine del kernel, "vmlinuz", il programma caricato ed eseguito dal bootloader.

dev - contiene i nodi relativi ai dispositivi di sistema.

etc - contiene i file di configurazioni in formato testo e alcuni script di avvio.

home - la directory di proprietà dell'utente.

lib - contiene le librerie condivise e quelle utilizzate per l'avvio della macchina.

lib32 - contiene le librerie condivise per la versione 32 bit del sistema

lost+found - qualora durante un processo di scrittura sul disco, il pc va in crash o per qualche altro motivo, viene a mancare la corrente, i frammenti dei file recuperati al successivo riavvio, dopo la verifica del disco, vengono depositati in questa cartella.

media - contiene le directory assegnate a supporti esterni, come un HD USB, durante il montaggio automatico del dispositivo, in modo da permettere l'accesso ai suoi file.

mnt - analogo a media, contiene i dati di supporti montati manualmente per archiviazione a lungo termine come gli HD interni.

opt - contiene software opzionale. Viene usato raramente, ma in alcune distro vi si possono trovare grossi paccheti e suite come OpenOffice o i programmi di KDE.

proc - contiene le informazioni sui processi in esecuzione, che sono consultabili attraverso l' analisi di uno o più file.

root - directory personale dell'amministratore di sistema.

sbin - come bin contiene file binari, esguibili, ad uso del solo amministratore di sistema.

selinux - (Security Enhanced Linux) insieme di modifiche da applicare ai sistemi operativi unix-like per rafforzare le politiche di sicurezza.

srv - directory usata per contenere i dati distribuiti in rete dai server.

sys - contiene molte informazioni sull'hardware e sul kernel.

tmp - cartella di file temporanei.

usr - raccoglie una sua particolare versione delle directories bin, sbin e lib, con aggiunta di programmi non essenziali/fondamentali per l'uso del sistema.

var - contiene i file che subiscono variazioni frequenti, come i log, database e caselle di posta.

Amministratore e Utente:

L'amministratore, o utente root è colui il quale può effettuare qualunque operazione sul sistema.
L'utente normale può eseguire SOLTANTO una piccola parte delle operazioni eseguibili sul sistema. La lista dei comandi che può utilizzare gli è fornita dall'amministratore.
Dal prompt dei comandi si può facilmente capire se siamo loggati come amministratore o come semplice utente, è sufficiente guardare il simbolo immediatamente precedente il cursore lampeggiante:

francesco@host:~ $ il simbolo dollaro ($) indica un semplice utente il cui nome è quello riportato prima del simbolo (@), in questo caso "francesco".

root@host:/ # il simbolo cancelletto (#) indica l'utente root, l' amministratore di sistema. Inoltre il nome root prima del simbolo @ fuga ogni dubbio sul fatto che siamo amministratori del sistema.

Per diventare amministratore, se abbiamo la password necessaria per effettuare il login, è sufficiente digitare il seguente comando:

$ su
password:

e poi inserire la password quando richiesta. Durante la digitazione della parola segreta non compare niente sul monitor per ovvi motivi di sicurezza.
Per tornare al terminale in qualità di utente è sufficiente usare l'istruzione:

# exit

Si possono ottenere momentaneamente i privilegi di amministratore usando il comando:

francesco@host:/ $ sudo <comando_da_eseguire>
[sudo] password for francesco:

Il <comando_da_eseguire> è un'istruzione che per eseguire la quale sono necessari i privilegi di amministratore, come, per esempio, editare un file di configurazione per MODIFICARNE il contenuto.

francesco@host:/ $ sudo nano /etc/apt/sources.list
[sudo] password for francesco:

In questo caso la password da inserire è quella dell'utente "francesco" non dell' amministratore.

Uso di sudo:

Il comando sudo consente di eseguire operazioni con privilegi di amministratore a semplici utenti che hanno ricevuto il permesso di usare questo potente strumento. Per accedere alle possibilità offerte da sudo è necessario usare la propria password di utente senza conoscere quella di root. È un privilegio temporaneo, da usare con cautela.
In una normale installazione di Debian sudo non è abilitato. Occorre installarlo.
In qualità di amministratore impartire il seguente comando:

# apt-get install sudo

Quindi editiamo il file /etc/sudoers con il comando apposito:

# visudo

Appare il seguente testo:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL) ALL

# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d

Dopo la seguente linea

root ALL=(ALL) ALL

inserire il comando:

nome_utente ALL=(ALL) ALL

I tre ALL hanno i seguenti significati:

nome_utente ALL=(ALL) ALL
consente l'accesso di sudo da qualsiasi macchina/terminale.

nome_utente ALL=(ALL) ALL
consente di eseguire il comando sudo in qualità di utente qualsiasi.

nome_utente ALL=(ALL) ALL
consente di eseguire tutti i comandi senza eccezioni.

A questo punto è possibile usare sudo per impartire qualunque comando che richiede i permessi di root, come per esempio installare libreCAD:

$ sudo apt-get install librecad

Comandi per la Shell:

Ovviamente per usare il terminale è essenziale conoscere l'uso dei comandi dellal Shell. Ve ne sono moltissimi, ma i più importanti sono riconducili a qualche decina, forse meno.

Ottenere informazioni:
Per cercare informazioni su qualche comando, ad esempio "date" esistono diversi metodi:

  • man
  • whatis
  • info
  • --help
  • apropos
  • cartella "doc"
  • cartella "HOWTO"

man - fornisce la documentazione completa del comando.

$ man date

whatis - stampa a video una descrizione minimale dell'uso del comando.

$ whatis date

info - fornisce informazioni sul comando richiesto.

$ info date

--help - descrizione sommaria dell'istruzione.

$ date --help

apropos - mostra una lista di occorrenze che contengono il comando dato.

$ apropos date

cartella "doc" - è una cartella che contiene i documenti relativi ai programmi installati nel nostro sistema.
Essa si trova in /usr/doc o in /usr/share/doc. All'interno di essa si trovano le cartelle dei programmi per i quali esiste una documentazione. Vale la pena darvi un'occhiata per avere notizie riguardo le applicazioni installate.

cartella "HOWTO" - è situata in /usr/share/doc e contiene info su "come fare" per molti dei programmi installati sul nostro Linux.

Navigare nel filesystem:
Tre comandi rappresentano il minimo per conoscere il nostro hard disk.

  • pwd
  • ls
  • cd

pwd - stampa a video il percorso assoluto della nostra posizione.

$ pwd
/etc/apt

ls - elenca a video tutti i file e cartelle contenute nella directory corrente.

$ ls
bin dev home initrd.img.old lib32 lost+found mnt proc sbin srv tmp var vmlinuz.old
boot etc initrd.img lib

cd - consente di cambiare directory.

$ cd /etc/apt

Esistono dei simboli che ci aiutano nella navigazione:

  • ".." indica la cartella genitore; nel caso di /etc/apt, scrivendo cd .. si risale il filesystem di un ramo e si approda alla cartella /etc.
  • "~" indica la la nostra cartella. Ovunque siamo è sufficiente scrivere cd ~ e verremo proiettati direttamente nella nostra directory /home/<nostro_username>.

Linux tiene traccia di tutti i comandi usati fino a quale momento, per quella sessione, pertanto se vogliamo scrivere nuovamente un comando già inserito, è sufficiente usare i tasti freccia SU e GIÙ per visionare l'elenco delle istruzioni e scegliere quella che ci interessa.

Cercare files:
Vi sono diversi comandi che consentono la ricerca di file nel nostro PC:

  • find
  • locate
  • whereis
  • which
  • grep

Esistono due caratteri jolly usati piuttosto frequentemente: "?" e "*".

? - viene usato per indicare un segnaposto per un singolo carattere. Se viene effettuata una ricerca per trovare file che rispondono al criterio di nome con le lettere "francesc?", le possibili soluzioni sono:
francesca, francesco, francesc3, francesch...

* - viene usato come segnaposto per uno o più caratteri qualunque. Usando la ricerca precedente con le lettere "francesc*", possibili soluzioni sono:
francesca, francesco, francesc3, francesch, francesc123, francesc.conf, franceschi...

find - permette di cercare un file che risponde a certi criteri come nome, data di creazione, dimensione e altro.

$ find /etc -name sour*.*

viene cercato un file a partire dalla directory /etc e in tutte le sue sottocartelle, il cui nome ha i primi 4 caratteri corrispondenti a "sour" e estensione qualunque.

locate - questo comando effettua una ricerca in un database che contiene i file del nostro HD. Per questo motivo il tempo di ricerca risulta molto ridotto rispetto a find che invece esegue letteralmente la ricerca nelle cartelle indicate.

$ locate sour

produce una lista di file le cui prime 4 lettere sono "sour".

Per aggiornare il database è necessario impartire il comando

# updatedb

whereis - localizza le directory del file binario, del file sorgente e delle pagine man del comando indicato.

$ whereis gimp
gimp: /usr/bin/gimp /etc/gimp /usr/lib/gimp /usr/lib64/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

which - localizza la directory che contiene in comando indicato:

$ which gimp
/usr/bin/gimp

grep -permette di cercare dei files che contengono una parola specifica.

grep "apt" *.conf
apt-file.conf:# Schemes that might require user input on 'apt-file update'
listchanges.conf:[apt]
listchanges.conf:save_seen=/var/lib/apt/listchanges.db

Gestire i file:
I comandi che possono rientrare in questa categoria sono:

  • rm
  • mkdir
  • cp
  • mv
  • cat

rm - rimuove directory o file.

$ rm /home/francesco/Documenti/lista.txt

mkdir - crea una directory.

$ mkdir miaDirectory

cp - copia files e directory.

$ cp lista.txt Nuova_Lista.txt

mv - rinomina o sposta nella cartella indicata i files.

$ mv kismet.pdf Manuale_Kismet.pdf

cat - concatena dei files e stampa il risultato sulla periferica standard di output.

$ cat elenco.txt lista.txt

Periferiche:
Ovviamente non possono mancare i comandi per recuperare dati sull'hardware del sistema.

  • lsmod
  • lspci
  • lsusb
  • modinfo
  • dmesg
  • iwconfig
  • lshw

lsmod - mostra lo stato dei moduli nel kernel.

$ lsmod

lspci - elenca le periferiche PCI.

$ lspci

lsusb - elenca le periferiche USB.

$ lsusb

modinfo - mostra informazioni su un modulo del kernel.

$ modinfo b43

dmesg - visualizza sulla periferica standard di visualizzazione i messaggi contenuti nel buffer del kernel.

$ dmesg

iwconfig - mostra e configura un'interfaccia di rete WiFi (solo root).

# iwconfig

lshw - mostra una lista dettagliatissima dell'hardware installato sul nostro sistema. Sul mio Linux questo comando NON è presente di default; ho dovuto installarlo.

# lshw

File di configurazione:

Una cosa da conoscere sono i file di configurazione, Ve ne sono molti, quelli che ho avuto modo di gestire sono i seguenti:

  • /etc/fstab - contiene informazioni sui vari filesystem.
  • /etc/apt/sources.list - contiene la lista dei repositories.
  • /etc/gdm3/greeter.gconf-defaults - contiene alcune impostazioni per la schermata di Login.
  • /etc/default/grub - contiene le impostazioni del bootloader Grub2

Ambiente:

Shell:
Per impartire comandi a Linux è necessario disporre di un terminale, detto anche shell, con cui dialogare con il sistema operativo. Ve ne sono diversi, ognuno con caratteristiche che lo contraddistinguono dagli altri.
Per conoscere quale tipo di shell stiamo usando digitare:

$ echo $0
bash

oppure

$ echo $SHELL
/bin/bash

Per recuperare la lista delle shell presenti sul nostro sistema, è sufficiente mostrare il contenuto del seguente file:

$ cat /etc/shells
# /etc/shells: valid login shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash

Se vogliamo cambiare terminale esiste un apposito comando:

$ chsh
Password:
Cambio della shell di login di francesco
Inserire il nuovo valore o premere INVIO per quello predefinito
Shell di login [/bin/bash]: /bin/dash

oppure:

$ chsh -s /bin/dash

Per inserire correttamente il nome della nuova shell è necessario scrivere il suo nome comprensivo del percorso completo così come appare nella lista sopra riportata. Al successivo riavvio di Linux verrà caricato il nuovo terminale.

Linux mette a disposizione 6 console virtuali avviabili con la combinazione di tasti CTRL+ALT+F1...F6.
Per passare dall'una all'altra quando siamo in una di esse usare la combinazione ALT+F1...F6.
Per uscire dai terminali e tornare al desktop premere ALT+F7.

Variabili di Ambiente:
Ve ne sono diverse e contengono dati importanti per il nostro sistema.
Per visionare le variabili di ambiete impartire il seguente comando:

$ export

Sono varibili di ambiente, per esempio, le seguenti:

  • HOME='/home/francesco' - ovviamente la nostra cartella di utente.
  • LANG='it_IT.utf8' - la lingua impostata nel sistema.
  • LOGNAME='francesco' - il nostro nome per effettuare il login.
  • PATH='/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games' - le cartelle in cui cercare i file eseguibili.
Siti Ufficiali Editor Free Guide Online Utility
Microsoft Visual Studio MSDN InnoSetup
Apple XCode Documentazione .Net Cyber Installer
Oracle NetBeans Apple Developer NSIS
Debian Eclipse W3C Diagram Online
Distrowatch Bluefish W3C Validator Junior Icon Editor
Brackets W3Schools Edit Cursors Online
TextWrangler

Sito realizzato da Fiaschi Francesco - Aggiornamento Dicembre 2018

W3C - XHTML 1.1 Validated