Werken met Linux-pipes, omleiding en tekstverwerking

Leer werken met tekst op de Linux-commandoregel. Bekijk bestanden met cat, less, head en tail, stuur uitvoer en foutmeldingen naar bestanden en koppel kleine commando's aan elkaar in pijplijnen die tekst tellen, sorteren en uitsnijden. Doorzoek bestanden met grep en reguliere expressies, zoek bestanden op naam, grootte en ouderdom en bewerk configuratiebestanden in de terminaleditors nano en vi.

BeginnerLes 3 van 7 in Cursus Linux: commandoregel, shellscripts, gebruikers en services

Wat je leert

  1. Toon korte bestanden volledig, blader door lange bestanden en toon alleen de eerste of laatste regels van een bestand.
    • Toon bestanden en blader erdoor met cat en less
      Toon korte bestanden met cat, lees lange bestanden scherm voor scherm met less en navigeer en zoek binnen less.
    • Toon de eerste of laatste regels met head en tail
      Gebruik head en tail om het begin of einde van een bestand te tonen, een kopregel over te slaan, een regelbereik te selecteren en een groeiend logbestand te volgen.
  2. Leg de drie standaardstromen van een commando uit en leid invoer, uitvoer en foutmeldingen van en naar bestanden om.
    • Begrijp standaardinvoer, standaarduitvoer en standaardfoutuitvoer
      Beschrijf de drie standaardstromen, waarom uitvoer en fouten gescheiden zijn en hoe een commando invoer uit een bestand kan lezen in plaats van vanaf het toetsenbord.
    • Leid uitvoer en foutmeldingen om naar bestanden
      Sla uitvoer en foutmeldingen op in bestanden door ze te overschrijven of achteraan toe te voegen, combineer gegevensstromen of gooi ze weg en voorkom dat je een bestand vernietigt door er uitvoer naartoe om te leiden.
  3. Verbind kleine commando's met pipes om tekst te tellen, sorteren, ontdubbelen en uitsnijden en zo met één commandoregel vragen over gegevens te beantwoorden.
    • Verbind commando's met pipes en tee
      Gebruik de pipe om de uitvoer van het ene commando door te geven aan het volgende, bouw en controleer een pijplijn stap voor stap en sla onderweg een kopie op met tee.
    • Tel en sorteer regels en verwijder dubbele regels
      Tel regels, woorden en bytes met wc, sorteer regels alfabetisch, numeriek of op een veld met sort en verwijder of tel dubbele regels met uniq.
    • Haal kolommen uit tekst met cut
      Selecteer met cut velden uit tekst met scheidingstekens en tekens op vaste posities, en gebruik het in pijplijnen om vragen over gegevens te beantwoorden.
  4. Zoek regels in bestanden met grep en beschrijf de te zoeken tekst nauwkeurig met eenvoudige en uitgebreide reguliere expressies.
    • Doorzoek bestanden met grep en de belangrijkste opties
      Gebruik grep om overeenkomende regels te tonen, tellen of nummeren, of om de zoekopdracht om te keren, doorzoek hele directory's en kies tussen zoeken met een patroon en zoeken naar letterlijke tekst.
    • Schrijf eenvoudige reguliere expressies
      Bouw patronen met letterlijke tekens, de punt, ankers, expressies tussen vierkante haken en de ster, en voorkom verwarring met jokertekens voor bestandsnamen.
    • Gebruik uitgebreide reguliere expressies met grep -E
      Gebruik de operatoren ?, +, { }, | en ( ) met grep -E om optionele, herhaalde en alternatieve tekst te vinden en toon alleen de overeenkomende delen.
  5. Zoek bestanden overal in de directoryboom met find en locate en voer commando's uit op de gevonden bestanden.
    • Doorzoek de directoryboom met find
      Gebruik find met tests voor naam, type, grootte en tijd, combineer tests en voorkom problemen met aanhalingstekens en toegangsrechten waar beginners tegenaan lopen.
    • Voer bewerkingen uit op gevonden bestanden en gebruik snellere zoekmethoden
      Voer commando's uit op elk bestand dat find vindt, verwijder overeenkomsten veilig en weet wanneer locate of which sneller is.
  6. Open, wijzig, bewaar en sluit tekstbestanden in de twee terminaleditors die op de meeste Linux-systemen te vinden zijn: de eenvoudige nano en de modale vi.
    • Bewerk een bestand in nano en sla het op
      Open een bestand in nano, typ en wijzig tekst, zoek en vervang, knip en plak regels en sla correct op en sluit af.
    • Werk in de verschillende modi van vi
      Schakel tussen de normale modus, invoegmodus en commandoregelmodus van vi, navigeer en bewerk met commando's van één toets en sla op of sluit af zonder werk te verliezen.

Linux-pipes, omleiding en tekstverwerking: uitleg

6 hoofdstukken

1

Bekijk bestanden via de terminal

Een tekstbestand kan enkele notities of duizenden instellingen bevatten. Kies een weergave die past bij wat je nodig hebt: het hele bestand, een scherm waar je doorheen kunt navigeren of een klein deel aan het begin of einde. Je leert navigeren en zoeken zonder te bewerken, een exact regelbereik selecteren en tekst volgen die aan een groeiend bestand wordt toegevoegd. Deze weergavecommando's accepteren ook uitvoer van andere commando's, zodat dezelfde vaardigheden je helpen een lange bestandslijst of de resultaten van een pijplijn te bekijken.

1.1 Toon bestanden en blader erdoor met cat en less

Korte bestanden zijn gemakkelijk volledig te tonen. Lange bestanden zijn gemakkelijker te lezen als de weergave op je wacht. Noch cat, noch de normale leesweergave van less bewerkt het bestand.

Tekst tonen of samenvoegen met cat

cat notes.txt stuurt het volledige bestand naar de standaarduitvoer, normaal gesproken je terminal. De naam komt van concatenate (aaneenschakelen): als je meerdere bestandsnamen opgeeft, toont het hun inhoud in de opgegeven volgorde. Het voegt geen kop tussen bestanden in.

Stel dat a.txt de regels “a” en “b” bevat en b.txt “c d”. Voer uit:

cat -n a.txt b.txt

Je ziet drie genummerde regels. De nummering loopt door over de twee bestanden; -n nummert de uitvoer, niet de opgeslagen bestanden. Gebruik cat a.txt b.txt > ab.txt om de samengevoegde tekst op te slaan. Het nieuwe bestand bevat de drie oorspronkelijke regels zonder nummering. Als je -n toevoegt, worden ook de nummers opgeslagen.

Als je een groot bestand toont, kan het begin buiten het zichtbare scherm verdwijnen. Met een paginagewijze tekstviewer houd je controle over de weergave. less /etc/services opent een lang tekstbestand en toont een scherm vol tekst. Het kan het eerste scherm tonen voordat het hele bestand is gelezen, wat helpt bij grote bestanden.

Navigeren in less

De shellprompt is verborgen zolang less actief is. Het programma wacht op een navigatietoets:

ToetsActie
Spatiebalk of fEén scherm vooruit
bEén scherm terug
Pijl omlaag, Enter of jEén regel omlaag
Pijl omhoog of kEén regel omhoog
g / GNaar de eerste / laatste regel springen
h / qHulp tonen / afsluiten

Hoofdletters maken verschil: g en G gaan naar tegenovergestelde uiteinden. Druk op q als je klaar bent met lezen; als je op een nieuwe shellprompt wacht zonder af te sluiten, kan de tekstviewer vastgelopen lijken.

Zoeken in de weergave

Typ /, voer een woord in en druk op Enter om vooruit te zoeken. Zo vindt /ssh de volgende overeenkomende tekst. Typ ?ssh en Enter om achteruit te zoeken. Daarna herhaalt n de zoekopdracht in de huidige richting, terwijl N in de tegenovergestelde richting gaat. Na een achterwaartse zoekopdracht gaat n verder achteruit.

De zoekopdracht is een reguliere expressie. /^# vindt een regel die begint met “#”, omdat ^ het begin van een regel markeert. Je kunt de patroonregels apart leren en nu eenvoudige woorden gebruiken.

less -N notes.txt voegt regelnummers toe aan de weergave. Voor brede records houdt less -S notes.txt een lange regel op één schermregel door het zichtbare rechterdeel af te kappen; met de pijlen links en rechts ga je zijwaarts. De tekst blijft in het bestand staan. Zonder -S lopen lange regels door op extra schermregels. more is een oudere paginagewijze tekstviewer met minder navigatiemogelijkheden.

Door de uitvoer van een ander commando bladeren

Met ls -l /usr/bin | less kun je door de lange bestandslijst bladeren. De pipe levert de lijst aan de tekstviewer. Voor een bestaand bestand opent less notes.txt het direct; cat notes.txt | less voegt een extra commando toe voor dezelfde weergave.

Gebruik deze commando's voor tekst. Als je een binair programma zoals /bin/ls toont, kunnen stuurtekens verschijnen en kan de terminal vreemde tekens weergeven. Gebeurt dat, typ dan reset en druk op Enter om de weergave te herstellen.

Belangrijkste punten

  • cat toont bestanden in de opgegeven volgorde; -n nummert de gecombineerde uitvoer.
  • Met less blader je door tekst zonder die te bewerken; q keert terug naar de shell.
  • In less zoekt / vooruit en ? achteruit; n herhaalt de huidige zoekrichting.
  • less -N toont regelnummers; met less -S kun je zijwaarts door brede regels scrollen.

1.2 Toon de eerste of laatste regels met head en tail

Als je alleen de eerste of meest recente vermeldingen van een bestand nodig hebt, raakt het nuttige deel verborgen als je alles toont. head selecteert het begin en tail het einde. Beide tonen standaard 10 regels.

Een aantal regels kiezen

Als numbers.txt 1 tot en met 100 bevat, één getal per regel, toont head numbers.txt 1 tot en met 10, terwijl tail numbers.txt 91 tot en met 100 toont. Gebruik -n om het aantal te wijzigen:

head -n 3 numbers.txt
tail -n 3 numbers.txt

Het eerste commando toont 1, 2, 3. Het tweede toont 98, 99, 100. Als een bestand minder regels heeft dan gevraagd, toont het commando wat beschikbaar is.

head -c 5 selecteert vijf bytes in plaats van vijf regels. Voor tekst die begint met “banana” toont het “banan”. Bytes zijn opslageenheden; bij UTF-8-tekst kan een teken meer dan één byte gebruiken, dus een aantal bytes is niet altijd gelijk aan een aantal tekens.

Een beginpositie correct lezen

Een plusteken verandert de betekenis van tail -n. Vergelijk:

CommandoBetekenis
tail -n 2 fileDe laatste twee regels tonen
tail -n +2 fileVanaf regel 2 tot het einde tonen

tail -n +2 scores.csv laat de eerste regel weg, handig als die regel kolomkoppen bevat. Het selecteert niet alleen de tweede regel. Op het genummerde bestand toont tail -n +98 numbers.txt 98 tot en met 100.

GNU head accepteert ook een negatief aantal: head -n -97 numbers.txt laat de laatste 97 regels weg, zodat 1 tot en met 3 overblijven. Het teken hoort bij het aantal en maakt deel uit van de instructie.

Een bereik in het midden selecteren

Om regels 11 tot en met 20 te tonen, behoud je eerst alles tot en met regel 20. Daarna behoud je de laatste 10 regels van die selectie:

head -n 20 numbers.txt | tail -n 10

Na head zijn de gegevens 1 tot en met 20. De laatste tien regels zijn 11 tot en met 20. Het aantal regels in een bereik met beide grenzen inbegrepen is het eindnummer min het beginnummer plus één; die laatste één zorgt ervoor dat beide grenzen meetellen. Met tail -n 11 zou ook regel 10 worden meegenomen.

Beide commando's kunnen uit een pipe lezen als er geen invoerbestand is opgegeven. ls /etc | head -n 5 beperkt een bestandslijst tot de eerste vijf namen. Onthoud bij ls -lt | head -n 4 dat de eerste uitvoerregel de regel “total” is: daarna volgen slechts drie vermeldingen.

Een bestand zien groeien

tail -f /var/log/app.log toont eerst de laatste regels, wacht daarna en toont tekst die aan het bestand wordt toegevoegd. Gebruik dit terwijl een programma nieuwe vermeldingen schrijft. Druk op Ctrl+C om het volgen te stoppen en naar de shell terug te keren. De wachtende weergave is bewust zo ontworpen; die verschilt van de voltooide eenmalige uitvoer van gewoon tail.

tail -F probeert het ook opnieuw en blijft de bestandsnaam volgen als een logbestand tijdens rotatie wordt verwijderd en opnieuw aangemaakt. Bij meerdere invoerbestanden voorzien head en tail de uitvoer van elk bestand van een kopregel zoals “==> fruit.txt <==”. Voeg -q toe als je de geselecteerde tekst zonder die kopregels nodig hebt.

Belangrijkste punten

  • head en tail tonen standaard 10 regels; met -n stel je een aantal regels in.
  • tail -n +K begint bij regel K; het betekent niet de laatste K regels.
  • Voor een bereik met beide grenzen inbegrepen behoud je eerst het aantal regels tot de eindregel en daarna het aantal regels in het bereik.
  • tail -f volgt toegevoegde tekst; Ctrl+C stopt het volgen.
  • tail -F blijft een bestandsnaam volgen als het bestand wordt vervangen en -q onderdrukt kopregels bij meerdere bestanden.
2

Bepaal waar invoer vandaan komt en waar uitvoer en foutmeldingen naartoe gaan

Een commando kan tijdens dezelfde uitvoering nuttige resultaten en foutmeldingen opleveren. Linux geeft die afzonderlijke routes, naast een route voor invoer. De shell kan elke route met een bestand verbinden voordat het commando start. Als je die verbindingen begrijpt, kun je een rapport opslaan, fouten in een afzonderlijk bestand bewaren en gegevens aanleveren zonder ze te typen. De volgorde van de omleidingen is van belang en een uitvoerbestand kan worden leeggemaakt voordat het programma invoer leest.

2.1 Begrijp standaardinvoer, standaarduitvoer en standaardfoutuitvoer

Een commando communiceert via standaardstromen. Als je invoer en uitvoer als afzonderlijke routes ziet, begrijp je hoe hetzelfde programma vanaf een toetsenbord of uit een bestand kan lezen, of de uitvoer van een ander commando kan ontvangen.

De drie stromen herkennen

Een bestandsdescriptor is het nummer waarmee een open gegevensstroom wordt aangeduid. Een gewoon shellcommando erft deze drie:

NummerNaamGebruikelijke verbinding met de terminal
0Standaardinvoer, stdinInvoer vanaf het toetsenbord
1Standaarduitvoer, stdoutNormale resultaten op het scherm
2Standaardfoutuitvoer, stderrFouten en statusmeldingen op het scherm

Hoewel stdout en stderr normaal gesproken hetzelfde scherm delen, zijn het afzonderlijke verbindingen. Een programma kan tijdens dezelfde uitvoering een resultaat op stdout melden en een probleem op stderr toelichten.

