- Leren
- Informatica & ICT
- IT, netwerken & cloud
- Linux: commandoregel, shellscripts, gebruikers en services
- Linux-pipes, omleiding en tekstverwerking
Werken met Linux-pipes, omleiding en tekstverwerking
BeginnerLes 3 van 7 in Cursus Linux: commandoregel, shellscripts, gebruikers en services
Wat je leert
- 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 lessToon 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 tailGebruik 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.
- Toon bestanden en blader erdoor met cat en less
- Leg de drie standaardstromen van een commando uit en leid invoer, uitvoer en foutmeldingen van en naar bestanden om.
- Begrijp standaardinvoer, standaarduitvoer en standaardfoutuitvoerBeschrijf 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 bestandenSla 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.
- Begrijp standaardinvoer, standaarduitvoer en standaardfoutuitvoer
- 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 teeGebruik 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 regelsTel 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 cutSelecteer met cut velden uit tekst met scheidingstekens en tekens op vaste posities, en gebruik het in pijplijnen om vragen over gegevens te beantwoorden.
- Verbind commando's met pipes en tee
- 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 optiesGebruik 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 expressiesBouw 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 -EGebruik de operatoren ?, +, { }, | en ( ) met grep -E om optionele, herhaalde en alternatieve tekst te vinden en toon alleen de overeenkomende delen.
- Doorzoek bestanden met grep en de belangrijkste opties
- Zoek bestanden overal in de directoryboom met find en locate en voer commando's uit op de gevonden bestanden.
- Doorzoek de directoryboom met findGebruik 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 zoekmethodenVoer commando's uit op elk bestand dat find vindt, verwijder overeenkomsten veilig en weet wanneer locate of which sneller is.
- Doorzoek de directoryboom met find
- 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 opOpen 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 viSchakel 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.
- Bewerk een bestand in nano en sla het op
Linux-pipes, omleiding en tekstverwerking: uitleg
1Bekijk 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:
| Toets | Actie |
|---|---|
Spatiebalk of f | Eén scherm vooruit |
b | Eén scherm terug |
Pijl omlaag, Enter of j | Eén regel omlaag |
Pijl omhoog of k | Eén regel omhoog |
g / G | Naar de eerste / laatste regel springen |
h / q | Hulp 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
cattoont bestanden in de opgegeven volgorde;-nnummert de gecombineerde uitvoer.- Met
lessblader je door tekst zonder die te bewerken;qkeert terug naar de shell. - In
lesszoekt/vooruit en?achteruit;nherhaalt de huidige zoekrichting. less -Ntoont regelnummers; metless -Skun 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:
| Commando | Betekenis |
|---|---|
tail -n 2 file | De laatste twee regels tonen |
tail -n +2 file | Vanaf 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
headentailtonen standaard 10 regels; met-nstel je een aantal regels in.tail -n +Kbegint 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 -fvolgt toegevoegde tekst; Ctrl+C stopt het volgen.tail -Fblijft een bestandsnaam volgen als het bestand wordt vervangen en-qonderdrukt kopregels bij meerdere bestanden.
2Bepaal 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:
| Nummer | Naam | Gebruikelijke verbinding met de terminal |
|---|---|---|
| 0 | Standaardinvoer, stdin | Invoer vanaf het toetsenbord |
| 1 | Standaarduitvoer, stdout | Normale resultaten op het scherm |
| 2 | Standaardfoutuitvoer, stderr | Fouten 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.
| Operator | Effect |
|---|---|
> out.txt | stdout schrijven en bestaande inhoud vervangen |
>> out.txt | stdout achteraan toevoegen |
2> err.txt | stderr schrijven en bestaande inhoud vervangen |
2>> err.txt | stderr 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>&1vangt beide stromen op omdat omleidingen van links naar rechts worden uitgevoerd.2>&1 > out.txtlaat stderr op de eerdere bestemming van stdout staan./dev/nullgooit de geselecteerde gegevensstroom weg, inclusief nuttige meldingen.- Leid uitvoer niet om naar een invoerbestand;
sort -obiedt een ondersteund alternatief. - Noclobber van Bash weigert gewone
>op bestaande gewone bestanden;>|doorbreekt die bescherming.
3Combineer 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.
teeslaat invoer op en geeft die door;tee -avoegt 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.
| Optie | Wat wordt geteld |
|---|---|
-l | Nieuweregeltekens |
-w | Woorden gescheiden door witruimte |
-c | Bytes |
-m | Tekens |
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 -ltelt nieuweregeltekens,-wwoorden,-cbytes en-mtekens.sort -nvergelijkt getallen;-rkeert de volgorde om;-hverwerkt achtervoegsels voor groottes.sort -t, -k3,3nrsorteert records met komma's als scheidingsteken numeriek op veld 3 in aflopende volgorde.- Verwijder een kopregel voordat je gegevensrecords sorteert.
uniqverwijdert aangrenzende herhalingen; sorteer eerst als gelijke waarden verspreid staan.uniq -ctelt reeksen,-dselecteert herhaalde waarden en-uselecteert waarden die één keer voorkomen.sort | uniq -c | sort -rngroepeert 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.
| Selectie | Getoonde velden |
|---|---|
-f1,3 | Velden 1 en 3 |
-f2-4 | Velden 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 -dstelt het scheidingsteken in en-fselecteert velden die vanaf 1 zijn genummerd.- Veldlijsten selecteren velden in hun oorspronkelijke volgorde;
-cselecteert vaste posities. - Het standaard scheidingsteken is een tab;
-slaat regels zonder scheidingsteken weg. - Herhaalde spaties maken lege velden en
cutverwerkt aanhalingstekens in CSV niet als zodanig. - Voor frequentietellingen verwijder je de kopregel, selecteer je de waarde, groepeer je gelijke regels en tel je ze.
4Doorzoek 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
| Optie | Resultaat |
|---|---|
-i | Zoeken zonder onderscheid tussen hoofdletters en kleine letters |
-v | Regels tonen die niet overeenkomen |
-c | Het aantal overeenkomende regels tonen |
-n | Overeenkomsten vooraf laten gaan door hun regelnummer |
-w | Een overeenkomst met een volledig woord vereisen |
-x | Een 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
greptoont overeenkomende regels en is hoofdlettergevoelig, tenzij je-igebruikt.- Zet het patroon tussen aanhalingstekens zodat de shell het ongewijzigd doorgeeft.
-ctelt overeenkomende regels;-nnummert ze;-vselecteert regels zonder overeenkomst.-wvereist een volledig woord en-xeen volledige regel.-rdoorzoekt een boom,-ltoont bestanden met overeenkomsten en-Lbestanden zonder overeenkomsten.-Fbehandelt een patroon als letterlijke tekst;-qrapporteert 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:
| Patroon | Wat het vereist |
|---|---|
^c | Een 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:
| Operator | Aantal 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 -Eschakelt?,+, 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.-otoont 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.
5Zoek 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
finddoorloopt de boom vanaf een beginpad en toont items die aan de tests voldoen.- Zet jokertekens voor namen tussen aanhalingstekens;
-nametest de hele naam en-pathhet volledige pad. - Gebruik
-type f,doflvoor gewone bestanden, directory's of symbolische koppelingen. - Grootte wordt vóór de vergelijking naar boven afgerond;
-size -1Mselecteert alleen lege bestanden. -mtime +30begint bij 31 voltooide dagen, terwijl-mminminuten gebruikt.- Tests naast elkaar betekenen EN,
-obetekent 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
findvoor bestandseigenschappen en grep voor inhoud, en combineer ze waar nodig. - Bekijk eerst welke items worden verwijderd en zet
-deletedaarna achter de beperkende tests. locatedoorzoekt een index die verouderd kan zijn.whichvindt uitvoerbare bestanden in PATH;typelegt uit hoe Bash een commando vindt.
6Bewerk 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”:
- Voer
nano app.confuit. - Druk op Ctrl+W, voer “8080” in en druk op Enter.
- Verwijder bij de overeenkomst de vier cijfers en typ “9090”.
- Druk op Ctrl+O en daarna op Enter om de bestandsnaam te bevestigen en op te slaan.
- 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
| Sneltoets | Actie |
|---|---|
| Ctrl+K | De hele huidige regel knippen |
| Ctrl+U | Geknipte tekst op de cursorpositie plakken |
| Alt+A | Een selectie beginnen te markeren |
| Alt+U / Alt+E | Ongedaan 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 enM-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
| Modus | Taak | Zo open je die |
|---|---|---|
| Normaal | Navigeren, verwijderen, kopiëren en commando's geven | Esc |
| Invoegen | Tekst in de buffer typen | i, a, o of een ander invoegcommando |
| Commandoregel | Commando'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,oen hun hoofdlettervormen bepalen waar het invoegen begint.ddknipt een regel,yykopieert die enpplakt tekst met hele regels eronder of tekst met tekens na de cursor.umaakt ongedaan en.herhaalt de laatste wijziging./textzoekt vooruit;nherhaalt enNkeert de zoekrichting om.:wqslaat op en sluit af;:q!gooit niet-opgeslagen wijzigingen weg en sluit af.
Linux-pipes, omleiding en tekstverwerking: voorbeelden
1Lees een bestand zonder je plek kwijt te raken
10 stappen
- 1IntroductieKies 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
catte leren en stap daarna over oplessvoor een bestand dat te lang is om op het scherm te houden. Gebruik ten slotteheadentailals je weet welk deel je nodig hebt. Deze commando's lezen tekst zonder het opgeslagen bestand te bewerken. - 2VoorbeeldVoeg twee korte notities samen
a.txtbevat “a” en “b” op afzonderlijke regels.b.txtbevat “c d”. Voercat -n a.txt b.txtuit.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.txtuit om de oorspronkelijke samengevoegde tekst zonder nummering op te slaan. - 3UitlegOpen een leesweergave
Voer
less /etc/servicesuit 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,
bgaat terug en met de pijltoetsen navigeer je door regels.gspringt naar de eerste regel;Gnaar de laatste. Druk opqom de weergave te sluiten en terug te keren naar de shell. Het is normaal dat de shellprompt ontbreekt zolang de tekstviewer openstaat. - 4VoorbeeldZoek en ga verder
Typ in
less/sshen druk op Enter om vooruit te zoeken naar “ssh”. Druk opnvoor de volgende overeenkomst in die richting of opNom de andere kant op te gaan.Een achterwaartse zoekopdracht begint met
?ssh. Na die zoekopdracht gaatnverder achteruit. De richting wordt bepaald door de zoekopdracht die je bent gestart.less -N filevoegt regelnummers toe als je de locatie van een overeenkomst wilt noteren. - 5UitdagingZoek 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
Nom tegen de voorwaartse zoekrichting in te gaan en daarna opqom af te sluiten. De kleine letternzou 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. - 6UitlegKies een aantal of een beginregel
head -n 4 filetoont de eerste vier regels.tail -n 4 filetoont de laatste vier. Zonder-ntonen beide standaard tien regels.Een plusteken verandert de werking van tail:
tail -n +4 filebegint bij regel 4 en toont alles vanaf die regel. Voor een bestand met één kopregel verwijderttail -n +2 filedie kopregel. Het behoudt alle gegevensrecords, niet alleen de laatste twee. - 7VoorbeeldSelecteer 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 10toe. 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. - 8UitdagingKies 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. - 9UitdagingBekijk 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.logen druk op Ctrl+C als je klaar bent. Gewoontailzou het huidige einde tonen en afsluiten.tail -Fis nuttig als het programma het bestand tijdens rotatie vervangt, omdat het de bestandsnaam blijft volgen wanneer het bestand wordt vervangen. - 10SamenvattingGebruik de weergave die bij de taak past
Gebruik
catvoor een volledig kort bestand en openlessom te navigeren en zoeken. Een paginagewijze tekstviewer blijft open totdat je die afsluit.Gebruik
headentailvoor 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 mettail -fen stop met Ctrl+C. De selectie die je maakt werkt ook als de tekst via een pipe binnenkomt.
2Volg invoer, resultaten en fouten
11 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieTeken drie afzonderlijke routes
- 2UitlegBenoem de standaardstromen
- 3VoorbeeldGeef dezelfde gegevens via een andere route door
- 4UitdagingRond invoer via het toetsenbord af
- 5VoorbeeldGeef meerdere regels op onder een commando
- 6UitlegKies vervangen of toevoegen
- 7VoorbeeldCombineer resultaten en diagnostische meldingen
- 8UitdagingKeer de verbindingen om
- 9TipHoud de invoer intact
- 10UitdagingTel invoer en scheid een diagnostische melding
- 11SamenvattingVolg de instellingen van de shell
3Bouw een bruikbaar tekstrapport
14 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieGeef elke stap één taak
- 2UitlegVerbind de twee commando's
- 3UitdagingKies een pipe of een bestand
- 4UitlegWeet wat de teller meet
- 5VoorbeeldHoud sorteren en tellen uit elkaar
- 6UitdagingVerklaar een dubbele regel die blijft staan
- 7UitlegSelecteer de kolom die je nodig hebt
- 8VoorbeeldVerwijder het label en bekijk de waarden
- 9UitdagingControleer een aanname over scheidingstekens
- 10VoorbeeldGroepeer de geselecteerde waarden
- 11VoorbeeldRangschik de aantallen
- 12VerbandBewaar gegevens van vóór de uiteindelijke telling
- 13UitdagingZoek de oorzaak van een extra categorie
- 14SamenvattingControleer wat tussen stappen wordt doorgegeven
4Bouw patronen die overeenkomen met de bedoelde tekst
15 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieBepaal wat als overeenkomst telt
- 2UitlegKies een zoekresultaat
- 3VoorbeeldMaak onderscheid tussen een woord en een regel
- 4UitdagingZoek een exact versielabel
- 5TipDoorzoek een directory of stel een stille vraag
- 6UitlegPlaats een overeenkomst binnen de regel
- 7VoorbeeldSelecteer één teken uit een verzameling
- 8KernpuntSta nul herhalingen toe
- 9UitdagingZoek een letterlijk bestandseinde
- 10UitlegSchakel uitgebreide operatoren in
- 11VoorbeeldControleer een volledige code
- 12VoorbeeldGroepeer een keuze of een herhaald onderdeel
- 13UitdagingHaal delen uit tekst en bekijk de beperkingen
- 14UitdagingBehoud alleen actieve instellingen
- 15SamenvattingControleer het patroon en het resultaat afzonderlijk
5Selecteer bestanden voordat je er bewerkingen op uitvoert
12 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieHoud namen en inhoud uit elkaar
- 2UitlegKies de begindirectory
- 3VoorbeeldCombineer type met naam
- 4UitdagingBehoud het jokerteken voor find
- 5UitlegVergelijk afgeronde grootte-eenheden
- 6UitdagingLees de grens in dagen
- 7UitlegGeef paden door als argumenten
- 8VoorbeeldDoorzoek alleen geselecteerde inhoud
- 9TipZet een vernietigende actie na de tests
- 10UitlegKies een index of zoek een commando op
- 11UitdagingKies een actuele inhoudscontrole
- 12SamenvattingStem de zoekopdracht af op wat je wilt weten
6Maak een kleine wijziging in de terminal en sla die op
13 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieMaak onderscheid tussen werktekst en opgeslagen tekst
- 2UitlegLees de bediening van nano
- 3VoorbeeldZoek en vervang één waarde
- 4UitdagingVerplaats een regel en herstel een fout
- 5TipBeantwoord de vraag bij het afsluiten
- 6UitlegOpen de invoegmodus van vi
- 7VoorbeeldGa naar de tekst die je nodig hebt
- 8VoorbeeldWijzig de instelling in vi
- 9UitdagingPlak het soort tekst dat je hebt gekopieerd
- 10TipGebruik kleine bewerkingen en maak ze ongedaan
- 11UitdagingKies of de wijziging in vi behouden blijft
- 12UitdagingVergelijk twee niet-afgeronde bewerkingen
- 13SamenvattingSluit af door bewust op te slaan of weg te gooien
Linux-pipes, omleiding en tekstverwerking: oefenvragen
Set 1: Kies commando's en interpreteer overeenkomsten10 Oefenvragen
Vraag 1 van 10
n nadat je in less met ?queue achteruit hebt gezocht?Toon antwoordVerberg antwoord
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?Toon antwoordVerberg antwoord
< 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
command 2>&1 > result.txt?Toon antwoordVerberg antwoord
> 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?Toon antwoordVerberg antwoord
Vraag 5 van 10
build.txt op de letterlijke tekst “v3.8”, inclusief de echte punt?Toon antwoordVerberg antwoord
-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
grep '^d.g$' file?Toon antwoordVerberg antwoord
Vraag 7 van 10
grep '^ba*t$' file uit “bt”, “bat”, “baat” en “boat”?Toon antwoordVerberg antwoord
Vraag 8 van 10
.txt-bestanden die “REVIEW” bevatten. Welk commando past alle drie de beperkingen toe?Toon antwoordVerberg antwoord
-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
Toon antwoordVerberg antwoord
Vraag 10 van 10
yy en drukt op p. Waar verschijnt de gekopieerde regel?Toon antwoordVerberg antwoord
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
less. Met welke enkele toets keer je terug naar de shell?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
tail -n +3 records.txt?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
> report.txt, maar de diagnostische meldingen blijven zichtbaar. Welke gegevensstroom voert die meldingen af?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
command | wc -l?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
sort -n op?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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
grep -ic 'fail' file?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
docs/a.txt, een directory docs/b.txt en een gewoon bestand docs/c.TXT. Wat selecteert find docs -type f -name '*.txt'?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
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
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
echo done > state.txt zijn uitvoer schrijft?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?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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
cut -d: -f3,1 uit de regel “Nia:ops:42”?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
grep -E '^(go)+$' file?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
grep -Eo '[0-9]{1,2}' voor die regel?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
-size -1M van GNU find?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
locate plan.txt een pad tonen dat vanochtend is verwijderd?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
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
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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
sort aan het begin van een lege regel het einde van de invoer aan?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
command 2>&1 | tee combined.txt | wc -l op?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
cut -d' ' -f2?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
grep -icw 'alert' file?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
find . -type f -name '*.cfg' -mtime +30?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
I vanuit de normale modus met invoegen?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
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
log.txt als err.txt bevat al oudere tekst. Wat gebeurt er met command >> log.txt 2> err.txt?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?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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
grep '^r[^ae]d$' file?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
grep -Ev '^[[:space:]]*(#|$)' file?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
echo?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
x één teken. Daarna druk je op p. Waar wordt dat teken ingevoegd?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
work staan, zonder bestanden uit dieper gelegen directory's. Welke zoekopdracht doet dat?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Kom je niet uit je eigen opgave? Huiswerkhulp
Kernbegrippen
A
aaneenschakeling
cat.cat first.txt second.txt > combined.txt komt de tekst uit het eerste bestand vóór de tekst uit het tweede.achteraan toevoegen
>>.>> report.txt verzamelen hun resultaten in één bestand in plaats van het te vervangen.afkappen
>, voordat het commando invoer begint te lezen.sort names.txt > names.txt verliest de oorspronkelijke gegevens omdat het afkappen eerst gebeurt.afschermen met een backslash
\.txt$ vereist een letterlijk einde “.txt”, terwijl .txt$ een ander teken vóór “txt” toestaat.afsluitstatus
grep -q gebruikt de status om een resultaat te melden zonder overeenkomende regels te tonen.alternatie
|, vaak met ronde haken om de reikwijdte van de keuze te beperken.^(east|west)$ moeten beide alternatieven de hele regel vullen omdat ze de ankers delen.anker
^ voor het begin of $ voor het einde van een regel bij gewone zoekopdrachten met grep.d.g toevoegt, sluit je een langere regel zoals “undog” uit, ook al bevat die “dog”.B
bestandsdescriptor
2 in 2> errors.txt selecteert de foutstroom en moet direct tegen de omleidingsoperator aan staan.bestandstypetest
f voor een gewoon bestand, d voor een directory of l voor een koppeling.-type f toe te voegen voorkom je dat een directory met de naam “old.txt” voldoet aan een zoekopdracht naar tekstbestanden.buffer
C
cat
cat is een commando dat de inhoud van een of meer bestanden naar standaarduitvoer schrijft, in de volgorde van de bestandsargumenten.cat -n a.txt b.txt uitvoert, wordt de gecombineerde uitvoer genummerd zonder een van beide invoerbestanden te bewerken.commandoregelmodus
: hebt getypt en voert het uit wanneer je op Enter drukt.: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.cut -d: -f1,6 /etc/passwd koppelt elke accountnaam aan het veld met de homedirectory.D
doorlopen van de directoryboom
| sort toe aan een eenvoudige zoekopdracht naar paden als de volgorde van de getoonde resultaten voorspelbaar moet zijn.duplicatie van bestandsdescriptoren
2>&1 doet voor stderr en stdout.command > all.txt 2>&1 krijgt stderr de bestandsverbinding die stdout al heeft.E
expressie tussen vierkante haken
b[ae]t komt overeen met “bat” of “bet”, terwijl b[^a]t “a” uitsluit op de middelste positie.extractie van overeenkomende tekst
-o van grep voor elke niet-lege overeenkomst doet.grep -Eo '[0-9]+' de twee getallen op afzonderlijke regels.F
filter
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.-exec wc -l {} + geeft groepen overeenkomende paden door aan een commando dat hun regels telt.frequentietelling
sort en reeksen te tellen met uniq -c.sort -rn toe na uniq -c om de grootste aantallen bovenaan te zetten als je veelvoorkomende vermeldingen bekijkt.G
gemarkeerde selectie
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.grep -n WARN app.log om overeenkomende regels samen met hun posities in het bestand te tonen.groep
(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.head -n 4 notes.txt voordat je beslist of je het hele bestand nodig hebt.here-document
cat <<EOF zijn de regels vóór de afsluitende EOF gegevens, terwijl die laatste regel een markering is.here-string
wc -w <<< "red blue green" ontvangt drie woorden zonder dat een afzonderlijk invoerbestand nodig is.I
invoegmodus
i, a of o en verlaat die met Esc.cw de rest van een woord heeft verwijderd, typ je de vervanging in de invoegmodus en druk je daarna op Esc.K
kopiëren
yy voor een hele regel doet zonder die regel uit de buffer te verwijderen.yy gevolgd door p om een regel onder de oorspronkelijke positie in het bestand te dupliceren.kwantor
? voor optionele tekst of {4} voor precies vier herhalingen.[0-9]{4} vereist vier cijfers; ankers kunnen zorgen dat dit de volledige inhoud van de regel is.L
leeg veld
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.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.M
metateken
* tegen de shell, maar grep interpreteert het nog steeds als operator in een reguliere expressie wanneer het dit ontvangt.modale teksteditor
N
naamtest
-name van find is hoofdlettergevoelig, terwijl -iname hoofdletterverschillen negeert.-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.nano +12 app.conf als een programma meldt dat een instelling op regel 12 aandacht nodig heeft.nieuweregelteken
wc -l telt deze markeringen, zodat een onafgemaakte laatste regel niet bijdraagt aan het gemelde totaal.noclobber
> naar bestaande gewone bestanden blokkeert en zo onbedoeld vervangen helpt voorkomen.set -o noclobber alleen >| als je de bescherming van bestaande bestanden bewust wilt doorbreken.normale modus
dd om de huidige regel te knippen zonder die twee letters per ongeluk te typen.nulapparaat
/dev/null, is een speciaal bestand dat geschreven gegevens weggooit, zodat een gekozen uitvoerstroom bewust kan worden verborgen.2>/dev/null toevoegt, verberg je diagnostische meldingen van een bestandszoekopdracht, waaronder meldingen over onleesbare directory's.numeriek sorteren
sort -n om “9” vóór “100” te zetten als de regels hoeveelheden voorstellen in plaats van labels.O
omleiding
sort < names.txt > ordered.txt levert de shell het ene bestand als invoer en opent een ander voor uitvoer.opslaan
overeenkomst met een volledig woord
grep -w error file komt overeen met “error found”, maar wijst de deelreeks binnen “terror” af.P
paginagewijze tekstviewer
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
sort values.txt | uniq | wc -l telt de laatste stap de verschillende gegroepeerde waarden.pipe
grep -i error app.log | wc -l stromen geselecteerde regels naar het commando dat ze telt.R
recursief zoeken
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
head de eerste 20 regels en daarna de laatste tien van die selectie.reguliere expressie
^web[0-9]$ beschrijft een volledige regel met “web” gevolgd door één cijfer.S
scheidingsteken
cut -d selecteer je het teken waarop elke regel wordt gesplitst.sorteersleutel
sort -k en interpreteert die volgens het gekozen scheidingsteken.-k3,3nr vergelijkt in een rangschikking van scores alleen veld 3, numeriek en in omgekeerde volgorde.standaardfoutuitvoer
>, kan een melding over een ontbrekend pad zichtbaar blijven op standaardfoutuitvoer.standaardinvoer
sort < names.txt verbindt de shell het bestand met de standaardinvoer van het commando voordat het wordt uitgevoerd.standaarduitvoer
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.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.tee selected.txt vóór een telstap in als je ook de geselecteerde regels wilt bekijken.tekenklasse
[[:digit:]] selecteert een cijfer; beide paren vierkante haken zijn nodig.tekst met vaste veldbreedte
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
?, +, |, accolades en ronde haken hun speciale betekenis zonder backslashes.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.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.sudo updatedb uitvoeren als een onmiddellijke systeembrede vernieuwing passend is.V
veld
cut nummert velden vanaf 1 en selecteert ze volgens het scheidingsteken in dat record.vervanging
:%s/old/new/g vervangt elke overeenkomende “old” op elke regel van het bestand.volgmodus
tail na de eerste uitvoer wachten op toegevoegde gegevens, zodat nieuwe tekst kan verschijnen terwijl een programma naar het bestand schrijft.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.wc -c met wc -m om onderscheid te maken tussen bytes en tekens.wijzigingstijd
-mtime van find test de verstreken tijd in voltooide perioden van 24 uur.-mtime +30 omdat slechts 30 volledige perioden van een dag zijn verstreken.Z
zoekdiepte
-maxdepth van find beperkt hoe diep het doorlopen van de boom in onderliggende directory's mag gaan.-maxdepth 1 om de begindirectory en de directe vermeldingen daarin te bekijken zonder dieper gelegen directory's in te gaan.zoeken naar letterlijke tekst
-F gebruikt.grep -F "v2.4" releases.txt om de echte punt in het versielabel te vereisen.- 1Linux en opensource
- 2Linux-commandoregel
- 3Linux-pipes, omleiding en tekstverwerking
- 4Shellscripts
- 5Linux-gebruikers en toegangsrechten
- 6Linux-processen, pakketten en services
- 7Opslag en netwerken in Linux
Over deze les
Door StudeliFout melden
Maak je eigen Studiemateriaal
Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.