" itemprop="description"/>

FaciLinux

Guide Facili per Linux

A volte, sui sistemi GNU/Linux, ci si può trovare nel dubbio di quanti e quali siano i dischi presenti nel sistema, e di come siano rappresentate e rese disponibili nei punti di mount le loro partizioni.
In realtà esiste un comando molto semplice a terminale per scoprire moltissime informazioni sui dischi collegati a sistema, comprese le periferiche usb (chiavette usb, SD card...).
Il comando di cui trattiamo in questa veloce guida è lsblk.
Se lanciato senza argomenti, il comando mostra un output simile al seguente:

$ lsblk 
NAME                                            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                                               8:0    0 238,5G  0 disk  
├─sda1                                            8:1    0   600M  0 part  /boot/efi
├─sda2                                            8:2    0     2G  0 part  /boot
└─sda3                                            8:3    0 235,9G  0 part  
  ├─mypc-root                       253:0    0  37,3G  0 lvm   
  │ └─luks-c8b84b2a-1c44-4fe4-89e3-732c025badac 253:2    0  37,2G  0 crypt /
  ├─mypc-swap                       253:1    0  14,9G  0 lvm   
  │ └─luks-da72b4f1-4d86-43e8-933d-e045a4b0d154 253:3    0  14,9G  0 crypt [SWAP]
  └─mypc-home                       253:4    0 183,7G  0 lvm   
    └─luks-c696aa66-d91a-43c8-b4c6-6f7908bd1cd4 253:5    0 183,7G  0 crypt /home

Tralasciando le parti "complicate" (i più esperti noteranno subito le partizioni criptate con luks), è immediato visualizzare che il computer ha collegato un unico disco, invididuato a sistema con il device sda; tae disco è inoltre partizionato in 3 partizioni primarie (sda1, sda2 ed sda3); l'ultima è un volume criptato, che contiene a sua volta un LVM (per chi non consoca LVM c'è un articolo introduttivo in merito).

Se si collega un nuovo dispositivo come ad esempio una chiavetta usb e si rilancia il comand lsblk si otterrà la seguente schermata:

$ lsblk 
NAME                                            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                                               8:0    0 238,5G  0 disk  
├─sda1                                            8:1    0   600M  0 part  /boot/efi
├─sda2                                            8:2    0     2G  0 part  /boot
└─sda3                                            8:3    0 235,9G  0 part  
  ├─mypc-root                       253:0    0  37,3G  0 lvm   
  │ └─luks-c8b84b2a-1c44-4fe4-89e3-732c025badac 253:2    0  37,2G  0 crypt /
  ├─mypc-swap                       253:1    0  14,9G  0 lvm   
  │ └─luks-da72b4f1-4d86-43e8-933d-e045a4b0d154 253:3    0  14,9G  0 crypt [SWAP]
  └─mypc-home                       253:4    0 183,7G  0 lvm   
    └─luks-c696aa66-d91a-43c8-b4c6-6f7908bd1cd4 253:5    0 183,7G  0 crypt /home
sdb                                               8:16   1   922M  0 disk  /run/media/myuser/F831-875C

Appare subito evidente che è apparso un nuovo dispositivo, sdb, che è stato già montato automaticamente dal sistema nella posizione /run/media/myuser/F831-875C.

Altre informazioni

Il comando lsblk può essere lanciato anche con altri argomenti, per ottenere informazioni relative, ad esempio, al tipo di filesystem con cui sono formattate le partizioni (argomento --fs), o per concentrare la ricerca su un singolo device.
Naturalmente è possibile una combinazione di argomenti; il comando lsbkl --fs /dev/sdb ad esempio ritorna questo output:

NAME FSTYPE LABEL UUID                                 MOUNTPOINT
sdb  vfat         F831-875C                            /run/media/myuser/F831-875C

L'elenco completo degli argomenti supportati da lsblk è disponibile con: lsblk --help.


Se ti piace il contenuto di questo sito e vuoi supportarmi offrendomi un caffè, una birra o una pizza, fai una piccola donazione!


Introduzione a LVM

- Posted in linux by