Zo toont ls /etc/hostname /nonexistent > out.txt één bestaand pad en stuit het op één ontbrekend pad. De bestandsvermelding gaat naar out.txt. De melding “No such file or directory” blijft op de terminal verschijnen omdat > stdout omleidt, niet stderr. Een fout op het scherm betekent niet dat de omleiding van uitvoer is mislukt.

Een commando invoer uit een bestand geven

Commando's zoals cat, sort, wc, grep, head en tail kunnen stdin lezen als er geen invoerbestand is opgegeven. Voer alleen sort uit, typ enkele regels en druk aan het begin van een lege regel op Ctrl+D. Dat geeft het einde van de invoer aan, waarna sort de gesorteerde regels kan tonen. Met Ctrl+C stop je het commando in plaats van de invoer te voltooien.

De invoeroperator < verbindt een bestand met stdin:

wc -l < fruit.txt

Als fruit.txt zes regels heeft die elk eindigen met een nieuweregelteken, is de uitvoer “6”. Vergelijk dit met wc -l fruit.txt, dat “6 fruit.txt” toont. Bij de omgeleide vorm opent de shell het bestand en ontvangt wc een gegevensstroom zonder de oorspronkelijke bestandsnaam. Bij de vorm met een argument opent wc het genoemde bestand zelf.

De shell bereidt omleidingen voor voordat het programma wordt gestart. sort < fruit.txt en < fruit.txt sort verbinden daarom hetzelfde bestand met dezelfde invoerstroom. De gebruikelijke plaatsing na het commando is gemakkelijker te lezen.

Enkele regels direct aanleveren

Een here-document plaatst invoer onder het commando. Het woord na << markeert waar die invoer eindigt:

cat <<EOF > greeting.txt
Hello
See you soon
EOF

cat ontvangt de twee begroetingsregels op stdin en schrijft ze naar het uitvoerbestand. De laatste regel bevat alleen EOF; dat is een scheidingsteken en maakt geen deel uit van de opgeslagen tekst. Je kunt een ander woord als scheidingsteken gebruiken als de afsluitende regel er precies mee overeenkomt.

In Bash levert een here-string één tekenreeks plus een nieuweregelteken. wc -w <<< "a b c" meldt drie woorden. Met deze twee vormen lever je invoer direct aan zonder eerst een invoerbestand te maken.

Lees de pijl voordat je het commando uitvoert

sort < fruit.txt leest het bestand. sort > fruit.txt opent het als uitvoerbestemming, maakt bestaande inhoud leeg en wacht op invoer vanaf het toetsenbord. De shell voert die vernietigende opening uit voordat sort wordt gestart. Houd invoerbestanden gescheiden van uitvoerbestemmingen, tenzij het commando een gedocumenteerde manier heeft om zijn invoer veilig bij te werken.

Belangrijkste punten

  • stdin, stdout en stderr gebruiken de bestandsdescriptoren 0, 1 en 2.
  • < levert een bestand via stdin aan; > wijzigt de bestemming van stdout.
  • Ctrl+D op een lege invoerregel geeft het einde van de invoer aan; Ctrl+C stopt het commando.
  • Een here-document gebruikt een overeenkomend scheidingsteken op een regel op zichzelf.

2.2 Leid uitvoer en foutmeldingen om naar bestanden

Omleiding verandert de bestemming van een gegevensstroom. Het is een bewerking van de shell, dus dezelfde operatoren werken met veel verschillende programma's. Bepaal eerst welke stroom je wilt sturen en of een bestaand bestand moet worden vervangen of uitgebreid.

Normale resultaten opslaan of achteraan toevoegen

echo one > log.txt maakt het bestand aan of maakt het leeg voordat het de regel “one” schrijft. Een daaropvolgend echo two >> log.txt voegt “two” achteraan toe, zodat er twee regels zijn. >> maakt ook een ontbrekend bestand aan.

OperatorEffect
> out.txtstdout schrijven en bestaande inhoud vervangen
>> out.txtstdout achteraan toevoegen
2> err.txtstderr schrijven en bestaande inhoud vervangen
2>> err.txtstderr achteraan toevoegen

ls /etc/hostname /nonexistent > out.txt 2> err.txt scheidt de geslaagde bestandsvermelding van de fout voor het ontbrekende pad. De descriptor moet direct tegen de operator aan staan. ls 2> err.txt leidt fouten om; ls 2 > err.txt vraagt ls om een bestand met de naam “2” te tonen en leidt de normale uitvoer om.

Stromen in de juiste volgorde combineren

2>&1 richt stderr op de huidige bestemming van stdout. Lees omleidingen van links naar rechts:

ls /etc/hostname /nonexistent > all.txt 2>&1

Eerst gaat stdout naar all.txt. Daarna kopieert stderr die verbinding. Beide stromen bereiken nu het bestand. &> all.txt van Bash is een kortere vorm en &>> all.txt voegt beide stromen achteraan toe.

Als je de volgorde omkeert, verandert het resultaat:

ls /etc/hostname /nonexistent 2>&1 > out.txt

Eerst wordt stderr gericht op de plaats waar stdout op dat moment naartoe gaat: de terminal. Daarna gaat stdout naar het bestand. Stderr behoudt de eerdere verbinding, zodat de fout zichtbaar blijft. 2>&1 maakt op dat moment een verbinding; stderr volgt niet elke latere wijziging van stdout.

Een gegevensstroom bewust weggooien

/dev/null gooit gegevens weg die ernaartoe worden geschreven. find / -name passwd 2>/dev/null laat overeenkomende paden op stdout staan en verbergt tegelijk meldingen zoals “Permission denied”. Die meldingen kunnen aangeven welke directory's niet zijn doorzocht, dus door ze weg te gooien verlies je ook informatie over gaten in de zoekopdracht.

Een invoerbestand beschermen

Schrijf geen sort fruit.txt > fruit.txt. De shell maakt het doelbestand leeg voordat sort het leest. Gebruik een ander uitvoerpad, controleer het resultaat en hernoem het daarna. Specifiek voor sort gebruikt sort -o fruit.txt fruit.txt de ondersteunde optie voor een uitvoerbestand om dat bestand veilig bij te werken.

Bash kan ook onbedoeld overschrijven weigeren:

set -o noclobber

Met deze instelling mislukt gewone > voor een bestaand gewoon bestand. >> voegt nog steeds achteraan toe. Gebruik >| om bewust te overschrijven of set +o noclobber om de instelling uit te schakelen. De bescherming is nuttig als je herhaaldelijk rapporten opslaat, maar verandert niets aan de eigen opties van een commando om bestanden te schrijven.

Belangrijkste punten

  • > overschrijft, terwijl >> achteraan toevoegt; gebruik descriptor 2 voor stderr.
  • > all.txt 2>&1 vangt beide stromen op omdat omleidingen van links naar rechts worden uitgevoerd.
  • 2>&1 > out.txt laat stderr op de eerdere bestemming van stdout staan.
  • /dev/null gooit de geselecteerde gegevensstroom weg, inclusief nuttige meldingen.
  • Leid uitvoer niet om naar een invoerbestand; sort -o biedt een ondersteund alternatief.
  • Noclobber van Bash weigert gewone > op bestaande gewone bestanden; >| doorbreekt die bescherming.
3

Combineer commando's tot pijplijnen

Kleine tekstcommando's worden nuttiger als hun invoer en uitvoer op elkaar aansluiten. Een pijplijn kan een kopregel verwijderen, een kolom selecteren, herhaalde waarden groeperen en tellen zonder na elke stap een bestand te maken. Elke stap verandert wat de volgende ontvangt. Doorloop de stappen afzonderlijk, zodat je kunt zien of een verkeerd totaal door de selectie, de volgorde of de telling komt, en sla tussenresultaten op als je ze wilt bekijken.

3.1 Verbind commando's met pipes en tee

Een pipe, geschreven als |, verbindt de normale uitvoer van het ene commando met de invoer van het volgende. Je kunt meerdere kleine taken verbinden zonder daartussen een tijdelijk bestand op te slaan.

De stroom van tekst volgen

In ls /etc | wc -l schrijft ls namen en telt wc -l de nieuweregeltekens die het ontvangt. Een commando dat stdin leest, tekst selecteert of wijzigt en naar stdout schrijft, heet een filter. sort, uniq, wc, cut, grep, head en tail kunnen allemaal als filter dienen.

De algemene vorm is command1 | command2 | command3. Elke stap ontvangt de uitvoer van de vorige stap; die kan een andere vorm hebben dan het oorspronkelijke bestand. Een latere stap kan regels of kolommen die een eerdere stap heeft verwijderd niet terughalen.

Een telling stapsgewijs opbouwen

Stel dat fruit.txt zes regels bevat: “banana”, “apple”, “cherry”, “apple”, “banana”, “apple”. Om de verschillende namen te tellen, voer je eerst uit:

sort fruit.txt

De uitvoer bevat drie regels met “apple”, twee met “banana” en één met “cherry”. Gelijke namen staan nu naast elkaar. Voeg een stap toe:

sort fruit.txt | uniq

uniq verwijdert aangrenzende herhalingen, zodat “apple”, “banana” en “cherry” overblijven. Ten slotte meldt sort fruit.txt | uniq | wc -l 3. Als je het oorspronkelijke bestand direct zou tellen, zou je zes regels krijgen en daarmee een andere vraag beantwoorden.

Voer de steeds langere pijplijn uit en bekijk het resultaat voordat je het volgende commando toevoegt. Voeg bij zeer lange uitvoer tijdelijk | head toe om de eerste tien regels te zien. Zo zie je gemakkelijker of een kopregel niet is verwijderd of een veld verkeerd is geselecteerd.

Fouten gescheiden houden

Een gewone pipe voert stdout door, niet stderr. Met één bestaand en één ontbrekend pad telt ls /etc/hostname /nonexistent | wc -l de ene normale regel met een bestandsvermelding. De fout verschijnt nog steeds op de terminal.

Om meldingen in de gegevens op te nemen, gebruik je ls /etc/hostname /nonexistent 2>&1 | wc -l, dat in dit voorbeeld twee regels telt. |& van Bash combineert stdout en stderr ook in de pipe. Of het nuttig is fouten mee te nemen, hangt af van wat je met de uiteindelijke telling wilt uitdrukken.

De stappen worden gelijktijdig uitgevoerd. tail -f /var/log/app.log | grep ERROR toont nieuw toegevoegde overeenkomende regels op de terminal. Dit is een liveweergave, geen proces dat wacht tot het bestand klaar is. Programma's kunnen uitvoer echter bufferen; onmiddellijke weergave is niet gegarandeerd voor elke mogelijke pijplijn.

Onderweg een kopie opslaan

tee schrijft zijn invoer zowel naar een bestand als naar stdout:

sort fruit.txt | uniq | tee unique.txt | wc -l

De terminal toont 3, terwijl unique.txt de drie namen opslaat. tee -a voegt achteraan toe in plaats van het opgeslagen bestand te vervangen. Als je tee eerder plaatst, wordt een eerdere vorm van de gegevens opgeslagen.

Een pipe verbindt met een commando, terwijl > een bestand aanwijst. ls > less maakt een bestand met de naam “less” aan; het start de tekstviewer niet. Het ontvangende commando moet ook stdin lezen: als je tekst via een pipe naar echo of ls stuurt, wordt die tekst niet omgezet in argumenten voor die commando's.

Belangrijkste punten

  • | verbindt stdout met stdin van het volgende commando.
  • Controleer een pijplijn stap voor stap; elke stap ontvangt de uitvoer van de vorige.
  • stderr blijft buiten een gewone pipe, tenzij je de stromen combineert.
  • tee slaat invoer op en geeft die door; tee -a voegt achteraan toe.
  • Tekst uit een pipe is stdin, geen lijst met commandoargumenten.

3.2 Tel en sorteer regels en verwijder dubbele regels

Tellen en ordenen zijn afzonderlijke taken. Bepaal voordat je telt of je records, woorden, bytes of verschillende waarden nodig hebt. Bepaal voordat je dubbele regels verwijdert of gelijke regels al naast elkaar staan.

Met wc het juiste tellen

Gewoon wc file meldt regels, woorden en bytes, in die volgorde, en daarna de bestandsnaam. De fruitlijst van zes regels met “banana”, “apple”, “cherry”, “apple”, “banana”, “apple” geeft “6 6 39 fruit.txt”. Elke regel draagt zijn letters plus een byte voor het nieuweregelteken bij.

OptieWat wordt geteld
-lNieuweregeltekens
-wWoorden gescheiden door witruimte
-cBytes
-mTekens

Een laatste stuk tekst zonder nieuweregelteken wordt niet meegeteld door wc -l. Tekst met “one”, een nieuweregelteken en daarna “two” geeft daarom een telling van 1. In UTF-8 gebruikt “café” gevolgd door een nieuweregelteken zes bytes maar vijf tekens, omdat “é” twee bytes gebruikt. Bij meerdere invoerbestanden toont wc hun aantallen en een extra totaal.

Tekstsortering of numerieke sortering kiezen

sort schrijft geordende regels zonder het invoerbestand te wijzigen. De standaardvolgorde volgt de huidige taalinstelling. sort -f vergelijkt zonder onderscheid tussen hoofdletters en kleine letters.

Tekstsortering vergelijkt tekens: “100”, “25”, “9” verschijnen in die volgorde omdat hun eerste cijfers “1”, “2”, “9” zijn. sort -n vergelijkt numerieke waarden en geeft 9, 25, 100. Voeg -r toe voor omgekeerde volgorde, zoals in sort -rn. sort -h begrijpt achtervoegsels voor groottes zoals “2K”, “300M” en “1G”.

Op een veld sorteren

Voor records gescheiden door komma's stelt -t, het scheidingsteken in. -k3,3nr selecteert alleen veld 3, vergelijkt numeriek en keert de volgorde om:

tail -n +2 scores.csv | sort -t, -k3,3nr | head -n 3

Bij “name,city,score” gevolgd door “Ana,Lisbon,82”, “Ben,Oslo,75”, “Chen,Lisbon,91”, “Dara,Oslo,68” en “Eli,Lisbon,88” is het resultaat Chen, Eli en daarna Ana met hun volledige records. De eerste stap laat de kopregel weg. Anders telt de niet-numerieke scoresleutel van die regel als nul tijdens het numeriek sorteren.

Zonder -t scheidt witruimte de velden. -k2 laat de sleutel lopen van veld 2 tot het einde van de regel; -k2,2 beperkt die tot veld 2.

Dubbele regels groeperen voordat je ze telt

uniq vergelijkt elke regel met de aangrenzende reeks. In de ongesorteerde fruitlijst laat het alle zes regels staan omdat er geen gelijke namen naast elkaar staan. sort fruit.txt | uniq toont de drie verschillende namen; sort -u fruit.txt kan ook een gesorteerde lijst met unieke waarden opleveren.

