Michele Liberi software
versione 1.04, giugno 2026
|
|
Michele Liberi
mail: mliberi@gmail.com
cell: +393485211456
telegram: @MicheleLiberi
|
liberix
- Presentazione
- Librerie
- Servizi
- Comandi
- rxc, esecuzione remota di comandi
- woha, web oriented hyerarchical database
- n, punto unico di controllo per N servers
- ck, controlli sui sistemi
- comm5, sincronizzazione di files
- comm7, sincronizzazione di files e metadati
- gcron, schedulatore globale
- logaway, gestione files di log
- nbru, gestione centralizzata dei backup
- kcc, il compilatore di shell scripts
- upload, accesso a web server
- www, HTTP client
- ftime, stampa informazioni sui files
- cpfl, archiviatore di files
- metafl, archiviatore di metadati
- mvfl, rinomina una lista di files
- lnfl, collegamento di una lista di files
- rmfl, cancellazione di una lista di files
- rxcp, copia di files
- afifo, gestione asincrona code fifo
- mq, interazione con server IBM MQM locale
- mqc, interazione con server IBM MQM remoto
- lra, interazione con il servizio lrm
- cofc, interazione con il servizio cofs
- pst, gerarchia dei processi
- dut, spazio utilizzato dalle directory
- ecut, estrazione dati da un file di testo
- ecomm, confronto righe di due files
- ejoin, unisce le righe di due files
- etee, duplicazione del flusso di input
- etr, converte o cancella caratteri
- ecat, concatenazione di file
- esort, ordinamento lessicografico di un testo
- sortbyll, ordina un testo in base alla lunghezza delle righe
- opmsr, ricerca e sostituzione di stringhe
- match, ricerca di stringhe
- cargs, verifica argomenti
- cenv, print environment variables
- yargs, esecuzione multipla di un comando
- tmout, lancia un comando con un tempo limite
- unchain, cancella catena di link simbolici
- rmlines, rimuove righe da un file
- yar, archiviatore minimale alternativo
- rows, trova righe in comune
- 3comm, comparazione file di testo
- now, cronometro per shell script
- systime, seconds since epoch
- bpwd, cambio della password non interattivo
- ckuserpw, controllo o cambio password
- 1moregrp, lancia un comando previa aggiunta di un gruppo
- memberof, incrocio utenti e gruppi
- lscron, lista di tutti i job lanciati da cron
- fdump, visualizza un file in esadecimale
- pol, calcolo di espressioni
- total, somma algebrica
- pths, ricerca di files nel PATH
- mynames, lista nomi di rete
- hostip, risoluzione nome di rete
- ckhosts, verifica file hosts
- des, data encryption standard
- tea, tiny encryption algorithm
- kc, un cifratore veloce
- keygen, genera una chiave casuale
- crypt, codifica una stringa
- cryptest, verifica validità password
- xor, cifratore binario
- hff, codifica decodifica di Huffmann
- sltn, interazione con un host remoto
- NCgrep, selezione di righe basata su regole
- accessx, accessibilità di files e directories
- rtest, accessibilità per utente reale
- u2d, converte un file da UNIX a DOS
- d2u, converte un file da DOS a UNIX
- ascii, tabella di codifica ASCII
- ebcdic, tabella di codifica EBCDIC
- asc2ebc, conversione da ASCII a EBCDIC
- ebc2asc, conversione da EBCDIC a ASCII
- id3, manipolazione metadati brani MP3
- woha2bash, converte un oggetto woha in una script bash
- img2html, converte immagini in tag HTML
- cgi, interazione con webserver
- cgisu, switch user per utenti CGI
- alert, invio di avvisi su più canali
- lnsm, invio e-mail
- logwriter, scrittura controllata file di log
- lspwdage, resoconto delle età delle password
- mon, lancia ciclicamente un comando
- eddy, selezione con editor di files da rinominare o cancellare
- mutuo, tabella ammortamento a rata costante
- sms, invio messaggi SMS
- aixb, backup completo del sistema AIX
- socktee, monitoraggio traffico su socket
- rowcmp, confronto di file di testo
- comb, combinazioni di N su K elementi
- pty, esecuzione batch di un programma interattivo
- openfds, lista dei descrittori in uso
- msleep, attende N millisecondi
- myid, estensione del comando id
- c7comp, comparatore di filetree
- str, estrazione di una parte di un bytestream
- X client
- Applicazioni web
- Siti web
- Applicazioni Android
- Programmi DOS
- Programmi Windows
- Installazione
- Licenza d'uso
In ambiente UNIX esiste una struttura nativamente gestita del kernel per la gestione delle code FIFO (first-in first-out): la named pipe.
Tale struttura svolge egregiamente la sua funzione quando la comunicazione avviene in modalità sincrona, ovvero quando il programma che genera il flusso di dati ed il programma che lo deve ricevere girano contemporaneamente.
Esiste però l'esigenza applicativa di disaccoppiare il processo che genera il dato dal processo che legge il dato per elaborarlo.
L'uno deve poter girare indipendemente dall'altro in modalità asincrona.
Il sistema UNIX non ha comandi o system call per questo genere di comunicazione, ma esistono prodotti commerciali che forniscono questa funzionalità.
Ricordiamo, uno per tutti, IBM MQ Manager, un sistema multipiattaforma per la gestione delle code.
Anche il database Redis con i sottocomandi LPUSH e BLPOP consente di gestire code FIFO.
Entrambi i su citati sistemi hanno delle controindicazioni.
IBM MQ è complesso da installare e da gestire, inoltre prevede il pagamento di licenze per il suo utilizzo.
D'altro canto Redis, pur liberamente installabile, è facilmente utilizzabile solo in ambiente Linux e non è disponibile, ad esempio, in IBM AIX.
Per superare queste limitazioni ho deciso di costruire un mio sistema molto semplice per la gestione delle code asincrone, che consta di un unico eseguibile (generato da un sorgente scritto in C) che può essere installato su tutti i sistemi UNIX e anche in ambiente Windows.
Nasce così il comando afifo che consente di gestire l'equivalente delle code locali di MQM.
Non ho ritenuto necessario costruire l'equivalente delle code remote in quanto è possibile estendere il concetto della coda locale a quello della coda remota usando il comando rxc (cfr.).
Il file di configurazione /etc/afifo.conf contiene i seguenti parametri:
- fifodir pathname
- la directory base che contiene i file dove vengono fisicamente salvati i messaggi in attesa che qualcuno li prelevi.
Tale parametro può essere indicato anche direttamente a linea di comando con l'opzione -I'dir'.
Se questo parametro non viene valorizzato il comando afifo farà riferimento alla directory corrente.
In ogni caso il nome della coda può essere un pathname assoluto.
- logdir pathname
- la directory dove vengono salvati i log file, uno per ogni coda, che contengono la registrazione di tutte le operazioni che sono state effettuate sulla coda.
Non è un parametro obbligatorio, se manca non verrà registrato alcun log.
Per ogni coda verrà creato un file del tipo afifo.nomecoda.log.
Tale parametro può essere indicato anche direttamente a linea di comando con l'opzione -L'dir'.
Per inciso questa è una funzionalità che manca nel sistema IBM MQM.
- umask octal
- Si tratta di un numero ottale (in base 8) che viene passato alla omonima funzione di libreria standard del C (mode_t umask(mode_t mask);).
Determina i permessi che vengono assegnati ad un nuovo file o directory che viene creato dal processo.
In questo contesto si applica:
- alla directory fifodir
- alla directory logdir
- alla coda FIFO
- al file di log
Non esiste un comando per la creazione di una coda, essa viene creata automaticamente e dinamicamente nel momento in cui viene referenziata per la prima volta.
Non esiste neanche un comando per la cancellazione di una coda.
Per cancellare una coda basta rimuovere l'omonimo file nella directory fifodir, e opzionalmente il corrispondente file di log nella directory logdir.
Con il termine messaggio in questo contesto si intende un blocco di bytes arbitrariamente lungo (binary bytestream).
Il comando afifo accetta i seguenti sottocomandi:
- put
- Scrive un singolo messaggio nella coda.
Il messaggio viene letto da standard input.
La stessa identica azione si ottiene con l'alias add.
- puts msg
- Scrive un singolo messaggio nella coda.
Il messaggio viene passato al comando direttamente come argomento.
- get [timeout]
- Preleva un messaggio dalla coda e lo scrive su standard output.
La stessa identica azione si ottiene con l'alias pop.
Se il timeout non viene specificato il comando afifo rimane in attesa di un messaggio a tempo indeterminato.
Se il timeout è zero il comando afifo preleva il messaggio solo se immediatamente disponibile.
Se il timeout è maggiore di zero indica il numero massimo di secondi di attesa.
- getall
- Preleva tutti i messaggi dalla coda e li scrive su standard output.
Non è prevista attesa di nuovi messaggi, il comando preleva solo quelli già presenti in coda.
- clear
- Cancella tutti i messaggi dalla coda.
- view
- Legge un messaggio dalla coda e lo scrive su standard output.
A differenza del comando get il comando view non modifica la coda, il messaggio rimane in coda.
Non è prevista attesa, il messaggio viene letto solo se immediatamente disponibile.
- viewall
- Legge tutti i messaggi presenti in coda e li scrive su standard output.
Non è prevista attesa di nuovi messaggi, il comando preleva solo quelli già presenti in coda.
La coda non viene modificata, i messaggi letti rimangono in coda.
- list
- Genera su standard output una lista dei messaggi in coda, una riga per messaggio, con le seguenti informazioni:
- indice progressivo
- timestamp di creazione
- dimensione in bytes
- depth
- Scrive su standard output la profondità della coda, ovvero il numero di messaggi in coda.
La stessa identica azione si ottiene con gli alias count e n.
- lastput
- Scrive su standard output il timestamp dell'ultima put che è stata fatta sulla coda.
- lastget
- Scrive su standard output il timestamp dell'ultima get che è stata fatta sulla coda.
codici di ritorno del comando afifo
| rc | errore | descrizione
|
|---|
| 9 | syntax error
| il comando è stato richiamato in modo sintatticamente errato
|
|---|
| 8 | can't chdir
| non è stato possibile entrare nella directory indicata dal parametro fifodir
|
|---|
| 7 | not a regular file
| il file associato alla coda esiste, ma non è un file regolare
|
|---|
| 6 | can't read
| non è stato possibile aprire la coda in read-only
|
|---|
| 5 | invalid header
| il file associato alla coda non contiene un header valido, non è una coda creata con il comando afifo
|
|---|
| 4 | can't write
| mancano i permessi di scrittura sul file associato alla coda;
il permesso di scrittura è necessario solo per i comandi che effettivamente modificano la coda
|
|---|
| 2 | write error
| tipicamente si ottiene questo errore quando il comando put o puts cerca di scrivere un messaggio nella coda senza riuscirci
|
|---|
| 1 | empty queue
| si ottiene questo errore quando si cerca di leggere un messaggio da una coda che non contiene messaggi
|
|---|
| 0 | successful
| il comando è andato a buon fine
|
|---|
Per ulteriori informazioni sulla sintassi di attivazione e sulle opzioni disponibili lanciare il comando con l'opzione -h.
(c) M. Liberi, last updated: 2026-06-15