Sui sistemi GNU/Linux, oltre alle partizioni standard, è possibile definire dei Volumi Logici.
I volumi logici sono dei "contenitori" che possono astrarre dalla dimensione dei singoli dischi collegati al computer e creare volumi che si estendono si più dischi fisici, o in partizioni che sarebbero fisicamente separate di uno stesso disco, o una combinazione delle possibilità sopra descritte. Aggiungendo nuovi dischi a un sistema GNU/Linux è possibile estendere i Volumi Logici già configurati per ottenere nuovo spazio sulle partizioni che ne hanno bisogno.
I volumi logici e la gestione dei volumi logici semplificano la gestione dello spazio su disco.
Se un filesystem che ospita un volume logico ha bisogno di più spazio, può essere allocato al suo volume logico dallo spazio libero nel suo gruppo di volumi e il file system può essere ridimensionato.
Se un disco inizia a guastarsi, un disco sostitutivo può essere registrato come volume fisico con il gruppo di volumi e le estensioni logiche del volume possono essere migrate sul nuovo disco.

NB. Non è mai una best practice usare LVM come sistema di gestione delle rotture hardware di un disco. Lo scopo primario di LVM è quello di gestire dinamicamente lo spazio sui volumi logici. La gestione dei fail di disco viene gestita meglio con altri metodi (ridondanza, RAID, backup, virtualizzazione....).

Definizioni per LVM

Device fisici: I dispositivi fisici sono i dispositivi di archiviazione utilizzati per salvare i dati archiviati in un volume logico. Questi sono dispositivi a blocchi e possono essere partizioni del disco, interi dischi, array RAID o dischi SAN. Un dispositivo deve essere inizializzato come volume fisico LVM per essere utilizzato con LVM. L'intero dispositivo verrà utilizzato come volume fisico.
Volumi fisici (PVs): È necessario inizializzare un dispositivo come volume fisico prima di utilizzarlo in un sistema LVM. Gli strumenti di LVM segmentano i volumi fisici in estensioni fisiche (PE), che sono piccoli blocchi di dati che agiscono come il più piccolo blocco di archiviazione su un volume fisico.
Volume groups (VGs): I volume groups sono pool di archiviazione costituiti da uno o più volumi fisici. Questo è l’equivalente funzionale di un intero disco nella memoria di base. Un PV può essere assegnato solo a un singolo VG. Un VG può essere costituito da spazio inutilizzato e un numero qualsiasi di volumi logici.
Logical Volumes (LVs): I logical volumes vengono creati da estensioni fisiche libere in un VG e forniscono il dispositivo di "memorizzazione" utilizzato da applicazioni, utenti e sistema operativo. I LV sono una collezione di estensioni logiche (LE), che mappano le estensioni fisiche, il più piccolo blocco di archiviazione di un PV. Per impostazione predefinita, ogni LE è mappato su un PE.

I pdf firmati sono entrati nella quotidianità della vita digitale.
Ma come controllare che un pdf sia davvero firmato in Linux?
E di controllare la validità della (o delle) firme apposte?

Un tool compreso nelle poppler-utils permette di verificare la presenza e la validità delle firme apposte sui file pdf.

Installazione

Sistemi RedHat e simili

sudo dnf install poppler-utils

Sistemi Debian e simili

sudo apt install poppler-utils

Utilizzo

pdfsig path_to_pdf_file.pdf

Esempio

$ pdfsig test.pdf 
Digital Signature Info of: test.pdf
Signature #1:
  - Signer Certificate Common Name: NOME COGNOME
  - Signer full Distinguished Name: givenName=NOME,dnQualifier=2020711XXXXX,CN=COGNOME NOME,serialNumber=TINIT-XXXXXXXXXXXXXXXX,SN=COGNOME,C=IT
  - Signing Time: Dec 17 2021 11:00:00
  - Signing Hash Algorithm: SHA-256
  - Signature Type: ETSI.CAdES.detached
  - Signed Ranges: [0 - 490397], [523167 - 530133]
  - Not total document signed
  - Signature Validation: Signature is Valid.
  - Certificate Validation: Certificate issuer is unknown.

Sulle recenti versioni di Gnome Shell è scomparso il menu di Nautilus (File) per visualizzare le directory prima dei files. Se questa mancanza vi fa impazzire, ecco come rimediare; aprite un terminale e date questo comando

gsettings set org.gtk.Settings.FileChooser sort-directories-first true

e il gioco è fatto.

Gli utenti di Gnome e KDE possono godere di azioni di crittazione/decrittazione di file direttamente dai rispettivi filemanager, cliccando con il tasto destro del mouse sul file interessato.
Thunar, il FileManager di Xfce, non presenta questa funzionalità integrata ma, grazie alle “Azioni personalizzate”, è possibile estenderne il comportamento; vediamo come fare.

Prerequisiti

