LFCS: Sådan bruges GNU sed Command til at oprette, redigere og manipulere filer i Linux - del 1


Linux Foundation annoncerede LFCS-certificeringen (Linux Foundation Certified Sysadmin), et nyt program, der sigter mod at hjælpe enkeltpersoner over hele verden med at blive certificeret i grundlæggende til mellemliggende systemadministrationsopgaver til Linux-systemer. Dette inkluderer understøttelse af kørende systemer og tjenester sammen med førstehånds fejlfinding og analyse og intelligent beslutningstagning for at eskalere problemer til ingeniørteams.

Se følgende video, der demonstrerer om Linux Foundation-certificeringsprogrammet.

Serien har titlen Forberedelse til LFCS (Linux Foundation Certified Sysadmin) del 1 til 10 og dækker følgende emner til Ubuntu, CentOS og openSUSE:

Dette indlæg er del 1 af en serie med 20 tutorials, der dækker de nødvendige domæner og kompetencer, der kræves til LFCS-certificeringseksamen. Når det er sagt, affyr din terminal, og lad os starte.

Behandling af tekststrømme i Linux

Linux behandler input til og output fra programmer som streams (eller sekvenser) af tegn. For at begynde at forstå omdirigering og rør skal vi først forstå de tre vigtigste typer I/O (Input and Output) -strømme, som faktisk er specielle filer (efter konvention i UNIX og Linux, datastrømme og perifert udstyr eller enhedsfiler, behandles også som almindelige filer).

Forskellen mellem > (omdirigeringsoperatør) og | (rørledningsoperatør) er, at mens den første forbinder en kommando med en fil, forbinder sidstnævnte udgangen af en kommando med en anden kommando.

# command > file
# command1 | command2

Da omdirigeringsoperatøren opretter eller overskriver filer lydløst, skal vi bruge det med ekstrem forsigtighed og aldrig fejle det med en pipeline. En fordel ved rør på Linux- og UNIX-systemer er, at der ikke er nogen mellemfil involveret i et rør - stdout af den første kommando skrives ikke til en fil og læses derefter af den anden kommando.

Til de følgende øvelser bruger vi digtet " Et lykkeligt barn " (anonym forfatter).

Navnet sed er en forkortelse for streameditor. For dem, der ikke er bekendt med udtrykket, bruges en streameditor til at udføre grundlæggende teksttransformationer på en inputstrøm (en fil eller input fra en pipeline).

Den mest basale (og populære) brug af sed er erstatning af tegn. Vi begynder med at ændre enhver forekomst af små bogstaver y til OPERCASE Y og omdirigere output til ahappychild2.txt . Flagget g angiver, at sed skal udføre erstatningen for alle forekomster af udtryk på hver linje i filen. Hvis dette flag udelades, erstatter sed kun den første forekomst af udtryk på hver linje.

# sed ‘s/term/replacement/flag’ file
# sed ‘s/y/Y/g’ ahappychild.txt > ahappychild2.txt

Skulle du ønske at søge efter eller erstatte et specialtegn (såsom /, \, & ), skal du undslippe det i udtrykket eller udskiftningsstrenge med en skråstreg bagud.

For eksempel erstatter vi ordet og med et ampersand. Samtidig erstatter vi ordet I med Dig når det første findes i begyndelsen af en linje.

# sed 's/and/\&/g;s/^I/You/g' ahappychild.txt

I ovenstående kommando er et ^ (tegn på tegn) et velkendt regulært udtryk, der bruges til at repræsentere begyndelsen på en linje.

Som du kan se, kan vi kombinere to eller flere erstatningskommandoer (og bruge regulære udtryk inde i dem) ved at adskille dem med et semikolon og omslutte sættet i enkelte citater.

En anden brug af sed viser (eller sletter) en valgt del af en fil. I det følgende eksempel viser vi de første 5 linjer med /var/log/meddelelser fra 8. juni.

# sed -n '/^Jun  8/ p' /var/log/messages | sed -n 1,5p

Bemærk, at sed som standard udskriver hver linje. Vi kan tilsidesætte denne adfærd med indstillingen -n og derefter fortælle sed at udskrive (angivet med p ) kun den del af filen (eller røret), der matcher mønsteret (8. juni i begyndelsen af linjen i det første tilfælde og linie 1 til og med 5 i det andet tilfælde).

Endelig kan det være nyttigt, når du inspicerer scripts eller konfigurationsfiler for at inspicere selve koden og udelade kommentarer. Følgende sed en-linie sletter ( d ) blanke linjer eller dem der starter med # (tegnet | angiver en boolsk ELLER mellem de to normale udtryk).

# sed '/^#\|^$/d' apache2.conf

