Feeds:
Articoli
Commenti

Posts Tagged ‘linux’

Miguel de Icaza, uno dei fondatori del progetto Gnome, critica senza mezzi termini la strategia di sviluppo di Linux e spiega perché diversi sviluppatori stanno passando a Mac OS X.

Read Full Post »

Ci eravamo lasciati con questo semplice script:


#!/bin/bash
 for name in $(ls *.txt)
 do
    without_txt=$(echo $name | cut -d'.' -f1)
    mv -f $name $without_txt.dat
 done

Capire cosa fa è il compito che vi avevo lasciato da svolgere sotto l’ombrellone. L’avevo chiamato “txt2dat.sh”, e 2 (“two” in inglese) si pronuncia come “to”. Ecco quindi la risposta. Lo script semplicemente converte i fle .txt della directory in files con estensione .dat Può essere utile fare questa conversione per esempio se si usa MATLAB, che interpreta automaticamente i file con estensione .dat come file di dati.

Nello script ci sono alcune cose interessanti, come il ciclo “for”, l’uso della pipe “|” per concatenare due comandi e l’uso del carattere $ per estrarre il valore di una variabile. Ma veniamo alla spiegazione riga per riga.

La direttiva:

#!/bin/bash

serve a segnalare che il contenuto del file deve essere interpretato con la bash shell (in ogni distribuzione Linux sono implementate diverse shells).

Il comando:

 for name in $(ls *.txt)

segna l’inizio del un ciclo for annidato tra i comandi “do” e “done”.

Il comando:

 without_txt=$(echo $name | cut -d'.' -f1)

definisce la variabile “without_txt”, ché è il nome del file privato dell’estensione .txt Per ottenerlo indirizziamo l’output del comando “echo $name”, che scrive il nome del file completo (esempio: “dati.txt”) all’input del comando “cut -d’.’ -f1” che ne restituisce la parte che sta prima del punto. Per provare che funziona, possiamo semplicemente inserire dal terminale un comando come questo:

giovanni@fz6:~> echo qui.quo | cut -d’.’ -f1
qui

Cosa fa il comando “cut” in questo caso è semplice, ma per saperne di più posso consultare la man page:
giovanni@fz6:~> man cut

Infine il comando:

 mv -f $name $without_txt.dat

aggiunge l’estensione .dat al nome del file file.

Infine notiamo che questo comando:

mv -f $name ${name%.txt}.dat

ha lo stesso effetto delle righe 4 e 5 (il segno % elimina il .txt dal nome del file), ma non avrei usato la pipe…

Read Full Post »

In un articolo precedente, ho parlato del terminale e dei comandi della shell. Una delle cose che rende la shell uno strumento potente, è la possibilità mettere una lista di questi comandi in un file di testo, che chiameremo per esempio txt2dat.sh. Dopo aver reso eseguibile il file:

>chmod +x txt2dat.sh

Eseguiremo il nostro codice con il comando:

>./txt2dat.sh

Gli script possono essere complessi a piacere, ma per ottenere qualcosa di utile non è necessario inoltrarsi in tecniche di programmazione complesse e fare i propri script è sempre una attività divertente. Siccome precisamente in questo momento sei sotto l’ombrellone, magari con l’iPad in mano, ti lascio come compito per l’estate di spiegare esattamente cosa va questo script Linux:


#!/bin/bash
 for name in $(ls *.txt)
 do
    without_txt=$(echo $name | cut -d'.' -f1)
    mv -f $name $without_txt.dat
 done

Read Full Post »

Dopo l’uscita della nuova versione del meraviglioso sistema operativo mac OS X Lion, questo articolo devo proprio scriverlo. L’interfaccia utente dei sistema operativo installato nei Mac è straordinaria, ma non intacca la potenza e l’utilità del terminale unix.

Il titolo  di questo articolo contiene tre parole difficili: terminale, unix, shell. Ma non è mia intenzione allontanare i lettori dal mio blog, anzi, quello che sto per spiegare è molto semplice e utile in molte situazioni. Se cercate con google su questo argomento troverete un’infinità di materiale più o meno tecnico, più o meno complicato. Tuttavia i comandi di base da conoscere per usare in modo proficuo il Terminale non sono molti. Prima di tutto occorre spiegare gli arcani nomi che ho usato:

Cos’è il Terminale? In passato il Terminale era un monitor e una tastiera, ma oggi è una applicazione che permette di interagire con il proprio computer tramite una tastiera. Quando parlo di “interagire” intendo fare quello che “normalmente” si fa con mouse e tastiera: creare files, folders, lanciare un programma, ecc…

Cos’è unix? Unix è il Sistema Operativo, cioè il software di base che permette al computer di funzionare. Quando parlo di “terminale unix” intendo che parlo di una applicazione che mi permette di comunicare con un sistema operativo unix.

Cos’è la shell? La “shell” è l’interprete dei comandi. Questo significa che se digiti il comando “ls” la shell riconosce il comando, manda l’istruzione al sistema operativo, che ti restituisce un risultato (l’elenco dei files). Nei computer nulla accade per caso!

Mi sembra utile fornire una lista dei comandi che considero essenziali per cominciare:

  • “pwd” Scrive la directory corrente
  • “ls” Scrive la lista dei files presenti nella directory corrente
  • “cd nome_directory” Entra nella directory nome_directory
  • “mv” Rinomina un file o una directory
  • “cp file1 file2” Copia file1 in file2
  • “rm” Cancella un file
  • “rmdir” Cancella una directory
  • “mkdir” Crea una directory
  • “cat nome_file” Scrive brutalmente il contenuto del file nome_file.
  • “more nome file” Simile a “cat”, ma impagina il file di testo
  • “|” Questa è la pipe. Permette di concatenare due o più comandi. Per esempio “cat nome_file | more”
  • “man”. Restituisce la man page di un comando, per esempio “man ls” spiega cosa fa il comando “ls” e tutte le opzioni che si possono usare.

Ma perché  usare il Terminale quando i computer hanno una meravigliosa possibilità di fare tutto (o quasi tutto) con il mouse? Credo che le ragioni siano almeno tre:

  1. E’ semplice! Basta memorizzare una manciata di comandi e potete fare quasi tutto.
  2. E’ potente! Dopo un po’ di pratica, vedrete che in molti casi con il Terminale sarà possibile fare le cose più velocemente che con il mouse. Per esempio se devo spostare nel folder “paperinopoli” tutti i files che iniziano con “paperino”, digiterò “mv paperino* paprinopoli/”. La shell è anche un linguaggio di programmazione. Questo significa che è possibile anche raggruppare complesse sequenze di comandi in uno script.
  3. Accede a programmi scritti per lui! Questo è un punto importante. Vi sono diversi programmi che funzionano solo se lanciati da un terminale. La ragione è semplice: i programmi senza interfaccia grafica (finestre, bottoni, menù, ecc..) funzionano praticamente su tutti i computer e sono più semplici da scrivere. Potrete anche voi scrivere i vostri programmi, senza bisogno di studiare complessi tomi dal titolo “learning objective C and cocoa for mac OS X”, per riuscire dopo un mese a scrivere un programma che, solo sui computer Mac, apre una finestrella con scritto “Ciao Mondo!”.  Un altro esempio: se uno scienziato inventa un potente algoritmo che cambierà il mondo, potrà scrivere un programma in C e condividere con il mondo intero il frutto delle sue idee. E con questo spero di avervi convinto che del Terminale non se ne può proprio fare a meno.

Read Full Post »