In questo articolo, il TechAdvisor Babel Roberto Polli esplora la funzionalità di ridirezionamento dell'Input/Output con Bash (Bourne Again Shell), la più diffusa shell per sistemi GNU/Linux.
La guida, rivolta ai sistemisti junior, propone una panoramica sulla gestione dei tre file standard assegnati da GNU/Linux ad ogni processo: input, output ed error. Particolare attenzione è dedicata a strace, uno strumento molto utile che permette di tenere sotto controllo le chiamate di sistema, utilizzato in questo caso per svelare il funzionamento di Bash.
Il TechAdvisor Babel Roberto Polli ci propone questo mese un esercizio rivolto a sistemisti e sviluppatori junior: la trasformazione di un comune modem/router ADSL in una postazione multimediale.
Il processo è realizzato grazie a MiniDLNA, un media server open source per musica e video, che impariamo a compilare dopo aver precedentemente configurato un cross-compiler sul PC.
Se siete interessati a questo approfondimento sul modo in cui Linux gestisce i processi su un device minimale, vi invitiamo a scaricare l’articolo completo.
Linux Capabilities: Un miglior root di SUID root.
Traduzione in lingua italiana delle diapositive presentate alla conferenza organizzata dalla Linux Foundation LinuxCon2014, Düsseldorf, 15 ottobre 2014.
Il TechAdvisor Babel Roberto Polli ci propone questo mese un esercizio rivolto a sistemisti e sviluppatori junior: la trasformazione di un comune modem/router ADSL in una postazione multimediale.
Il processo è realizzato grazie a MiniDLNA, un media server open source per musica e video, che impariamo a compilare dopo aver precedentemente configurato un cross-compiler sul PC.
Se siete interessati a questo approfondimento sul modo in cui Linux gestisce i processi su un device minimale, vi invitiamo a scaricare l’articolo completo.
Linux Capabilities: Un miglior root di SUID root.
Traduzione in lingua italiana delle diapositive presentate alla conferenza organizzata dalla Linux Foundation LinuxCon2014, Düsseldorf, 15 ottobre 2014.
La shell Bash - Comandi base - Comandi avanzati - Espressioni regolariFulvio Corno
Master: Amministratore Linux - Livello Base
Nel contesto della formazione professionale rivolta ad aziende ed enti pubblici, sono stati preparati ed erogati dei corsi di Amministratore di sistemi Linux, al livello base ed al livello avanzato.
Il contenuto del corso è allineato con alcuni moduli della certificazione LPIC (Linux Professional Institute Certification), a cavallo tra i livelli 1 e 2. Tutto il materiale didattico è disponibile liberamente con licenza Creative Commons BY-NC-SA.
I docenti del corso sono i proff. Giovanni Squillero, Bartolomeo Montrucchio e Fulvio Corno.
Maggiori informazioni: http://elite.polito.it/index.php/teaching/current-courses/255-master-linux-admin
Master: Amministratore Linux - Livello Base
Nel contesto della formazione professionale rivolta ad aziende ed enti pubblici, sono stati preparati ed erogati dei corsi di Amministratore di sistemi Linux, al livello base ed al livello avanzato.
Il contenuto del corso è allineato con alcuni moduli della certificazione LPIC (Linux Professional Institute Certification), a cavallo tra i livelli 1 e 2. Tutto il materiale didattico è disponibile liberamente con licenza Creative Commons BY-NC-SA.
I docenti del corso sono i proff. Giovanni Squillero, Bartolomeo Montrucchio e Fulvio Corno.
Maggiori informazioni: http://elite.polito.it/index.php/teaching/current-courses/255-master-linux-admin
Presented during the Debian/Ubuntu Community Conference 23-24 May 2015.
«We'll discuss some Leadership Models (Hero, Servant and Host) and how these models can be useful leading an open source volunteering based project.»
Dell'hosting web su cloud se ne parla molto, e non senza motivo: oltre a essere più economico dei server tradizionali, questo metodo offre la sicurezza della continuità e della potenza di server multipli.
Per aiutarvi a sfruttare al meglio questi vantaggi, il System Engineer Danilo Abbasciano dedica la guida pubblicata oggi nel Centro Risorse a un'applicazione pratica dell'argomento, utilizzando due strumenti open source: l'installazione di Joomla con OpenShift. Mentre Joomla ha bisogno ormai di poche presentazioni, OpenShift è un prodotto nuovo, rilasciato da Red Hat nel 2011. Si tratta di una piattaforma open source per la gestione di applicazioni cloud, disponibile anche nella versione gratuita Express.
Se siete interessati alla flessibilità e alla portabilità di questa soluzione, per costruire il vostro sito Joomla sul cloud Red Hat cominciate da qui: Danilo Abbasciano descrive tutti i passi del processo, dall'installazione del client OpenShift alla corretta configurazione di Joomla.
La shell Bash - Comandi base - Comandi avanzati - Espressioni regolariFulvio Corno
Master: Amministratore Linux - Livello Base
Nel contesto della formazione professionale rivolta ad aziende ed enti pubblici, sono stati preparati ed erogati dei corsi di Amministratore di sistemi Linux, al livello base ed al livello avanzato.
Il contenuto del corso è allineato con alcuni moduli della certificazione LPIC (Linux Professional Institute Certification), a cavallo tra i livelli 1 e 2. Tutto il materiale didattico è disponibile liberamente con licenza Creative Commons BY-NC-SA.
I docenti del corso sono i proff. Giovanni Squillero, Bartolomeo Montrucchio e Fulvio Corno.
Maggiori informazioni: http://elite.polito.it/index.php/teaching/current-courses/255-master-linux-admin
Master: Amministratore Linux - Livello Base
Nel contesto della formazione professionale rivolta ad aziende ed enti pubblici, sono stati preparati ed erogati dei corsi di Amministratore di sistemi Linux, al livello base ed al livello avanzato.
Il contenuto del corso è allineato con alcuni moduli della certificazione LPIC (Linux Professional Institute Certification), a cavallo tra i livelli 1 e 2. Tutto il materiale didattico è disponibile liberamente con licenza Creative Commons BY-NC-SA.
I docenti del corso sono i proff. Giovanni Squillero, Bartolomeo Montrucchio e Fulvio Corno.
Maggiori informazioni: http://elite.polito.it/index.php/teaching/current-courses/255-master-linux-admin
Presented during the Debian/Ubuntu Community Conference 23-24 May 2015.
«We'll discuss some Leadership Models (Hero, Servant and Host) and how these models can be useful leading an open source volunteering based project.»
Dell'hosting web su cloud se ne parla molto, e non senza motivo: oltre a essere più economico dei server tradizionali, questo metodo offre la sicurezza della continuità e della potenza di server multipli.
Per aiutarvi a sfruttare al meglio questi vantaggi, il System Engineer Danilo Abbasciano dedica la guida pubblicata oggi nel Centro Risorse a un'applicazione pratica dell'argomento, utilizzando due strumenti open source: l'installazione di Joomla con OpenShift. Mentre Joomla ha bisogno ormai di poche presentazioni, OpenShift è un prodotto nuovo, rilasciato da Red Hat nel 2011. Si tratta di una piattaforma open source per la gestione di applicazioni cloud, disponibile anche nella versione gratuita Express.
Se siete interessati alla flessibilità e alla portabilità di questa soluzione, per costruire il vostro sito Joomla sul cloud Red Hat cominciate da qui: Danilo Abbasciano descrive tutti i passi del processo, dall'installazione del client OpenShift alla corretta configurazione di Joomla.
Nagios in alta affidabilità con strumenti open sourceBabel
Alta Disponibilità dei servizi, strumenti di monitoraggio, ridondanza fisica e logica delle componenti. Sono questi argomenti cruciali per tutti coloro che all'interno di una attività Data Center sono impegnati nella gestione di servizi Mission Critical.
In questa guida il TechAdvisor Gianpaolo Buono illustra i principi attraverso i quali poter procedere alla configurazione in alta affidabilità di un sistema di monitoraggio basato su componenti Open Source.
Sicurezza flessibile con SELinux: architettura e configurazioneBabel
Anche questa settimana l’argomento della guida tecnica pubblicata nel Centro Risorse Babel è la sicurezza, in particolare quella dei sistemi Linux e Unix.In questa guida il System Engineer Maurizio Pagani descrive l’architettura e la configurazione di base di Security-Enhanced Linux (o SELinux),un sistema di sicurezza MAC (Mandatory Access Control) flessibile integrato con Linux.
Progettato inizialmente dalla National Security Agency degli Stati Uniti, SELinux permette la configurazione di policy di sicurezza specifiche per domini, processi e utenti diversi attive a più livelli ed è in grado di confinare applicazioni difettose o malware.
Per scoprire di più sui vantaggi rispetto al tradizionale approccio DAC e sui processi di gestione delle policy e di amministrazione SELinux, vi invitiamo a scaricare la guida completa.
Networking di base, LAN casalinga, installazione e configurazione servizi Samba, Cups, FTP. Sessione Terminal con scripting bash per piccoli automatismi.
In queste slides ho parlato:
- Fondamenti su Exploit e Payload
- Cenni sulla struttura di Metasploit Framework
- Analisi Codice exploit UnrealIRCd3281
- Cenni Bind & Reverse Shell e Applicazione caso di studio
Nota Importante al fine di evitare malintesi:
Nelle slides è presente una slide nella quale faccio un analogia con una bomba, nello specifico la bomba atomica. Questa immagine, è stata usata al singolo scopo di esplicitare come è fatto un exploit e far capire qual è la differenza tra un exploit e un payload. Il tutto avviene usando la figura retorica dell'Analogia. Quindi, non ha nulla a che vedere con le vittime della seconda guerra mondiale o riferimenti storici di quel periodo.
Sophos Complete Security: arte e scienza della sicurezzaBabel
Il 27 novembre il Chiostro del Bramante ha ospitato il nostro più recente evento, “Sophos Complete Security: scienza e arte della sicurezza”. Babel ringrazia tutti coloro che sono venuti a conoscere la soluzione integrata di Sophos dedicata alla sicurezza della rete, dei dispositivi fissi e mobili, dei dati e delle e-mail.
Se vi siete persi l’evento o volete rivederlo, visitate la pagina dedicata aggiornata con il video integrale e le slide della presentazione: http://babel.it/it/sophos-complete-security-2014.html
L’innovazione a difesa della tradizione: il caso dell’Archivio Storico della ...Babel
Il TechAdvisor Michelangelo Uberti e Don Stefano Bortolato presentano un importante caso di successo: "L’innovazione a difesa della tradizione: il caso dell’Archivio Storico della Congregazione Orionina". Durante l’intervento Michelangelo e Don Stefano raccontano le sfide e le opportunità del progetto di ammodernamento dell’infrastruttura IT della Piccola Opera della Divina Provvidenza.
I punti trattati durante la presentazione sono:
- Babel e Red Hat: una partnership consolidata
- Insieme si è più forti: l’evoluzione di Babel
- Conosciamo la Piccola Opera della Divina Provvidenza
- Perché investire nell'open source?
- Dal mattone all'archivio: non solo virtualizzazione
Per saperne di più, scaricate l’articolo o guardate il video integrale dell'intervento ripreso durante l'Open Source Day 2014.
http://www.babel.it/it/centro-risorse/77-linnovazione-a-difesa-della-tradizione-il-caso-dellarchivio-storico-della-congregazione-orionina.html
L’innovazione a difesa della tradizione: il caso dell’Archivio Storico della ...Babel
Il TechAdvisor Michelangelo Uberti e Don Stefano Bortolato presentano un importante caso di successo: "L’innovazione a difesa della tradizione: il caso dell’Archivio Storico della Congregazione Orionina". Durante l’intervento Michelangelo e Don Stefano raccontano le sfide e le opportunità del progetto di ammodernamento dell’infrastruttura IT della Piccola Opera della Divina Provvidenza.
I punti trattati durante la presentazione sono:
- Babel e Red Hat: una partnership consolidata
- Insieme si è più forti: l’evoluzione di Babel
- Conosciamo la Piccola Opera della Divina Provvidenza
- Perché investire nell'open source?
- Dal mattone all'archivio: non solo virtualizzazione
Per saperne di più, scaricate l’articolo o guardate il video integrale dell'intervento ripreso durante l'Open Source Day 2014.
http://www.babel.it/it/centro-risorse/77-linnovazione-a-difesa-della-tradizione-il-caso-dellarchivio-storico-della-congregazione-orionina.html
Intercettazioni: guida alle nuove norme per i providerBabel
Il TechAdvisor Michelangelo Uberti presenta la guida aggiornata alle prestazioni obbligatorie per le Autorità Giudiziarie applicate alle piattaforme di posta elettronica. Le nuove misure, pubblicate a luglio dal Garante per la Privacy, sono state progettate per incrementare la sicurezza dei dati personali raccolti e usati nello svolgimento delle intercettazioni.
La guida Babel si concentra sugli obblighi dei provider e spiega in dettaglio le novità, a cominciare dall’uso della PEC, diventato obbligatorio per l’invio delle mail intercettate. I dati inviati via mail o con supporto removibile dovranno essere necessariamente cifrati e tutti gli amministratori che hanno accesso ai dati giudiziari dovranno utilizzare la strong authentication.
Per conoscere in dettaglio il nuovo provvedimento vi invitiamo a scaricare l’articolo completo. Per maggiori informazioni potete contattare un nostro TechAdvisor utilizzando il modulo “Serve aiuto?” del nostro Centro Risorse http://www.babel.it/it/centro-risorse.html
Dalla virtualizzazione al private cloud: Il Patronato INCA rinnova la fiducia...Babel
Il TechAdvisor Babel Michelangelo Uberti presenta un importante caso di successo: "Dalla virtualizzazione al private cloud: il Patronato INCA rinnova la fiducia nell’open source". Durante il suo intervento il TechAdvisor racconta le sfide e le opportunità dell'innovativo progetto realizzato per il Patronato INCA CGIL e presenta la nostra soluzione di private cloud basata su tecnologie open source.
I punti trattati durante la presentazione sono:
- Babel e Red Hat: una storia lunga 8 anni
- Il Patronato INCA CGIL: tradizione e innovazione
- Il rapporto con Babel e l'approccio all'open source
- L'adozione della virtualizzazione e la visione cloud-oriented
- La soluzione "chiavi in mano" di Babel per il Private Cloud
Per saperne di più, scaricate l'articolo o guardate il video integrale dell'intervento ripreso durante l'Open Source Day 2013.
http://www.babel.it/it/centro-risorse/2013/11/14/69-dalla-virtualizzazione-al-private-cloud-il-patronato-inca-rinnova-la-fiducia-nellopen-source.html
Il TechAdvisor Roberto Polli condivide l'esperienza maturata su iPython, una potente shell interattiva nata per affiancare la classica shell Bash comunemente utilizzata dagli amministratori di sistema. Attraverso degli esempi pratici mostra le principali differenze tra i due approcci ed aiuta a comprendere quale sia lo strumento più adatto a specifici casi d'uso.
Durante la presentazione mostra inoltre come:
- evitare errori comuni negli script bash;
- velocizzare la creazione di script per l'esecuzione di test mediante la libreria nose;
- riutilizzare moduli Python esistenti nella shell interattiva;
- usare il framework Flask per convertire facilmente gli script in web services.
Code
http://ipython.org/
http://flask.pocoo.org/
http://nose.readthedocs.org/
https://github.com/ioggstream/dsadmin/
Babel
http://www.babel.it
http://vaunaspada.babel.it/blog
La gestione integrata della sicurezza in ANSA: dal firewalling all'UTMBabel
Il TechAdvisor Michelangelo Uberti spiega cosa ha determinato l'Agenzia ANSA a scegliere i Sophos UTM, gli appliance dedicati alla gestione integrata della sicurezza aziendale. Michelangelo illustra alcuni aspetti tecnici della soluzione e le modalità attraverso cui i team Babel e Sophos sono riusciti a soddisfare le esigenze del Cliente.
Per saperne di più, scaricate l'articolo o guardate il video integrale dell'intervento ripreso durante il Sophos Complete Security Day 2013.
http://www.babel.it/it/centro-risorse/2013/06/26/63-la-gestione-integrata-della-sicurezza-in-ansa-dal-firewalling-allutm.html
L'installazione e la prima configurazione di un elevato numero di server è un'operazione lunga e ripetitiva. Il TechAdvisor Roberto Polli mostra come semplificarla utilizzando Cobbler, un'installation server open source. La tecnologia descritta da Roberto sfrutta il boot via rete (PXE-boot) e i kickstart di Red Hat, i file che contengono i parametri per l'installazione e la prima configurazione del sistema.
Oltre a Cobbler, l’articolo illustra alcuni concetti di base relativi alla procedura di boot di un sistema Linux-based e al funzionamento di un server DHCP.
Per saperne di più su questo argomento vi invitiamo a scaricare l’articolo completo. Potete inviarci le vostre domande utilizzando il form "Serve aiuto?" del nostro Centro Risorse http://www.babel.it/it/centro-risorse.html
SHELL CONTROL BOX: IL GUSTO DELLA SICUREZZA
I TechAdvisor Babel presentano i dettagli dell'ultima versione dello Shell Control Box, la soluzione di BalaBit dedicata al monitoraggio e all'audit degli accessi amministrativi remoti.
L'evento ha avuto luogo il 21 novembre 2012 presso il Rome Cavalieri Hilton.
BalaBit: www.balabit.com
Babel: www.babel.it
Tracciamento delle attività di amministrazione mediante i BalaBit Shell Contr...Babel
SHELL CONTROL BOX: IL GUSTO DELLA SICUREZZA
I TechAdvisor Babel presentano i dettagli dell'ultima versione dello Shell Control Box, la soluzione di BalaBit dedicata al monitoraggio e all'audit degli accessi amministrativi remoti.
L'evento ha avuto luogo il 21 novembre 2012 presso il Rome Cavalieri Hilton.
BalaBit: www.balabit.com
Babel: www.babel.it
Perché scegliere la desktop virtualization? Qual’è la soluzione più adatta alla mia azienda e quali sono i benefici che posso trarne? L’articolo pubblicato questo mese nel Centro Risorse Babel risponde a queste e ad altre domande introduttive sull’argomento.
Il TechAdvisor Michelangelo Uberti spiega in dettaglio cosa comporta la virtualizzazione dei desktop per manager e utenti, soffermandosi sulle differenze tra Hosted (statici e dinamici) e Remote Synchronized Virtual Desktops e sulle modalità di virtualizzazione delle applicazioni.
Per saperne di più vi invitiamo a scaricare l'articolo completo e a inviarci le vostre domande utilizzando il form "Serve aiuto?" all'interno del nostro Centro Risorse http://www.babel.it/it/centro-risorse.html
Crittografia e integrazione dei sistemi con PythonBabel
Informazioni bancarie, dati sensibili per le aziende, materiale multimediale personale: sistemi diversi si scambiano costantemente informazioni riservate via internet e la crittografia gioca un ruolo importante nella loro protezione.
Il TechAdvisor Babel Roberto Polli dedica il nuovo articolo del Centro Risorse alle particolari problematiche legate all'uso delle tecniche di crittografia nell'interazione tra sistemi che spesso parlano linguaggi differenti. Ricco di esempi pratici, l'articolo descrive il funzionamento della crittografia simmetrica e asimmetrica e presenta delle semplici istruzioni per lo sviluppo di un server FTP con server-side encryption utilizzando il linguaggio di programmazione Python.
Per saperne di più su questo argomento vi invitiamo a scaricare l'articolo completo. Potete inviarci le vostre domande utilizzando il form "Serve aiuto?" sul nostro Centro Risorse http://www.babel.it/it/centro-risorse.html
Intercettazioni e posta elettronica: le misure di sicurezza per i gestoriBabel
Il TechAdvisor Michelangelo Uberti spiega come gestire i decreti di intercettazione, tracciamento del traffico, sospensione o sequestro di una mailbox da parte delle Autorità Giudiziarie. La guida evidenzia le modalità corrette di erogazione delle prestazioni richieste e le procedure di messa in sicurezza delle piattaforme di posta elettronica, soffermandosi brevemente sull'applicazione sviluppata da Babel per gestire questo tipo di attività.
Per approfondire i requisiti obbligatori dei gestori in materia di Autorità Giudiziaria vi invitiamo a scaricare l’articolo completo. Per qualsiasi domanda non esitate a contattarci utilizzando il form "Serve aiuto?" sul nostro Centro Risorse http://www.babel.it/it/centro-risorse.html
BABEL PRESENTA: OPSVIEW
Opsview e i TechAdvisor Babel -unico partner Opsview in Italia- vi presentano le novità tecniche e pratiche della versione 4 di Opsview Enterprise, uno strumento innovativo per gestire e monitorare facilmente infrastrutture IT distribuite..
L’evento ha avuto luogo il 16 maggio 2012, a Cinecitta’ Studios, Roma.
Opsview: www.opsview.com
Babel: www.babel.it
Monitoraggio di infrastrutture IT mediante Opsview Enteprise V4Babel
BABEL PRESENTA: OPSVIEW
Opsview e i TechAdvisor Babel -unico partner Opsview in Italia- vi presentano le novità tecniche e pratiche della versione 4 di Opsview Enterprise, uno strumento innovativo per gestire e monitorare facilmente infrastrutture IT distribuite..
L’evento ha avuto luogo il 16 maggio 2012, a Cinecitta’ Studios, Roma.
Opsview: www.opsview.com
Babel: www.babel.it
OpenVAS, lo strumento open source per il vulnerability assessmentBabel
Open Vulnerability Assessment System (OpenVAS), la risposta completamente open source allo scanner remoto Nessus, permette di rilevare in modo affidabile le potenziali vulnerabilità dei sistemi presenti all'interno della infrastruttura IT. Il sistema, alimentato da una base dati quotidianamente aggiornata che contiene più di 20.000 test di vulnerabilità, consente inoltre di analizzare la lista delle contromisure applicabili per eliminare potenziali problemi.
Questo mese il System Engineer Maurizio Pagani ha preparato una breve guida dedicata a chi approccia il software per la prima volta, spiegandone l'architettura, i passi necessari per effettuare la scansione di un sistema remoto e un esempio pratico del report ottenuto.
Per saperne di più su questa importante alternativa open source dedicata al tema della sicurezza, vi invitiamo a scaricare l’articolo completo. Per qualsiasi domanda non esitate a contattarci utilizzando il form "Serve aiuto?" sul nostro Centro Risorse http://www.babel.it/it/centro-risorse.html
Cos’è un server MySQL embedded, qual è la sua architettura e come funzionano le API MySQL per un programma C? Il TechAdvisor Roberto Polli risponde a queste domande in un breve ma completo tutorial in inglese.
L’obiettivo dell’articolo è di illustrare l’utilizzo del server MySQL embedded in un ambito a volte meno comune tra i programmatori C: il test di integrazione, ossia la verifica della corretta interazione tra componenti software.
Scaricate l’articolo completo per scoprire l’applicazione pratica, spiegata passo per passo dal nostro TechAdvisor.
Il fenomeno dello spam: origine e contromisureBabel
Messaggi pubbicitari indesiderati, truffe virtuali e phishing: le tecniche di spamming sono in continua evoluzione, ma è possibile proteggere in modo efficace il proprio sistema di posta elettronica.
In questo whitepaper, il TechAdvisor Babel Michelangelo Uberti spiega com’è cambiato il fenomeno dello spam dalla sua nascita a oggi e illustra le pratiche antispam sociali e tecniche migliori per bloccare eventuali attacchi.
Alice Ferrazzi, esperta di tecnologie open source e maintainer di alcuni pacchetti per la distribuzione Linux Debian – un sistema operativo gratuito – condivide le proprie conoscenze ed esplora in questo articolo il complesso mondo del software open source e le regole che lo governano.
Dopo una breve descrizione delle differenze tra software libero e open source, vengono illustrati i criteri obbligatori affinché un programma rientri in questo tipo di categorie. L’articolo contiene inoltre una rassegna dei tipi di licenza più utilizzati, tra cui GPL, LGPL o MIT.
La nuova guida pubblicata oggi nel Centro Risorse Babel è dedicata a Git, lo strumento gratuito per organizzare e gestire versioni differenti di un software.
Git, realizzato da Linus Torvalds, creatore di Linux, è infatti un nuovo tipo di Version Control System (VCS) focalizzato sulla gestione distribuita del software.
Il TechAdvisor Roberto Polli ne spiega il funzionamento di base e le applicazioni, in una guida ricca di esempi e di esercizi.
Scaricate l'articolo per scoprire, tra tanti consigli utili, l'utilità dei branch, il funzionamento di repository remoti o la gestione di un caso di troubleshooting.
Ridirezionamento di I/O con Bash: un breve approfondimento
1. Uno sguardo approfondito alla
redirezione dell'I/O con Bash
di Roberto Polli
Redirigere l’I/O
La redirezione dell'I/O è il processo atto a controllare l'Input/Output di un programma. Quando
si scrive un programma o uno script è possibile leggere dalla console e scrivere sullo schermo.
I file standard usati per l'I/O sono tre: il programma legge da standard input, scrive il risultato
delle operazioni su standard output e invia messaggi di errore a standard error.
Su un sistema Unix, i processi identificano ogni file con un numero intero progressivo: il file
descriptor. Questo numero è univoco all'interno di ogni processo. Quando un processo apre un
file, gli assegna un nuovo file descriptor. STDIN, STDOUT e STDERR sono associati rispettivamente
ai primi tre interi: 0, 1 e 2.
Su Linux è possibile trovare i file descriptor di un processo tramite il filesystem /proc.
Ad esempio elencando i file descriptor del processo con pid 1201 si può notare che oltre a quelli
di default ce n'è un altro: crond.pid. Ciò significa che il processo con pid 1201 ha aperto il file
/var/run/crond.pid.
# ls /proc/1201/fd/ -l
total 0
lr-x------ 1 root root 64 2011-06-10 08:43 0 -> /dev/null
l-wx------ 1 root root 64 2011-06-10 08:43 1 -> /dev/null
l-wx------ 1 root root 64 2011-06-10 08:43 2 -> /dev/null
lrwx------ 1 root root 64 2011-06-10 08:43 3 -> /var/run/crond.pid
L'unicità dei file descriptor è relativa al processo: se un altro processo apre lo stesso file (ex.
/var/run/crond.pid) gli potrà assegnare un altro intero (es. 5).
BABEL S.r.l. - P.zza S.Benedetto da Norcia 33 - 00040, Pomezia (RM) - Tel:. +39 06.9826.9600 - Fax. +39 06.9826.9680
E-Mail: info@babel.it – PEC: babel@pec.babel.it – WEB: http://www.babel.it
Reg. Imprese di Roma N° 06062681009 - N.R.E.A. 953123 - P.I. e C.F. 06062681009 Cap. Soc. € 102.774,00 i.v.
Società soggetta alla direzione e coordinamento della Par-tec S.p.A - Società iscritta al registro delle Imprese di Milano al numero 1293820015
2. Es: questo comando mostra tutti i processi che usano /etc/passwd mostrando il loro pid e i
corrispondenti file descriptor. Consultare #man find per ulteriori informazioni sul comando find.
#sudo find /proc/ -lname /etc/passwd -a ! -path *task* 2>/dev/null
/proc/2374/fd/14
/proc/5848/fd/43
La redirezione dell'I/O si verifica quando si dirotta il flusso di dati su file differenti. Il comando
precedente ne contiene un esempio. L'ultima parte “2>/dev/null” indica a Bash di redirigere i
messaggi di errore di #find su /dev/null.
Flusso standard di Bash
Il flusso I/O standard di Bash è verificabile nel lavoro quotidiano, ad es. lanciando il comando
#ls.
#ls -l /etc/passwd unexistent.txt
ls: cannot access unexistent.txt: No such file or directory
-rw-r--r-- 1 root root 1953 2011-04-18 18:45 passwd
Le righe di output inviate alla console sono parte di due flussi differenti: il primo – contenente un
messaggio di errore – è inviato a STDERR, mentre il secondo – essendo il vero output del
comando – è inviato a STDOUT. Su un terminale, sia STDOUT che STDERR sono inviati solitamente
allo stesso schermo.
Piping e redirezione dell’output
Nel lavoro quotidiano è consuetudine “mettere in pipe” i comandi, ad esempio:
# cat /etc/passwd | grep “wheel”
Il piping è una forma di redirezione dell'I/O: in questo caso l'output di #cat viene inviato all'input
di #grep – o più precisamente associa lo STDIN di #grep allo STDOUT di #cat.
Un'altra modalità spesso utilizzata è la redirezione verso un file. Questa può essere fatta in
modalità APPEND (accodamento) o TRUNCATE (troncamento). Il troncamento si effettua con
BABEL S.r.l. - P.zza S.Benedetto da Norcia 33 - 00040, Pomezia (RM) - Tel:. +39 06.9826.9600 - Fax. +39 06.9826.9680
E-Mail: info@babel.it – PEC: babel@pec.babel.it – WEB: http://www.babel.it
Reg. Imprese di Roma N° 06062681009 - N.R.E.A. 953123 - P.I. e C.F. 06062681009 Cap. Soc. € 102.774,00 i.v.
Società soggetta alla direzione e coordinamento della Par-tec S.p.A - Società iscritta al registro delle Imprese di Milano al numero 1293820015
3. “>”. L'output di #grep è scritto su /tmp/grep.out. Se il file non esiste, verrà creato, se esiste sarà
invece sovrascritto.
# grep wheel /etc/group > /tmp/grep.out
oppure – poiché “1” rappresenta il file descriptor STDOUT:
# grep wheel /etc/group 1> /tmp/grep.out
La modalità APPEND usa l'operatore “>>”. In questo caso l'output è accodato al file in
questione:
# grep users /etc/group >> /tmp/grep.out
Le ultime versioni di Bash (con le vecchie versioni non funziona) permettono di redirigere
contemporaneamente STDOUT e STDERR in due modi:
mediante l'operatore >&
# find /proc >& /dev/null
mediante l'operatore |&
#find /proc |& grep task
Andando in profondità
Detto ciò sembra che la redirezione sia una cosa immediata ma in realtà non è proprio così.
Analizzando cosa accade al seguente comando si ha che:
#ls -d /etc/ unexisting.txt > /tmp/ls.out
ls: cannot access unexisting.out: No such file or directory
Come previsto STDOUT finisce nel file /tmp/ls.out, mentre STDERR viene stampato a schermo
segnalando che il file unexisting.txt non esiste.
Ora facciamo pulizia nel nostro ambiente e modifichiamo un po' il comando. Proviamo a
indovinare il risultato: quale sarà il contenuto di STDOUT/STDERR?
#rm -f unexisting.out;
#ls -l unexisting.out > unexisting.out
BABEL S.r.l. - P.zza S.Benedetto da Norcia 33 - 00040, Pomezia (RM) - Tel:. +39 06.9826.9600 - Fax. +39 06.9826.9680
E-Mail: info@babel.it – PEC: babel@pec.babel.it – WEB: http://www.babel.it
Reg. Imprese di Roma N° 06062681009 - N.R.E.A. 953123 - P.I. e C.F. 06062681009 Cap. Soc. € 102.774,00 i.v.
Società soggetta alla direzione e coordinamento della Par-tec S.p.A - Società iscritta al registro delle Imprese di Milano al numero 1293820015
4. Cos'è accaduto? Perché il risultato è diverso dal comando precedente? Sembra che la
redirezione dell'I/O con Bash non sia completamente trasparente. Infatti essa è soggetta
all'implementazione di Bash. Usando un tool come #strace, possiamo analizzare le operazioni
effettuate da Bash.
Strace world
Strace è un potente tool per tracciare le system call. Mostra cosa fa un programma e può
essere utilizzato per capire cos'è accaduto durante l'esecuzione di un comando.
Il primo tentativo porterebbe ad utilizzarlo nel seguente modo:
# strace ls unexisting.out > unexisting.out
Questo tipo di utilizzo è sbagliato, in quanto staremmo semplicemente redirigendo l'output di
# strace ls unexisting.out
nel file unexisting.out.
E' comunque interessante vedere il risultato del comando precedente. L'output a schermo è
molto “verboso” – circa 188 linee. Quanto basta per imparare che anche un comando
semplice come #ls non è poi così semplice.
La prima call esegue il comando ls:
execve("/bin/ls", ["ls", "unexisting.out"], [/* 46 vars */]) = 0
brk(0) = 0x7f9000
seguono le syscall contenute in ls per caricare le librerie condivise…
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or
directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x7f32158f6000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or
directory)
BABEL S.r.l. - P.zza S.Benedetto da Norcia 33 - 00040, Pomezia (RM) - Tel:. +39 06.9826.9600 - Fax. +39 06.9826.9680
E-Mail: info@babel.it – PEC: babel@pec.babel.it – WEB: http://www.babel.it
Reg. Imprese di Roma N° 06062681009 - N.R.E.A. 953123 - P.I. e C.F. 06062681009 Cap. Soc. € 102.774,00 i.v.
Società soggetta alla direzione e coordinamento della Par-tec S.p.A - Società iscritta al registro delle Imprese di Milano al numero 1293820015
5. open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=126913, ...}) = 0
mmap(NULL, 126913, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f32158d7000
close(3) = 0
...
… per usare SELinux e altra roba…
open("/lib/libselinux.so.1", O_RDONLY) = 3
mprotect(0x7f3214905000, 4096, PROT_READ) = 0
mprotect(0x7f3214b09000, 4096, PROT_READ) = 0
...
open("/proc/filesystems", O_RDONLY) = 3
… per usare le librerie di localizzazione…
open("/usr/lib/locale/locale-archive", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
open("/usr/lib/locale/en_GB.utf8/LC_IDENTIFICATI/ON", O_RDONLY) = 3
...
…infine (e solo infine) per operare su STDOUT scrivendo il risultato della system call stat() - quella
usata da #ls.
stat("unexisting.out", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
lstat("unexisting.out", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fstat(1, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x7f3215774000
write(1, "unexisting.outn", 15) = 15
L’ultima operazione prevede la chiusura di tutti i file descriptor.
close(1) = 0
close(2) = 0
BABEL S.r.l. - P.zza S.Benedetto da Norcia 33 - 00040, Pomezia (RM) - Tel:. +39 06.9826.9600 - Fax. +39 06.9826.9680
E-Mail: info@babel.it – PEC: babel@pec.babel.it – WEB: http://www.babel.it
Reg. Imprese di Roma N° 06062681009 - N.R.E.A. 953123 - P.I. e C.F. 06062681009 Cap. Soc. € 102.774,00 i.v.
Società soggetta alla direzione e coordinamento della Par-tec S.p.A - Società iscritta al registro delle Imprese di Milano al numero 1293820015
6. Per avere un output più breve è possibile evitare il caricamento di tutte le librerie di
localizzazione e salvare circa 70 syscall() impostando una variabile di ambiente:
#export LANG=C
Suggerimento: meno syscall() vuol dire comandi più veloci: se si sta parsando un file ASCII di
qualche Gb, è bene ricordarsi di fare #export LANG=C!
Strace su una shell
Ora che si è compreso l'output di strace, si può procedere applicandolo su Bash. Apriamo un
nuovo terminale e tracciamo le syscall utilizzate dal processo Bash:
terminalA# echo "Bash pid is $$"
Bash pid is 2043
terminalB# strace -p 2043
Process 2043 attached - interrupt to quit
read(0,
Ora terminalB traccerà ogni tasto che si preme sul terminalA, così è possibile saltare un sacco di
righe tipo la seguente:
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo
...}) = 0
Per farlo ovviamente si redirige l'output di strace sul comando grep, tagliando le righe che non
interessano utilizzando il nuovo operatore |&:
# strace -p 2043 |& egrep -v 'rt_sig|ioctl'
Ecco l'output ripulito:
pipe([3, 4]) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0x7f1347e1c9d0) = 4381
setpgid(4381, 4381) = 0
BABEL S.r.l. - P.zza S.Benedetto da Norcia 33 - 00040, Pomezia (RM) - Tel:. +39 06.9826.9600 - Fax. +39 06.9826.9680
E-Mail: info@babel.it – PEC: babel@pec.babel.it – WEB: http://www.babel.it
Reg. Imprese di Roma N° 06062681009 - N.R.E.A. 953123 - P.I. e C.F. 06062681009 Cap. Soc. € 102.774,00 i.v.
Società soggetta alla direzione e coordinamento della Par-tec S.p.A - Società iscritta al registro delle Imprese di Milano al numero 1293820015
7. close(3) = 0
close(4) = 0
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WSTOPPED|WCONTINUED, NULL)
= 4381
--- SIGCHLD (Child exited) @ 0 (0) ---
wait4(-1, 0x7fff4cf1bc5c, WNOHANG|WSTOPPED|WCONTINUED, NULL) = -1 ECHILD (No
child processes)
write(2, "33]0;rpolli@rpolli: /tmp7rpolli@r"..., 47) = 47
Fino a qui non è apparso nessun riferimento al comando ls, né ad unexisting.out! E’ comunque
evidente che Bash:
1. crea una pipe() con i file descriptor 3 e 4;
2. forka() creando un nuovo processo figlio;
3. aspetta che il figlio ritorni con la syscall wait();
4. ritorna al prompt.
Il figlio di una shell
Tracciamo ancora più in profondità, dicendo a #strace di seguire (follow) i processi figli della
shell. Per farlo bisogna usare l'opzione “-f”:
# strace -f -p 2043 |& egrep -v 'rt_sig|ioctl'
Vediamo quindi che il processo figlio fa qualcosa in più rispetto a prima – quando si limitava ad
eseguire la exec() del comando ls:
[pid 4469] open("unexisting.out", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
[pid 4469] dup2(3, 1) = 1
[pid 4469] close(3) = 0
[pid 4469] execve("/bin/ls", ["ls", "--color=auto", "unexisting.out"], [/*
46 vars */]) = 0
[pid 4469] brk(0) = 0xeeb000
In pratica:
1. crea il file unexisting.out - spiegando così perchè #ls trova il file;
2. maneggia i file descriptor 3 (associato ad unexisting.out) ed 1 (che è STDOUT) con
l'operatore dup2();
BABEL S.r.l. - P.zza S.Benedetto da Norcia 33 - 00040, Pomezia (RM) - Tel:. +39 06.9826.9600 - Fax. +39 06.9826.9680
E-Mail: info@babel.it – PEC: babel@pec.babel.it – WEB: http://www.babel.it
Reg. Imprese di Roma N° 06062681009 - N.R.E.A. 953123 - P.I. e C.F. 06062681009 Cap. Soc. € 102.774,00 i.v.
Società soggetta alla direzione e coordinamento della Par-tec S.p.A - Società iscritta al registro delle Imprese di Milano al numero 1293820015
8. 3. prosegue come le analisi precedenti.
Maneggiare i file descriptor
Guardando la #man di dup2():
int dup2(int oldfd, int newfd);
..
dup2() makes newfd be the copy of oldfd, closing newfd first if necessary...
Questo vuol dire che dopo il fork(), il processo figlio crea un nuovo file unexisting.out, gli assegna
il file descriptor numero 3 e invoca la system call dup2() che:
1. chiude il file descriptor #1 del processo figlio – standard output;
2. duplica il file descriptor #3 associandolo al file descriptor #1: da quel momento ogni
chiamata che utilizzerà il file descriptor #1 verrà effettuata sul file associato al file
descriptor #3 – ossia unexisting.out;
3. chiude il file descriptor #3 poiché il file unexisting.out è oramai associato allo STDOUT (file
descriptor #1).
BABEL S.r.l. - P.zza S.Benedetto da Norcia 33 - 00040, Pomezia (RM) - Tel:. +39 06.9826.9600 - Fax. +39 06.9826.9680
E-Mail: info@babel.it – PEC: babel@pec.babel.it – WEB: http://www.babel.it
Reg. Imprese di Roma N° 06062681009 - N.R.E.A. 953123 - P.I. e C.F. 06062681009 Cap. Soc. € 102.774,00 i.v.
Società soggetta alla direzione e coordinamento della Par-tec S.p.A - Società iscritta al registro delle Imprese di Milano al numero 1293820015
9. Licenza d'uso “Attribuzione - Non commerciale - Non opere derivate”, secondo i criteri
internazionali Creative Commons (http://creativecommons.org/licenses/by-nc-nd/2.5/it/)
BABEL S.r.l. - P.zza S.Benedetto da Norcia 33 - 00040, Pomezia (RM) - Tel:. +39 06.9826.9600 - Fax. +39 06.9826.9680
E-Mail: info@babel.it – PEC: babel@pec.babel.it – WEB: http://www.babel.it
Reg. Imprese di Roma N° 06062681009 - N.R.E.A. 953123 - P.I. e C.F. 06062681009 Cap. Soc. € 102.774,00 i.v.
Società soggetta alla direzione e coordinamento della Par-tec S.p.A - Società iscritta al registro delle Imprese di Milano al numero 1293820015