Archivi tag: linux

Aggiornare GRUB dopo l’upgrade a Windows 10

Se hai un sistema dual-boot Linux+Windows e hai recentemente aggiornamento Windows alla versione 10, il menù di Grub mostrerà ancora la versione precedente. E’ solo una questione di visualizzazione: il boot loader avvierà correttamente la nuova versione. Occorre quindi aprire con un editor il file di configurazione:

$ sudo gedit /boot/grub/grub.cfg

e modificare a mano la voce di menù. Salvate le modifiche non è necessario fare altro. Al prossimo avvio Grub mostrerà il menù secondo quanto impostato.

Se grub viene aggiornato…

Un aggiornamento di grub potrebbe sovrascrivere queste impostazioni. Per renderle definitive una volta per tutte occorre disabilitare l’os probing. Procedere nel seguente modo:

  1. aprire il file /boot/grub/grub.cfg e copiare il menù entry relativo a Windows.
  2. aprire il file /etc/grub.d/40_custom e incollare il menù entry alla fine.
  3. aprire il file /etc/default/grub e aggiungere la riga GRUB_DISABLE_OS_PROBER=true

Eseguire alla fine comando:

$sudo update-grub2

 

Riunire gli allegati delle mail multi-part

Capita a volte che qualcuno vi invii per e-mail un allegato molto grande e di riceverlo suddiviso in più parti in messaggi separati.

Questo può succedere anche quando si utilizzano quei dispositivi all-in-one che svolgono le funzioni di fotocopiatrice, scanner e fax. Una volta che il documento viene acquisito, la macchina allega il documento generato (solitamente in formato PDF) ad una email che viene poi inviata ad un indirizzo di posta elettronica specificato. Purtroppo se si supera la dimensione massima consentita la maggior parte dei dispositivi divide il documento in più parti che vengono inviate singolarmente in più email separate. Il destinatario dovrà quindi riunirle per poter visualizzare il documento originale.

Ogni allegato viene codificato secondo lo standard MIME. Supponiamo di aver salvato da qualche parte tutte le parti ricevute come part_1, part_2, part_n… Per riunirle è sufficiente aprire la console e inserire questo comando:

$ cat part_1 part_2 <...> | munpack

Il comando munpack per di decodificare dati in formato MIME. Se non fosse presente nel sistema gli utenti Debian/Ubuntu posso installarlo così:

$ sudo apt-get install mpack

Gli utenti Mac possono installarlo direttamente da MacPorts:

$ sudo port install mpack

Ottenere l’IP pubblico da terminale

Il modo migliore è quello di utilizzare un sito web pubblico che mostri l’IP del computer richiedente, ottenendo così l’indirizzo IP che si utilizza per navigare in rete.

Esistono molti siti che offrono questa funzione e ce ne è uno in particolare che restituisce la stringa senza tag o informazioni aggiuntive e dunque si presta bene per essere utilizzato negli script.

Dalla Bash è sufficiente scrivere:

# wget -qO- http://ipecho.net/plain

oppure

# curl http://ipecho.net/plain

se si desidera utilizzare Curl.

Estrarre gli indirizzi e-mail da un file di testo

Per estrarre tutti gli indirizzi email contenuti in un file di testo (ad esempio un messaggio email con tutte le intestazioni) è sufficiente l’utilizzo di grep e di altri tool da shell:

$ grep -o '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' EMAIL_SAMPLES.TXT | sort | uniq -i

Vediamo in dettaglio come funziona questa pipe:

  • grep -o scansiona il file di testo indicato e stampa tutte le stringhe che corrispondo ai criteri specificati dall’espressione regolare;
  • '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' è un’espressione regolare che identifica un indirizzo email;
  • sort ordina i risultati ottenuti da grep;
  • uniq -i filtra i risultati in modo che ciascun indirizzo appaia una sola volta.

E’ anche possibile inglobare questo comando in uno shell script:

#!/usr/bin/env bash
if [ -f "$1" ]; then
    grep -o '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' "$1" | sort | uniq -i
else
    echo "Expected a file at $1, but it doesn't   exist." >&2
    exit 1
fi

e richiamarlo dal prompt passandogli come parametro il nostro file da analizzare:

$ script.sh EMAIL_SAMPLES.TXT

 

Trovare tutti i file che contengono una stringa di testo

Da shell eseguire il comando:

$ grep -rnw 'directory' -e "pattern"

-r o -R esegue una ricerca in tutte le sottocartelle (ricerca recursive), -n mostra il numero di linea and -w ricerca la parola intera. Se si aggiunge -l (lettera L) verrà mostrato solo il nome del file.

Oltre a questi è possibile utilizzare i parametri --exclude--include per effettuare una ricerca più mirata:

$ grep --include=\*.{c,h} -rnw 'directory' -e "pattern"

Il comando ricerca la stringa pattern solo nei file che hanno estensione .c o .h. Allo stesso modo il parametro --exclude:

$ grep --exclude=*.o -rnw 'directory' -e "pattern"

esclude dalla ricerca i file che terminano con l’estensione .o.

Anziché file è possibile include o escludere intere directory attraverso i parametri --exclude-dir--include-dir, come nell’esempio:

$ grep --exclude-dir={dir1,dir2,*.dst} -rnw 'directory' -e "pattern"

Per ulteriori opzioni è possibile consultare il manuale di grep:

$ man grep