Innanzitutto è necessario installare i pacchetti necessari; per Debian/Ubuntu il comando da dare è:

user@debby:~$ sudo apt install seahorse seahorse-nautilus seahorse-daemon

Seahorse è un’interfaccia grafica per gestire le chiavi GPG negli ambienti Gnome/Gtk, mentre del pacchetto seahorse-nautilus ci serve il binario seahorse-tool, come vedremo più avanti.

Azione personalizzata “Cifra..”

  • Aprire Thunar e selezionare il menu Modifica > Imposta azioni personalizzate, quindi:
  • Premere sul pulsante +
  • Nel campo Nome inserire “Cifra…”
  • Nel campo Descrizione inserire “cifra con GPG”
  • Nel campo Comando inserire “seahorse-tool -e %F”
  • Selezionare un’icona a proprio piacimento
  • Nel tab “Condizioni di visibilità” selezionare tutte le tipologie di file, escludendo le cartelle e come “Schema del file” mantenere il predefinito “*” Dato che un video vale più di mille parole, ecco qui sotto il riepilogo di quanto fatto: Azione personalizzata "Cifra..."

Azione personalizzata “Decifra..”

  • Aprire Thunar e selezionare il menu Modifica > Imposta azioni personalizzate, quindi:
  • Premere sul pulsante +
  • Nel campo Nome inserire “Decifra…”
  • Nel campo Descrizione inserire “decifra con GPG”
  • Nel campo Comando inserire “seahorse-tool -d %f”
  • Selezionare un’icona a proprio piacimento
  • Nel tab “Condizioni di visibilità” selezionare solo “Altri file” e come “Schema del file” impostare “.gpg;.pgp” Anche in questo caso ecco qui sotto il riepilogo a video di quanto fatto: enter image description here

SSH Port Forwarding

- Posted in linux by

Introduzione

SSH Port Forwarding è un meccanismo che utilizza SSH per il tunneling delle porte tcp da client a server o viceversa. Può essere utilizzato per aggiungere la crittografia alle applicazioni legacy o passare attraverso i firewall. SSH Tunneling

Local Forwarding

E' utilizzato per inoltrare una connessione indirizzata a una porta del client verso una porta di un server, eventualmente differente dal server ssh utilizzato.

In SSH, il local port forwarding viene impostato con l'opzione -L:

ssh -L 80:intra.example.com:80 gw.example.com

Questo esempio crea un tunnel ssh al server gw.example.com (jump server) e inoltra le connessioni indirizzate alla porta 80 sul computer locale alla porta 80 del server intra.example.com attraverso il tunnel.

Per impostazione predefinita, vengono inoltrate le connessioni indirizzate alla porta 80 di qualsiasi ip del client, quindi altri client potrebbero utilizzare il tunnel. Tuttavia, questo può essere limitato ai fornendo un indirizzo di bind:

ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com

L'opzione LocalForward nel file di configurazione del client ssh /etc/ssh/ssh_config può essere utilizzata per configurare il bind senza doverlo specificare nel comando

LocalForward  

Specifies that a TCP port on the local machine be forwarded over the secure channel to the specified host and port from the remote machine.
The first argument must be [bind_address:]port and the second argument must be host:port.

Esempio

ssh -f user@personal-server.com -L 2000:personal-server.com:25 -N

Il flag -f imposta ssh in background prima che venga eseguito il comando.
Il flag -L 2000:personal-server.com:25 imposta un Local Forwarding nella forma -L local-port:host:remote-port.
Il flag -N imposta ssh in modo che non venga eseguito alcun comando sul server remoto.

Lavorando a riga di comando su una piattaforma Linux, prima o poi, abbiamo bisogno di un aiuto sui comandi della shell. Anche se sono disponibili i comandi di sistema man e whatis, a volte l'aiuto del primo è troppo descrittivo mentre il secondo lo è poco.

Ci sono poi applicazioni di terze parti come cheat, che mostra l'aiuto sul comando della shell anche quando il computer non è connesso a Internet, ma solo su comandi predefiniti.

E' possibile creare un nuovo comando attraverso uno script scritto da Jackson (https://www.mankier.com/explain), che è in grado di spiegare i comandi di shell all'interno della shell bash in modo molto efficace e indovinando quale parte della pagina di aiuto sia la migliore da visualizzare. Il comando si chiama explain.

L'unico requisito è il pacchetto curl. Se non è già installato sul sistema in uso, installarlo con i comandi:

apt-get install curl