Kommandoen uniq giver os mulighed for at rapportere eller fjerne duplikatlinjer i en fil og skrive til stdout som standard. Vi skal bemærke, at uniq ikke registrerer gentagne linjer, medmindre de er tilstødende. Således bruges uniq sammen med en foregående sortering (som bruges til at sortere linjer med tekstfiler). Som standard tager sortering det første felt (adskilt af mellemrum) som nøglefelt. For at specificere et andet nøglefelt skal vi bruge indstillingen -k .

Kommandoen du –sch/sti/til/bibliotek/* returnerer diskpladsforbruget pr. Underkataloger og filer inden for det angivne bibliotek i menneskeligt læsbart format (viser også et samlet antal pr. Bibliotek) og viser ikke ordne output efter størrelse, men efter underkatalog og filnavn. Vi kan bruge følgende kommando til at sortere efter størrelse.

# du -sch /var/* | sort –h

Du kan tælle antallet af begivenheder i en log efter dato ved at fortælle uniq at udføre sammenligningen ved hjælp af de første 6 tegn (-w 6) i hver linje (hvor datoen er angivet) og præfikere hver outputlinje efter antallet af forekomster ( -c ) med følgende kommando.

# cat /var/log/mail.log | uniq -c -w 6

Endelig kan du kombinere sortere og uniq (som de normalt er). Overvej følgende fil med en liste over donorer, donationsdato og beløb. Antag, at vi vil vide, hvor mange unikke donorer der er. Vi bruger følgende kommando til at klippe det første felt (felter afgrænses af et kolon), sortere efter navn og fjerne duplikatlinjer.

# cat sortuniq.txt | cut -d: -f1 | sort | uniq

Læs også : 13 "kat" kommandoeksempler

grep søger i tekstfiler eller (kommandooutput) for forekomsten af et specificeret regulært udtryk og udsender enhver linje, der indeholder et match til standardoutput.

Vis oplysningerne fra /etc/passwd for bruger gacanepa, idet du ignorerer sagen.

# grep -i gacanepa /etc/passwd

Vis alt indholdet af /etc hvis navn begynder med rc efterfulgt af et enkelt nummer.

# ls -l /etc | grep rc[0-9]

Læs også : 12 kommandoeksempler "grep"

Kommandoen tr kan bruges til at oversætte (ændre) eller slette tegn fra stdin og skrive resultatet til stdout.

Skift alle små bogstaver til store bogstaver i sortuniq.txt-filen.

# cat sortuniq.txt | tr [:lower:] [:upper:]

Klem afgrænseren i output fra ls –l til kun et mellemrum.

# ls -l | tr -s ' '

Kommandoen klip udtrækker dele af inputlinjer (fra stdin eller filer) og viser resultatet på standardoutput, baseret på antal bytes ( -b mulighed), tegn (< b> -c ) eller felter ( -f ). I dette sidste tilfælde (baseret på felter) er standardfeltadskilleren en fane, men en anden afgrænser kan angives ved hjælp af indstillingen -d .

Uddrag brugerkonti og standardskaller, der er tildelt dem fra /etc/passwd (indstillingen –d giver os mulighed for at specificere feltafgrænser og –f switch angiver, hvilke felter der skal udpakkes.

# cat /etc/passwd | cut -d: -f1,7

Sammenfattende opretter vi en tekststrøm bestående af de første og tredje ikke-tomme filer i output fra kommandoen sidste . Vi bruger grep som et første filter til at kontrollere for sessioner af bruger gacanepa og derefter presse afgrænsere til kun et mellemrum ( tr-s '' ' ). Derefter udtrækker vi det første og tredje felt med klip og sorterer til sidst efter det andet felt (IP-adresser i dette tilfælde), der viser unikt.

# last | grep gacanepa | tr -s ' ' | cut -d' ' -f1,3 | sort -k2 | uniq

Ovenstående kommando viser, hvordan flere kommandoer og rør kan kombineres for at opnå filtrerede data i henhold til vores ønsker. Du er også velkommen til også at køre den efter dele for at hjælpe dig med at se output, der er pipelined fra en kommando til den næste (dette kan forresten være en god læringsoplevelse!).

Resumé

Selvom dette eksempel (sammen med resten af eksemplerne i den aktuelle vejledning) måske ikke synes meget nyttigt ved første øjekast, er de et godt udgangspunkt for at begynde at eksperimentere med kommandoer, der bruges til at oprette, redigere og manipulere filer fra Linux kommandolinje. Du er velkommen til at efterlade dine spørgsmål og kommentarer nedenfor - de vil blive meget værdsat!

  1. Om LFCS
  2. Hvorfor få en Linux Foundation-certificering?
  3. Tilmeld dig LFCS-eksamen