Cygwin User's Guide Parte 3: come si usa Cygwin | OTHER chapters |
Questo capitolo spiega alcune differenze fondamentali tra l'ambiente Cygwin ed i sistemi Unix tradizionali. Assumiamo, da parte vostra, una conoscenza dei comandi standard di Unix. Cygwin supporta sia la sintassi Win32, sia la sintassi POSIX. I delimitatori di directory possono essere sia le forward slash, sia le backslah:
I percorsi che contengono backslah vengono sempre trattati come percorsi Win32. I percorsi POSIX devono usare sempre le forward slash, come delimitatori. In caso contrario, verranno trattati come percorsi Win32, e l'accesso ai file potrebbe fallire in modo anche sorprendente. I nomi di percorso UNC ( Universal Naming Convention ), che iniziano con due slash ed un nome di rete, sono supportati:
L'uso dei percorsi Win32, sebbene possibile, è da deplorare, poiché elude meccanismi interni importanti nella gestione dei percorsi. I sistemi operativi POSIX ( come Linux ) non conoscono il concetto di "lettera di drive". Tutti i percorsi assoluti iniziano con una slash ( al posto della lettera di drive, come
Visto che molti programmi scritti per i sistemi Unix assumono l'esistenza di una unica struttura POSIX di filesystem, Cygwin mantiene una visione interna speciale, POSIX, del filesystem Win32, in modo da permettere a questi programmi di essere eseguiti sui sistemi Windows. Cygwin utilizza una mappatura per convertire i percorsi, quando necessario, da POSIX a Win32. Come abbiamo visto in precedenza, il file
viene usato per mappare i drive e le reti Win32 nella struttura gerarchica interna POSIX di Cygwin. Abbiamo già visto, inoltre, che il quarto campo (
oppure, il cui nome abbia una delle seguenti estensioni:
L'opzione
L'opzione
nel campo delle opzioni del file
Il primo punta alla directory in cui è installata la DLL Cygwin, mentre il secondo si suppone che punti alla directory
Questa scelta è sicura e, normalmente, non dovrebbe essere modificata. Una riga nel file
Un normale mount point.
Un mount point in textmode, case insensitive, visto che:
dice a Cygwin che in questo mount point i percorsi sono da interpretare in modo case sensitive ( il default per tutti i mout point ).
Un mount point per una directory Windows, contenente spazi nel nome.
Un mount point per una directory remota, senza supporto per ACL ( Access Control List ).
Un semplice commento
Imposta il prefisso
Riesegue un mount di
Cygwin tradurrà l'indirizzo
Questa traduzione viene normalmente effettuata solo nel tentare di identificare l'equivalente POSIX della directory corrente. Negli altri casi, la gestione dei nomi di file MS-DOS bypassa la tabella di mount. Se volete vedere i mount point impostati per la vostra sessione, invocate, senza argomenti, il programma Cygwin:
Il comando
verranno letti da uno script per generare il file:
Ricordate, però, che le righe:
non verranno mai generate. I vecchi mount point contenuti nel registro:
non vengono utilizzati per il file
originato dalle vecchie impostazioni, esiste uno script ad hoc:
Lanciate lo script e lasciate che esso crei il file Il prefisso di percorso cygdrive Come già accennato in precedenza, è possibile accedere a qualunque disco installato nel sistema, utilizzando il prefisso di percorso
ed il percorso per un qualsiasi disco può essere ricostruito utilizzando il prefisso
stampa a video la lista della directory:
Il prefisso
tutti i file contenuti in:
verrebbero aperti in modalità binaria, di default, con i nomi dei file trattati in modalità case-insensitive ( che ignora la distinzione maiuscole/minuscole ).
Le opzioni per il prefisso
Ora, ipotizziamo di avere un file:
Quando cerchiamo di aprire il file attraverso il percorso
che sono le opzioni assegnate al mount point
allora, le opzioni attive saranno quelle assegnate al prefisso
Questo si applica esclusivamente ai percorsi UNC, che usano le forward slash. Se usiamo le backslash, le opzioni utilizzate sono quelle assegnate ai percorsi nativi. Il prefisso
non permette l'accesso ai file ( in modalità text ) attraverso il prefisso di percorso
Usare i percorsi nativi di Win32 Usare i percorsi nativi di Win32 in Cygwin è sconsigliato, nonostante sia ancora possibile. Quei percorsi eludono tutte le verifiche interne di integrità e sorvolano sulle informazioni contenute nella tabella di mount. I seguenti percorsi vengono trattati come percorsi nativi Win32, in Cygwin:
Ogni volta che si accede ad un file utilizzando il percorso nativo di Win32, Cygwin assegna impostazioni di default alle opzioni di
Fino a quando il comando CWD di Cygwin restituisce risultati uguali a quelli di CWD di Windows, i due sistemi sono sincronizzati, all'interno di un processo. Tuttavia, se Cygwin cambia directory ed entra in una directory non utilizzabile da CWD di Windows, iniziano i problemi. Se il processo usa API di Win32 per accedere al file, usando un percorso relativo, il percorso assoluto che ne risulterà potrebbe non essere in linea con le aspettative del processo. Nel peggiore dei casi, i file non corretti saranno eliminati. Per risolvere questo problema, Cygwin imposta, in questo caso, il CWD di Windows su una directory speciale, che punta ad un filesystem virtuale, all'interno del namespace nativo NT (
offre la capacità di tradurre, negli script di shell, i percorsi Win32 e POSIX. Le variabili d'ambiente:
vengono automaticamente convertite dal formato Win32 al formato POSIX:
non appena viene lanciato un primo processo Cygwin ( sempre che sia stato eseguito un
avrebbe, più o meno, lo stesso effetto della creazione di un mount point, con
a:
con la sola differenza che un link simbolico non è in grado di impostare la modalità di accesso al file. Un'altra differenza è che la mappatura con i link simbolici è distribuita lungo l'intero filesystem e procede iterativamente lungo la gerarchia delle directory, invece di trovare i prefissi più lunghi in una tabella della kernel. Da notare, inoltre, che i link simbolici funzionano solo sui drive di rete che siano adeguatamente configurati per supportare l'attributo di file "system". Molti non lo sono, di default ( per esempio: i server Unix Samba ). Nei sistemi Unix, quando una applicazione legge un file, restituisce esattamente quello che trova nel file del disco fisso. La stessa cosa viene fatta in scrittura. La situazione è diversa nel mondo DOS/Windows, mondo nel quale è possibile aprire un file in due modalità: binaria o testuale. In modalità binaria, il sistema si comporta esattamente come in UNIX. In modalità testo, invece, in fase di scrittura, il carattere NL ( New Line, noto anche come LF, Line Feed:
I programmi
possono essere utilizzati per, rispettivamente, aggiungere o rimuovere i caratteri CR ( Carriage Return ) da un file.
per avere maggiori informazioni. I programmi Unix, scritti con l'obiettivo della massima portabilità, conoscono molto bene la differenza tra file binari e testuali, e si comportano in modo appropriato, con Cygwin. Molti dei programmi inclusi nella distribuzione ufficiale di Cygwin dovrebbero funzionare bene, con le impostazioni di default.
La modalità binaria ( binmode ) è la scelta migliore, normalmente, perchè veloce e facile da gestire, a meno che non desideriate scambiare file con applicazioni Win32 native. Ha molto più senso mantenere la distribuzione Cygwin e la home directory di Cygwin in modalità binaria e generare file testuali in modalità binaria ( con la fine riga Unix: LF ). Molte applicazioni Windows sono in grado di gestire adeguatamente i file binari. Una eccezione non da poco è l'editor di testo NotePad, che gestisce la fine riga di Unix in modo non corretto, oltre a produrre file con la fine riga di DOS: CRLF.
E' possibile, come già detto, convertire i caratteri CRLF in LF, e viceversa, grazie agli strumenti compresi nella distribuzione Cygwin, come le utility
Le funzioni
La modalità relativa ad un file può essere cambiata, invocando:
dove
La funzione ritorna O_BINARY o O_TEXT, a seconda dell'impostazione esistente prima della chiamata, oppure EOF, in caso di errore. Esiste un altro modo per impostare la modalità di apertura dei file utilizzati in una applicazione: creare un collegamento con alcuni file object presenti in Cygwin. Per esempio, per assicurarsi che tutti i file siano sempre aperti in modalità binaria, da un'applicazione, a prescindere dalla modalità impostata nel relativo mount point, è sufficiente aggiungere al progetto per l'applicazione, nella fase di creazione dei link, il file:
A partire da Cygwin 1.7.7, è possibile utilizzare il più semplice:
Questa riga aggiunge del codice che imposta la modalità di apertura di default, per tutti i file aperti da
Apre i file in lettura in modalità textmode.
Apre i file in scrittura in modalità binary.
Apre i file in lettura e scrittura in modalità binary.
Apre i file in lettura e scrittura in modalità textmode.
Apre i file in lettura in textmode.
Mantiene la modalità di default in scrittura. Sui filesystem FAT o FAT32, i file hanno sempre il permesso in lettura impostato, e Cygwin utilizza l'attributo DOS "read-only" ( solo lettura ) per determinare se sono anche riscrivibili. I file sono considerati eseguibili, se il nome di file finisce in:
oppure, se il contenuto del file inizia con i caratteri:
Di conseguenza, il comando
avrà bisogno di aprire e leggere i file. Di conseguenza, la sua esecuzione sarà relativamente lenta. Sui filesystem NTFS, i permessi sui file vengono valutati utilizzando le ACL ( Access Control List ) collegate ad un file. Questo comportamento può essere evitato, inserendo l'opzione
Sui filesystem NFS ( Network File System ) condivisi, i permessi sui file sono esattamente i permessi POSIX trasmessi dal server, con il protocollo NFSv3, se il client NFS è quello di Microsoft "Services For Unix", oppure Windows Vista o successivi. Solo la proprietà di utente e gruppo non necessariamente sarà corretta. Alcuni file, contenuti nella cartella Cygwin
Questi file vengono letti utilizzando le funzioni native Windows NT, che non conoscono i link simbolici di Cygwin o i percorsi POSIX. Per questo motivo, ci sono alcune condizioni da tenere a mente. Per poter accedere a questi file, la DLL di Cygwin valuta il proprio intero percorso Windows, per esempio:
rimuove la directory più interna:
e aggiunge
A questo percorso, Cygwin aggiunge il nome del file che sta cercando:
Di conseguenza, la directory
può essere un link simbolico di Cygwin. Tuttavia, i link simbolici NTFS e i "reparse point" ( oggetti NTFS contenenti una serie di informazioni relative alla directory ) accedono a quei file, compresa la directory
che dovrà essere leggibile solo per l'utente Da Cygwin 1.7.0, i nomi di file non validi per Windows, non necessariamente lo sono anche per Cygwin. Con Windows, esistono alcune regole da applicare ai nomi di file. I nomi delle periferiche DOS, AUX, COM1, LPT1 o PRN, solo per citarne alcune, non possono essere usati come nome di file o estensioni, dalle applicazioni native Win32. Quindi, nomi di file quali:
sono nomi non validi, per le applicazioni native Win32. Questa limitazione non è valida per le applicazioni Cygwin. Cygwin può creare e aprire file con nomi come questi. Fate solo attenzione a non utilizzare questi file con applicazioni native Win32. Caratteri non permessi nei nomi di file Ci sono alcuni caratteri che, sotto Windows, non sono permessi all'interno di un nome di file. Si tratta dei caratteri di controllo, caratteri ASCII dal numero 1 al numero 31, più i seguenti caratteri, che hanno un significato speciale all'interno di API Win32:
Cygwin non può risolvere questo problema, ma ha un metodo per aggirarlo. Tutti questi caratteri, eccetto la backslash, vengono convertiti in caratteri speciali UNICODE, compresi nell'intervallo 0xf000 - 0xf0ff ( l'area per l'uso privato ), al momento della creazione o dell'accesso. La backslash viene esclusa da questa conversione, perchè Cygwin supporta i nomi di file Win32, compresa la backslash come separatore di percorso. Inoltre, i nomi di file Win32 non possono contenere punti e spazi, per un problema di compatibilità verso il vecchio DOS. Se, al momento della creazione di un file, vengono inseriti, nel nome, punti o spazi, questi vengono immediatamente rimossi, prima della creazione. Questa limitazione interessa solo le applicazioni Win32 native. Le applicazioni Cygwin, invece, possono creare ed aprire, senza problemi, file contenenti, nel nome, punti e spazi. La sola eccezione a questa regola è rappresentata da alcuni filesystem di rete ( NetApp, NWFS ) che non supportano questi nomi di file. Quando si tentasse di creare un file con questi caratteri nel nome, questi sistemi restituirebbero un errore, del tipo: "No such file or directory". A partire da Cygwin 1.7.6, Cygwin identifica questi nomi di file e li tratta applicando le stesse regole applicate ai caratteri non consentiti. Gli spazi iniziali, i punti finali e gli spazi interni vengono convertiti in caratteri UNICODE appartenenti all'area privata. Questo comportamento può essere evitato esplicitamente, per un filesystem o per una directory, inserendo l'opzione mount "dos". Nomi di file con caratteri inusuali ( stranieri ) Il filesystem Windows utilizza Unicode, codificato come UTF-16, per memorizzare le informazioni relative al nome di file. Se non utilizzate il set di caratteri UTF-8, è possibile che uno o più caratteri che compongono il nome del file non abbia alcuna rappresentazione nel set di caratteri che state utilizzando. Nell'impostazione di default, "C" local, Cygwin crea i nomi di file, utilizzando il set di caratteri UTF-8. Questo risulta sempre in un qualche nome di file valido, ma, ancora una volta, potrebbe creare problemi se si cambiasse l'impostazione locale ad un valore diverso da "C" o se non si utilizzasse il set di caratteri UTF-8. Per evitare questi tipi di scenari, utilizzate sempre UTF-8, come set di caratteri. Se non voleste, o non poteste utilizzare UTF-8, come set di caratteri, sareste comunque in grado di accedere al file. Come funziona? Quando Cygwin converte il nome di file da UTF-16 al vostro set di caratteri, identifica i caratteri che non possono essere convertiti e li converte in una sequenza speciale di caratteri. La sequenza inizia con il carattere ASCII CAN ( codice esadecimale 0x18, l'equivalente di Control-X ), seguito dalla rappresentazione del carattere in UTF-8. Il risultato è un nome di file, con qualche carattere strano. Anche se il nome di file non sembra carino, in realtà lo è, perchè Cygwin sa come convertirlo all'originale UTF-16. Il nome di file verrà convertito usando il vostro set di caratteri. Tuttavia, quando Cygwin incontra un carattere ASCII CAN, elimina il carattere ASCII CAN e gestisce i byte successivi come carattere UTF-8. Quindi, il nome di file viene riconvertito in UTF-16, in modo da permettervi di accedere al file. Attenzione: questo metodo non è infallibile. In alcune combinazioni di set caratteri, potrebbe non funzionare per certi caratteri nativi. Il solo modo per evitare questo problema con certezza, è usare UTF-8. Nel sottosistema Win32, i nomi dei file sono solo case-preserved, ma non case-sensitive. Non si può accedere a due file, all'interno della stessa directory, che abbiano lo stesso nome, ma che si differenzino solo per la presenza di lettere maiuscole e minuscole diverse, come
eseguendo, poi, il reboot. Cygwin si aspetta questo valore di registro anche con Windows NT4 e 2000, che, normalmente, non conoscono questa chiave di registro. Se volete attivare la case-sensitivity in questi sistemi, create quella chiave di registro ed impostatene il valore a zero. In questi sistemi ( e solo in questi ) non ci sarà bisogno di effettuare il reboot, perchè la modifica abbia effetto: piuttosto, chiudete tutti i processi Cygwin e riapriteli. Quando si installa Microsoft's Services For Unix ( SFU ), ci viene chiesto se vogliamo usare i nomi di file case-sensitive. Rispondendo "si" in questa fase, l'installer modificherà il valore del registro appena menzionato a zero. Quindi, se avete SFU installato, c'è qualche probabilità che il valore di registro sia già impostato alla case-sensitivity. Una volta impostato il valore del registro a zero, Cygwin sarà case-sensitive, di default, sui filesystem NTFS e NFS. Tuttavia, c'è qualche limitazione: mentre è possibile creare ed aprire programmi, quali:
lanciare applicazioni resta case-insensitive, a causa delle limitazioni di Windows. Questo significa che il programma che tentate di lanciare potrebbe non essere quello realmente in esecuzione. Inoltre, fate attenzione che usare due file con i nomi identici, ma con lettere di caso differente, può comportare problemi di interoperabilità con le applicazioni native Win32. Ricordatevi che state usando la case-sensitivity a vostro rischio! Anche se usate la case-sensitivity, potrebbe essere plausibile impostare la case-insensitivity per determinati percorsi, per una migliore interoperabilità con le applicazioni native Win32, fosse anche solo per Windows Explorer. E' possibile farlo per ciascun mount point, utilizzando l'opzione mount:
in uno dei due file:
I percorsi
sono case-insensitive, di default. La ragione risiede nel fatto che la variabile d'ambiente nativa Windows
Per evitare il problema, il percorso
in uno dei due file:
oppure, assicurarsi che la variabile d'ambiente nativa Windows
L'accesso al registro è sempre case-insensitive. Non c'è alcun bisogno di creare una directory POSIX
sebbene comandi quali
funzionano bene. Se desiderate trovare le periferiche usuali nella directory
Ricordate, però, che questo script non aggiunge, in realtà, le periferiche. Ancora una volta: non è necessario vedere una periferica in
Quest'ultimo è il nome dato alla pseudo periferica rappresentata dalla finestra standard di console creata da Windows. E' la stessa console utilizzata per
Il terminale corrente di una sessione, in realtà uno pseudo terminale.
Pseudo master tty ( viene usata per creare pseudo coppie di terminali master e slave ).
I pseudo terminali sono numerati da 0.
Periferiche seriali di comunicazione, dove:
Queste ultime rappresentano la memoria fisica della macchina. Da notare che, a partire da Windows Server 2003, l'accesso alla memoria fisica è stato limitato, nel senso che l'accesso non è possibile dallo spazio utente.
Un pipe per i messaggi della kernel, da usare per i servizi sys logger.
Generatore di numeri casuali.
Periferica audio di default del sistema. Cygwin supporta anche diverse periferiche Windows:
Le porte seriali, a partire da COM1, che è equivalente a
Le Block Device ( i dischi ) sono accessibili, da Cygwin, utilizzando i nomi POSIX. Questi nomi POSIX vengono generati attraverso una conversione diretta dallo spazio dei nomi POSIX allo spazio dei nomi interno di NT. Per esempio, il primo disco fisso è la periferica interna NT:
o la prima partizione del terzo disco è:
Il primo floppy del sistema è:
Il primo CD-ROM è:
Il primo tape drive è:
La mappatura tra le periferiche ed i nomi delle periferiche all'interno dello spazio dei nomi NT si trova in diversi posti. Per dischi fissi, CD e DVD, l'utility "Disk Management" ( parte della console di gestione del sistema, "Computer Management" ) mostra che
Anche l'utility per la gestione delle periferiche, "Device Management", mostra queste corrispondenze. Ai dischi viene assegnato un numero di locazione, "Location", ai nastri magnetici un nome simbolico, "Tape Symbolic Name", e così via. Purtroppo, i posti in cui trovare queste informazioni non sono definiti molto bene. Per i dischi esterni, come i dischi USB e le schede CF ( CompactFlash ), potete usare Cygwin per vedere la mappatura. Il file:
contiene una lista dei dischi riconosciuti da Cygwin. Il comando:
stampa a video la lista dei dischi e le loro dimensioni. Se confrontate le informazioni ottenute in questi due modi, dovreste essere in grado di identificare ogni disco con un nome. Attenzione: a parte le periferiche a nastro magnetico, che non sono a blocchi e il cui accesso avviene direttamente, l'accesso alle periferiche di memorizzazione ( dischi ) può essere eseguito solo se si è sicuri di ciò che si sta facendo e di come gestire le informazioni. Scrivere sui dischi è un'operazione che va fatta solo se si sa realmente cosa si sta facendo, consapevoli del fatto che qualsiasi piccolo errore può distruggere importanti informazioni, importanti sia per il disco, sia per noi. Quindi, fate estrema attenzione. Siete stati avvisati. Last but not least: ecco la mappatura tra lo spazio dei nomi POSIX, contenuto in
Se questi nomi di periferica non vi piacciono, potete creare link simbolici, come se foste su un sistema Linux:
Il nome dei file eseguibili di Win32 termina con
restituisce le informazioni sul file
restituisce le informazioni sul file
Se, in una directory, coesistono uno script di shell ed un eseguibile con lo stesso nome, per esempio:
lo script di shell ( Cygwin, come Linux ed altri sistemi operativi simili, supportano il filesystem virtuale:
I file, all'interno di questa directory, sono la rappresentazione di diversi aspetti del vostro sistema. Per esempio:
stampa a video le informazioni relative al vostro processore. La directory
contiene molte utility che utilizzano questa directory. Il filesystem
rende accessibile, in sola lettura, il registro di configurazione Windows. Mostra la KEY come directory e il VALUE come file. E' da gestire con estrema cautela, visto che si tratta del registro di configurazione di Windows, dove il minimo cambiamento potrebbe risultare in un sistema instabile o, addirittura, inaccessibile. Ci sono ulteriori sottodirectory , chiamate:
Nei sistemi operativi a 32 bit, esse sono identiche alla directory:
mentre, nei sistemi operativi a 64 bit, la directory:
mostra le voci di registro dei processi a 32 bit, mentre la directory:
mostra le voci di registro dei processi a 64 bit. I caratteri riservati:
ed i nomi riservati:
vengono convertiti nella codifica percentuale:
I valori di default ( senza nome ) di una chiave possono essere letti utilizzando il nome di file Per aggirare le limitazioni sullla lunghezza della riga di shell, nelle shell native di Windows, i programmi Cygwin espandono i loro argomenti con una
Creo un file
Ho appena lanciato la shell di Windows.
Le doppie virgolette possono essere usate, all'interno del file, per delimitare stringhe con spazi. Le virgolette annidate devono essere ripetute. |
|
Cygwin User's Guide Parte 3: come si usa Cygwin | Disclaimer: this link points to content provided by other sites. |