Installazione del comando explain in Linux

Bisogna inserire il codice sottostante come nel file ~/.bashrc dell'utente.

# Add this to ~/.bash_profile or ~/.bashrc
explain () {
  if [ "$#" -eq 0 ]; then
    while read  -p "Command: " cmd; do
      curl -Gs "https://www.mankier.com/api/v2/explain/?cols="$(tput cols) --data-urlencode "q=$cmd"
    done
    echo "Bye!"
  elif [ "$#" -eq 1 ]; then
    curl -Gs "https://www.mankier.com/api/v2/explain/?cols="$(tput cols) --data-urlencode "q=$1"
  else
    echo "Usage"
    echo "explain                  interactive mode."
    echo "explain 'cmd -o | ...'   one quoted command to explain it."
  fi
}

# Update 26-03-2015. If using this command gives no output, see if running a simple fetch causes this error:
# $ curl https://www.mankier.com
# curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).
# If so, try specifying a cipher in the curl commands: curl --ciphers ecdhe_ecdsa_aes_128_sha

https://www.mankier.com/blog/explaining-shell-commands-in-the-shell.html

Dopo aver inserito il codice e averlo salvato, è necessario disconnettersi dalla sessione corrente e accedere nuovamente per rendere effettive le modifiche.

Utilizzo del comando explain

Proviamo alcuni esempi:

  1. Cosa fa 'du -h': explain 'du -h'

  2. Cosa fa 'tar -zxvf': explain 'tar -zxvf'

  3. Confrontare due comandi
    E' possibile andare in modalità interattiva semplicemente digitando il comando explain e poi digitare i comandi uno dopo l'altro per vedere cosa fanno.
    Per uscire dalla modalità interattiva, è sufficiente fare Ctrl + c.

  4. E' possibile chiedere cosa fanno più comandi in pipeline: explain 'ls -l | grep -i Desktop'

Dokuwiki è un potente wiki opensource che permette di editare, far versioning di documenti e caricare file e immagini, anch'essi sottoposti a controllo di versione.

Il controllo di versione funziona in modo trasparente se si utilizza l'interfaccia web di dokuwiki, ma supponiamo di avere dei file che vengono generati sul server che ospita la vostra istanza dokuwiki, e supponiamo di volerli rendere disponibili come media all'interno di dokuwiki stesso, con il controllo di versione.

Dokuwiki non offre nessuno strumento nativo per questo tipo di esigenza ma, con un po' di reverse engineering di come funziona il sistema di versioning di dokuwiki è possibile realizzare tale istanza, ovvero copiare localmente un file all'interno della struttura media di dokuwiki, mantenendone il versioning (potendo quindi ripristinare versioni precedenti, qualora lo si rendesse necessario).

Prima di entrare nella modalità operativa occorre spiegare un attimo come funziona dokuwiki e il suo sistema di versioning. Dokuwiki è un sistema che funziona senza database, quindi tutta la logica di funzionamento è presente all'interno di directory e files nella struttura dell'istanza di dokuwiki.

Supponiamo di voler mantenere aggiornato, con controllo di versione, il file logs.zip creato da uno script sul server stesso che monta l'istanza di dokuwiki. Supponiamo di mantenere il file logs.zip all'interno del contenitore generale media.

Se si fa l'upload da interfaccia web del file logs.zip, quello che avviene a livello di filesystem è che il file viene salvato nella directory <path_dokuwiki>/data/media . Se il file viene sostituito da una versione più recente, il media manager compie queste azioni:

  1. Calcola la data di ultima modifica in timestamp unix del file logs.zip originale
  2. Sposta il file logs.zip originale nella directory <path_dokuwiki>/data/media_attic e lo rinomina come logs.<unix_timestamp_ultima_modifica>.zip
  3. Aggiunge al file <path_dokuwiki>/data/media_meta/logs.zip.changes una riga, la cui sintassi viene descritta più avanti, che mantiene le informazioni per il versioning
  4. Copia il nuovo file logs.zip in <path_dokuwiki>/data/media

Volendo fare "l'upload" del file logs.zip dall'interno del server stesso occorre quindi simulare le operazioni svolte dal media manager di dokuwiki.

La sintassi dei file con estensione .changes, che sono responsabili del mantenimento di versione, è la seguente; per ogni nuova versione del file caricata viene aggiunta una riga contenente le seguenti informazioni, separate da tabulazione:

  1. tempo di ultima modifica in unix timestamp del nuovo file
  2. ip di origine
  3. Flag di creazione/modifica
  4. path del file in notazione namespace
  5. utente che ha fatto la modifica
  6. riga "creata" se creazione
  7. dimensione del file in byte

