Als je gebruik maakt van andere bronnen (bv. blog-artikel of HOWTO die je op het Internet vond), voeg die dan toe aan het einde van dit document. Zo kan je het later terug vinden.
Maak ter voorbereiding zeker de oefeningen in Linux Fundamentals van Paul Cobbaut over dit onderwerp (pp. 114-134).
Bekijk ook eens de presentatie over Vim en tmux gegeven in 2015 bij Openminds (een Gents webhostingbedrijf).
Gebruik de Vi-editor om een bestand aan te maken met de naam landen
. De inhoud is de volgende (incl. de cijfers):
1 België
2 Frankrijk
3 Zwitserland
4 Duitsland
5 Nederland
Maak ook een bestand aan met de naam autokentekens
met deze inhoud:
1 B
2 F
3 CH
4 D
5 NL
-
Hoe start je Vi op om deze bestanden aan te maken?
$ COMMANDO vi landen UITVOER
-
Hoe ga je van normal mode naar insert mode? Geef verschillende manieren:
Invoegen vanaf Commando op de huidige cursorpositie i
rechts van de cursor a
begin van huidige regel I
einde van huidige regel A
regel toevoegen onder deze o
regel toevoegen op huidige lijn O
-
Hoe kopieer je vanuit normal mode?
Te kopiëren Commando Huidige regel yy
Huidige regel en die eronder 2yy
Het huidige woord yw
Het huidige en de twee volgende woorden 2yw
Van de cursor tot het einde van de regel y$
ofY
Tot het einde van de zin y)
Tot het einde van de paragraaf y}
Alle tekst tussen haakjes (...)
yi(
-
Hoe knip je tekst vanuit normal mode?
Te knippen Commando Huidige regel dd
Huidige regel en die eronder 2dd
Het huidige woord dw
Het huidige en de twee volgende woorden 2dw
Het letterteken op de positie van de cursor x
Van de cursor tot het einde van de regel d$
ofD
Tot het einde van de zin d)
Tot het einde van de paragraaf d}
Alle tekst tussen haakjes (...)
di(
-
Hoe kan je gekopieerde/geknipte tekst plakken?
Tekst plakken Commando Rechts/onder de cursur gp
Op de cursur gP
De bedoeling van voorgaande oefening is om een idee te geven van hoe veelzijdig Vi is. Er zijn veel commando's, maar er zit een duidelijke logica in. Een voorbeeld is ci{
: dit staat voor Change inside braces. Vim zal links en rechts van de cursor zoeken naar accolades, alle tekst ertussen verwijderen en naar insert mode gaan. Je kan in het commando de {
vervangen door een ander teken zoals bv. (
, "
, '
, [
, <
.
Eens je meer commando's leert kennen kan je zo heel productief zijn in Vim. En dan hebben we het nog niet eens gehad over de vele mogelijke instellingen en plugins. Het uitlijnen van de vertikale lijnen in de tabellen hierboven werd bijvoorbeeld gedaan met een Vim plugin, vimwiki.
In onderstaande vragen is het telkens de bedoeling één commando te geven om de taak uit te voeren. Probeer altijd eerst om de uitvoer op de console te tonen voordat je wegschrijft naar het gevraagde bestand. Zo zie je sneller eventuele fouten.
-
Voeg het bestand
landen
enautokentekens
samen met het commandojoin
(zoek de werking ervan op met het man-commando). Het resultaat wordt opgeslagen in het bestandlandenkentekens
.$ COMMANDO join landen autokentekens > landenkentekens UITVOER
-
Bekijk de inhoud van
landenkentekens
en controleer of het overeenkomt met de uitvoer hieronder.$ COMMANDO cat landenkentekens | cut -d ' ' -f2,3 1 België B 2 Frankrijk F 3 Zwitserland CH 4 Duitsland D 5 Nederland NL
-
Haal uit
landenkentekens
alleen kolom 2 en kolom 3 eruit en sla dit resultaat op alslandenkentekens2
.$ COMMANDO cat landenkentekens | cut -d ' ' -f2,3 UITVOER België B Frankrijk F Zwitserland CH Duitsland D Nederland NL
-
Controleer of de inhoud van
landenkentekens2
overeenkomt met de uitvoer hieronder.$ COMMANDO cat landenkentekens België B Frankrijk F Zwitserland CH Duitsland D Nederland NL
-
Voeg vanop de command-line Italië en Spanje toe aan het einde van
landenkentekens2
met hun respectievelijke kentekens. Je mag hier voor elk land een apart commando gebruiken.$ COMMANDO echo -e "6 Italië I\n7 Spanje S" >> landenkentekens UITVOER
-
Sorteer
landenkentekens2
alfabetisch op de autokentekens. Sla het bekomen resultaat op ingesorteerdeautokentekens
. Controleer het resultaat.$ COMMANDO UITVOER $ COMMANDO België B Zwitserland CH Duitsland D Spanje E Frankrijk F Italië I Nederland NL
Sommige van onderstaande oefeningen maken gebruik van specifieke tekstbestanden die je in de subdirectory labo3
kan vinden. Het antwoord is telkens één enkele opdrachtregel, maar meestal moet je wel een aantal commando's combineren. In principe kan je alle oefeningen oplossen met de commando's die je in de studiewijzer opgesomd werden.
-
Bekijk de uitvoer van het commando
ip a
(opvragen van de IP-adressen van deze host). Filter de IPv4 (niet IPv6) adressen er uit:$ COMMANDO ip a | grep -Po "(\d{1,3}\.){3}\d{1,3}/\d+" of $ COMMANDO ip a | grep "inet " | sed "s/ */ /g" | cut -d " " -f3 UITVOER 127.0.0.1/8 10.0.2.15/24 192.168.56.101/24
Deze oefeningen gebeuren met lorem.txt
-
Tel het aantal regels, wooren en tekens in
lorem.txt
$ COMMANDO wc lorem.txt UITVOER 45 404 2738 lorem.txt
-
Herformatteer
lorem.txt
zodat elke tekstregel max. 50 lettertekens bevat en nummer daarna elke (niet-lege) regel. Het resultaat wordt weggeschreven in een nieuw bestand,nlorem.txt
.$ COMMANDO cat lorem.txt | sed -r "s/.{,50}[ *\.,]+/&\n/" UITVOER Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse eget auctor massa, vitae placerat nisl. Nunc mi ligula, ultricies sed euismod nec, porttitor ac tortor. Donec congue lorem vel risus ullamcorper euismod. Nam interdum eu arcu a bibendum. Nunc vel risus dolor. Quisque magna libero, ornare eu luctus sed, auctor et erat. Donec vitae tincidunt [...]
-
Druk een lijst af van alle individuele woorden in
lorem.txt
(negeer hoofdletters), samen met het aantal keer dat elk woord voorkomt. De lijst is omgekeerd gesorteerd op aantal voorkomens, en dan alfabetisch geordend. Werk stap voor stap:- Maak eerst een lijst van woorden, m.a.w. druk
lorem.txt
af met elk woord op een aparte regel - Verwijder overblijvende leestekens (
,
en.
) en lege regels - Sorteer de woorden (niet hoofdlettergevoelig)
- Maak een lijst met voor elk woord het aantal keer dat het voorkomt
- Sorteer op het aantal voorkomens en behoud de alfabetische sortering van de woorden
$ COMMANDO cat lorem.txt | tr -s " .," "\n" | sort | uniq -ci | sort -k1nr | awk '{ printf "%2d %s\n",$1,$2}' 11 sed 10 et 8 quis 7 eget 7 mi 6 in 6 nec 6 nunc 6 tortor 5 ac 5 accumsan [...]
- Maak eerst een lijst van woorden, m.a.w. druk
Vele tekstbestanden zijn gestructureerd als tabellen, bv. CSV (comma-separated values). Op een Linux-systeem zijn verschillende configuratiebestanden ook op zo'n manier opgedeeld, maar dan vaak met een :
als scheidingsteken. In de volgende oefeningen werken we met het bestand passwd
, dat zich ook in de labo3
-directory bevindt.
-
Schrijf in
users.txt
een gesorteerde lijst weg van gebruikers met een UID strikt groter dan 1000 (tip: gebruik hiervoorawk
).$ COMMANDO sort passwd | awk 'BEGIN { FS=":" } $3 > 1000 { print $1 }' > users.txt $ cat users.txt roberts ryu sparrow student teach yoshiro
-
Tel het aantal gebruikers in
users.txt
$ COMMANDO wc -l users.txt UITVOER 6 users.txt
-
Genereer voor elke gebruiker in
users.txt
een nieuw wachtwoord m.h.v. het commandoapg -n AANTAL
en schrijf deze weg innewpass.txt
. Het aantal gebruikers inusers.txt
wordt berekend in de opdrachtregel. Tip: gebruik "command substitution," notatie$(commando)
. Dit zal het gegeven commando uitvoeren en de uitdrukking$(...)
vervangen door de uitvoer (stdout) ervan.$ COMMANDO apg -n $(cat users.txt | wc -l) > newpass.txt
-
Maak een tekstbestand
newusers.txt
met daarin de lijst van gebruikers uitusers.txt
en hun overeenkomstige wachtwoord uitnewpass.txt
, gescheiden door een TAB, vb:$ COMMANDO paste users.txt newpass.txt > newusers.txt $ cat newusers.txt roberts hewpopIrb6 ryu vicNimEp sparrow whowlash4 student Evcorfoi teach cymgardye yoshiro sirgElkont
-
Converteer
newusers.txt
naar een CSV-bestandnewusers.csv
waar de inhoud van elke kolom omgeven is door dubbele aanhalingstekens en gescheiden door een kommapunt.$ COMMANDO sed -r 's/(.*)\t(.*)/"\1";"\2"/g' newusers.txt > newusers.csv $ cat newusers.csv "roberts";"hewpopIrb6" "ryu";"vicNimEp" "sparrow";"whowlash4" "student";"Evcorfoi" "teach";"cymgardye" "yoshiro";"sirgElkont"
-
Druk een lijst af van de gebruikers in
passwd
die Bash als shell hebben, samen met hun UID en home-directory. greep bash Sorteer op UID.$ COMMANDO grep bash passwd | cut -d ":" -f1,3,6 root:0:/root vagrant:1000:/home/vagrant student:1001:/home/student ryu:1002:/home/ryu yoshiro:1003:/home/yoshiro sparrow:1004:/home/sparrow teach:1005:/home/teach roberts:1006:/home/roberts
Vul hier aan welke interessante informatiebronnen je tegengekomen bent.
https://www.gnu.org/software/gawk/manual/html_node/Using-BEGIN_002fEND.html https://stackoverflow.com/questions/2609552/how-to-use-as-awk-field-separator http://www.pement.org/awk/awk1line.txt https://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/ https://unix.stackexchange.com/questions/52762/trying-to-sort-on-two-fields-second-then-first http://vim.wikia.com/wiki/Copy,_cut_and_paste http://vim.wikia.com/wiki/Selecting_blocks_of_paragraphs http://bencrowder.net/files/vim-fu/