Tips en Trucs 2019

Terug in de tijd

Elke distributie gebruikt history, een bash onderdeel om elke terminalopdracht die je uitvoert bij te houden. Zo kan je vlug vroeger uitgevoerde terminalopdrachten nogmaals of in een licht aangepaste versie uitvoeren. OpenSUSE zorgt zelf voor extra gemak door de pijltoetsen op en neer te gebruiken om door de opdrachtengeschiedenis te bladeren. De PgUp en PgDn toetsen gebruikt openSUSE om reeds half ingetypte opdrachten in de opdrachtengeschiedenis op te zoeken.

De history opdracht

Zelfs zonder de vooringestelde toetsen in openSUSE is het werken met de opdrachtengeschiedenis eenvoudig en zorgt voor een pak extra gebruikersgemak.

De opdrachtengeschiedenis weergeven

Met de volgende opdracht wordt de volledige opdrachtengeschiedenis venster per venster weergegeven:

dany@pindabook:~> history | more
    1  sudo zypper up
    2  sudo zypper install-new-recommends 
...
   18  sudo zypper up
   19  exit
   20  sudo pip3 mu-editor
   21  sudo pip3 install mu-editor
   22  sudo pip3 install shortcut
   23  shortcut mu-editor
   24  sudo pip3 install --upgrade pip3
   25  sudo pip3 install --upgrade pip
   26  pip3 --version

De more opdracht zorgt dat je opdrachtengeschiedenis venster per venster wordt weergegeven. Een druk op de spatiebalk toont dan een volgend venster tot alle opdrachten in de geschiedenis werden weergegeven. Met de q toets (Quit) verlaat je de more opdracht onmiddellijk.

Opdrachtengeschiedenis met datum en tijd

Je kunt de history opdracht met behulp van vooraf ingestelde omgevingsvariabelen beïnvloeden. Zo bepaalt de variabele HISTTIMEFORMAT de manier waarop de history opdracht de datum en tijd weergeeft. De volgende opdrachten zorgen dat history de datum en tijd waarop een opdracht werd uitgevoerd in mensentaal weergeeft:

dany@pindabook:~> export HISTTIMEFORMAT="%F %T: "
dany@pindabook:~> history | more              
    1  2019-11-16 13:36:31: sudo zypper up
    2  2019-11-16 13:36:31: sudo zypper install-new-recommends 
...
   18  2019-11-16 13:36:31: sudo zypper up
   19  2019-11-16 13:36:31: exit
   20  2019-11-16 13:36:31: sudo pip3 mu-editor
   21  2019-11-16 13:36:31: sudo pip3 install mu-editor
   22  2019-11-16 13:36:31: sudo pip3 install shortcut
   23  2019-11-16 13:36:31: shortcut mu-editor
   24  2019-11-16 13:36:31: sudo pip3 install --upgrade pip3
   25  2019-11-16 13:36:31: sudo pip3 install --upgrade pip
   26  2019-11-16 13:36:31: pip3 --version
...
   39  2019-11-16 14:00:05: history | more
   40  2019-11-16 14:07:24: export HISTTIMEFORMAT="%F %T: "
   41  2019-11-16 14:07:34: history | more

De opdrachtengeschiedenis uitschakelen

In situaties waarbij je liever geen opdrachtengeschiedenis bijhoudt, kan je deze uitschakelen:

dany@pindabook:~> export HISTSIZE=0
dany@pindabook:~> history

Dit kan ook met de history opdracht met de -c (Clear) optie:

dany@pindabook:~> history -c

Deze opdracht en de omgevingsvariable HISTSIZE schakelt enkel de opdrachtengeschiedenis in het RAM geheugen uit. Met de variable HISTFILESIZE bepaal je hoeveel opdrachtregels er in het geschiedenisbestand worden opgeslagen. Bij elke start van een terminal wordt dit geschiedenisbestand met opdrachtregels gelezen en beschikbaar voor de gebruiker. Bij het beëindigen van een terminal worden de in het RAM geheugen bewaarde opdrachtregels in het geschiedenisbestand opgeslagen. Je kunt de opdrachtengeschiedenis terug inschakelen om 1000 opdrachtregels te onthouden met de opdracht:

dany@pindabook:~> export HISTSIZE=1000
dany@pindabook:~> echo Hier ben ik terug
Hier ben ik terug
dany@pindabook:~> history
   42  2019-11-16 14:40:50: echo Hier ben ik terug
   43  2019-11-16 14:41:00: history

De opdrachtengeschiedenis voor één opdracht uitschakelen

Experimenteren is leuk, maar gevaarlijk zonder back-up. Om een omgevingsvariabele weer te geven, voor je ze aanpast, gebruik je de echo opdracht:

dany@pindabook:~> echo $HISTCONTROL
ignoreboth

Door de variabele HISTCONTROL in te stellen op ignorespace zullen opdrachtregels die beginnen met een spatie niet in de opdrachtgeschiedenis worden opgenomen:

dany@pindabook:~> export HISTCONTROL=ignorespace
dany@pindabook:~>  cat /etc/fstab
UUID=33b64539-5d67-4e8c-b3b5-83e6dd7dc1bf  /                    ext4  acl,user_xattr  0  1
UUID=b9f19cec-a3ce-4e7e-8635-187310973824  swap                 swap  defaults        0  0
UUID=820d7da4-657f-4918-b863-6d2b847e8ba3  /usr/home/Documents  ext4  defaults        0  2
UUID=0C54-931D                             /boot/efi            vfat  defaults        0  0
/usr/home/Documents/Web/ /srv/www/htdocs none bind 0 0
dany@pindabook:~> history
   42  2019-11-16 14:40:50: echo Hier ben ik terug
   43  2019-11-16 14:41:00: history
   44  2019-11-16 14:46:16: echo HISTCONTROL
   45  2019-11-16 14:46:22: echo $HISTCONTROL
   46  2019-11-16 14:48:32: export HISTCONTROL=ignorespace
   47  2019-11-16 14:50:19: history

Daarna kan je de omgevingsvariabele herstellen met de oorspronkelijke waarde:

dany@pindabook:~> export HISTCONTROL=ignoreboth

Deze instelling zorgt dat identieke reeds in de geschiedenis aanwezige opdrachtregels en opdrachtregels die beginnen met een spatie niet in de opdrachtengeschiedenis worden opgenomen.

Zoeken in de opdrachtengeschiedenis

Met de sneltoets Ctrl+r activeer je de zoekfunctie van de opdrachtgeschiedenis.

(reverse-i-search)`':

De opdrachtprompt duidt aan dat je bij het typen van een opdracht in de opdrachtengeschiedenis zult zoeken. Zo krijg ik bij het typen van de letters ec, de meest recent uitgevoerde echo opdracht te zien:

(reverse-i-search)`ec': echo $HISTCONTROL

Druk nogmaals de sneltoets Ctrl+r om nog verder in de opdrachtengeschiedenis naar de lettercombinatie ec te zoeken:

(reverse-i-search)`ec': echo Hier ben ik terug

Heb je de juiste opdracht gevonden, gebruik dan de pijltoets naar rechts om de zoekopdracht af te breken en de opdracht klaar te zetten om uitgevoerd te worden:

dany@pindabook:~> echo Hier ben ik terug
Hier ben ik terug

De vorige opdracht nogmaals uitvoeren

Om de vorige opdracht (de laatste in de opdrachtengeschiedenis) opnieuw uit te voeren, gebruik je:

dany@pindabook:~> !!
echo Hier ben ik terug
Hier ben ik terug

Om de voorlaatste opdracht opnieuw uit te voeren:

dany@pindabook:~> echo Vorige opdracht
Vorige opdracht
dany@pindabook:~> !-2
echo Hier ben ik terug
Hier ben ik terug

Enz.

Handleiding

De opdrachtengeschiedenis maakt deel uit van bash, het terminalprogramma. Om je verder te verdiepen in de mogelijkheden van bash en zijn opdrachtengeschiedenis, kan je de man pagina van bash raadplegen.

Bash Man Pagina