Usando uno script bash è possibile eseguire tutte le operazioni e i calcoli necessari, in particolare:

  1. tempo di ultima modifica in unix timestamp del nuovo file stat -c %Y
  2. ip di origine 127.0.0.1
  3. Flag di creazione/modifica C oppure E
  4. path del file in notazione namespace logs.zip
  5. utente che ha fatto la modifica (il proprio utente dokuwiki va bene)
  6. riga "creata" se creazione
  7. dimensione del file in byte ls -l file| awk '{print $5}'

Un ipotetico script in bash, quindi, conterrebbe le seguenti righe:

fileupd="<path>/logs.zip"
lastmod=$(stat -c %Y $fileupd)
fileupdsize=$(ls -l $fileupd| awk '{print $5}'
echo "$lastmod    127.0.0.1    E    logs.zip    mydoku-user        $fileupdsize >> <path_dokuwiki>/data/media_meta/logs.zip

Nello stesso script dovrebbe comparire anche la linea relativa allo spostamento e alla rinomina della vecchia versione del file logs.zip all'interno della directory <path_dokuwiki>/data/media_attic:

mv <path_dokuwiki>/media/logs.zip <path_dokuwiki>/media_attic/logs.$(stat -c %Y <path_dokuwiki>/media/logs.zip).zip

Infine, resta da copiare il nuovo file logs.zip all'interno della directory media e sistemarne i permessi perché sia leggibile all'utente che esegue l'istanza web (per Debian/Ubuntu, ad esempio, è l'utente www-data

mv $fileupd <path_dokuwiki>/media/
chown www-data:www-data <path_dokuwiki>/media/logs.zip

Per rendere il tutto automatico è possibile sfruttare naturalmente cron/anacron, così da far eseguire lo script senza necessità di interazione.

Sfruttando il software illustrato nell'articolo "Scaricare un video di Youtube da linea di comando", è possibile anche ottenere un file audio da un video o una playlist di Youtube.

Il processo è composto da due passi principali:

  1. viene scaricato il media nel formato originario (.webm)
  2. il media viene convertito nel formato desiderato (.mp3)

Per il passo di conversione il software youtube-dl si appoggia a:

  • avconv
  • ffmpeg (consigliato)

Andiamo quindi ad installare il software ffmpeg con il comando

sudo apt-get update
sudo apt-get install ffmpeg
ffmpeg -version

Per convertire in un file mp3 un video di Youtube possiamo utilizzare il comando

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 https://www.youtube.com/watch?v=xymjDyGIvQ4

dove

-i - ignora gli errori
--extract-audio - estrae la traccia audio
--audio-format mp3 - converte l'audio in formato mp3
--audio-quality 0 - imposta la qualità audio migliore

Se vogliamo aggiungere i tag ID3 partendo dai metadati del video di Youtube basta aggiungere lo switch --add-metadata

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 --add-metadata https://www.youtube.com/watch?v=xymjDyGIvQ4

Sfruttando il software illustrato nell'articolo "Scaricare un video di Youtube da linea di comando", è possibile anche ottenere un file audio da un video o una playlist di Youtube.

Il processo è composto da due passi principali:

  1. viene scaricato il media nel formato originario (.webm)
  2. il media viene convertito nel formato desiderato (.mp3)

Per il passo di conversione il software youtube-dl si appoggia a:

  • avconv
  • ffmpeg (consigliato)

Andiamo quindi ad installare il software ffmpeg con il comando

sudo apt-get update
sudo apt-get install ffmpeg
ffmpeg -version

Per convertire in un file mp3 un video di Youtube possiamo utilizzare il comando

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 https://www.youtube.com/watch?v=xymjDyGIvQ4

dove

-i - ignora gli errori
--extract-audio - estrae la traccia audio
--audio-format mp3 - converte l'audio in formato mp3
--audio-quality 0 - imposta la qualità audio migliore

Se vogliamo aggiungere i tag ID3 partendo dai metadati del video di Youtube basta aggiungere lo switch --add-metadata

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 --add-metadata https://www.youtube.com/watch?v=xymjDyGIvQ4
Gli articoli presenti in questo sito sono di proprietà degli autori di FaciLinux
Idee, consigli? Scrivici su
info-at-berretto.eu
Questo blog è basato su HTMLy