Na het sorteren meldt uniq -c het aantal per reeks: “3 apple”, “2 banana”, “1 cherry”, met spaties als opvulling bij de aantallen. uniq -d toont één exemplaar van elke herhaalde waarde en uniq -u toont alleen waarden die één keer voorkomen. uniq -i negeert hoofdletterverschillen bij het vergelijken.

Gebruik sort fruit.txt | uniq -c | sort -rn om de meest voorkomende waarden bovenaan te zetten. De eerste sortering groepeert identieke regels; de laatste sorteert hun aantallen. Als je de eerste sortering weglaat, worden verspreide reeksen afzonderlijk geteld.

Belangrijkste punten

  • wc -l telt nieuweregeltekens, -w woorden, -c bytes en -m tekens.
  • sort -n vergelijkt getallen; -r keert de volgorde om; -h verwerkt achtervoegsels voor groottes.
  • sort -t, -k3,3nr sorteert records met komma's als scheidingsteken numeriek op veld 3 in aflopende volgorde.
  • Verwijder een kopregel voordat je gegevensrecords sorteert.
  • uniq verwijdert aangrenzende herhalingen; sorteer eerst als gelijke waarden verspreid staan.
  • uniq -c telt reeksen, -d selecteert herhaalde waarden en -u selecteert waarden die één keer voorkomen.
  • sort | uniq -c | sort -rn groepeert waarden, telt ze en sorteert de aantallen.

3.3 Haal kolommen uit tekst met cut

Een record bevat vaak meer informatie dan nodig is voor een vraag. cut selecteert velden of vaste posities uit elke regel en schrijft de selectie naar stdout. Het verandert de volgorde niet en bewerkt het oorspronkelijke bestand niet.

Velden selecteren op hun scheidingsteken

Een scheidingsteken scheidt velden. In /etc/passwd scheiden dubbele punten de gebruikersnaam, tijdelijke aanduiding voor het wachtwoord, gebruikers-ID, groeps-ID, volledige naam, homedirectory en loginshell. Voor dit voorbeeldrecord:

alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash

cut -d: -f1,6 toont “alice:/home/alice”. Veldnummers beginnen bij 1 en het scheidingsteken blijft tussen geselecteerde velden staan. cut -d: -f5 toont “Alice Smith”; de spatie binnenin maakt deel uit van dat veld omdat het scheidingsteken een dubbele punt is.

SelectieGetoonde velden
-f1,3Velden 1 en 3
-f2-4Velden 2 tot en met 4
-f3-Veld 3 tot en met het laatste veld

De lijst selecteert velden en bepaalt geen nieuwe volgorde. cut -d, -f3,1 toont nog steeds eerst veld 1 en daarna veld 3. Standaard is het scheidingsteken een tab, dus cut -f2 file selecteert het tweede veld dat door tabs wordt gescheiden.

Een regel zonder scheidingsteken wordt volledig getoond. Zo toont cut -f2 “no tabs here” ongewijzigd omdat er geen tab in staat. Voeg -s toe om regels zonder scheidingsteken te onderdrukken. Een regel die scheidingstekens bevat maar een gevraagd veld mist, is een ander geval; -s is geen algemene test voor volledige records.

Vaste posities selecteren

cut -c1-5 selecteert posities 1 tot en met 5. Op het accountrecord hierboven toont het “alice”. Selectie op positie is geschikt voor tekst met vaste veldbreedte, waarbij de gewenste kolommen op elke regel op dezelfde plaats beginnen. Veldselectie is geschikt voor records waarvan de veldlengtes verschillen maar de scheidingstekens gelijk blijven.

Het gedrag van scheidingstekens controleren

Met cut -d' ' -f2 is elke afzonderlijke spatie een scheidingsteken. De tekst “a b” heeft een leeg tweede veld tussen de twee spaties, dus het resultaat is een lege regel. Als herhaalde spaties alleen opvulling tussen kolommen zijn, brengt tr -s ' ' | cut -d' ' -f2 elke reeks spaties eerst terug tot één spatie.

cut behandelt ook komma's binnen waarden tussen aanhalingstekens als scheidingstekens. Een CSV-waarde tussen aanhalingstekens zoals “Smith, Ann” wordt niet automatisch bij elkaar gehouden. Gebruik alleen eenvoudige voorbeelden met scheidingstekens als de veldgrenzen echt overeenkomen met de regel voor het scheidingsteken.

Waarden uit een geselecteerde kolom tellen

Om steden in scores.csv te tellen, begin je met cut -d, -f2 scores.csv. Met de records voor Ana, Ben, Chen, Dara en Eli toont dit “city”, “Lisbon”, “Oslo”, “Lisbon”, “Oslo”, “Lisbon”. Daarna:

cut -d, -f2 scores.csv | tail -n +2 | sort | uniq -c | sort -rn

Door de eerste regel weg te laten, verwijder je “city”. Sorteren groepeert de drie vermeldingen van Lisbon en de twee van Oslo; uniq -c telt ze en de laatste sortering zet “3 Lisbon” vóór “2 Oslo”. Als je de stap voor de kopregel vergeet, ontstaat een extra waarde, “1 city”, omdat een kop voor deze commando's nog steeds tekst is.

Belangrijkste punten

  • cut -d stelt het scheidingsteken in en -f selecteert velden die vanaf 1 zijn genummerd.
  • Veldlijsten selecteren velden in hun oorspronkelijke volgorde; -c selecteert vaste posities.
  • Het standaard scheidingsteken is een tab; -s laat regels zonder scheidingsteken weg.
  • Herhaalde spaties maken lege velden en cut verwerkt aanhalingstekens in CSV niet als zodanig.
  • Voor frequentietellingen verwijder je de kopregel, selecteer je de waarde, groepeer je gelijke regels en tel je ze.
4

Doorzoek tekst met grep en reguliere expressies

Tekst doorzoeken begint met bepalen wat als overeenkomst telt. Misschien heb je een letterlijke woordgroep, een volledig woord, een volledige regel of een patroon nodig, zoals twee letters gevolgd door vier cijfers. grep kan de overeenkomende regels tonen of hun regelnummers, aantallen en bestandsnamen melden. Reguliere expressies beschrijven de patronen, terwijl aanhalingstekens voorkomen dat de shell ze eerst verandert. Je bouwt op van eenvoudige overeenkomsten naar gegroepeerde alternatieven en herhaalde onderdelen.

4.1 Doorzoek bestanden met grep en de belangrijkste opties

grep doorzoekt tekst en toont normaal gesproken elke regel met een overeenkomst. Een bruikbare zoekopdracht begint met de keuze van zowel het patroon als het soort resultaat dat je nodig hebt: regels, aantallen, regelnummers of bestandsnamen.

Begin met een patroon tussen aanhalingstekens

De gebruikelijke vorm is grep 'pattern' file. Zonder bestandsargument leest grep stdin. Zoekopdrachten zijn hoofdlettergevoelig, tenzij je -i toevoegt.

Stel dat server.log vijf vermeldingen bevat: een INFO-regel over het opstarten, een ERROR-regel over een volle schijf, een WARN-regel over een nieuwe poging, een regel met “error timeout” in kleine letters en een INFO-regel over een back-up. grep 'ERROR' server.log toont alleen de regel met ERROR in hoofdletters. grep -i 'error' server.log toont beide foutregels.

Zet patronen tussen aanhalingstekens, ook als ze eenvoudig lijken. grep 'disk full' server.log zoekt naar de twee woorden samen. Zonder aanhalingstekens gebruikt grep disk full server.log “disk” als patroon en behandelt het “full” als een extra bestandsnaam. Aanhalingstekens voorkomen ook dat de shell sterren en andere speciale tekens expandeert voordat grep ze ontvangt.

Kies de uitvoer die je nodig hebt
OptieResultaat
-iZoeken zonder onderscheid tussen hoofdletters en kleine letters
-vRegels tonen die niet overeenkomen
-cHet aantal overeenkomende regels tonen
-nOvereenkomsten vooraf laten gaan door hun regelnummer
-wEen overeenkomst met een volledig woord vereisen
-xEen overeenkomst met de volledige regel vereisen

Je kunt opties combineren: grep -ic 'error' server.log meldt 2, terwijl grep -n 'WARN' server.log regel 3 aanwijst. -c telt overeenkomende regels, niet het aantal keer dat een overeenkomst daarin voorkomt. Een regel met “error error” telt als één regel mee.

Bekijk de regels “error”, “terror”, “errors” en “Error found”. Gewoon grep 'error' vindt overeenkomsten in de eerste drie. grep -w 'error' vindt alleen een overeenkomst in de eerste, omdat “error” geen volledig woord is in “terror” of “errors”. Als je -i toevoegt, komt ook “Error found” overeen. -x vereist dat een volledige regel overeenkomt, dus “Error found” voldoet nog steeds niet aan een zoekopdracht naar een volledige regel “error”.

Meerdere bestanden doorzoeken

Als meerdere bestanden worden doorzocht, zet grep normaal gesproken bestandsnamen vóór de overeenkomsten. grep -r 'TODO' notes doorzoekt bestanden in de hele directoryboom. Voeg -l toe om alleen namen van bestanden met overeenkomsten te tonen: grep -rl 'TODO' notes. De hoofdletter -L toont bestanden zonder overeenkomst. Dit zijn resultaten van bestandsselectie, geen aantallen overeenkomende regels.

Bepaal of het patroon letterlijk is

Standaard interpreteert grep een reguliere expressie. Een punt komt overeen met één willekeurig teken, dus '10.0.0.7' kan ook overeenkomen met “10a0b0c7”. grep -F '10.0.0.7' file zoekt naar de exacte tekst. Door elke punt af te schermen met een backslash, zoals in '10\.0\.0\.7', maak je de punten ook letterlijk.

grep -q onderdrukt de normale uitvoer en rapporteert via zijn afsluitstatus: 0 voor een overeenkomst, 1 voor geen overeenkomst en bij GNU grep normaal gesproken 2 voor een fout. Een ontbrekend invoerbestand is een fout, geen bewijs dat het patroon ontbrak.

In een pijplijn telt grep -i 'error' server.log | wc -l overeenkomende regels, net als grep -ic. De eerste vorm laat ruimte voor andere filters tussen het selecteren en tellen van regels.

Belangrijkste punten

  • grep toont overeenkomende regels en is hoofdlettergevoelig, tenzij je -i gebruikt.
  • Zet het patroon tussen aanhalingstekens zodat de shell het ongewijzigd doorgeeft.
  • -c telt overeenkomende regels; -n nummert ze; -v selecteert regels zonder overeenkomst.
  • -w vereist een volledig woord en -x een volledige regel.
  • -r doorzoekt een boom, -l toont bestanden met overeenkomsten en -L bestanden zonder overeenkomsten.
  • -F behandelt een patroon als letterlijke tekst; -q rapporteert een zoekopdracht via de afsluitstatus.

4.2 Schrijf eenvoudige reguliere expressies

Een reguliere expressie, of regex, beschrijft tekst die kan overeenkomen. grep zoekt normaal gesproken overal in een regel naar een overeenkomend deel en toont vervolgens de hele regel. De meeste letters komen overeen met zichzelf; speciale tekens beschrijven posities, keuzes of herhaling.

Een teken of positie vinden

De punt . komt overeen met één teken binnen een regel. Bij de regels “cat”, “cart”, “coat”, “cut”, “act”, “scat” en “color” komt het patroon 'c.t' overeen met “cat”, “cut” en “scat”. De laatste bevat “cat” als overeenkomend deel. “coat” heeft twee tekens tussen “c” en “t”, dus één punt kan die niet allebei dekken.

Gebruik ankers om posities te beperken. ^ markeert het begin van een regel en $ het einde:

PatroonWat het vereist
^cEen regel die begint met “c”
t$Een regel die eindigt op “t”
^c.t$Precies “c”, één teken en dan “t”
^$Een lege regel

grep '^c.t$' words.txt toont alleen “cat” en “cut”. Door beide uiteinden te verankeren sluit je een langere regel zoals “scat” uit.

Eén teken uit een verzameling kiezen

Een expressie tussen vierkante haken komt overeen met één teken. [ao] betekent “a” of “o”, dus 'c[ao]t' komt overeen met het deel “cat” van “cat” en “scat”. [0-9] beschrijft een cijfer. Een dakje direct na de openingshaak keert de verzameling om: 'c[^a]t' komt overeen met “cut”, maar niet met “cat”. Dit dakje sluit een teken uit; het markeert daar niet het begin van een regel.

Benoemde klassen beschrijven categorieën binnen de huidige taalinstelling. [[:digit:]] selecteert een cijfer, [[:alpha:]] een letter, [[:alnum:]] een letter of cijfer en [[:upper:]] of [[:lower:]] respectievelijk een hoofdletter of kleine letter. [[:space:]] omvat spaties, tabs en andere witruimtetekens. Behoud beide paren vierkante haken: de klassenaam staat binnen de buitenste verzamelingsexpressie.

Het voorgaande onderdeel herhalen

* betekent nul of meer voorkomens van het onderdeel direct ervoor. 'ca*t' kan overeenkomen met “ct”, “cat” of “caat”. Het komt ook overeen met “act”, omdat die regel “ct” bevat, met nul voorkomens van “a”. Om een willekeurige reeks tekens te vinden, combineer je punt en ster als .*.

'^c.*t$' komt in de woordenlijst overeen met “cat”, “cart”, “coat” en “cut”. Een jokerteken voor bestandsnamen en een reguliere expressie gebruiken verschillende regels voor de ster: het shellpatroon *.txt beschrijft namen die eindigen op “.txt”, maar de reguliere expressie voor dat einde is '\.txt$'.

Een speciaal teken letterlijk maken

