Strumenti GNU per i file
Breve:
Il precedente articolo di questa serie (Fundamentele UNIX commando di) ha dato una panoramica generale di Linux. Era una introduzione agli elementi Linux, per apprendere le competenze di base e gestire il sistema operativo, ma l'utente vorrà imparare il solito set di comandi Unix. L'utilizzo di questi comandi e la shell è possibile ottenere file e del sistema molto efficiente. Questo articolo affronta queste avanzata, anche se di base, dispositivo.
Introduzione: il modo di lavorare di Unix
Prima che i comandi sono descritti, il lettore dovrebbe sapere alcuni fatti circa la loro storia. Ken Thompson en Dennis Ritchie wilden, quando Unix all'inizio degli anni Settanta sviluppati, creare un sistema operativo per facilitare la vita di programmatori. Hanno deciso che il modo migliore per raggiungere questo obiettivo è stato quello di definire un paio di strumenti semplici, che erano estremamente buono in alcuni compiti specializzati. Compiti più complessi potrebbero essere eseguiti combinando questi strumenti, utilizzando l'uscita da uno come ingresso per l'altra.
Questo concetto di invio di informazioni avviene tramite la standard input e output (schermo e tastiera). Data l'esistenza di tubi e reindirizzamento (come descritto nel precedente articolo) è possibile combinare i comandi.
È molto facile dimostrare ciò sulla base di un esempio. Un utente scrive:
$ chi | presa pepe
che e grep sono due programmi separati, fusa con il tubo “|”. che mostra un elenco di tutti gli utenti al momento il computer è angelogd. L'output è qualcosa di simile:
$ chi
manolo tty1 dicembre 22 13:15
pepe ps / 2 dicembre 22 14:36
radice tty2 dicembre 22 10:03
pepe ps / 2 dicembre 22 14:37
L'uscita consiste 4 campi, delimitato da tabulazioni. I campi sono il nome utente (login), il terminale a cui un utente è connesso, e la data e l'ora del composto.
“presa pepe” per le linee con la stringa “pepe”.
En de uitvoer è:
$ chi | presa pepe
pepe ps / 2 dicembre 22 14:36
pepe ps / 2 dicembre 22 14:37
Forse siete più interessati a qualcosa di più semplice. È possibile verificare il numero di terminali in uso in quel momento utilizzando il programma wc.
wc è un personaggio, Parole e Regole. Ora abbiamo solo bisogno di conoscere il numero di righe. Quindi usiamo l'opzione -l (Linee, SIG).
$ chi | wc -l
4
$ chi | presa pepe | wc -l
2
In totale 4 gli utenti connessi, e pepe è connesso a due terminali.
Se controlliamo ora antonio:
$ chi | presa antonio | wc -l
0
antonio non è collegato.
La genesi di utils GNU
Richard Stallman, il fondatore del progetto GNU, ha iniziato una discussione sul controllo del sistema operativo Unix. Che il controllo era a quel tempo nelle mani di poche società di software di grandi dimensioni, che la sua scienza informatica di nuovo tenuto in un modo naturale per crescere. Durante il suo tempo al MIT (Istituto di Tecnologia del Massachusetts), dove scrisse l'editor emacs, ha sviluppato un'avversione per il fatto che le grandi imprese commerciali hanno preso il suo lavoro per chiedere soldi lì. Di fronte, ha deciso di avviare un progetto, dove il codice sorgente del software è stato disponibile a tutti. Dat era GNU. L'obiettivo a lungo termine è stato quello di realizzare un sistema operativo completamente open-source. I primi passi sono stati una nuova versione open-source di emacs, un compilatore C (gcc) e alcuni strumenti di sistema tipici UNIX. E 'questi strumenti sono discussi in questo articolo.
grep
Il nostro primo esempio ha mostrato la funzionalità principale di grep. Ora ci spiegare più in dettaglio
De grondvorm grep è
$ grep [-Opzioni] file di pattern
Le opzioni più comuni, (Opzioni) suo:
-n indica il numero di riga prima delle righe abbinate (utile per la ricerca in file di grandi dimensioni, e di sapere esattamente dove si trova la partita)
-c mostra il numero delle corrispondenze trovate
-v cercare linee non corrispondenti (ricerca di linee in cui il modello (modello) Non è presente)
Il modello (modello) è un gruppo di caratteri da ricercare. Se vi è uno spazio tra Stato, La cartuccia deve essere racchiuso tra virgolette (“) essere messo, alla confusione tra il modello ei file per la ricerca (file) prevenibili. Per esempio
$ grep “Ciao mondo” file.txt
Se siamo alla ricerca di stringhe compresi i caratteri jolly, apostrofo, quotes o barre devono essere sfuggito o (preceduto da un backslash (\)) o posto tra virgolette, al fine di evitare la sostituzione dalla shell.
$ grep * ”\’\?\< file.txt
Come risultato possibile:
Si tratta di una catena di dubbia -> *”'?<
Le espressioni regolari
grep e altri utils GNU sono in grado di eseguire ricerche più avanzate. Questo è possibile tramite l'uso di espressioni regolari. Le espressioni regolari sono simili per i caratteri jolly nella shell, nel senso che sostituiscono caratteri o gruppi di caratteri. Sotto la risorsa alla fine di questo articolo contiene un link ad un articolo che spiega le espressioni regolari in dettaglio.
Alcuni esempi:
$ grep c.n
ricerca di qualsiasi occorrenza di una stringa con c, seguito da un carattere, seguito da un t.
$ grep “[Avanti Cristo]il”
cercare ogni chiamata o impedisce cellulare.
$ grep “[m-o]ata”
trovare quelle norme che mata, A nord di Oata voorkomen.
$ grep “[^ m-o]ata”
Le linee con una stringa che termina in ata, ma non m, n oppure o come la loro prima lettera.
$ grep “^ Martin venire”
Ogni linea che inizia con 'Martin venire'. Come ^ è su staffe, significa l'inizio di una riga, non una negazione di un gruppo, come nell'esempio precedente.
$ grep “$ Sonno”
Tutte le righe che terminano con la stringa 'durmiendo'. $ sta per la fine della linea.
$ grep “^ Caja San Fernando vince il campionato $”
Regole che corrispondono esattamente quello che dice.
Per impedire il servizio speciale di ciascuno di questi caratteri, deve essere quello di mettere un backslash. Per esempio:
$ grep “E .T .”
cercare la stringa 'E.T.'.
Trova
Questo comando viene utilizzato per individuare i file. Un altro articolo LinuxFocus spiega questo off, e la cosa migliore che possiamo fare è fare riferimento ad esso.
tagliare & incolla
In UNIX informazioni è di solito memorizzato in file ASCII con line-record, e campi delimitati con alcuni caratteri speciali, di solito un segno di tabulazione o due punti (:). Un'opzione tipico è quello di selezionare alcuni campi da un file e unirsi a loro in un altro file. Per questo compito taglia e incolla.
Prendiamo come esempio il file / etc / passwd, utilizzando le informazioni dell'utente. Contiene 7 campi, separati da “:”. I campi contengono informazioni sul nome di login, la password crittografata, L'ID utente, il nome, de home directory van de Gebruiker, e il guscio che preferisce.
Ecco un brano tipico da questo file:
radice:x:0:0:radice:/radice:/bin / bash
morire:x:500:500:Manuel Cordero Muriel:/home / Murie:/bin / bash
pratica:x:501:501:Pratiche utente a Ksh:/home / practica:/bin / ksh
wizardi:x:502:502:Para guidata nethack:/home / stregone:/bin / bash
Se vogliamo associare l'utente con i loro gusci, abbiamo bisogno di mettere in campo 1 in 7 taglio (tagliare):
$ tagliare -f1,7 -d: /etc / passwd
radice:/bin / bash
morire:/bin / bash
pratica:/bin / ksh
procedura guidata:/bin / bash
L'opzione -f specifica i campi da tagliare, e -d definisce l'accoltellamento di separazione (scheda è standaard).
È anche possibile selezionare una riga di campi:
$ tagliare -f5-7 -d: /etc / passwd
radice:/radice:/bin / bash
Manuel Cordero Muriel:/home / Murie:/bin / bash
Pratiche utente a Ksh:/home / practica:/bin / ksh
Para guidata nethack:/home / stregone:/bin / bash
Tutti noi esportazioni>’ inviati a due file differenti, e vogliamo combinare l'uscita di entrambi, allora possiamo usare il comando Incolla:
$ incollare output1 output2
radice:/bin / bash:radice:/radice:/bin / bash
morire:/bin / bash:Manuel Cordero Muriel:/home / Murie:/bin / bash
pratica:/bin / ksh:Pratiche d'uso per Ksk:/home / practica:/bin / ksh
procedura guidata:/bin / bash:Para guidata nethack:/home / stregone:/bin / bash
ordinare
Supponiamo che / etc / passwd vogliamo ordinare il campo del nome. Per raggiungere questo, useremo sorta, lo strumento di ordinamento unix.
$ sorta -t: +4 /etc / passwd
morire:x:500:500:Manuel Cordero Muriel:/home / Murie:/bin / bash
pratica:x:501:501:Pratiche utente a Ksh:/home / practica:/bin / ksh
procedura guidata:x:502:502:Para guidata nethack:/home / stregone:/bin / bash
radice:x:0:0:radice:/radice:/bin / bash
È facile vedere che il file è ordinato, ma nell'ordine della tabella ASCII. Se vogliamo distinguere tra testa- it Kleine lettere, possiamo utilizzare la seguente:
$ sorta -t: +4f / etc / passwd
morire:x:500:500:Manuel Cordero Muriel:/home / Murie:/bin / bash
radice:x:0:0:radice:/radice:/bin / bash
pratica:x:501:501:Pratiche utente a Ksh:/home / practica:/bin / ksh
procedura guidata:x:502:502:Para guidata nethack:/home / stregone:/bin / bash
-t è la possibilità di selezionare la separazione lancinante per i campi, +4 Il numero di campi che devono essere battuto prima di ordinare, e f significa che ci deve essere risolto senza distinguere tra testa- it Kleine lettere.
Si può ancora fare specie molto più complicato. Esempio, possiamo in un primo passo per risolvere la shell preferita, e in una seconda fase il nome:
$ sorta -t: +6r + 4f / etc / passwd
pratica:x:501:501:Pratiche utente a Ksh:/home / practica:/bin / ksh
morire:x:500:500:Manuel Cordero Muriel:/home / Murie:/bin / bash
radice:x:0:0:radice:/radice:/bin / bash
procedura guidata:x:502:502:Para guidata nethack:/home / stregone:/bin / bash
Coppia: si dispone di un file con i nomi delle persone che si prestano denaro e l'importo che li avete preso in prestito. Naam è 'deudas.txt':
Son Goku:23450
Son Gohan:4570
Picolo:356700
Ranma 1/2:700
Se sei il primo che si 'deve visitare’ Per saperne di, avete bisogno di una lista ordinata:
Tipo solo:
$ ordinare +1 passivo
Ranma 1/2:700
Son Gohan:4570
Son Goku:23450
Picolo:356700
Tuttavia, questo non è il risultato desiderato, perché il numero di caratteri non è ovunque la stessa. La soluzione è di fare uso di 'n’ opzione:
$ debiti sorta + 1N
Picolo:356700
Son Goku:23450
Son Gohan:4570
Ranma 1/2:700
Opzioni di base per genere sono:
+nm salta sui primi campi n e gli m caratteri successivi prima di iniziare l'ordinamento.
-nm per arrestare il processo di sequenziazione, se si ottiene il carattere m-esimo del campo n-esimo.
Voi seguenti parametri possono essere utilizzati:
-b salta sopra spazi bianchi principali
-d Dictionaire sorta (solo lettere, numeri e spazi)
-f non fa distinzione tra la testa- it Kleine lettere
-n tipo numerico
-r ordine inverso
wc
Come abbiamo visto in precedenza, wc è un personaggio, parola- e contro la linea. Output predefinito contiene il numero di linee, parole e caratteri nel file di input (i file di input).
L'uscita può essere determinato utilizzando le opzioni:
-solo l linee (Linee)
-w solo parole
-c solo caratteri (personaggi)
Strumenti di paragone: cmp, comm, diff
A volte abbiamo bisogno di conoscere le differenze tra le due versioni dello stesso file. Questo è utilizzato principalmente in programmazione, quando più persone lavorano sullo stesso progetto, e, se il codice sorgente (lattina) cambiamento. Per calcolare la differenza tra l'una e l'altra versione, è possibile utilizzare questi strumenti.
cmp è de eenvoudigste. Esso mette a confronto due file e individua il luogo in cui viene visualizzata la prima differenza (dà un numero per il segno, e il numero della regola.)
$ cmp vecchio nuovo
vecchio nuova differire: carbonizzare 11234, linea 333
comm è un po 'più avanzato. L'uscita eroga 3 Colonne. Il primo contiene le linee uniche del primo file, la seconda contiene le linee uniche del secondo file, e la terza contiene le regole corrispondenti. Parametri numerici permettono la rimozione di alcune di queste colonne.
-1, -2 in -3 indicano rispettivamente la prima, seconda e / o terza colonna non deve essere visualizzato. L'esempio seguente mostra solo quelle regole che sono unici per il primo file e le norme comuni.
$ comm -2 vecchio nuovo
Come una finale, ma certamente non ultimo dei tre, è er diff. Si tratta di uno strumento indispensabile per progetti di programmazione. Se hai già scaricato un kernel per la compilazione, si sa che si può scegliere il codice sorgente del nuovo o la patch per la versione precedente, per cui quest'ultimo è più piccolo. Questa patch è un suffisso diff, il che significa che è un output di diff. Questo strumento è comandi dell'editor (noi, rcs) utilizzarlo per creare file identici. Questo vale anche per le directory e gli archivi tenendoli in. L'utilizzo è evidente: è necessario scaricare il codice sorgente meno (solo le modifiche), di applicare la patch, it je compileert. Senza parametri, l'uscita specifica come deve essere applicato il cambiamento, in modo che il primo è uguale al secondo, incontrato vi commando di.
$ diff vecchio nuovo
3c3
< Lo Hobbit
—
> Il Signore degli Anelli
78a79,87
>Tre Anelli degli Elfi re sotto il cielo,
>Sette Nani per i signori nelle loro rocche di pietra,
>Nove agli Uomini Mortali che la triste morte,
>Uno per l'Oscuro Signore sul suo trono scuro
>Nella Terra di Mordor, dove l 'Ombra.
>Un anello per domarli tutti, Un Anello per trovarli,
>Un Anello per ghermirli e nel buio incatenarli
>Nella Terra di Mordor, dove l 'Ombra.
3c3 significa che in linea di 3 Tre regole devono essere cambiate, per cui “Lo Hobbit” deve essere rimosso, e sostituito da “Il Signore degli Anelli”. 78a79,87 significa che è necessario inserire nuove linee, Regola 79 a 87.
uniq
uniq rimuove i duplicati. Se vogliamo conoscere le persone realmente collegato al computer, dobbiamo utilizzare i comandi che e tagliare.
$ chi | cut -f1 -d’ ‘
radice
morire
morire
pratica
Tuttavia, l'uscita non è giusto. Abbiamo bisogno di la seconda volta che l'utente si verifica rimuovere Murie. Questo significa
$ chi | cut -f1 -d’ ‘ | ordinare | uniq
morire
pratica
radice
L'opzione -d’ ‘ significa che il campo di separazione è uno spazio, perché l'output che utilizzano tale carattere anziché la scheda.
uniq confronta solo linee consecutive. Nel nostro caso la 2 tempo “morire” subito dopo l'altro, ma potrebbe anche potuto essere diverso. E 'quindi una buona idea di ordinare l'output prima di ordinare uniq.
ma
sed è uno dei più singolari strumenti Unix. Si distingue per “STREAM editor”. Quando si modifica il testo nel modo consueto, il programma accetta interattivamente cambiare che indica l'utente. sed ci permette di creare piccoli script di shell, gelijkend file op de batch in MS-DOS. Così ci dà la possibilità di modificare il contenuto di un file senza l'interazione dell'utente. Le funzionalità dell'editor sono grandi, ma se dovessimo andare più a fondo l'argomento, Questo articolo sarebbe troppo lungo. È per questo che andiamo a fare una breve introduzione, e gli interessati possono studiare le pagine man e info.
sed è solitamente invocato come:
$ Ma 'il comando’ file
Prendete come esempio un file, in cui ogni occorrenza “Manolo” vuole rimpiazzare “Fernando”. Questo va:
$ sed 's / Manolo / Fernando / g’ file
Via output standard si ottiene il file modificato. Se si desidera mantenere i risultati, Redirect Con “>”.
Molti utenti cercheranno ordinario & riconoscere sostituire comando vi. Infatti, la maggior parte sono “:” commando di (che chiamare per ex) sed commando di.
Di solito, sed istruzioni da uno o due indirizzi (Per selezionare righe) e il comando da eseguire. L'indirizzo potrebbe essere una linea, alcune regole, o un motivo.
I comandi più comuni sono:
Comando Azione
——– —–
a\ voeg een regel toe na de geadresseerde regel in de invoer
c\ verander de geadresseerde regels, scrivere la linea
d cancella la linea(S)
g cambiato il modello in tutto il mondo, anziché solo la prima
volta che si verifica
i\ voeg regels toe na de geadresseerde regels
p stampare la riga corrente, anche se l'opzione -n è usata
arresto q (lasciare il programma) se si raggiunge la linea indirizzata
r file leggere un file, e aggiungere il contenuto all'uscita
s / uno / due corda vervang “uno” stringa di porta “due”
copie di file w la linea attuale in un file diverso
= Numero di riga Stampa
! comando viene applicato il comando per la linea corrente
Utilizzando sed, È possibile specificare quali regola(S) Per modificare il:
$ Ma 3d’ file
cancellerà la terza riga del file
$ ma '2,4s / e / # /’ file
Sarà la prima volta che nelle regole 2 fino al 4 un “e” impedisce, questo è sostituito da “#”
Righe contenenti una stringa possono essere selezionate tramite le espressioni regolari, come descritto sopra, utilizzando. Per esempio
$ Ma '/[Qq]ueen / d’ canzoni
ogni linea cancellerà dove la parola “Queeen” di “regina” a verifica.
E 'facile da cancellare righe vuote da un file usando i modelli (modelli)
$ ma la '/ ^ $ / d’ file
Tuttavia, questo non elimina linee con spazi. Al fine di raggiungere tale, abbiamo bisogno di espandere un po 'modello
$ ma '/ ^ * $ / d’ file
Dove “*” segno indica che il carattere precedente, ” ” Pertanto, lo spazio in questo caso, x può verificarsi più volte.
$ Ma '/ initMenu / a
> il testo aggiuntivo’ file.txt
Questo esempio viene cercata la riga contenente la stringa InitMenu” impedisce, e dopo l'aggiunta di una nuova linea. Le opere di esempio, come mostrato, solo con una shell bash o sh. Je tikt tot a\, quindi premere Invio (ritorno) it tik je de riposo.
Tcsh nuove regole all'interno di citazioni in modo diverso. Pertanto è necessario utilizzare una doppia barra rovesciata:
$ sed ‘/InitMenu/a\\
? il testo aggiuntivo’ file.txt
Il ? il segno shell, net als de > nell'esempio bash.
awk
Una lettura migliore: awk. L'insolito nome deriva dai nomi degli sviluppatori originali: Alfred Aho, Peter Weinberger en Brian Kernighan.
Il programma awk è uno dei più interessanti tra le utility Unix. E 'un evoluto e complesso strumento, che consente, dalla riga di comando molto per eseguire diverse azioni.
È da notare che awk e sed sono pezzi chiave degli script più complessi di shell. Che cosa si può fare con esso, senza C o qualsiasi altro linguaggio compilato, è impressionante. L'installazione della distribuzione Slackware Linux, per esempio,, e molti programmi di web CGI sono solo shell script.
Oggi, gli strumenti di lavoro dalla riga di comando non è di solito eseguita; sono obsoleti dall'avvento degli ambienti finestra, e con l'arrivo di PERL molti script di shell divenne sostituito da script perl. Si potrebbe pensare che gli strumenti della riga di comando saranno dimenticati. Tuttavia la mia esperienza dice che molte applicazioni può essere fatto con poche righe in uno script di shell (un piccolo gestore di database). Che si può essere molto produttivo con il guscio, almeno se si utilizzano questi comandi e la shell conosce bene.
Se ti iscrivi al potere di awk e sed si possono fare le cose velocemente, che sono di solito un piccolo gestore di database più un foglio di calcolo.
Prendete un disegno di legge, dove si trovano gli articoli che avete comprato, quanti pezzi di ogni, ed i loro prezzi per prodotto. Noi chiamiamo questo file “le vendite”:
arance 5 250
pere 3 120
mele 2 360
Si tratta di un file con 3 Campi e Tab come delimitatore. Ora si vuole definire un quarto campo, con il prezzo totale per prodotto.
$ awk '{totale = $ 2 * 3 $; stampa $0 , totale }’ le vendite
arance 6 250 1250
pere 3 120 360
mele 2 360 720
totale è la variabile che conterrà il prodotto dei valori memorizzati nel secondo e terzo campo. Dopo il calcolo, l'intera linea di ingresso ed i campi totale.
awk è quasi un ambiente di programmazione, particolarmente adatto per automatizzare il lavoro con le informazioni da file di testo. Se siete interessati a questo strumento, Vi incoraggio a studiarli, utilizzando le pagine man e info.
De script di shell
Gli script di shell sono sequenze di comandi di sistema, dopo essere stato memorizzato in un file, può essere effettuata.
Gli script di shell sono simili ai file batch DOS, ma potente. Essi permettono agli utenti di fare le proprie comandi solo combinando comandi esistenti.
Ovviamente accettare parametri script di shell. Questi sono memorizzati nelle variabili $0 (il nome del comando o lo script), $1, $2, … a $9. Tutti i parametri di comando possono essere approssimate $*.
Qualsiasi editor di testo in grado di creare script di shell. Per eseguire una corsa script:
$ sh shell-script
di, anzi, si può dare diritti di esecuzione
$ chmod 700 shell-script
ed eseguire solo digitando il nome:
$ shell-script
Finiremo qui questo articolo e la discussione su script di shell, che è rinviato al futuro. Il prossimo articolo introdurrà editor di testo Unix più comuni: noi & emacs. Ogni utente Linux dovrebbe conoscerli bene.