Shell commando:
Shell commando: tijdens het geven van een commando in de shell, splitst de shell een child proces af. In dit proces wordt het gevraagde commando uitgevoerd terwijl het oorspronkelijke shell-proces staat te wachten op een seintje dat het child-proces beeindigd is. Er volgt dan weer een nieuwe prompt.
Tekst versturen via de commandline:
Mail sturen kan met het commando mail. Dit moet natuurlijk wel mogelijk zijn, qua internetverbinding en firewall.
Dit altijd afsluiten met [EOF] of de toestcombinatie [cntr D].
Met het commado [write] kan ik naar anderen die op dezelfde server zijn ingelogd een bericht sturen:
– [write collega1] of [write collega1 pts/0]
– [tekst tekst tekst]
– op een volgende nieuwe regel: [EOF]
Vervolgens krijgt deze collega deze tekst op zijn prompt.
Als je geen berichten wilt ontvangen op deze manier, dan doe je dat met
[mesg n] Daarmee zet je mesg op nee.
Met [who -T] kan je zien welke gebruikers geen bericht willen ontvangen.
Dit geldt niet als er vanuit root berichten worden gestuurd, root mag altijd een bericht sturen.
Met [wall] (write all) kan je iedereen die ingelogd is, een bericht sturen.
Wordcount
[wc -l] aantal regels
[wc -w] aantal woorden
[wc -c] aantal bytes
[wc -m] aantal tekens
[wc -L] lengte langste regel
Copy bestand
[cp bronbestand doelbestand]
Hernoemen bestand
[mv oudenaam nieuwenaam]
Verwijderen
[rm bestand]
Creeeren bestand
[touch bestand]
Filenaam expansie
* = alles
? = een willekeurig teken
???? = vier willekeurige tekens
Oorspronkelijk commando
|
Na filenaamexpansie door shell
|
cat * | cat bv1 vb1 vb2 voorbeeld |
cat *e* | cat voorbeeld |
cat ??? | cat bv1 vb1 vb2 |
cat vb[123] | cat vb1 vb2 -> vb3 is er niet, dus matcht niet |
cat nb* | cat nb* -> geen match, dus letterlijk doorgegeven |
Woorden sorteren en indelen:
[sort -r]
[uniq] = alle unieke woorden
[uniq bestand | more] = makkelijker te bekijken
[uniq -c bestand | more] = het tellen hoe vaak het woord voor komt.
[pr bestand] = print bestand
[pr -4 -a bestand] = print de lijst in vier kolommen over het scherm
Combinatie tellen files en directories in huidige dir:
[ ls | wc -l]
Tellen hoeveel regels het woord Linux bevatten:
[ $ cd /usr/atcomp/cursus/ul1/opdr/filter.oef
(daar staan de files)
$ cat * | grep 'Linux' | wc −l]
Tellen hoeveel files en dir er voorkomen in dirboom:
[ $ du −a /usr/atcomp/cursus/ul1/opdr/boom | wc −l]
Hoeveel login:
[ who | wl]
Alleen login, zonder dubbel:
[who | swl | sort | uniq
Bytes tellen:
[ ls -al | w5 | tel]
Woorden tellen:
[cat videmo | spiltw | sort | uniq ic]
Tekens tellen:
[cat videmo | splitc | sort | uniq -c]
Reguliere expressies
Zoek naar alle regels die als eerste teken geen kleine letter, geen cijfer, geen hoofdletter I en geen hoofdletter J bevatten:
[$ grep ‘^[^a-z0-9IJ]’ school.txt]
Geachte Heer de Vries,
Hoogachtend, Jantjes vader, Piet Bel.
Zoek naar alle regels die een n, gevolgd door nul of meer a’s of b’s (of een mix daarvan), gevolgd door ‘elen’ bevatten:
[$ grep ‘n[ab]*elen’ school2.txt]
Bij herhaling moeten we maar eens nababbelen!
Zoek naar regels die een getal bevatten (een getal bestaat uit minstens één cijfer gevolgd door nul of meer cijfers):
[$ grep ‘[0-9][0-9]*’ school2.txt]
Dit is nu al de 173ste keer
Zoek naar regels die een bepaald patroon bevatten (hier een ‘J’) en ergens verderop in diezelfde regel een ander patroon (hier een ‘a’). Tussen het eerste patroon en het tweede patroon verwachten we dan een reeks van nul(!) of meer willeurige tekens:
[$ grep ‘J.*a’ school.txt]
Jantje
Ik las dat Jantje
Jantje voortaan op tijd op school komt,
Hoogachtend, Jantjes vader, Piet Bel.
Bij de derde en vierde regel van de uitvoer in dit voorbeeld zien we dat de match loopt van de eerste J in de regel tot en met de laatste a in die regel.
Soms kan een bepaald patroon op verschillende manieren worden gematcht op een regel. Stel bijvoorbeeld dat we het patroon e.*s
willen toepassen op de volgende regel:
Er was eens een kasteel met twaalf torens.
We zoeken dus naar een e, gevolgd door nul of meer willekeurige tekens, en vervolgens een s. Dit patroon past echter op vele manieren op deze regel:
Er was eens een kasteel met twaalf torens.
Er was eens een kasteel met twaalf torens.
Er was eens een kasteel met twaalf torens.
Hier geldt dan de first en longest match, dus de eerste of de langste match.
Vi substitue:
Er was eens een kasteel met twaalf torens > Er was niets
‘s/e.*s/niets/’
Met reguliere expressies kunnen we zoeken naar bepaalde stukken tekst. Een patroon kan wel of niet ‘matchen’ met een tekst. Er zijn meerdere soorten reguliere expressies, zoals basic en extended.
Met het grep
commando kunnen we regels zoeken die met een bepaalde expressie matchen. Voor extended expressies moeten we het commando egrep
gebruiken, dat nog meer bijzondere symbolen herkent.
Het maakt voor een reguliere expressie niet uit of er nog tekst vóór of na de match staat, tenzij middels ^
respectievelijk $
het begin of einde van de regel wordt aangegeven.
Er kunnen nog vele andere elementen worden gebruikt. Op de punt (.
) past iedere willekeurige letter. Een tekenlijst ([...]
) matcht met de opgegeven tekens. Een asterisk (*
) duidt aan dat het direct voorafgaande teken of symbool nul of meer keren voor mag komen.
Bij reguliere expressies wordt altijd het first match, en vervolgens het longest match principe gebruikt.
Filenaamexpansie lijkt elementen van reguliere expressies te bevatten. De werking is echter anders.
De editor vi
is een full-screen editor, die standaard gebruikt wordt in UNIX omgevingen. Er zijn twee modes: command mode en input mode. In input mode kunnen we direct tekst invoeren of wijzigen. Om in input mode te komen, gebruiken we bijvoorbeeld het subcommando i
(insert) of a
(append). De [Esc] toets zorgt ervoor dat we weer in command mode komen.
Binnen vi
zijn veel verschillende mogelijkheden om te navigeren. Tegenwoordig kunnen de cursortoetsen hier ook voor worden gebruikt. Ook kan bijvoorbeeld direct naar een regelnummer worden gesprongen (:regelnr
).
Voor het verwijderen van tekst kunnen we x gebruiken (1 teken), of een variant van het d
subcommando (bijvoorbeeld dd voor een hele regel). Om twee regels aan elkaar te verbinden gebruiken we het J
(join) subcommando.
Bestanden inlezen of opslaan doen we met de subcommando’s :r
respectievelijk :w
. Om in één keer een bestand op te slaan en vi
af te sluiten, kan :wq
worden gebruikt.
Tekst uit de buffer kan middels p
(put) worden ingevoegd. De buffer wordt gevuld door verwijdersubcommando’s of door yanksubcommando’s (zoals yy
). Het subcommando u
(undo) maakt een ongewilde wijziging ongedaan.
We kunnen subcommando’s herhalen middels . (punt). Ook kan een subcommando meerdere keren worden uitgevoerd, door er een getal voor te typen.
Achter een :
(dubbele punt) kan daarvoor een range worden aangegeven van bijvoorbeeld regelnummers of een bepaald patroon (:g
).
Zoeken en vervangen kan middels het :s
subcommando. Hierbij zijn, zeker in combinatie met ranges, zeer uiteenlopende acties mogelijk.
Vervangen in het hele bestand alle woorden euro door gulden:
:%s/euro/gulden/g
$ sort woordenlijst2 | uniq −c | sort −n | pr −4 −a | more
Oftewel:
Sorteer de woorden in de file woordenlijst2,
stuur de sort
-uitvoer naar de invoer van het commando uniq −c
,
stuur de uitvoer daarvan naar de invoer van het commando sort −n
,
stuur de uitvoer daarvan naar de invoer van het commando pr −4 −a
om het in vier kolommen te krijgen,
en sluis de uitvoer daarvan door naar more
om het eindresultaat rustig op het scherm te kunnen bekijken.
Uiteraard had je die laatste actie (de | more
) kunnen vervangen door bijvoorbeeld
> eindresultaat
eindresultaat
te krijgen.
sort –b | Spaties (blanks) vooraan een regel worden genegeerd |
sort –f | Geen verschil tussen hoofd- en kleine letters (case insensitive) |
sort –r | Sortering omdraaien; ondersteboven sorteren |
sort –n | Numeriek sorteren: 90 komt vóór 500 (normaal is dit andersom, omdat 5 < 9) |
sort –R | Random sorteren: het bestand wordt willekeurig door elkaar gegooid |
Directories
Commando’s op de achtergrond etc
Als je een commando in de achtergrond start, toont de shell een jobnummer tussen blokhaken. Dat is een volgnummer dat de huidige shell zelf uitdeelt (begint voor iedere shell vanaf 1). Eén jobnummer wordt uitgedeeld voor alle processen die via één commandoregel worden gestart. Neem de volgende commandoregel:
commando1 | commando2 | commando3
In dit geval start de shell drie kind-processen die aan elkaar worden verbonden door pipes. Tesamen vormen deze drie processen één job.
Nohup command: zorgt ervoor dat het proces blijft draaien, ook na afsluiten van de sessie.
Variabelen
Voer de volgende commando’s uit:
$ mijnvar1=aap
$ mijnvar2=noot
$ export mijnvar1
$ echo $mijnvar1
aap
$ echo $mijnvar2
noot
We hebben nu twee nieuwe shell variabelen gemaakt,
waarvan we de eerste aan het environment hebben toegevoegd en de ander niet.
In de huidge shell zijn beide bruikbaar.
Start nu een interactieve kind-shell vanuit de huidige shell
(merk op dat het net lijkt alsof het bash
commando gelijk weer eindigt,
maar de nieuwe prompt is van de kind-shell,
terwijl de ouder-shell staat te wachten op afloop van zijn kind):
$ bash
$ echo $mijnvar1
aap
$ echo $mijnvar2
De kind-shell kent variabele mijnvar1
wel maar mijnvar2
niet.
Eindig de kind-shell met het commando exit of toetscombinatie [Ctrl]+[D].
Links
Elk nieuw aangemaakt bestand, heeft een eigen inode, met daarin de megadata. Die inode staat vast en is dus eigenlijk een verwijzing naar het bestand. Het is dus mogelijk om verschillende namen naar dezelfde inode te laten verwijzen. Dus een inode is dan benaderbaar met verschillende namen. Dit zijn Hardlinks!
Dit doe je met het commando ln
[ln bestandnaam extranaam]
Het is dus geen kopie maar puur een naamsverwijzing die naar dezelfde plek verwijst.
Een hardlink kan alleen binnen dezelfde disk worden aangemaakt! Dit omdat de inode uniek is voor de disk en niet voor de directory boom.
Een link maken naar een plek op een andere disk, kan met symbolic link.
DIt is dus een speciaal type bestand, met zijn eigen inode met een verwijzingnaar de naam van een ander bestand.
Dit doen we met ln -s
[ln -s bestaandbestand symlinkbestand]
Find
Drie groepen –>
zoek in: Zoekvoorwaarde: Uit te voeren actie:
huidige directory bestandsnaam, bv ‘*.png’ laat de gevonden namen zien
[find . -name ‘*.png. -print]
[find / -name echo -print 2> /dev/null]
Vind op het hele systeem, dus vanaf /root alle echo bestanden en stuur de foutmeldingen naar /dev/null.
Vind alle files en dirs die 1 dag of langer ongelezen zijn:
[ $ find $HOME −atime +0 −print]
Permissies:
Oude situatie | Commando | Nieuwe situatie | |
---|---|---|---|
‑rwxr‑x‑‑‑ | chmod o+rw bestand | ‑rwxr‑xrw‑ | Lees- en schrijfrechten voor ‘others’ (rest v.d. wereld) worden toegevoegd |
‑rwxr‑xrw‑ | chmod a+x bestand | -rwxr-xrwx | Execute rechten voor iedereen worden toegevoegd (heeft hier alleen effect voor others, omdat user en groep al execute rechten hadden) |
‑rwxr‑xrwx | chmod go‑w bestand | ‑rwxr‑xr‑x | Schrijfrechten voor groep en others worden ingetrokken |
‑rwxr‑xr‑x | chmod go=rw bestand | ‑rwxrw‑rw‑ | Alléén lees- en schrijfrechten voor group en others (bij = wordt de huidige instelling overschreven) |
‑rwxrw‑rw‑ | chmod u‑x,go‑w bestand | ‑rw‑r‑‑r‑‑ | Execute rechten voor user en schrijf-rechten voor group en others worden ingetrokken |
Secure copy:
[scp oracle@db1:/etc/oratab ~/db1_bestanden/]
kopiert /etc/oratab van host db1 naar directory db1_bestanden
[scp -r] kopiert ook alle onderliggende bestanden.
Rsync:
rsync -a eric@anderehost:/data/projectx/ /projectx-kopie
Alle subdirectories en bestanden onder de lokale directory /projectx-kopie
worden ′gelijkgetrokken′ met de subdirectories en bestanden onder de directory /data/projectx
op de host anderehost
, ingelogd als eric
op anderehost
.
Vim; spel www.vimadventures.com