Terug naar inhoudsopgave

Handige trucs

Systeem statistieken

De commando's in dit stukje laten u wat statistische gegevens zien over het operating system, of over een deel daarvan. Het commando who wordt voor de volledigheid nogmaals vermeld.

du [-as] [path1 path2...pathN]

Het commando du staat voor disk usage, oftewel disk gebruik. Het telt de hoeveelheid diskruimte van een bepaalde directory  en al zijn subdirectories bij elkaar en laat zien hoeveel beslag dit alles legt op de harddisk. Het commando du zelf geeft een lijst van hoeveel diskruimte elke subdirectory van de huidige directory inneemten laat helemaal onderaan het scherm zien hoeveel ruimte de huidige directory opsnoept. Als u het commando twee parameters meegeeft, zal hij de gegevens oplepelen over die bestanden of directories in plaats van de huidige directory.

De a optie toont de omvang van bestanden en directories apart. De s optie toont alleen de opgegeven directories en niet hun subdirectories.

df

df is een afkorting, waarvan ik nog moet uitzoeken waar het precies voor staat. Feitelijk laat df zien hoeveel diskruimte in gebruik is. Voor elk bestandssysteem (denk erom, dat verschillende systemen op verschillende drives of partities staan) laat het zien hoeveel diskruimte er is en hoeveel er in gebruik is.

Een merkwaardig iets, dat u zou kunnen opvallen is de omstandigheid dat de diskcapaciteit mogelijk groter is dan 100%, oftewel dat de gebruikte omvang plus de beschikbare omvang niet gelijk is aan het totaal van de diskruimte. Dat komt omdat UNIX/Linux ruimte op elk bestandssysteem reserveert voor de root. Op die manier heeft deze (zelfs als een gebruiker de hele schijf volschrijft) toch nog een beetje ruimte over om daar nog iets aan te kunnen doen.

Er zijn niet veel echt nuttige opties voor df.

uptime

Het programma uptime doet precies wat je ervan kunt verwachten. Hij laat de tijdsduur zien dat het systeem draait -- oftwel de tijd verstreken sinds de laatste boot van Linux.

Bovendien geeft uptime de huidige tijd en de gemiddelde belasting van het systeem. Die gemiddelde belasting is het aantal taken dat wacht om te draaien in een bepaalde periode. Het programma toont die belasting voor de laatste minuut, vijf minuten en tien minuten. Een belasting in de buurt van 0 geeft aan dat de computer feitelijk niets doet. Een belasting in de buurt van 1 geeft aan dat het systeem bijna volledig belast is, maar nog zeker niet overbelast. Hoge getallen zijn het resultaat van het tegelijk draaien van een aantal programma's tegelijk.

Merkwaardigerwijs is uptime een van de weinige Linux programma's die geen opties heeft.

who

who toont de huidige gebruikers van de computer en het tijdstip dat ze inlogden. Als de parameter  am i wordt meegegeven (zoals in: who am i), laat hij de huidige gebruiker zien. (Voor meer info over who zie Enkele eenvoudige commando's.)

w [-f] [gebruikersnaam]

Het programma w laat de huidige gebruikers van de computer zien, alsmede wat ze aan het doen zijn. Feitelijk combineert dit programma de resultaten van uptime en who. De eerste uitvoerregel van w is precies gelijk aan die van uptime, en elke regel toont een gebruiker, wanneer en vanwaar hij inlogde (en hoe lang hij/zij al niets doet), de afgekorte naam van de tty of pty en wat hij/zij aan het doen is (zowel  de naam als de argumenten van het huidige programma). JCPU is het totaal van de CPU tijd voor die gebruiker, terwijl PCPU het totaal is van de CPU tijd gebruikt voor de huidige taak.

Als w de optie f meekrijgt, onderdrukt hij het gegeven van de inlogcomputer (als er een is).

Trucs op de commandoregel

(De volgende tips kunnen per distributie verschillen. Probeer ze uit en kijk wat bij u wel en niet werkt.)

Soms typt u een lang commando in en ontdekt u een fout te hebben gemaakt voor u op RETURN heeft gedrukt. Natuurlijk kunt u met de backspace terug naar de fout en van daar af alles opnieuw invoeren. Dat is nogal tijdrovend. In plaats daarvan kunt u ook met de pijltoetsen terug naar de fout, die herstellen en daarna verder gaan. Bij sommige distributies zult u echter de pijltoetsen niet kunnen gebruiken. Waarschijnlijk heeft u dan de vi commando's nodig om een regel te bewerken. Hieronder een paar snelle tips:

en nog veel meer commando's die u zelf maar moet uitvinden.

Een van de meest bruikbare commando's is "Esc-k". U gaat in de "commando modus" door het indrukken van Esc. Als u daarna op "k" drukt krijgt u het tevoren uitgevoerde commando. Als u "k" meerdere keren indrukt, loopt u terug langs de lijst van eerder ingevoerde commando's, vanaf de laatste naar de eerste. Heel handig als u een eerder ingevoerd commando niet opnieuw wilt intypen. Hebt u het eenmaal gevonden, dan drukt u op Enter om het opnieuw uit te voeren. Of u kunt het aanpassen middels de hierboven aangegeven toetsen.
Als u eenmaal in de "commandolijst" zit (middels "Esc-k") kunt u met "j" zoeken in diezelfde lijst. U gebruikt ctrl-C om terug te keren naar de Linux prompt zonder verder iets te doen.

Nog een handigheidje is de automatische aanvulling van uw commando's. Laten we aannemen dat u een bestand hebt met een lange bestandsnaam. De lengte van de naam maakt overigens niet uit. We willen dat bestand naar een andere plek copieren:

$cp dit-is-een-lang-bestand korter
$

Het is nogal lastig om elke letter van dit-is-een-lang-bestand te moeten invoeren elke keer dat u het bestand wilt gebruiken. U kunt echter ook volstaan met het invoeren van cp d en daarna op de Tab toets te drukken. De rest van de bestandsnaam duikt automatisch op, en u hoeft alleen nog maar de naam korter in te voeren.

Tab-aanvulling (zoals het soms genoemd wordt) is niet feilloos. Als er een ander bestand is met de naam dit-is-een-zelfs-nog-langer-bestand, is het niet voldoende om "d" in te voeren. Er zijn dan immers meer mogelijkheden en er zal een piepje klinken om nadere beslissingen van uw kant.  U kunt dan nog wat letters invoeren en nogmaals op Tab drukken, waarna een lijst verschijnt met de namen die nu mogelijk zijn. Op die manier kunt u de bedoelde bestandsnaam uiteindelijk uit sorteren.

Invoer/Uitvoer

Als een programma draait in een Linux omgeving verwacht het meestal enige invoer (data) en zal het tevens enige uitvoer (resultaten) produceren. Standaard wordt de invoer verwacht van het toetsenbord. U verstrekt die invoer meestal bij het starten van het programma middels de argumenten die u aan de programmanaam meegeeft. Of anders zal het programma na het opstarten u om de nodige invoer vragen. Als het programma klaar is, zal het de resultaten normaliter naar de standaard uitvoer sturen. Gewoonlijk is dat het monitorscherm.

Echter kunnen invoer en uitvoer ook middels bestanden worden geregeld. Verderop kijken we naar "redirecting" en "piping", waarover we al eerder spraken. Deze manier wordt gebruikt als we de uitvoer van een programma willen bewaren (door hem in een bestand te zetten) of wanneer we een programma gebruik willen laten maken van een bestaand bestand. Die databestanden moeten dan natuurlijk wel alle gegevens bevatten die het programma nodig heeft.

Om een lang verhaal kort te maken ...

Redirecting

Zoals gezegd gaat redirecting over het gebruik van bestanden voor de in- en/of uitvoer van programma's. U zult trouwens merken, dat het omleiden van uitvoer veel vaker voorkomt dan dat van invoer. De feitelijke omleiding wordt geregeld met de linker of rechter haak "<" en ">". Als een ezelsbrug kunt u denken aan pijlen, die met de punt aangeven waar de in- en/of uitvoer heen moet.

Een voorbeeld? Hier is er een:

$date > vandaag

Merk op, dat het niet nodig is om spaties rond het ">" teken te zetten. U herinnert zich het commando date? Ik hoop het maar. In elk geval wordt de uitvoer van het commando hier weggeschreven naar het nieuw aangemaakte bestand vandaag in plaats van dat het op het scherm komt te staan. Als u dus het commando cat vandaag invoert of als u vandaag bekijkt middels een editor, zou u datum en tijd van vandaag moeten zien.


Het bestand vandaag werd aangemaakt bij de omleiding. Wat gebeurt er als vandaag al bestaat?

Goede vraag! Als het bestand waarheen de standaard uitvoer wordt omgeleid al bestaat, is de inhoud van dat oorspronkelijke bestand overschreven! Dat komt omdat de shell bij een omleidingsteken ">" onmiddellijk een leeg bestand aanmaakt om de inhoud van de omleiding op te vangen. Daar moet u dus voorzichtig mee zijn.

Echter: als u de inhoud van een bestand intact wilt houden en de uitvoer op het eind ervan toevoegen, dan kan dat ook. Merk op dat die toevoeging alleen op het eind van het bestand kan plaatsvinden. Om dat te doen gebruikt u twee haken ">>" in plaats van een:

$date >> vandaag

Het bestand vandaag bevat de datum en tijd van vandaag nu dus twee keer. In veel gevallen is het veiliger om >> te gebruiken dan >, omdat in het eerste geval geen informatie wordt overschreven.

Hier is een voorbeeld van het omleiden van de standaard invoer. Hierbij gebruiken we dus het teken <.

$mail < message

Over mail krijgen we het later nog wel uitgebreider. Voor nu geldt alleen: dit commando start het mailgebeuren op en haalt berichten uit het bestand message, dat eerder is aangemaakt d.m.v. bijvoorbeeld een editor.

U moet wel speciale voorzorgen treffen als u een omleiding wilt regelen van zowel de standaard invoer als de standaard uitvoer. Bijvoorbeeld:

$cat < links > rechts
$

Gebruik NIET dezelfde bestandsnaam op beide plekken. Middels een cat commando dat er als volgt uitziet:

$ cat < thisfile > thisfile
$

raakt u dus gegarandeerd het bestand thisfile kwijt! Dat komt omdat de shell bij het opmerken van het > teken onmiddellijk een leeg bestand aanmaakt om de uitvoer op te vangen. Als dat uitvoerbestand toevallig dezelfde naam heeft als het invoerbestand, zal het invoerbestand dus gewist worden!

Hetzelfde geldt van:

$cat thisfile > thisfile
$

Dat klopt dus ook niet.

Bestanden aanmaken op een simpele manier

Nog niet gewend aan een editor? Of op zoek naar nog meer slimmigheidjes? Hier is een simpele manier om een bestand aan te maken middels omleiding en het commando cat. Twee opmerkingen vooraf:
1) gebruik de -u optie voor cat als u ongebufferde uitvoer wenst (d.w.z. cat wacht niet met uitvoer tot u een bepaalde hoeveelheid tekens hebt ingevoerd). dat kan makkelijk zijn als dat invoer proces wordt onderbroken door het een of ander. U bent dan geen gegevens kwijt.
2) gebruik de toetscombinatie ^D (ctrl-D) na de laatste regel om aan te geven, dat hier het einde van de tekst is bereikt.

Op onderstaande manier wordt het bestand people aangemaakt:

$cat -u > people
Scottie
Michael
Tony
Dennis
^D
$

U heeft nu een bestand people met daarin bovenstaande namen. Uiteraard kunt u er nog meer tekst aan hangen:

$cat -u >> people
Luc
Ron
^D
$

Koppelen van commando's met pijpleidingen

Ergens in de afdeling "simpele commando's" meldde ik het gebruik van 'pipelines':

$who|sort|more

De uitvoer van who wordt doorgestuurd als invoer voor sort (waarbij sort hier 'filter' genoemd wordt), waarna de uitvoer van sort doorgesluisd wordt als invoer voor more. Dat is ongeveer alles, maar ik meld nog even een paar dingen.

Pijpleidingen verschaffen een flexibel en krachtig middel om taken snel en eenvoudig uit te voeren, zonder de noodzaak van speciale hulpprogramma's. Bestaande programma's kunnen gecombineerd worden ter uitvoering van een serie taken.

Een van de grote voordelen van pijpleidingen is, dat de computer alle tussenliggende werk voor u regelt. Als u tijdelijke bestanden gebruikt in plaats van pijpleidingen, doet u overbodig extra werk: aanmaken, volgen, wissen van die bestanden.

Bovendien werkt 'piping' snel. Bij omleiding van de uitvoer moet elk commando eerst klaar zijn voor het volgende kan beginnen. Bij pijpleidingen echter beginnen de processen zodra er enige data zijn om mee te werken.

Processen op de achtergrond

Als u wat meer ervaren wordt met Linux, zult u merken, dat sommige processen langer duren dan andere. En om nou tijden naar een leeg scherm te gaan kijken, alleen omdat het programma nog niet gereed is, is ook niet aantrekkelijk. Uiteraard is daar een oplossing voor.

Als een proces door de shell wordt gestart, heet het een "voorgrond" proces, dat draait "terwijl u wacht". Dat is prima voor snelle, korte programma's. Maar voor langdurige processen kan het behoorlijk vervelend zijn. (Terzijde: als een programma onverhoopt in een eindeloze lus komt, probeer dan uit te stappen met ^C (Ctrl-C) om het proces af te sluiten.) Het eenvoudigste dat u kunt doen is: het proces op de "achtergrond" laten draaien.

De systeem prompt komt na het starten van het programma dan onmiddellijk terug. Niet meer draaien "terwijl u wacht". Het programma draait op de achtergrond, maar op de voorgrond kunt u gewoon andere dingen doen. Dit heet overigens "multi-tasking".

Hoe doet men dit? Heel simpel. U maakt gebruik van het & (ampersand) symbool.

In ons eerste voorbeeld nemen we aan dat we een programma langeduur hebben, dat lange tijd nodig heeft om te draaien. We willen het op de achtergrond laten draaien, zodat we met andere dingen verder kunnen gaan. Hier staat het commando:

$langeduur &
[1] 896
$

"[1] 896" is het proces nummer (de opmaak kan verschillen), anders genoemd de 'proces identiteit', oftewel de PID. Linux gebruikt dat getal om het te associeren met het commando dat u invoerde. Als u een commando op de achtergrond laat draaien, maak dan een aantekening van het proces nummer dat Linux er aan toekent: dat is makkelijk als u wilt weten of het nog draait, of als u het proces op de achtergrond wilt stoppen. Hoe brengt u een proces vanuit de achtergrond naar de voorgrond? Type fg (voor foreground) als u slechts een enkel proces op de achtergrond hebt draaien. Als u er meer hebt, kunt u kiezen: 1) type fg en breng het laatste proces dat u op de achtergrond zette naar de voorgrond, of 2) type fgPID, waarbij PID het nummer is van het proces dat u wilt terughalen.

Nu over het "killen" van een achtergrond proces. U gebruikt daarvoor het commando kill en de PID van het af te breken proces. Als het over bovenstaand voorbeeld gaat, gebruikt u:

$kill 896
[1] + Terminated langeduur
$

Nog een kleine opmerking over kill. Soms kan een bepaald proces niet verwijderd worden met "kill". Als dat het geval is, gebruik dan optie "-9" bij het kill commando. Merk op dat uw login ook een proces is, en als u ooit computer zelfmoord wilt plegen (het kan soms nodig zijn!) zult u ook die "-9" optie nodig hebben.


Maar wat moet ik als ik het proces PID vergeten ben?

Een veel gestelde vraag. U kunt het commando ps gebruiken om de status van de actieve processen te zien en hun PIDs.

$ps

 PID TTY STAT  TIME COMMAND
  308  p0 S    0:00 -ksh 
  896  p0 S    0:00 langeduur
  979  p2 R    0:00 ps 
$
De -ksh is uw inlog proces. ("sh" staat voor shell en "k" voor het type shell. Voor nu niet zo belangrijk.)

U kunt overigens het commando kill ook gebruiken zonder het PID te weten. Weet u nog de melding wanneer u een programma in de achtergrond zet? Zoiets als: [1] 896? Wel ... het eerste cijfer tussen de teksthaken is het zogenaamde 'taaknummer'. U kunt dit taaknummer ook gebruiken om een proces af te breken. Gebruik het volgende commando:

$kill %1
$

Het nummer volgend op het teken % is het taak nummer van het proces dat u wilt "killen".
 


En wat moet ik als ik het taaknummer ben vergeten?

Vergelijkbaar met de PID vraag. En een vergelijkbaar antwoord. U kunt het commando jobs gebruiken om de status van uw taken uit te vinden (d.w.z. of ze draaien, gestopt of afgebroken zijn: running, stopped or terminated). Het is mogelijk dat het commando jobs helemaal niets laat zien, wat zeggen wil dat er op dat moment geen taken op de achtergrond draaien. Als u zojuist een taak hebt afgebroken en na het invoeren van jobs krijgt u niets te zien, dan weet u dat het afbreken succesvol is geweest. Gewoonlijk zal gemeld worden dat de taak "terminated" is.

We hebben gekeken naar het gebruik van & om een proces in de achtergrond te zetten. Is er nog een manier? Wederom is het antwoord: ja! Ons volgende voorbeeld gaat over een programma (Netscape in dit geval), ctrl-Z, fg, en een nieuw commando bg. (Ik denk dat ctrl-Z ook nieuw is. Het laat een proces in de achtergrond  wachten.)

Laten we Netscape starten:

$netscape

Klaar. Hopelijk hebt u een Netscape browser. Helaas bent u de Linux prompt weer kwijt. En u wilt (zeggen we maar) opeens iemand dringend email sturen. Moet u Netscape "killen"? Nee. Probeer de combinatie ctrl-Z. U zou uw prompt weer terug moeten hebben. Nu probeert u Netscape. Die werkt momenteel niet. U gaat naar uw mailer (later meer daarover) en bedenkt dat u eerst in Netscape nog niets moet opzoeken om in uw brief te zetten. Dus verlaat u de mailer weer. Maar dan heeft u een aantal mogelijkheden. De eerste is om het commando fg te gebruiken, waardoor Netscape weer naar de voorgrond komt. U kunt dan uw zoekslag maken, Netscape weer laten wachten en met uw mailer aan de slag gaan. Er is echter een probleem. Wat als u nog steeds een interactieve Netscape nodig hebt? De gezochte info kan immers op een aantal pagina's staan. Zoals u al heeft gemerkt, kunt u een programma in uitgestelde status niet gebruiken. Om de vraag te beantwoorden gaat u terug naar de Linux prompt. Nu staat Netscape te wachten op de achtergrond, terwijl u het wilt laten draaien in de achtergrond onder het gebruiken van uw mailer. Denk eraan dat fg werd gebruikt om een draaiend proces naar de voorgrond te brengen. Het commando bg is vergelijkbaar, maar dat wekt een slapend programma op en houdt het op de achtergrond. U kunt meer processen opwekken door de PID als argument te gebruiken. En dat is de oplossing. Een altijd werkende manier om een proces in de achtergrond te zetten.

Nog een ding. U kunt het jobs commando gebruiken om een lijst info over taken (processen) te krijgen, zoals die momenteel draaien of wachten. Soms meldt het commando ook dingen over de taken die u hebt afgebroken of die zijn gestopt.

Nog een waarschuwing. Zorg dat alle achtergrond processen klaar of afgebroken zijn voor u uitlogt. Anders gaan ze door met draaien terwijl u weg bent. Dat maakt een hoop mensen boos, omdat uw processen een hoop CPU tijd kunnen consumeren.