Een backslash kan een speciale betekenis wegnemen. \. komt overeen met een echte punt, \* met een ster en \[ met een vierkante openingshaak. [.] selecteert ook een letterlijke punt. grep '\.conf$' file selecteert regels die eindigen op “.conf”.

Bij het doorzoeken van een configuratiebestand kun je eenvoudige commentaarregels en lege regels verwijderen met grep -v '^#' app.conf | grep -v '^$'. De eerste test herkent commentaarregels alleen als “#” het eerste teken is. De standaard eenvoudige syntaxis behandelt ?, +, accolades, | en ronde haken zonder backslash als gewone tekens. GNU grep ondersteunt operatorvormen met een backslash; grep -E biedt uitgebreide syntaxis zonder die backslashes.

Belangrijkste punten

  • grep zoekt naar een overeenkomend deel, tenzij ankers de hele regel vereisen.
  • . komt overeen met één teken; ^ en $ verankeren het begin en einde.
  • Een expressie tussen vierkante haken selecteert één teken; [^a] sluit “a” uit.
  • Benoemde klassen zoals [[:digit:]] vereisen beide paren vierkante haken.
  • * herhaalt het voorgaande onderdeel nul of meer keer; .* komt overeen met een reeks tekens.
  • Gebruik \. of [.] voor een letterlijke punt.

4.3 Gebruik uitgebreide reguliere expressies met grep -E

Uitgebreide reguliere expressies voegen handige manieren toe om optionele onderdelen, herhaalde groepen en alternatieven uit te drukken. Gebruik grep -E zodat het patroon volgens deze syntaxis wordt gelezen. De punt, ankers, verzamelingen en ster behouden hun eerdere betekenis.

Herhalingen tellen

Een operator volgt op het onderdeel waarop die betrekking heeft. Dat onderdeel kan één teken, een expressie tussen vierkante haken of een groep zijn:

OperatorAantal voorkomens
?Nul of één
+Eén of meer
{n}Precies n
{n,}Ten minste n
{n,m}Van n tot en met m

'logs?' komt overeen met “log” en “logs”: alleen de “s” is optioneel. 'ca+t' vereist ten minste één “a” en komt dus overeen met “cat” en het overeenkomende deel in “scat”, maar niet met “ct” binnen “act”. Als je -E weglaat, wordt een vraagteken of plusteken zonder backslash in de eenvoudige syntaxis letterlijke tekst.

Gebruik voor een volledige code van twee hoofdletters en vier cijfers:

grep -E '^[A-Z]{2}[0-9]{4}$' codes.txt

“AB1234” en “QZ0042” komen overeen. “A12345” heeft slechts één letter aan het begin, “ab1234” gebruikt kleine letters en “XY98765” heeft een extra cijfer. De twee ankers voorkomen dat een deel dat er geldig uitziet binnen een langere code wordt goedgekeurd. Als je -i toevoegt, wordt de code met kleine letters ook toegestaan.

Alternatieven groeperen

| betekent een alternatief binnen een uitgebreid patroon. 'cat|cut' zoekt overal in een regel naar een van beide woorden. Ronde haken bepalen de grenzen van een groep: 'c(a|o)t' kiest “a” of “o” tussen “c” en “t”. Een daaropvolgende kwantor geldt voor de hele groep, dus '(ab)+' komt overeen met één of meer herhalingen van “ab”.

Houd het patroon tussen aanhalingstekens. In grep -E cat|cut words.txt interpreteert de shell de verticale streep zonder aanhalingstekens als een pipe tussen commando's. In grep -E 'cat|cut' words.txt geeft de shell dat teken aan grep door als onderdeel van één patroon.

Overeenkomsten tonen in plaats van volledige regels

-o toont alleen overeenkomende delen, één per uitvoerregel. Het onderstaande commando haalt een getalvorm met punten uit een langere regel:

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' server.log

Het deel tussen ronde haken bestaat uit één tot drie cijfers gevolgd door een letterlijke punt; {3} herhaalt dat drie keer. Het laatste deel voegt één tot drie cijfers toe. Het haalt “10.0.0.7” uit een regel die dat bevat, maar accepteert ook “999.999.999.999”. Een overeenkomst met een vorm controleert niet of elk getal binnen het geldige bereik van een adres valt.

Lege regels en commentaarregels samen verwijderen

grep -Ev '^[[:space:]]*(#|$)' app.conf selecteert actieve instellingen. Lees het patroon op volgorde: begin aan het begin, sta witruimte toe en zoek dan een overeenkomst met “#” of het einde van de regel. Het herkent daardoor zowel ingesprongen commentaarregels en regels met alleen witruimte als lege regels. -v behoudt de regels die niet aan die beschrijving voldoen, zoals “port=8080”. De oudere commandonaam egrep is verouderend in GNU grep; gebruik grep -E.

Belangrijkste punten

  • grep -E schakelt ?, +, accolades, | en ronde haken zonder backslash in als operatoren.
  • Kwantoren gelden voor het voorgaande teken, de voorgaande verzameling of groep.
  • Gebruik ankers rond een patroon als het volledige record eraan moet voldoen.
  • | biedt alternatieven en ronde haken groeperen ze; zet het patroon tussen aanhalingstekens.
  • -o toont elk overeenkomend deel, niet de hele regel.
  • Een reguliere expressie die een vorm controleert, kan toch waarden accepteren die in het echte systeem ongeldig zijn.
5

Zoek bestanden op naam, type, grootte en ouderdom

Een bestandszoekopdracht vraagt waar een item staat; een tekstzoekopdracht vraagt wat erin staat. Begin een bestandszoekopdracht in de juiste directory en beperk die daarna op naam, type, grootte of ouderdom. Je kunt de overeenkomende paden doorgeven aan een ander commando zonder namen met spaties op te splitsen. Een actuele zoekopdracht in de directoryboom en een snelle zoekopdracht in een database hebben verschillende sterke punten. Bekijk de selectie voordat je een actie op veel overeenkomsten toepast en begrijp wanneer de actie wordt uitgevoerd.

5.1 Doorzoek de directoryboom met find

find doorloopt een directoryboom en test de items die het tegenkomt. Kies eerst de begindirectory: find project toont project zelf en de vermeldingen eronder. Door tests toe te voegen beperk je de selectie.

Namen, paden en typen vergelijken

find project -name '*.txt' selecteert namen die eindigen op “.txt” op elke plaats onder de begindirectory. Zet het jokerteken tussen aanhalingstekens zodat de shell het ongewijzigd doorgeeft. -name is hoofdlettergevoelig, dus voor een hoofdletterongevoelige overeenkomst met “Guide.TXT” heb je -iname '*.txt' nodig.

Het patroon moet overeenkomen met de volledige naam van het item, zonder de bovenliggende directory's. -name 'guide' komt niet overeen met “guide.txt”; -name 'guide*' wel. Gebruik -path '*/src/*' als het directorydeel van belang is. find toont de volgorde waarin het de boom doorloopt, dus voeg | sort toe als je geordende paden wilt.

-type f selecteert gewone bestanden, -type d directory's en -type l symbolische koppelingen. find project -type f -name '*.txt' vereist dat zowel de type- als de naamtest slaagt. Een directory met de naam “notes.txt” slaagt niet voor de bestandstypetest, ook al past de naam.

Vergelijkingen van grootte begrijpen

-size vergelijkt een grootte nadat die naar boven is afgerond op de geselecteerde eenheid. c betekent bytes, k kibibytes van 1.024 bytes, M mebibytes van 1.048.576 bytes en G gibibytes. Een plusteken ervoor betekent groter dan, een minteken kleiner dan en geen teken gelijk aan het opgegeven aantal eenheden.

Voor -size +100M moet de afgeronde grootte groter zijn dan 100 MiB-eenheden. Een bestand dat één byte groter is dan 100 MiB wordt afgerond op 101 eenheden en voldoet. Een niet-leeg bestand kleiner dan 1 MiB wordt afgerond op één eenheid, dus -size -1M vindt alleen lege bestanden. Gebruik een bytetest voor een exacte grens in bytes, of een kleinere eenheid voor een bruikbaar bereik voor kleine bestanden.

Ouderdom testen en diepte beperken

-mtime gebruikt voltooide perioden van 24 uur sinds de wijziging. -mtime -7 selecteert items die minder dan zeven dagen geleden zijn gewijzigd. -mtime +30 selecteert ouderdommen met meer dan 30 voltooide perioden: ten minste 31 dagen. -mmin -30 gebruikt minuten voor recente wijzigingen. -user alice selecteert een eigenaar en -empty selecteert lege bestanden of directory's.

Gebruik find project -maxdepth 1 -type f om de begindirectory en de directe vermeldingen daarin te bekijken zonder onderliggende directory's in te gaan. Zet -maxdepth vóór de tests.

Tests combineren en patronen behouden

Tests die naast elkaar staan betekenen EN. -o betekent OF, zoals in find project -name '*.txt' -o -name '*.md'. ! -name '*.c' keert een naamtest om. Zorg bij een eenvoudige selectie dat de relatie tussen de tests duidelijk is voordat je acties toevoegt.

De shell expandeert een jokerteken zonder aanhalingstekens in je huidige directory. Als daar alleen notes.txt overeenkomt, wordt find . -name *.txt een zoekopdracht naar die ene naam en worden andere tekstbestanden gemist. Bij meerdere lokale overeenkomsten kan het commando mislukken omdat extra namen binnen de testexpressie verschijnen.

Een zoekopdracht in beschermde directory's kan “Permission denied” melden. 2>/dev/null verbergt die fouten, maar maakt onleesbare directory's niet doorzoekbaar. find controleert de boom tijdens de uitvoering; een actief bestandssysteem kan nog veranderen voordat een later commando de gevonden paden gebruikt.

Belangrijkste punten

  • find doorloopt de boom vanaf een beginpad en toont items die aan de tests voldoen.
  • Zet jokertekens voor namen tussen aanhalingstekens; -name test de hele naam en -path het volledige pad.
  • Gebruik -type f, d of l voor gewone bestanden, directory's of symbolische koppelingen.
  • Grootte wordt vóór de vergelijking naar boven afgerond; -size -1M selecteert alleen lege bestanden.
  • -mtime +30 begint bij 31 voltooide dagen, terwijl -mmin minuten gebruikt.
  • Tests naast elkaar betekenen EN, -o betekent OF en ! keert een test om.

5.2 Voer bewerkingen uit op gevonden bestanden en gebruik snellere zoekmethoden

Nadat je bestanden hebt geselecteerd, kun je hun paden aan een ander commando geven. Door de selectie en de actie in dezelfde find-expressie te houden, voorkom je dat spaties binnen bestandsnamen worden behandeld als scheidingstekens tussen namen.

Een commando uitvoeren op elke overeenkomst

De actie -exec command {} \; voert het commando één keer per overeenkomend item uit. find vervangt {} door het pad van dat item. Bijvoorbeeld:

find project -name 'main.c' -exec wc -l {} \;

Als de overeenkomst project/src/main.c is, voert dit wc -l project/src/main.c uit. De afgeschermde puntkomma beëindigt de actie. De backslash voorkomt dat de shell de puntkomma eerst gebruikt om het hele shellcommando te beëindigen.

Gebruik {} + om groepen paden aan minder uitvoeringen van het commando door te geven:

find notes -type f -name '*.txt' -exec grep -l 'TODO' {} +

grep ontvangt de geselecteerde bestandspaden als argumenten en toont de paden van bestanden die “TODO” bevatten. Beide vormen behouden een pad zoals “notes/team plan.txt” als één argument. De vorm met + vermindert het aantal keren dat het commando moet worden gestart als veel bestanden overeenkomen.

Bestandsselectie combineren met tekstselectie

find test bestandseigenschappen; grep onderzoekt inhoud. Voeg -mtime -7 vóór de actie toe om alleen recent gewijzigde tekstbestanden te doorzoeken:

find notes -type f -name '*.txt' -mtime -7 -exec grep -l 'TODO' {} +

Eerst selecteren de tests voor naam, type en ouderdom bestanden. Daarna doorzoekt grep hun tekst. Alleen grep -r kan de inhoud van een boom doorzoeken, maar vervangt die tests voor bestandseigenschappen niet.

Pas verwijderen pas toe na controle van de selectie

-delete verwijdert overeenkomsten zonder bevestiging of mogelijkheid om dit ongedaan te maken. Voer eerst de selectie uit zonder verwijderactie en lees de paden. Voeg pas daarna -delete aan het einde toe, zoals in find /tmp/build -type f -name '*.tmp' -delete. Voor een bevestigingsvraag per item vraagt -ok rm {} \; om toestemming voordat het verwijdercommando wordt uitgevoerd.

Acties worden uitgevoerd terwijl de expressie wordt geëvalueerd. Als je -delete vóór -name '*.tmp' zet, vindt de verwijdering plaats voordat die naamtest haar kan beperken. Een latere test kan een item niet beschermen tegen een actie die al is uitgevoerd.

Kies een snellere zoekmethode als die past

locate guide.txt doorzoekt een index met opgeslagen paden die “guide.txt” bevatten. Het kan snel antwoorden zonder de schijf te doorlopen. Omdat de database periodiek wordt vernieuwd, kan een nieuw bestand ontbreken of een verwijderd pad blijven staan. updatedb bouwt de index opnieuw op; voor een systeembrede update zijn meestal beheerdersrechten nodig. Sommige distributies vereisen een optioneel pakket zoals plocate.

which grep doorzoekt de directory's in PATH op een uitvoerbaar programmabestand en meldt vaak /usr/bin/grep. Het beschrijft niet elke manier waarop Bash een commando vindt. type echo kan bijvoorbeeld een ingebouwd commando herkennen, ook als er een extern programma met de naam “echo” bestaat. Gebruik type commandname voor de interpretatie van Bash, find voor een actuele zoekopdracht in de boom en locate voor een snelle zoekopdracht op naam via een index.

Belangrijkste punten

  • -exec command {} \; wordt één keer per pad uitgevoerd; {} + groepeert paden.
  • Gebruik find voor bestandseigenschappen en grep voor inhoud, en combineer ze waar nodig.
  • Bekijk eerst welke items worden verwijderd en zet -delete daarna achter de beperkende tests.
  • locate doorzoekt een index die verouderd kan zijn.
  • which vindt uitvoerbare bestanden in PATH; type legt uit hoe Bash een commando vindt.
6

Bewerk tekstbestanden in nano en vi

Met terminaleditors kun je notities en configuratiebestanden wijzigen tijdens een sessie op afstand of op een systeem zonder grafische desktop. In nano kun je direct typen en zie je sneltoetsen onderaan het scherm. vi geeft toetsen verschillende functies in verschillende modi, dus van modus wisselen hoort bij het bewerken. Oefen met openen, tekst zoeken, een kleine wijziging maken en bewust opslaan of afsluiten; deze stappen zijn even belangrijk als een verwijdercommando kennen.

6.1 Bewerk een bestand in nano en sla het op

nano notes.txt opent tekst in een terminaleditor. Je kunt met de pijltoetsen navigeren en direct in de tekst typen. Als het bestand niet bestaat, begint nano met een lege buffer, de werktekst die in het geheugen wordt bewaard; bij het opslaan wordt het bestand op schijf aangemaakt.

De aanduidingen van sneltoetsen lezen

De onderste regels tonen toetscombinaties. ^ betekent Ctrl, dus ^X betekent Ctrl+X. M- betekent Meta, meestal Alt, dus M-U betekent Alt+U. Ctrl+G opent de hulp. Deze aanduidingen beschrijven toetsen die je samen indrukt, geen tekens die je in het bestand typt.

Een kleine wijziging maken en opslaan

Om “port=8080” in app.conf te wijzigen in “port=9090”:

  1. Voer nano app.conf uit.
  2. Druk op Ctrl+W, voer “8080” in en druk op Enter.
  3. Verwijder bij de overeenkomst de vier cijfers en typ “9090”.
  4. Druk op Ctrl+O en daarna op Enter om de bestandsnaam te bevestigen en op te slaan.
  5. Druk op Ctrl+X om af te sluiten.

Terug in de shell zou grep 'port' app.conf “port=9090” moeten tonen. Dit controleert het opgeslagen bestand, niet alleen wat zichtbaar was in de editor.

Ctrl+O is opslaan, geen commando om een bestand te openen. Ctrl+R leest de inhoud van een ander bestand in de huidige buffer op de cursorpositie. Als je die acties verwart, kun je ongewenste tekst invoegen in het bestand dat je bewerkt.

Zoeken, vervangen en navigeren

Ctrl+W zoekt naar tekst. Alt+G gaat naar een opgegeven regelnummer, handig als een foutmelding een bepaalde regel aanwijst. Ctrl+C toont de huidige regel en kolom.

Alt+R, ook beschikbaar als Ctrl+, start een vervanging. Voer de te zoeken tekst in en daarna de vervanging. Antwoord bij elke overeenkomst Y om te vervangen of N om over te slaan; A vervangt alles. Afzonderlijke vervangingen kiezen helpt als dezelfde cijfers in meerdere instellingen voorkomen en er maar één moet veranderen.

Tekst verplaatsen en wijzigingen ongedaan maken
SneltoetsActie
Ctrl+KDe hele huidige regel knippen
Ctrl+UGeknipte tekst op de cursorpositie plakken
Alt+AEen selectie beginnen te markeren
Alt+U / Alt+EOngedaan maken / opnieuw uitvoeren

Door herhaaldelijk op Ctrl+K te drukken verzamel je opeenvolgende regels. Bij een gemarkeerde selectie knipt Ctrl+K de gemarkeerde tekst in plaats van de hele regel. Ctrl+U voegt die tekst dan in op de cursorpositie. Ongedaan maken is nuttig direct na een onbedoelde knip- of vervangactie.

Bewust afsluiten

Ctrl+X sluit af. Als de buffer niet-opgeslagen wijzigingen bevat, vraagt nano of je die wilt opslaan. Y slaat op, gevolgd door Enter om de naam te bevestigen; N sluit af zonder die wijzigingen op te slaan; Ctrl+C annuleert het afsluiten en keert terug naar het bewerken. Met N kies je ervoor werk weg te gooien; het is geen manier om verder te bewerken.

nano -l app.conf toont regelnummers en nano +12 app.conf begint bij regel 12. Als opslaan mislukt omdat je geen toestemming hebt, is de bewerkte buffer niet op dat pad opgeslagen. Systeembestanden vereisen passende rechten, bijvoorbeeld sudo nano /etc/hosts als voor een toegestane systeemwijziging beheerderstoegang nodig is. Gebruik voor het oefenen een bestand in je eigen directory.

Belangrijkste punten

  • nano accepteert getypte tekst direct; een nieuw bestand wordt bij het opslaan aangemaakt.
  • ^ betekent Ctrl en M- betekent meestal Alt in aanduidingen van sneltoetsen.
  • Ctrl+O en Enter slaan op; Ctrl+X sluit af en vraagt naar niet-opgeslagen wijzigingen.
  • Ctrl+W zoekt, Alt+R vervangt en Alt+G gaat naar een regel.
  • Ctrl+K knipt, Ctrl+U plakt en Alt+U maakt ongedaan.

6.2 Werk in de verschillende modi van vi

vi notes.txt opent een terminaleditor in de normale modus. Een toets zoals x is daar een commando. Om tekst te typen, open je eerst de invoegmodus. Op veel Linux-systemen start vi Vim of een andere editor die compatibel is met vi.

Houd de modus in de gaten
ModusTaakZo open je die
NormaalNavigeren, verwijderen, kopiëren en commando's gevenEsc
InvoegenTekst in de buffer typeni, a, o of een ander invoegcommando
CommandoregelCommando's invoeren, zoals opslaan: vanuit de normale modus

Vim toont “-- INSERT --” tijdens het invoegen. Esc keert terug naar de normale modus. Vanuit de normale modus voegt i in vóór de cursor en a erna. I begint vóór het eerste teken van de regel dat geen witruimte is en behoudt de inspringing; A voegt toe aan het einde. o opent een regel eronder en O een regel erboven.

Navigeren zonder tekst te typen

In de normale modus gaan h, j, k en l naar links, omlaag, omhoog en rechts. Pijltoetsen werken ook. w gaat naar het volgende woord, 0 naar het begin van de regel en $ naar het einde. G springt naar de laatste regel. 1G springt naar de eerste; Vim biedt ook gg. Een getal vóór G selecteert een regel, dus 12G springt naar regel 12. :12 en Enter doen hetzelfde. Aantallen herhalen ook bewegingen: 5j gaat vijf regels omlaag.

Bewerken vanuit de normale modus

x verwijdert het teken onder de cursor. dd knipt een regel; 3dd knipt drie regels. yy kopieert een regel. Bij tekst die uit hele regels bestaat, plakt p onder de huidige regel en P erboven. Bij tekst die uit tekens bestaat, plakt p na de cursor en P ervoor.

cw vervangt de rest van het huidige woord en opent de invoegmodus. r gevolgd door een teken vervangt slechts één teken. u maakt een wijziging ongedaan; Ctrl+R van Vim voert die opnieuw uit. Een punt . herhaalt de laatste wijziging.

Een instelling zoeken en wijzigen

Om “8080” door “9090” te vervangen in app.conf, voer je vi app.conf uit en typ je daarna /8080 en Enter. Typ bij de eerste “8” cw, typ “9090” en druk op Esc. Typ :wq en Enter om op te slaan en af te sluiten.

Zoek achteruit met ?text en Enter. n herhaalt de huidige zoekrichting en N keert die om. Zoekopdrachten accepteren reguliere expressies. Om elk voorkomen in een bestand te vervangen, gebruikt :%s/8080/9090/g % voor alle regels en g voor alle voorkomens op elke regel. :set number toont regelnummers tijdens het bewerken.

Bewust opslaan of afsluiten

Vanuit de normale modus slaat :w en Enter op; :w newname.txt slaat op onder een nieuwe naam. :q sluit alleen af als niet-opgeslagen wijzigingen dat niet verhinderen. :wq, :x of ZZ slaat op en sluit af. :q! gooit niet-opgeslagen wijzigingen weg en sluit af.

Als typen onverwacht de cursor verplaatst of tekst verwijdert, druk je op Esc om de normale modus te openen en gebruik je daarna u om ongewenste bewerkingen ongedaan te maken voordat je verdergaat. Open de invoegmodus voordat je de vervangende tekst typt. Kies bij het afsluiten of je wilt opslaan of weggooien; het uitroepteken in :q! geeft toestemming om niet-opgeslagen werk weg te gooien.

Belangrijkste punten

  • vi start in de normale modus; open de invoegmodus om te typen en druk op Esc om terug te keren.
  • i, a, o en hun hoofdlettervormen bepalen waar het invoegen begint.
  • dd knipt een regel, yy kopieert die en p plakt tekst met hele regels eronder of tekst met tekens na de cursor.
  • u maakt ongedaan en . herhaalt de laatste wijziging.
  • /text zoekt vooruit; n herhaalt en N keert de zoekrichting om.
  • :wq slaat op en sluit af; :q! gooit niet-opgeslagen wijzigingen weg en sluit af.

Linux-pipes, omleiding en tekstverwerking: voorbeelden

6 Walkthroughs

1

Lees een bestand zonder je plek kwijt te raken

10 stappen
Kies een weergavecommando, navigeer in een paginagewijze tekstviewer en selecteer een precies deel van een bestand.
  1. 1
    IntroductieKies hoeveel tekst je wilt zien

    Een terminal kan een heel bestand, één scherm tegelijk of alleen een geselecteerd deel tonen. De keuze bepaalt hoe gemakkelijk je vindt wat belangrijk is.

    Gebruik een korte notitie om cat te leren en stap daarna over op less voor een bestand dat te lang is om op het scherm te houden. Gebruik ten slotte head en tail als je weet welk deel je nodig hebt. Deze commando's lezen tekst zonder het opgeslagen bestand te bewerken.

  2. 2
    VoorbeeldVoeg twee korte notities samen

    a.txt bevat “a” en “b” op afzonderlijke regels. b.txt bevat “c d”. Voer cat -n a.txt b.txt uit.

    De uitvoer bevat drie genummerde regels, in die volgorde. De nummering loopt door van het eerste bestand naar het tweede; de nummers worden alleen aan de uitvoer toegevoegd. Voer cat a.txt b.txt > ab.txt uit om de oorspronkelijke samengevoegde tekst zonder nummering op te slaan.

  3. 3
    UitlegOpen een leesweergave

    Voer less /etc/services uit om een lang bestand scherm voor scherm te lezen. Het programma houdt de weergave open en wacht op navigatietoetsen.

    De spatiebalk gaat een scherm vooruit, b gaat terug en met de pijltoetsen navigeer je door regels. g springt naar de eerste regel; G naar de laatste. Druk op q om de weergave te sluiten en terug te keren naar de shell. Het is normaal dat de shellprompt ontbreekt zolang de tekstviewer openstaat.

  4. 4
    VoorbeeldZoek en ga verder

    Typ in less /ssh en druk op Enter om vooruit te zoeken naar “ssh”. Druk op n voor de volgende overeenkomst in die richting of op N om de andere kant op te gaan.

    Een achterwaartse zoekopdracht begint met ?ssh. Na die zoekopdracht gaat n verder achteruit. De richting wordt bepaald door de zoekopdracht die je bent gestart. less -N file voegt regelnummers toe als je de locatie van een overeenkomst wilt noteren.

  5. 5
    UitdagingZoek de eerdere overeenkomst

    Je hebt in een lang bestand met less vooruit gezocht naar “listen”. Je wilt naar de vorige overeenkomst en daarna de tekstviewer verlaten. Op welke toetsen druk je?

    ---reveal---

    Druk op N om tegen de voorwaartse zoekrichting in te gaan en daarna op q om af te sluiten. De kleine letter n zou verder vooruitgaan. Door af te sluiten krijg je de shellprompt terug; als je een overeenkomst of het einde van het bestand bereikt, sluit de tekstviewer niet.

  6. 6
    UitlegKies een aantal of een beginregel

    head -n 4 file toont de eerste vier regels. tail -n 4 file toont de laatste vier. Zonder -n tonen beide standaard tien regels.

    Een plusteken verandert de werking van tail: tail -n +4 file begint bij regel 4 en toont alles vanaf die regel. Voor een bestand met één kopregel verwijdert tail -n +2 file die kopregel. Het behoudt alle gegevensrecords, niet alleen de laatste twee.

  7. 7
    VoorbeeldSelecteer regels 11 tot en met 20

    Stel dat een bestand de getallen 1 tot en met 100 bevat, één per regel. Begin met head -n 20 numbers.txt, dat 1 tot en met 20 behoudt.

    Voeg | tail -n 10 toe. De laatste tien regels van de geselecteerde invoer zijn 11 tot en met 20. Beide grenzen tellen mee, dus dit bereik bevat tien regels. Als je tail om elf regels vraagt, wordt ook regel 10 meegenomen en schuift het begin terug.

  8. 8
    UitdagingKies een ander bereik in het midden

    Een bestand heeft ten minste 17 regels. Schrijf een pijplijn met head en tail die regels 12 tot en met 17 toont, inclusief beide grenzen.

    ---reveal---

    Gebruik head -n 17 file | tail -n 6. Behoud eerst regels 1–17 en daarna de laatste zes daarvan: 12, 13, 14, 15, 16 en 17. Met een aantal van vijf zou regel 12 ontbreken, omdat de grenzen zijn inbegrepen in het gevraagde bereik.

  9. 9
    UitdagingBekijk de nieuwste tekst en blijf volgen

    Je wilt de nieuwste vermeldingen van een lang applicatiebestand zien en blijven volgen wanneer er nieuwe vermeldingen binnenkomen. Welk commando past daarbij en hoe sluit je het af?

    ---reveal---

    Gebruik tail -f app.log en druk op Ctrl+C als je klaar bent. Gewoon tail zou het huidige einde tonen en afsluiten. tail -F is nuttig als het programma het bestand tijdens rotatie vervangt, omdat het de bestandsnaam blijft volgen wanneer het bestand wordt vervangen.

  10. 10
    SamenvattingGebruik de weergave die bij de taak past

    Gebruik cat voor een volledig kort bestand en open less om te navigeren en zoeken. Een paginagewijze tekstviewer blijft open totdat je die afsluit.

    Gebruik head en tail voor het begin, het einde of een bereik in het midden. Lees een plusteken in het regelaantal van tail als een beginpositie. Volg voor een liveweergave toegevoegde tekst met tail -f en stop met Ctrl+C. De selectie die je maakt werkt ook als de tekst via een pipe binnenkomt.

2

Volg invoer, resultaten en fouten

11 stappen
Verbind bestanden met standaardstromen en volg de volgorde van shellomleidingen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieTeken drie afzonderlijke routes
  2. 2
    UitlegBenoem de standaardstromen
  3. 3
    VoorbeeldGeef dezelfde gegevens via een andere route door
  4. 4
    UitdagingRond invoer via het toetsenbord af
  5. 5
    VoorbeeldGeef meerdere regels op onder een commando
  6. 6
    UitlegKies vervangen of toevoegen
  7. 7
    VoorbeeldCombineer resultaten en diagnostische meldingen
  8. 8
    UitdagingKeer de verbindingen om
  9. 9
    TipHoud de invoer intact
  10. 10
    UitdagingTel invoer en scheid een diagnostische melding
  11. 11
    SamenvattingVolg de instellingen van de shell
3

Bouw een bruikbaar tekstrapport

14 stappen
Bekijk een pijplijn terwijl die een kolom selecteert, waarden groepeert en telt en resultaten opslaat.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieGeef elke stap één taak
  2. 2
    UitlegVerbind de twee commando's
  3. 3
    UitdagingKies een pipe of een bestand
  4. 4
    UitlegWeet wat de teller meet
  5. 5
    VoorbeeldHoud sorteren en tellen uit elkaar
  6. 6
    UitdagingVerklaar een dubbele regel die blijft staan
  7. 7
    UitlegSelecteer de kolom die je nodig hebt
  8. 8
    VoorbeeldVerwijder het label en bekijk de waarden
  9. 9
    UitdagingControleer een aanname over scheidingstekens
  10. 10
    VoorbeeldGroepeer de geselecteerde waarden
  11. 11
    VoorbeeldRangschik de aantallen
  12. 12
    VerbandBewaar gegevens van vóór de uiteindelijke telling
  13. 13
    UitdagingZoek de oorzaak van een extra categorie
  14. 14
    SamenvattingControleer wat tussen stappen wordt doorgegeven
4

Bouw patronen die overeenkomen met de bedoelde tekst

15 stappen
Kies opties voor grep en bouw daarna eenvoudige en uitgebreide patronen op, één operator tegelijk.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBepaal wat als overeenkomst telt
  2. 2
    UitlegKies een zoekresultaat
  3. 3
    VoorbeeldMaak onderscheid tussen een woord en een regel
  4. 4
    UitdagingZoek een exact versielabel
  5. 5
    TipDoorzoek een directory of stel een stille vraag
  6. 6
    UitlegPlaats een overeenkomst binnen de regel
  7. 7
    VoorbeeldSelecteer één teken uit een verzameling
  8. 8
    KernpuntSta nul herhalingen toe
  9. 9
    UitdagingZoek een letterlijk bestandseinde
  10. 10
    UitlegSchakel uitgebreide operatoren in
  11. 11
    VoorbeeldControleer een volledige code
  12. 12
    VoorbeeldGroepeer een keuze of een herhaald onderdeel
  13. 13
    UitdagingHaal delen uit tekst en bekijk de beperkingen
  14. 14
    UitdagingBehoud alleen actieve instellingen
  15. 15
    SamenvattingControleer het patroon en het resultaat afzonderlijk
5

Selecteer bestanden voordat je er bewerkingen op uitvoert

12 stappen
Kies een beginpunt voor de zoekopdracht, pas bestandstests toe en geef volledige paden door aan het volgende commando.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieHoud namen en inhoud uit elkaar
  2. 2
    UitlegKies de begindirectory
  3. 3
    VoorbeeldCombineer type met naam
  4. 4
    UitdagingBehoud het jokerteken voor find
  5. 5
    UitlegVergelijk afgeronde grootte-eenheden
  6. 6
    UitdagingLees de grens in dagen
  7. 7
    UitlegGeef paden door als argumenten
  8. 8
    VoorbeeldDoorzoek alleen geselecteerde inhoud
  9. 9
    TipZet een vernietigende actie na de tests
  10. 10
    UitlegKies een index of zoek een commando op
  11. 11
    UitdagingKies een actuele inhoudscontrole
  12. 12
    SamenvattingStem de zoekopdracht af op wat je wilt weten
6

Maak een kleine wijziging in de terminal en sla die op

13 stappen
Bewerk een instelling in nano en vi en kies daarna of je de wijzigingen in de buffer wilt opslaan of weggooien.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieMaak onderscheid tussen werktekst en opgeslagen tekst
  2. 2
    UitlegLees de bediening van nano
  3. 3
    VoorbeeldZoek en vervang één waarde
  4. 4
    UitdagingVerplaats een regel en herstel een fout
  5. 5
    TipBeantwoord de vraag bij het afsluiten
  6. 6
    UitlegOpen de invoegmodus van vi
  7. 7
    VoorbeeldGa naar de tekst die je nodig hebt
  8. 8
    VoorbeeldWijzig de instelling in vi
  9. 9
    UitdagingPlak het soort tekst dat je hebt gekopieerd
  10. 10
    TipGebruik kleine bewerkingen en maak ze ongedaan
  11. 11
    UitdagingKies of de wijziging in vi behouden blijft
  12. 12
    UitdagingVergelijk twee niet-afgeronde bewerkingen
  13. 13
    SamenvattingSluit af door bewust op te slaan of weg te gooien

Linux-pipes, omleiding en tekstverwerking: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Kies commando's en interpreteer overeenkomsten10 Oefenvragen

Vraag 1 van 10

Wat doet n nadat je in less met ?queue achteruit hebt gezocht?
  1. Zoekt de volgende overeenkomst vooruit.
  2. Zoekt de volgende overeenkomst achteruit.
  3. Gaat vooruit naar het volgende scherm.
  4. Gaat naar de eerste regel van het bestand.
Toon antwoordVerberg antwoord
Antwoord: B
De toets n herhaalt de zoekopdracht in de ingestelde richting, die na ?queue achteruit is. De hoofdletter N zou die richting omkeren en vooruit zoeken. De toetsen betekenen volgende of vorige ten opzichte van de zoekopdracht, niet altijd omlaag of omhoog in het bestand.

Vraag 2 van 10

labels.txt heeft acht regels die eindigen met een nieuweregelteken. Hoe verschilt de uitvoer van wc -l < labels.txt van die van wc -l labels.txt?
  1. De telling ontbreekt, maar de bestandsnaam blijft.
  2. Een andere telling verschijnt zonder naam.
  3. Na dezelfde telling verschijnt een totaalregel.
  4. De bestandsnaam ontbreekt, maar de telling 8 blijft.
Toon antwoordVerberg antwoord
Antwoord: D
Met < opent de shell het bestand en geeft wc een anonieme invoerstroom, zodat wc de telling zonder de oorspronkelijke naam toont. Met een genoemd bestand als argument kan wc beide tonen. Beide vormen tellen dezelfde acht nieuweregeltekens; invoeromleiding verandert de inhoud van het bestand niet.

Vraag 3 van 10

In een nieuwe terminal schrijft een commando resultaten naar stdout en diagnostische meldingen naar stderr. Waar gaat elk naartoe in command 2>&1 > result.txt?
  1. Resultaten naar het bestand; meldingen naar de terminal.
  2. Resultaten naar de terminal; meldingen naar het bestand.
  3. Beide stromen naar het bestand; geen naar de terminal.
  4. Beide stromen naar de terminal; geen naar het bestand.
Toon antwoordVerberg antwoord
Antwoord: A
De eerste omleiding kopieert de huidige terminalverbinding van stdout naar stderr. De tweede verplaatst alleen stdout naar het bestand, zodat stderr verbonden blijft met de eerdere bestemming. Om beide stromen in het bestand op te vangen is de omgekeerde volgorde nodig: > result.txt 2>&1.

Vraag 4 van 10

teams.csv bevat “name,team”, “Uma,Blue”, “Zed,Gold”, “Ivo,Blue” en “Moe,Gold”, met afsluitende nieuweregeltekens. Wat meldt cut -d, -f2 teams.csv | sort | uniq | wc -l?
  1. 2
  2. 4
  3. 3
  4. 5
Toon antwoordVerberg antwoord
Antwoord: C
De geselecteerde kolom bevat de kop “team” naast “Blue” en “Gold”. Na sorteren en uniq blijven drie verschillende regels over, dus de telling is 3. Om alleen de twee teams te tellen zou de kopregel moeten worden verwijderd voordat dubbele regels worden verwijderd; geen enkele stap in deze pijplijn doet dat.

Vraag 5 van 10

Welk commando doorzoekt build.txt op de letterlijke tekst “v3.8”, inclusief de echte punt?
  1. grep -F 'v3.8' build.txt
  2. grep -E 'v3.8' build.txt
  3. grep -i 'v3.8' build.txt
  4. grep -w 'v3.8' build.txt
Toon antwoordVerberg antwoord
Antwoord: A
De optie -F behandelt elk patroonteken als letterlijke tekst, dus de punt moet een echte punt zijn. Bij interpretatie als reguliere expressie kan . overeenkomen met een ander teken, zoals de “x” in “v3x8”. Aanhalingstekens beschermen het patroon tegen de shell, maar nemen de betekenis van de reguliere expressie niet weg.

Vraag 6 van 10

De regels zijn “dog”, “dig”, “drag” en “undog”. Welke regels komen overeen met grep '^d.g$' file?
  1. Alle behalve “drag”.
  2. “dog” en “dig”.
  3. Alle behalve “undog”.
  4. Alle behalve “dig”.
Toon antwoordVerberg antwoord
Antwoord: B
De ankers vereisen dat de volledige regel bestaat uit d, één teken en g. Zowel “dog” als “dig” voldoet. “undog” bevat een overeenkomend deel van drie tekens, maar voldoet niet aan het beginanker, terwijl “drag” twee middelste tekens heeft waar de enkele punt er maar één toestaat.

Vraag 7 van 10

Welke regels komen overeen met grep '^ba*t$' file uit “bt”, “bat”, “baat” en “boat”?
  1. Alleen “bat” en “baat”.
  2. “bat”, “baat” en “boat”.
  3. “bt”, “bat” en “boat”.
  4. “bt”, “bat” en “baat”.
Toon antwoordVerberg antwoord
Antwoord: D
De ster geldt alleen voor “a” en staat nul of meer herhalingen tussen b en t toe. Daaronder vallen “bt”, “bat” en “baat”. Als je ten minste één “a” zou vereisen, zou je “bt” ten onrechte weglaten; als je willekeurige letters in het midden zou toestaan, zou je “boat” ten onrechte accepteren. Het patroon doet geen van beide.

Vraag 8 van 10

Een directoryboom met notities bevat bestandsnamen met spaties. Je hebt de namen nodig van recent gewijzigde .txt-bestanden die “REVIEW” bevatten. Welk commando past alle drie de beperkingen toe?
  1. find notes -type f -name '*.txt' -mtime -7 | grep -l 'REVIEW'
  2. find notes -type f -name '*.md' -mtime -7 -exec grep -l 'REVIEW' {} +
  3. find notes -type f -name '*.txt' -mtime -7 -exec grep -l 'REVIEW' {} +
  4. find notes -type f -name '*.txt' -mtime +7 -exec grep -l 'REVIEW' {} +
Toon antwoordVerberg antwoord
Antwoord: C
find selecteert gewone tekstbestanden die minder dan zeven dagen geleden zijn gewijzigd en geeft hun volledige paden als argumenten door aan grep. -l toont bestanden waarvan de inhoud overeenkomt. Als je de door find getoonde paden via een pipe naar grep stuurt, doorzoek je padtekst, terwijl -L bestanden zonder overeenkomst in de inhoud zou selecteren.

Vraag 9 van 10

Welke toets brengt je bij de afsluitvraag “Save modified buffer?” van nano terug naar het bewerken zonder de editor te verlaten?
  1. N
  2. Ctrl+C
  3. Y
  4. Ctrl+O
Toon antwoordVerberg antwoord
Antwoord: B
Ctrl+C annuleert het afsluiten en keert terug naar de huidige buffer. Met N kies je ervoor af te sluiten zonder op te slaan, waardoor de niet-opgeslagen wijzigingen worden weggegooid. Deze vraag gaat over hoe je een afsluitpoging afrondt; er wordt niet gevraagd of je in de editor wilt blijven.

Vraag 10 van 10

Je kopieert in de normale modus van vi een regel met yy en drukt op p. Waar verschijnt de gekopieerde regel?
  1. Boven de huidige regel.
  2. Na de cursor binnen de regel.
  3. Vóór de cursor binnen de regel.
  4. Onder de huidige regel.
Toon antwoordVerberg antwoord
Antwoord: D
Het commando yy kopieert een hele regel, dus p plaatst die onder de huidige regel. Plakken na de cursor geldt voor tekst die uit tekens bestaat, zoals een verwijderd teken, niet voor een kopie van een hele regel. De hoofdletter P zou deze gekopieerde regel boven de huidige regel plaatsen.
Set 2: Lees tekst en volg de gegevensstroom10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Je leest een lang bestand in less. Met welke enkele toets keer je terug naar de shell?
  1. g
  2. h
  3. q
  4. n
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat toont tail -n +3 records.txt?
  1. Alle regels vanaf regel 3.
  2. Alleen de laatste drie regels.
  3. Alleen regel 3 van het bestand.
  4. Alle regels vóór regel 3.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

De normale resultaten van een commando worden opgeslagen met > report.txt, maar de diagnostische meldingen blijven zichtbaar. Welke gegevensstroom voert die meldingen af?
  1. Standaardinvoer, descriptor 0.
  2. Standaarduitvoer, descriptor 1.
  3. Standaarduitvoer, descriptor 2.
  4. Standaardfoutuitvoer, descriptor 2.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Je wilt een bestaand rapport behouden en de stdout van een commando aan het einde toevoegen. Welke omleiding doet dat?
  1. > report.txt
  2. >> report.txt
  3. 2> report.txt
  4. < report.txt
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een commando toont vijf normale resultaatregels en twee regels met diagnostische meldingen. Welk aantal regels meldt command | wc -l?
  1. 7
  2. 2
  3. 5
  4. 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een bestand bevat “18”, “4” en “105”, elk op een eigen regel. Welke volgorde levert sort -n op?
  1. 105, 18, 4
  2. 18, 105, 4
  3. 4, 105, 18
  4. 4, 18, 105
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

supplies.txt bevat “clip”, “ring”, “clip”, “pad”, “clip”, “ring” en “clip”, elk afgesloten met een nieuweregelteken. Welke twee regels staan bovenaan bij sort supplies.txt | uniq -c | sort -rn | head -n 2, als je de opvulling bij de aantallen negeert?
  1. “4 clip” en daarna “2 ring”.
  2. “4 clip” en daarna “1 pad”.
  3. “4 ring” en daarna “2 clip”.
  4. “1 clip” en daarna “1 ring”.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een bestand bevat de regels “FAIL”, “fail”, “failure” en “all clear”. Hoeveel regels telt grep -ic 'fail' file?
  1. 1
  2. 3
  3. 2
  4. 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

De boom bevat een gewoon bestand docs/a.txt, een directory docs/b.txt en een gewoon bestand docs/c.TXT. Wat selecteert find docs -type f -name '*.txt'?
  1. Alleen docs/a.txt.
  2. Zowel docs/a.txt als docs/b.txt.
  3. Zowel docs/a.txt als docs/c.TXT.
  4. Alle drie de paden onder docs.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Je bent klaar met bewerken in nano. Welke toetsenreeks slaat de huidige buffer op onder de getoonde naam?
  1. Ctrl+R, daarna Enter.
  2. Ctrl+K, daarna Ctrl+U.
  3. Ctrl+O, daarna Enter.
  4. Ctrl+X, daarna N.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Volg pijplijnen en verbeter fouten10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een bestand heeft ten minste 28 regels. Welk commando toont precies regels 19 tot en met 28?
  1. head -n 28 file | tail -n 9
  2. head -n 19 file | tail -n 10
  3. head -n 28 file | tail -n +19 | head -n 9
  4. head -n 28 file | tail -n 10
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat gebeurt er met de bestaande inhoud voordat echo done > state.txt zijn uitvoer schrijft?
  1. Die blijft vóór de nieuwe regel aan het einde staan.
  2. Die wordt verwijderd als de shell het bestand opent.
  3. Die gaat naar stderr voordat de nieuwe regel wordt geschreven.
  4. Die blijft staan tenzij echo een geslaagde schrijfactie meldt.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

parts.txt bevat “pin”, “bolt”, “pin”, “nut” en “bolt”, elk afgesloten met een nieuweregelteken. Wat doet sort parts.txt | uniq | tee distinct.txt | wc -l?
  1. Toont 5; slaat alle vijf oorspronkelijke regels op.
  2. Toont 3; slaat alleen de telling zelf op.
  3. Toont 3; slaat drie verschillende namen op.
  4. Toont 5; slaat drie verschillende namen op.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

runs.txt bevat “b”, “a”, “b”, “a” en “a”, elk op een eigen regel. Welk paar van aantal en waarde staat bovenaan in de uitvoer van uniq -c runs.txt | sort -rn?
  1. 2 a
  2. 3 a
  3. 2 b
  4. 1 b
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat toont cut -d: -f3,1 uit de regel “Nia:ops:42”?
  1. “42:Nia”
  2. “Nia:42”
  3. “Nia:ops”
  4. “42:ops”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Welke volledige regels komen overeen met grep -E '^(go)+$' file?
  1. “go” en “gogo”.
  2. “go” en “goo”.
  3. “g” en “go”.
  4. “go” en “gog”.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een regel bevat “node=7 node=24 node=301”. Welke uitvoer levert grep -Eo '[0-9]{1,2}' voor die regel?
  1. “7” en “24”, op afzonderlijke regels.
  2. “7”, “24”, “301”, op afzonderlijke regels.
  3. “7”, “24”, “30”, “1”, op afzonderlijke regels.
  4. “7”, “2”, “4”, “3”, “0”, “1”, op afzonderlijke regels.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Welke van de groottes 0 bytes, 1 byte, 800.000 bytes en 1.048.576 bytes voldoet aan de test -size -1M van GNU find?
  1. Tot en met 1 byte.
  2. Alle onder 1 MiB.
  3. Alle vier de groottes.
  4. Alleen 0 bytes.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Waarom kan locate plan.txt een pad tonen dat vanochtend is verwijderd?
  1. Het leest verwijderde bestandsinhoud uit standaardinvoer.
  2. De naamtest negeert de huidige toestand van elke directory.
  3. De paden in de database zijn nog niet bijgewerkt na de verwijdering.
  4. Het doorzoekt PATH voordat het de gevraagde naam controleert.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Je staat in de invoegmodus van vi met wijzigingen die je wilt behouden. Welke reeks slaat op en sluit af?
  1. Esc, :wq, Enter.
  2. Esc, :q!, Enter.
  3. Esc, :q, Enter.
  4. Esc, wq, Enter.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Onderzoek werkwijzen met bestanden en tekst10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Je wilt first.txt gevolgd door second.txt opslaan in joined.txt, met uitvoerregelnummers die doorlopen over beide invoerbestanden. Welk commando doet dit?
  1. cat -n first.txt second.txt > joined.txt
  2. cat first.txt second.txt > joined.txt
  3. cat -n second.txt first.txt > joined.txt
  4. cat -n first.txt second.txt | wc -l > joined.txt
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

ls -lt produceert één kopregel “total”, gevolgd door bestandsvermeldingen. Hoeveel vermeldingen toont ls -lt | head -n 6 als er ten minste zes vermeldingen zijn?
  1. 6
  2. 4
  3. 5
  4. 7
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat geeft bij het interactief invoeren van regels in sort aan het begin van een lege regel het einde van de invoer aan?
  1. Ctrl+C
  2. Ctrl+D
  3. Ctrl+O
  4. Ctrl+W
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een commando geeft vier stdout-regels en één stderr-regel. Wat levert command 2>&1 | tee combined.txt | wc -l op?
  1. Toont 4; slaat alleen normale resultaten op.
  2. Toont 5; slaat alleen de eindtelling op.
  3. Toont 4; slaat resultaten en meldingen op.
  4. Toont 5; slaat resultaten en meldingen op.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

De invoerregel is “A B C”, met twee spaties na A. Wat toont cut -d' ' -f2?
  1. “B”
  2. “C”
  3. Een lege regel.
  4. “A”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een bestand bevat “alert alert”, “prealert”, “Alert raised” en “all clear”. Wat meldt grep -icw 'alert' file?
  1. 2
  2. 1
  3. 3
  4. 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een lijst bevat “x.cfg”, “xXcfg”, “x.cfg.old” en “cfg”. Welk patroon selecteert alleen regels die eindigen op het letterlijke achtervoegsel “.cfg”?
  1. .cfg$
  2. \.cfg
  3. ^\.cfg$
  4. \.cfg$
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een boom bevat de gewone bestanden “old.cfg” (30,9 dagen oud), “notes.txt” (31,1 dagen) en “runtime.cfg” (31,1 dagen), plus een directory “archive.cfg” (31,1 dagen). Wat selecteert find . -type f -name '*.cfg' -mtime +30?
  1. Beide “.cfg”-bestanden.
  2. Alleen “runtime.cfg”.
  3. Elk bestand van 31,1 dagen.
  4. Elke “.cfg” van 31,1 dagen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Je knipt in nano per ongeluk een regel en wilt die herstellen door die actie terug te draaien. Welke sneltoets doet dat?
  1. Alt+U
  2. Ctrl+U
  3. Ctrl+K
  4. Alt+A
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een regel in vi begint met vier spaties vóór “enabled=yes”. Waar begint I vanuit de normale modus met invoegen?
  1. Vóór alle vier spaties, in kolom één.
  2. Vóór “enabled”, na de vier spaties.
  3. Na “enabled=yes”, aan het einde van de regel.
  4. Op een nieuwe lege regel boven de instelling.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Combineer regels in onbekende situaties10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een gegevensbestand heeft een kopregel van één regel gevolgd door 30 records. Welk commando toont de oorspronkelijke bestandsregels 14 tot en met 18 nadat de kopregel is verwijderd?
  1. tail -n +2 file | head -n 18 | tail -n 5
  2. tail -n +2 file | head -n 17 | tail -n 4
  3. tail -n +2 file | head -n 17 | tail -n 5
  4. tail -n +2 file | head -n 14 | tail -n 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een commando schrijft twee normale regels en één regel met een diagnostische melding. Zowel log.txt als err.txt bevat al oudere tekst. Wat gebeurt er met command >> log.txt 2> err.txt?
  1. Normale regels vervangen log; de melding wordt toegevoegd aan err.
  2. Normale regels worden toegevoegd aan log; de melding vervangt err.
  3. Beide stromen worden toegevoegd aan log; err behoudt oudere tekst.
  4. Normale regels worden toegevoegd aan err; de melding vervangt log.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

sizes.csv bevat “name,size”, “alpha,8”, “beta,110” en “gamma,24”. Welke pijplijn toont eerst de twee volledige gegevensrecords met de grootste numerieke groottes?
  1. tail -n +2 sizes.csv | sort -t, -k2,2r | head -n 2
  2. tail -n +2 sizes.csv | sort -t, -k2,2n | head -n 2
  3. tail -n +2 sizes.csv | sort -t, -k1,1nr | head -n 2
  4. tail -n +2 sizes.csv | sort -t, -k2,2nr | head -n 2
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

jobs.csv bevat “id,zone”, “1,North”, “2,South”, “3,North”, “4,East” en “5,North”. Welk paar van aantal en waarde staat bovenaan in het resultaat van tail -n +2 jobs.csv | cut -d, -f2 | sort | uniq -c | sort -rn?
  1. 3 North
  2. 1 North
  3. 2 North
  4. 1 zone
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke korte optie laat grep regelnummers uit de invoer tonen bij overeenkomende regels?
  1. -c
  2. -n
  3. -l
  4. -o
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Welke regel uit “rad”, “red”, “rid” en “road” komt overeen met grep '^r[^ae]d$' file?
  1. “rad”
  2. “red”
  3. “rid”
  4. “road”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een configuratiebestand bevat “ # memo”, drie spaties, “mode=fast” en “x#y=on”, elk op een afzonderlijke regel. Wat blijft over na grep -Ev '^[[:space:]]*(#|$)' file?
  1. “mode=fast” en “x#y=on”.
  2. Alleen “mode=fast”.
  3. “ # memo” en “mode=fast”.
  4. Drie spaties en “x#y=on”.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Je wilt weten hoe Bash een commando interpreteert, inclusief een mogelijke alias of een mogelijk ingebouwd commando. Welk commando gebruik je voor de naam echo?
  1. which echo
  2. locate echo
  3. find . -name echo
  4. type echo
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

In de normale modus van vi verwijdert x één teken. Daarna druk je op p. Waar wordt dat teken ingevoegd?
  1. Vóór de cursor.
  2. Onder de huidige regel.
  3. Na de cursor.
  4. Boven de huidige regel.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Je hebt gewone bestanden nodig die direct in work staan, zonder bestanden uit dieper gelegen directory's. Welke zoekopdracht doet dat?
  1. find work -maxdepth 1 -type d
  2. find work -maxdepth 1 -type f
  3. find work -maxdepth 2 -type f
  4. find work -maxdepth 0 -type f
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

72 Kernbegrippen, elk met een definitie

A

aaneenschakeling
Aaneenschakeling voegt tekstreeksen in volgorde samen, bijvoorbeeld door de inhoud van meerdere bestanden na elkaar te tonen met cat.
Met cat first.txt second.txt > combined.txt komt de tekst uit het eerste bestand vóór de tekst uit het tweede.
achteraan toevoegen
Achteraan toevoegen is uitvoer aan het einde van een bestand toevoegen terwijl de bestaande inhoud behouden blijft. Voor de standaarduitvoer van een commando gebruik je >>.
Herhaalde commando's met >> report.txt verzamelen hun resultaten in één bestand in plaats van het te vervangen.
afkappen
Bij afkappen wordt een bestaand uitvoerbestand leeggemaakt wanneer de shell het opent voor gewone omleiding met >, voordat het commando invoer begint te lezen.
Het commando sort names.txt > names.txt verliest de oorspronkelijke gegevens omdat het afkappen eerst gebeurt.
afschermen met een backslash
Afschermen met een backslash verandert hoe een speciaal teken wordt gelezen, bijvoorbeeld door een punt in een reguliere expressie met een echte punt te laten overeenkomen in plaats van met een willekeurig teken.
Het patroon \.txt$ vereist een letterlijk einde “.txt”, terwijl .txt$ een ander teken vóór “txt” toestaat.
afsluitstatus
Een afsluitstatus is een getal dat een commando aan de shell teruggeeft, zoals bij grep gewoonlijk 0 voor een overeenkomst, 1 voor geen overeenkomst of 2 voor een fout.
Een stille zoekopdracht met grep -q gebruikt de status om een resultaat te melden zonder overeenkomende regels te tonen.
alternatie
Alternatie drukt in uitgebreide syntaxis een keuze uit tussen patronen van reguliere expressies met |, vaak met ronde haken om de reikwijdte van de keuze te beperken.
In ^(east|west)$ moeten beide alternatieven de hele regel vullen omdat ze de ankers delen.
anker
Een anker beperkt een overeenkomst met een reguliere expressie tot een positie, zoals ^ voor het begin of $ voor het einde van een regel bij gewone zoekopdrachten met grep.
Als je beide ankers aan d.g toevoegt, sluit je een langere regel zoals “undog” uit, ook al bevat die “dog”.

B

bestandsdescriptor
Een bestandsdescriptor is een nummer dat een open invoer- of uitvoerverbinding aanduidt, waaronder 0 voor stdin, 1 voor stdout en 2 voor stderr.
De 2 in 2> errors.txt selecteert de foutstroom en moet direct tegen de omleidingsoperator aan staan.
bestandstypetest
Een bestandstypetest beperkt een bestandszoekopdracht tot een soort item met codes zoals f voor een gewoon bestand, d voor een directory of l voor een koppeling.
Door -type f toe te voegen voorkom je dat een directory met de naam “old.txt” voldoet aan een zoekopdracht naar tekstbestanden.
buffer
Een buffer is de werkkopie van tekst die een editor in het geheugen bewaart en die wijzigingen kan bevatten die nog niet naar het bestand op schijf zijn geschreven.
Als nano tijdens het opslaan een fout over toegangsrechten meldt, kan de bewerkte buffer verschillen van het opgeslagen bestand.

C

cat
cat is een commando dat de inhoud van een of meer bestanden naar standaarduitvoer schrijft, in de volgorde van de bestandsargumenten.
Als je cat -n a.txt b.txt uitvoert, wordt de gecombineerde uitvoer genummerd zonder een van beide invoerbestanden te bewerken.
commandoregelmodus
De commandoregelmodus accepteert een commando op de onderste regel van vi nadat je in de normale modus : hebt getypt en voert het uit wanneer je op Enter drukt.
Het commando :wq slaat na Enter de buffer op en sluit af; een gewoon wq in de normale modus doet dat niet.
cut
cut is een filter dat velden of vaste tekenposities uit elke invoerregel selecteert en de geselecteerde delen in hun oorspronkelijke volgorde behoudt.
Het commando cut -d: -f1,6 /etc/passwd koppelt elke accountnaam aan het veld met de homedirectory.

D

doorlopen van de directoryboom
Bij het doorlopen van de directoryboom worden items in een directoryboom bezocht en zo nodig onderliggende directory's ingegaan; de volgorde van find hoeft niet alfabetisch te zijn.
Voeg | sort toe aan een eenvoudige zoekopdracht naar paden als de volgorde van de getoonde resultaten voorspelbaar moet zijn.
duplicatie van bestandsdescriptoren
Duplicatie van bestandsdescriptoren verbindt een genummerde gegevensstroom met de huidige bestemming van een andere stroom, zoals 2>&1 doet voor stderr en stdout.
In command > all.txt 2>&1 krijgt stderr de bestandsverbinding die stdout al heeft.

E

expressie tussen vierkante haken
Een expressie tussen vierkante haken selecteert één teken uit een verzameling of bereik. Een dakje direct na de openingshaak keert om welke tekens voldoen.
Het patroon b[ae]t komt overeen met “bat” of “bet”, terwijl b[^a]t “a” uitsluit op de middelste positie.
extractie van overeenkomende tekst
Extractie van overeenkomende tekst toont overeenkomende tekstfragmenten in plaats van hele invoerregels, zoals de optie -o van grep voor elke niet-lege overeenkomst doet.
Als één regel “id=42 id=57” bevat, toont grep -Eo '[0-9]+' de twee getallen op afzonderlijke regels.

F

filter
Een filter leest gegevens uit standaardinvoer, selecteert of wijzigt ze en schrijft een resultaat naar standaarduitvoer, zodat het in een pijplijn kan werken.
sort, cut en grep werken elk als filter wanneer ze tekst van een eerder commando ontvangen.
find
find doorzoekt een directoryboom vanaf opgegeven beginpaden, test de eigenschappen van elk bereikt item en toont geselecteerde paden of voert er acties op uit.
find notes -type f -name '*.txt' selecteert gewone bestanden met tekstbestandsnamen in de hele directoryboom.
find -exec
find -exec voert een ander commando uit op geselecteerde paden, vervangt daarbij {} door een pad en gebruikt een afgeschermde puntkomma of een plusteken om de actie te beëindigen.
De actie -exec wc -l {} + geeft groepen overeenkomende paden door aan een commando dat hun regels telt.
frequentietelling
Een frequentietelling meldt hoe vaak elke waarde voorkomt. Meestal maak je die door gelijke regels te groeperen met sort en reeksen te tellen met uniq -c.
Voeg sort -rn toe na uniq -c om de grootste aantallen bovenaan te zetten als je veelvoorkomende vermeldingen bekijkt.

G

gemarkeerde selectie
Een gemarkeerde selectie is tekst die is gekozen tussen een beginmarkering en de cursor, zodat nano het gekozen deel kan knippen in plaats van een hele regel.
Druk op Alt+A om te beginnen met markeren, ga naar het andere uiteinde en gebruik daarna Ctrl+K om de geselecteerde tekst te knippen.
grep
grep is een tekstzoekcommando dat normaal gesproken elke invoerregel toont die een overeenkomst met een patroon bevat, met opties om het resultaat te veranderen.
Gebruik grep -n WARN app.log om overeenkomende regels samen met hun posities in het bestand te tonen.
groep
Een groep in een reguliere expressie plaatst een reeks tussen ronde haken zodat een operator erop kan werken als één onderdeel of alternatieven hun omringende tekst kunnen delen.
De expressie (ab)+ staat “ab” en “abab” toe omdat het plusteken de volledige groep van twee tekens herhaalt.

H

head
head is een filter dat het begin van de invoer toont: standaard tien regels of, als je daarom vraagt, een ander aantal regels of bytes.
Bekijk het begin van een bestand met head -n 4 notes.txt voordat je beslist of je het hele bestand nodig hebt.
here-document
Een here-document levert meerdere regels als standaardinvoer en eindigt wanneer de shell een regel bereikt die alleen het gekozen scheidingsteken bevat.
Bij cat <<EOF zijn de regels vóór de afsluitende EOF gegevens, terwijl die laatste regel een markering is.
here-string
Een here-string is een invoeromleiding in Bash die via standaardinvoer één tekenreeks gevolgd door een nieuweregelteken aan een commando levert.
Het commando wc -w <<< "red blue green" ontvangt drie woorden zonder dat een afzonderlijk invoerbestand nodig is.

I

invoegmodus
In de invoegmodus worden getypte tekens tekst in de buffer van vi. Je opent deze modus met commando's zoals i, a of o en verlaat die met Esc.
Nadat cw de rest van een woord heeft verwijderd, typ je de vervanging in de invoegmodus en druk je daarna op Esc.

K

kopiëren
Kopiëren is in vi tekst bewaren om die later te plakken, zoals yy voor een hele regel doet zonder die regel uit de buffer te verwijderen.
Gebruik yy gevolgd door p om een regel onder de oorspronkelijke positie in het bestand te dupliceren.
kwantor
Een kwantor geeft aan hoe vaak het voorgaande onderdeel van een reguliere expressie mag voorkomen, zoals ? voor optionele tekst of {4} voor precies vier herhalingen.
De expressie [0-9]{4} vereist vier cijfers; ankers kunnen zorgen dat dit de volledige inhoud van de regel is.

L

leeg veld
Een leeg veld bevat geen tekens tussen de scheidingstekens, zodat opeenvolgende scheidingstekens een veld kunnen opleveren dat op een ontbrekende waarde lijkt.
Met een spatie als scheidingsteken heeft “a b” een leeg tweede veld tussen de twee spaties.
less
less is een paginagewijze tekstviewer waarmee je vooruit en achteruit kunt navigeren, tekst kunt zoeken en bestanden of uitvoer uit een pipe kunt bekijken zonder de tekst te bewerken.
Gebruik less -N notes.txt als je regelnummers wilt zien terwijl je een bepaalde passage in een bestand zoekt.
locate
locate zoekt snel padnamen op in een vooraf opgebouwde database waarvan de inhoud kan achterlopen op wijzigingen in het actuele bestandssysteem.
Een nieuw aangemaakte notitie kan ontbreken in de resultaten van locate totdat de database met paden wordt vernieuwd.

M

metateken
Een metateken heeft een speciale betekenis in een patroon, zoals de punt voor één teken of de ster voor herhaling van het voorgaande onderdeel in een reguliere expressie.
Aanhalingstekens beschermen * tegen de shell, maar grep interpreteert het nog steeds als operator in een reguliere expressie wanneer het dit ontvangt.
modale teksteditor
Een modale teksteditor geeft dezelfde toetsen verschillende betekenissen in verschillende modi en scheidt tekstinvoer van commando's voor navigeren en bewerken.
In vi verwijdert een druk op “x” een teken in de normale modus, maar typ je een “x” in de invoegmodus.

N

naamtest
Een naamtest vergelijkt de volledige basisnaam van een item met een patroon met jokertekens; -name van find is hoofdlettergevoelig, terwijl -iname hoofdletterverschillen negeert.
De test -name 'plan*' accepteert “plan.txt”, terwijl -name 'plan' precies die basisnaam vereist.
nano
nano is een teksteditor voor de terminal die getypte tekst direct accepteert en sneltoetsen toont voor opslaan, zoeken, knippen en afsluiten.
Open nano +12 app.conf als een programma meldt dat een instelling op regel 12 aandacht nodig heeft.
nieuweregelteken
Een nieuweregelteken markeert het einde van een tekstregel; wc -l telt deze markeringen, zodat een onafgemaakte laatste regel niet bijdraagt aan het gemelde totaal.
Tekst met “one”, een nieuweregelteken en daarna “two” geeft een telling van 1 nieuweregelteken als er geen afsluitende markering volgt.
noclobber
Noclobber is een instelling in Bash die gewone omleiding met > naar bestaande gewone bestanden blokkeert en zo onbedoeld vervangen helpt voorkomen.
Gebruik na set -o noclobber alleen >| als je de bescherming van bestaande bestanden bewust wilt doorbreken.
normale modus
De normale modus is de commandostand van vi, waarin toetsen de cursor verplaatsen of tekst bewerken. Met Esc ga je naar deze modus voordat je een ander commando geeft.
Druk op Esc en daarna op dd om de huidige regel te knippen zonder die twee letters per ongeluk te typen.
nulapparaat
Het nulapparaat, /dev/null, is een speciaal bestand dat geschreven gegevens weggooit, zodat een gekozen uitvoerstroom bewust kan worden verborgen.
Als je 2>/dev/null toevoegt, verberg je diagnostische meldingen van een bestandszoekopdracht, waaronder meldingen over onleesbare directory's.
numeriek sorteren
Bij numeriek sorteren worden de getalswaarden van tekstvelden vergeleken, zodat waarden zoals 9 en 100 worden geordend op grootte in plaats van op het eerste cijfer.
Gebruik sort -n om “9” vóór “100” te zetten als de regels hoeveelheden voorstellen in plaats van labels.

O

omleiding
Omleiding is een shellbewerking die verandert waar een commando invoer leest of uitvoer naartoe stuurt en de verbindingen vóór de uitvoering instelt.
In sort < names.txt > ordered.txt levert de shell het ene bestand als invoer en opent een ander voor uitvoer.
opslaan
Opslaan is de opslagactie van nano, die je start met Ctrl+O en afrondt door de bestandsnaam van de bestemming te bevestigen, normaal gesproken met Enter.
Sla na het wijzigen van een instelling op voordat je afsluit als je de nieuwe tekst op schijf wilt behouden.
overeenkomst met een volledig woord
Een overeenkomst met een volledig woord vereist dat de overeenkomende tekst een heel woord vormt, al kunnen er op dezelfde regel nog andere woorden staan.
grep -w error file komt overeen met “error found”, maar wijst de deelreeks binnen “terror” af.

P

paginagewijze tekstviewer
Een paginagewijze tekstviewer is een programma dat tekst scherm voor scherm toont en op navigatietoetsen wacht, zodat je lange uitvoer in je eigen tempo kunt lezen.
Open een lange lijst met less /etc/services en druk daarna op de spatiebalk voor het volgende scherm of op q om af te sluiten.
PATH
PATH is de lijst met directory's waarin de shell naar externe uitvoerbare commando's zoekt. Een hulpmiddel zoals which gebruikt die lijst om een programmabestand op te zoeken.
which grep doorzoekt commandodirectory's in plaats van elke directory op de computer te doorzoeken.
pijplijn
Een pijplijn is een reeks commando's die door pipes zijn verbonden, waarbij elke stap gegevens ontvangt die door de direct voorgaande stap zijn geproduceerd.
In sort values.txt | uniq | wc -l telt de laatste stap de verschillende gegroepeerde waarden.
pipe
Een pipe verbindt de standaarduitvoer van het ene commando met de standaardinvoer van een ander commando en geeft gegevens door zonder opgeslagen tussenbestand.
In grep -i error app.log | wc -l stromen geselecteerde regels naar het commando dat ze telt.

R

recursief zoeken
Bij recursief zoeken worden een directory en de onderliggende directory's doorlopen; grep -r zoekt naar tekst in bestanden in die hele directoryboom.
grep -rl TODO notes toont namen van bestanden met overeenkomsten zonder alle overeenkomende tekst te tonen.
regelbereik
Een regelbereik is een aaneengesloten selectie van genummerde regels met een begin- en eindpositie, normaal gesproken inclusief beide grenzen.
Om regels 11–20 te tonen, behoud je met head de eerste 20 regels en daarna de laatste tien van die selectie.
reguliere expressie
Een reguliere expressie is een patroon dat overeenkomende tekst beschrijft met letterlijke tekens en operatoren voor posities, keuzes of herhalingen.
Het patroon ^web[0-9]$ beschrijft een volledige regel met “web” gevolgd door één cijfer.

S

scheidingsteken
Een scheidingsteken staat tussen velden, zoals een dubbele punt, komma of tab; met cut -d selecteer je het teken waarop elke regel wordt gesplitst.
Voor het record “Mia:ops:41” maakt een dubbele punt als scheidingsteken “ops” tot veld 2, ongeacht de woordlengte.
sorteersleutel
Een sorteersleutel is het veld of deel van een regel dat voor de vergelijking wordt gebruikt. Je selecteert die met sort -k en interpreteert die volgens het gekozen scheidingsteken.
De sleutel -k3,3nr vergelijkt in een rangschikking van scores alleen veld 3, numeriek en in omgekeerde volgorde.
standaardfoutuitvoer
Standaardfoutuitvoer is de gegevensstroom voor diagnostische meldingen met nummer 2. Die blijft gescheiden van normale resultaten, zodat fouten en statusmeldingen afzonderlijk kunnen worden omgeleid.
Als je een bestandslijst opslaat met >, kan een melding over een ontbrekend pad zichtbaar blijven op standaardfoutuitvoer.
standaardinvoer
Standaardinvoer is de inkomende gegevensstroom van een commando, met nummer 0, die de shell kan verbinden met het toetsenbord, een bestand of een pipe.
In sort < names.txt verbindt de shell het bestand met de standaardinvoer van het commando voordat het wordt uitgevoerd.
standaarduitvoer
Standaarduitvoer is de gegevensstroom met normale resultaten van een commando, met nummer 1, die naar de terminal, een uitvoerbestand of een ander commando kan gaan.
In wc -l < names.txt > count.txt gaat de regeltelling via standaarduitvoer naar het rapportbestand.

T

tail
tail is een filter dat het einde van de invoer toont of bij een genummerde regel begint als het regelaantal wordt voorafgegaan door een plusteken.
Gebruik tail -n +2 scores.csv om een kopregel van één regel weg te laten en alle resterende gegevensrecords te behouden.
tee
tee is een filter dat zijn invoer zowel naar een genoemd bestand als naar standaarduitvoer kopieert en zo een resultaat opslaat terwijl een pijplijn kan doorgaan.
Voeg tee selected.txt vóór een telstap in als je ook de geselecteerde regels wilt bekijken.
tekenklasse
Een tekenklasse is een benoemde groep, zoals cijfers, letters of witruimte, die binnen een expressie tussen vierkante haken wordt gebruikt en aan taalinstellingen is gekoppeld.
De volledige expressie [[:digit:]] selecteert een cijfer; beide paren vierkante haken zijn nodig.
tekst met vaste veldbreedte
Tekst met vaste veldbreedte plaatst informatie op vaste tekenposities op elke regel, zodat je posities kunt selecteren in plaats van op scheidingstekens te splitsen.
Een code van vijf tekens aan het begin van elke regel kun je selecteren met cut -c1-5, ook als de latere tekst varieert.
type
type is een ingebouwd commando van Bash dat beschrijft hoe een commandonaam wordt geïnterpreteerd, onder meer als alias, functie, ingebouwd commando of pad naar een uitvoerbaar bestand.
type echo kan een ingebouwd commando melden, ook als which echo naar een extern uitvoerbaar bestand wijst.

U

uitgebreide reguliere expressie
Een uitgebreide reguliere expressie geeft operatoren zoals ?, +, |, accolades en ronde haken hun speciale betekenis zonder backslashes.
Gebruik grep -E vóór een gegroepeerd patroon zoals ^(red|blue)$ om het alternatief in te schakelen.
uniq
uniq is een filter dat aangrenzende gelijke regels herkent en met opties herhaalde exemplaren verwijdert of geselecteerde reeksen en hun aantallen meldt.
Als je verspreide waarden sorteert vóór uniq -c, verschijnt de volledige frequentie van elke waarde als één aantal.
updatedb
updatedb bouwt de database voor het opzoeken van paden via een index opnieuw op, zodat de opgeslagen gegevens overeenkomen met de paden die tijdens de vernieuwing zijn opgenomen.
Een beheerder kan sudo updatedb uitvoeren als een onmiddellijke systeembrede vernieuwing passend is.

V

veld
Een veld is één deel van een record met scheidingstekens. cut nummert velden vanaf 1 en selecteert ze volgens het scheidingsteken in dat record.
In “Lena,Oslo,74” is veld 2 “Oslo” als voor de regel een komma als scheidingsteken is gekozen.
vervanging
Een vervanging vervangt overeenkomende tekst via de commandoregel van vi, waarbij een bereik de regels kiest en vlaggen de vervanging daarbinnen bepalen.
Het commando :%s/old/new/g vervangt elke overeenkomende “old” op elke regel van het bestand.
volgmodus
De volgmodus laat tail na de eerste uitvoer wachten op toegevoegde gegevens, zodat nieuwe tekst kan verschijnen terwijl een programma naar het bestand schrijft.
Voer tail -f app.log uit tijdens een controle van een applicatie en druk op Ctrl+C als je klaar bent met volgen.

W

wc
wc is een telcommando dat standaard nieuweregeltekens, woorden en bytes meldt, met opties om één maat te selecteren of tekens te tellen.
Vergelijk voor UTF-8-tekst zoals “café” wc -c met wc -m om onderscheid te maken tussen bytes en tekens.
wijzigingstijd
De wijzigingstijd legt vast wanneer de inhoud van een bestand voor het laatst is gewijzigd; -mtime van find test de verstreken tijd in voltooide perioden van 24 uur.
Een bestand dat 30,5 dagen geleden is gewijzigd, voldoet niet aan -mtime +30 omdat slechts 30 volledige perioden van een dag zijn verstreken.

Z

zoekdiepte
De zoekdiepte meet het aantal niveaus onder een beginpad; -maxdepth van find beperkt hoe diep het doorlopen van de boom in onderliggende directory's mag gaan.
Gebruik -maxdepth 1 om de begindirectory en de directe vermeldingen daarin te bekijken zonder dieper gelegen directory's in te gaan.
zoeken naar letterlijke tekst
Bij zoeken naar letterlijke tekst worden patroontekens als letterlijke tekst behandeld, zodat punten en sterren hun betekenis voor reguliere expressies verliezen wanneer grep -F gebruikt.
Gebruik grep -F "v2.4" releases.txt om de echte punt in het versielabel te vereisen.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag