Come capire la bellezza di UNIX? [chiuso]

5

Alcuni miei amici dicono che UNIX è bello e semplice. Ma davvero non so cosa significano. Perché stanno dicendo così? Per me, UNIX è solo un noioso prompt dei comandi con shell differenti. Come posso sperimentare la bellezza di UNIX? Puoi condividere qualche esperienza?

    
posta Ted Wong 05.11.2011 - 13:51
fonte

1 risposta

10

Una delle differenze fondamentali tra UNIX e Windows è che Windows tende ad avere complesse applicazioni monolitiche, mentre UNIX raggiunge complessità combinando piccole applicazioni autonome ciascuna delle quali è utile per eseguire un'attività specifica. In Windows, una particolare applicazione, non importa quanto possa essere ricca e complessa, è tutto ciò che hai . In UNIX puoi combinare le applicazioni in molti modi diversi per soddisfare le tue esigenze. È un mondo completamente diverso, un modo diverso di pensare e lavorare.

Se vuoi sperimentare tutto questo devi solo lavorare con UNIX per un po 'su compiti specifici, è difficile apprezzarlo in astratto. Ma ecco un piccolo esempio. Supponiamo di voler cercare tutti i file sorgente C ++ contenenti la macro USE64BIT. Ecco un modo (il mio modo) per risolvere questo problema su un sistema UNIX (in particolare, su Ubuntu GNU / Linux 10.04).

Per verificare se un file contiene una stringa, io uso grep. Quindi scriverei:

$ grep USE64BIT mysource.cpp

o

$ grep -H USE64BIT mysource.cpp

se voglio stampare il nome del file corrispondente prima di ogni riga corrispondente.

Ora, voglio trovare tutti i file C ++, quindi ho bisogno di uno strumento per cercare i file. Io uso find:

$ find . -name "*.cpp" -print

Questo troverà tutti i file con nomi corrispondenti al modello * .cpp che inizia nella directory corrente (il primo parametro '.') e stampa ciascun percorso file (relativo a.) su una riga di output separata.

Bene, ora voglio inserire l'output di find in grep per ottenere tutti i file contenenti la mia stringa. Ho un altro strumento: xargs. xargs può chiamare ripetutamente un altro strumento, passandolo come parametro ciò che ottiene dallo standard input. Quindi abbiamo bisogno di qualcosa del tipo:

$ find ... -> xargs ... grep <input to xargs>

Quanto sopra non è un comando valido, ma l'idea è di reindirizzare il risultato di find in xargs e lasciare che xargs chiami grep su ogni riga di input. Ecco una prima soluzione:

$ find . -name "*.cpp" -print | xargs -iFILE grep -H USE64BIT FILE

Qui, l'output di find contiene tutti i file trovati, uno per riga. xargs prende ogni riga di input, imposta la variabile FILE su di essa e chiama ripetutamente grep, ogni volta passandogli il valore corrente di FILE come parametro. Il risultato di tutte queste chiamate a grep è concatenato insieme al flusso di output finale.

Questa soluzione può ancora essere migliorata: si dovrebbe usare -print0 in find e -0 in xargs in modo che l'output di find usi un carattere 0 invece di newline come separatore (i nomi dei file non conterranno mai un carattere 0, quindi 0 è un separatore più sicuro). Quindi, la soluzione finale è

$ find . -name "*.cpp" -print0 | xargs -0 -iFILE grep -H USE64BIT FILE

Questo è quello che stavamo cercando: tutte le linee in tutti i file C ++ contenenti la macro fornita.

Se non ti interessa vedere le linee corrispondenti, ma solo i file corrispondenti, puoi cambiare l'opzione nel comando grep. Su GNU / Linux puoi usare -l per stampare solo il nome del file corrispondente:

$ find . -name "*.cpp" -print0 | xargs -0 -iFILE grep -l USE64BIT FILE

Oh, ma ora vuoi ordinare l'elenco dei file corrispondenti in ordine alfabetico. Fine:

$ find . -name "*.cpp" -print0 | xargs -0 -iFILE grep -l USE64BIT FILE | sort

E, naturalmente, potresti continuare e inventare sempre più esempi.

Come puoi vedere, ogni comando è relativamente semplice e molto specializzato, ma puoi eseguire compiti molto complessi combinando diversi comandi. Puoi guidare il sistema operativo per ottenere esattamente ciò che desideri. Questo è per me uno dei motivi per cui apprezzo così tanto i sistemi UNIX perché non ho trovato questa flessibilità, ad es. Su Windows. La prima cosa che faccio quando ho di lavorare su un sistema Windows è installare cygwin (un ambiente simile a UNIX per Windows).

    
risposta data 05.11.2011 - 13:56
fonte

Leggi altre domande sui tag