Het beeld wat mensen bij een terminal hebben is vaak sterk beïnvloed door Hollywood; een hacker die razendsnel commando's intypt waarna allerlei tekst over het beeldscherm voorbij vliegt en er ondertussen moeiteloos ingebroken wordt in een kwaadaardig computersysteem. Hoewel een hacker inderdaad vooral met de terminal zijn werk doet, is de terminal voornamelijk een soms efficiëntere manier om te interacteren met je computer dan we gewend zijn met de muis en mooie knopjes, en dat hoeft er niet zo spectaculair uit te zien als in de films. In deze blogreeks wil ik je leren hoe je de terminal op cPanel in kunt zetten voor het beheren van je hostingpakket en WordPress sites, zodat je efficiënter sites kunt beheren vanaf je eigen computer.

Deze blogreeks

Ik wil je in 3 blogs bijbrengen hoe je met de terminal kunt werken. Het doel is uiteindelijk dat je zonder browser jouw WordPress site & cPanel kunt bijwerken en beheren, vanaf jouw computer. Deze 3 onderwerpen gaan voorbij komen:
Blog 1: Basis-commando's in de terminal (deze blog)
Blog 2: WP-CLI, de command line interface voor WordPress
Blog 3: Verbinding maken met SSH

Over de terminal

Een terminal (die ook wel 'command line interface' of CLI genoemd wordt) is een manier om met commando's je computer opdrachten te geven. WordPress bijwerken is een goed voorbeeld; in plaats van via de browser in te loggen op de admin en op het bijwerken knopje te klikken kun je met het commando 'wp core update' direct de upgrade uitvoeren. Je geeft op de achtergrond dezelfde opdracht, alleen via een andere interface.

De commando's in deze eerste blog zijn commando's die werken op Linux en MacOS. Onze hostingservers gebruiken Linux, en de meeste Linux commando's zijn ook beschikbaar.

Handig om te weten

  • Als je precies weet wat je wilt doen en hoe je het moet doen, is een commando vaak sneller dan dezelfde actie via een grafische interface uit te voeren
  • De command line doet precies wat je vraagt; en niet veel meer. Check dus goed wat je invult; gelukkig hebben veel commando's ingebouwd dat je akkoord moet geven. Als je iets verwijderd wordt het niet in de prullenbak gezet, maar echt definitief verwijderd.
  • Commando's hebben vaak meer opties en instellingen dan een grafische interface. Bij een grafische interface zou je dan bijvoorbeeld met een instellingenmenu en vinkjes te maken hebben, waar je bij een commando gewoon een extra letter of argument mee geeft. Dat maakt de terminal ook zo krachtig.
  • Pas op met superuser rechten; als root gebruiker (vergelijkbaar met Administrator onder Windows) mag je in principe alles doen. Je kunt per ongeluk bestanden verwijderen die niet verwijderd hadden moeten worden bijvoorbeeld. Als root op Linux zou je met het commando 'rm -rf /' het hele systeem zichzelf laten verwijderen.
  • In deze tutorials werk ik niet met root-rechten, dus je kunt ook weinig echt kapot maken. En, we hebben altijd de back-ups nog ;).

De terminal openen

Om de tutorial te volgen, kun je de terminal in cPanel gebruiken of de terminal in MacOS/Linux. De terminal in cPanel kun je openen door via het dashboard in te loggen op cPanel ('Hosting -> 'Beheren'). Vervolgens klik je onder 'Geavanceerd' op 'Terminal'. Je kunt uiteraard ook de zoekfunctie gebruiken.

Je hebt nu de terminal geopend, en ziet dan als het goed is het volgende.

[gebruiker@hostnaam ~]$

Het bovenstaande ga ik even ontleden;
gebruiker -> Gebruikersnaam waarmee je bent ingelogd op de terminal
hostnaam -> Naam van de computer waarop je bent ingelogd; bij ons is dit de servernaam
~ -> De plek waar je in het bestandsysteem bent. Het ~ icoon betekent dat je in de basismap zit, ook wel de home-map genoemd.
$ -> Begin van commandprompt. Het $ icoon wordt getoond als je met normale rechten bezig bent, en het # icoon als je met 'superuser' privileges werkt. Je hoeft deze niet zelf in te vullen als je een commando in wilt vullen.

Een terminalsessie opent altijd in een map, net zoals je de bestandsbeheerder op je computer opent. Van hieruit voer je dan commando's uit.

Basiscommando's

Voordat je op afstand WordPress sites bij kunt werken, leg ik eerst even de basiscommando's uit die handig zijn om te weten. Deze commando's kun je gebruiken in zowel een Linux terminal als MacOS.

Een commando heeft meestal de volgende opbouw:

$  [commando] input -opties

Het verschilt per commando welke opties er zijn. Deze kun je inzien met een manual page, deze zijn online te vinden of met het commando.

man [commando]

ls - inhoud van map tonen

Het commando 'ls', kort voor 'list', toont een lijst met de bestanden en mappen waar je nu in zit. Zoals bijvoorbeeld onderstaand.

[hostingha@ams110 ~]$ ls
access-logs  etc  logs  lscache  mail  public_ftp  public_html  ssl  subdomein.hostinghandleiding.nl  tmp  www

Als je meer informatie wilt, kun je aan 'ls' de opties '-la' toevoegen. Elke letter is een losse optie; '-a' zorgt ervoor dat je bestanden kunt zien die beginnen met een '.', en de -l optie zorgt ervoor dat je meer informatie ziet in lijstvorm.

[hostingha@ams110 ~]$ ls -la
total 28
drwx--x--x 23 hostingha hostingha 4096 Jul  8 15:56 .
drwxr-xr-x  3 root      hostingha   23 Jun 13 10:31 ..
lrwxrwxrwx  1 hostingha hostingha   35 Jun  9 13:43 access-logs -> /etc/apache2/logs/domlogs/hostingha
drwx--x--x  3 hostingha hostingha   21 Jun 29 10:41 .appdata
-rw-------  1 hostingha hostingha  250 Jul 18 15:38 .bash_history
-rw-r--r--  1 hostingha hostingha   18 Jun  9 13:30 .bash_logout
-rw-r--r--  1 hostingha hostingha  193 Jun  9 13:30 .bash_profile
-rw-r--r--  1 hostingha hostingha  231 Jun  9 13:30 .bashrc
drwxrwx--x  5 hostingha hostingha   39 Jun 13 10:31 .cagefs
drwxr-xr-x  2 hostingha hostingha   48 Jul 11 11:17 .cl.selector
drwx------  2 hostingha hostingha    6 Jun 10 02:59 .clwpos
-rw-r-----  1 hostingha hostingha    0 Jun  9 13:30 .contactemail
drwx------  5 hostingha hostingha  160 Jul 19 12:13 .cpanel
drwx------  4 hostingha hostingha   53 Jul  1 15:56 .cphorde
drwxr-x---  3 hostingha mail        83 Jul  6 11:49 etc
drwxr-x--- 10 hostingha nobody     115 Jun  9 14:40 .htpasswds
-rw-------  1 hostingha hostingha   40 Jun  9 13:31 .lastlogin
drwx------  3 hostingha hostingha  135 Jul 18 14:11 logs
drwxrws---  2 nobody    hostingha    6 Jun  9 13:31 lscache
drwxr-x--x 10 hostingha hostingha  312 Jul  1 15:56 mail
drwxr-----  3 hostingha hostingha   19 Jul  8 15:56 .pki
drwxr-x---  3 hostingha hostingha   22 Jun  9 13:30 public_ftp
drwxr-x---  5 hostingha nobody    4096 Jul 19 00:17 public_html
drwx------  2 hostingha hostingha   24 Jun  9 13:31 .spamassassin
-rw-r--r--  1 hostingha hostingha    0 Jun  9 13:31 .spamassassinenable
drwx------  2 hostingha hostingha   83 Jun 13 10:42 .ssh
drwxr-xr-x  5 hostingha hostingha   77 Jul  8 15:56 ssl
drwx------  2 hostingha hostingha   28 Jul  1 12:05 .subaccounts
drwxr-x---  3 hostingha nobody      25 Jul 14 15:50 subdomein.hostinghandleiding.nl
drwxr-xr-x  6 hostingha hostingha   72 Jun 29 13:59 tmp
drwx------  2 hostingha hostingha    6 Jun  9 15:36 .trash
lrwxrwxrwx  1 hostingha hostingha   11 Jun  9 13:30 www -> public_html

Standaard toont 'ls' de inhoud van het mapje waar je je nu in bevind, dit geval is dat het mapje /home/hostingha. Je kunt de inhoud van de public_html tonen met:

[hostingha@ams110 ~]$ ls -la public_html/
total 228
drwxr-x---  5 hostingha nobody     4096 Jul 19 00:17 .
drwx--x--x 23 hostingha hostingha  4096 Jul  8 15:56 ..
-rw-r--r--  1 hostingha hostingha   579 Jul  6 09:55 .htaccess
-rw-r--r--  1 hostingha hostingha   405 Feb  6  2020 index.php
-rw-r--r--  1 hostingha hostingha 19915 Jan  1  2022 license.txt
-rw-r--r--  1 hostingha hostingha  7401 Mar 22 22:11 readme.html
-rw-r--r--  1 hostingha hostingha     0 Jun  9 15:37 test
-rw-r--r--  1 hostingha hostingha  7165 Jan 21  2021 wp-activate.php
drwxr-xr-x  9 hostingha hostingha  4096 Jul 13 00:14 wp-admin
-rw-r--r--  1 hostingha hostingha   351 Feb  6  2020 wp-blog-header.php
-rw-r--r--  1 hostingha hostingha  2338 Nov 10  2021 wp-comments-post.php
-rw-------  1 hostingha hostingha  3475 Jul 12 00:15 wp-config.php
-rw-r--r--  1 hostingha hostingha  3001 Dec 14  2021 wp-config-sample.php
drwxr-xr-x  9 hostingha hostingha   134 Jul 13 00:14 wp-content
-rw-r--r--  1 hostingha hostingha  3943 Apr 28 11:49 wp-cron.php
drwxr-xr-x 26 hostingha hostingha 12288 Jul 13 00:14 wp-includes
-rw-r--r--  1 hostingha hostingha  2494 Mar 19 21:31 wp-links-opml.php
-rw-r--r--  1 hostingha hostingha  3973 Apr 12 03:47 wp-load.php
-rw-r--r--  1 hostingha hostingha 48498 Apr 29 16:36 wp-login.php
-rw-r--r--  1 hostingha hostingha  8577 Mar 22 17:25 wp-mail.php
-rw-r--r--  1 hostingha hostingha 23706 Apr 12 11:26 wp-settings.php
-rw-r--r--  1 hostingha hostingha 32051 Apr 11 13:42 wp-signup.php
-rw-r--r--  1 hostingha hostingha  4748 Apr 11 13:42 wp-trackback.php
-rw-r--r--  1 hostingha hostingha  3236 Jun  8  2020 xmlrpc.php

cd & pwd - navigeren door het bestandssysteem

Momenteel werken we nog in de basismap. Je kunt een ander mapje openen met het commando cd - een afkorting voor change directory. Met het commando pwd (print working directory) kun je zien in welk mapje je je momenteel bevind. Voor het beheren van je website, moet je meestal in de public_html zijn. Je kunt als volgt overschakelen naar de public_html

[hostingha@ams110 ~]$ pwd
/home/hostingha
[hostingha@ams110 ~]$ cd public_html/
[hostingha@ams110 public_html]$ pwd
/home/hostingha/public_html
[hostingha@ams110 public_html]$

Om bovenstaand te ontleden; het commando pwd toont dat ik momenteel in de /home/hostingha map ben. Vervolgens open ik met cd public_html het public_html mapje, en toont pwd dat ik nu in /home/hostingha/public_html ben.

Wil je weer een stapje terug? Dan kun je cd .. gebruiken. .. is binnen Linux een synoniem voor 'een laag hoger'. Je zou met cd ../mail naar het mapje /home/hostingha/mail kunnen gaan.

[hostingha@ams110 public_html]$ pwd
/home/hostingha/public_html
[hostingha@ams110 public_html]$ cd ..
[hostingha@ams110 ~]$ pwd
/home/hostingha

cp & mv - bestanden kopiëren en verplaatsen

Dan wordt het nu tijd om ook iets met bestanden te gaan doen naast alleen rondkijken. De commando's cp (copy) en mv (move) kun je gebruiken om bestanden te kopiëren en te verplaatsen.

Voor het voorbeeld maak ik even een bestand aan. Dat kan met het commando touch - er wordt dan een leeg bestand aangemaakt. Dit bestand kopieer ik dan, en vervolgens verplaats ik hem naar de public_html.

[hostingha@ams110 ~]$ touch bestand.txt
[hostingha@ams110 ~]$ cp bestand.txt bestand2.txt
[hostingha@ams110 ~]$ ls
access-logs  bestand2.txt  bestand.txt  etc  logs  lscache  mail  public_ftp  public_html  ssl  subdomein.hostinghandleiding.nl  tmp  www
[hostingha@ams110 ~]$ mv bestand.txt public_html/
[hostingha@ams110 ~]$ ls
access-logs  bestand2.txt  etc  logs  lscache  mail  public_ftp  public_html  ssl  subdomein.hostinghandleiding.nl  tmp  www

Je kunt cp & mv ook gebruiken voor het kopiëren/verplaatsen van mappen. Als je echter het onderstaande probeert zul je zien dat de volgende melding naar voren komt:

[hostingha@ams110 ~]$ cp public_html public_html2
cp: omitting directory ‘public_html’

cp & mv werken standaard niet met mapjes. Daar is de optie -r voor; de r staat voor recursive. De -r optie is eentje die bij veel commando's terug te vinden is, en zorgt ervoor dat het mapje en alles wat daaronder zit ook gekopieerd of verplaatst wordt.

[hostingha@ams110 ~]$ cp -r public_html public_html2
[hostingha@ams110 ~]$ ls
access-logs  bestand2.txt  etc  logs  lscache  mail  public_ftp  public_html  public_html2  ssl  subdomein.hostinghandleiding.nl  tmp  www

Er is geen commando om een bestand een andere naam te geven. Om dat te doen, kun je mv gebruiken.

[hostingha@ams110 ~]$ mv bestand2.txt bestand.txt
[hostingha@ams110 ~]$ ls
access-logs  bestand.txt  etc  logs  lscache  mail  public_ftp  public_html  public_html2  ssl  subdomein.hostinghandleiding.nl  tmp  www

rm - bestanden of mappen verwijderen

Uiteraard kun je bestanden en mappen ook verwijderen. Hiervoor is het commando rm wat remove betekent.

Let op! rm heeft geen prullenbak zoals je gewend bent van een grafische omgeving; weg is echt definitef weg! rm doet precies wat je van hem vraagt, op een Linux-systeem kun je met rm -rf / zelfs het hele systeem zichzelf laten verwijderen zonder verder te vragen om bevestiging.

[hostingha@ams110 ~]$ rm bestand.txt
[hostingha@ams110 ~]$ ls
access-logs  etc  logs  lscache  mail  public_ftp  public_html  public_html2  ssl  subdomein.hostinghandleiding.nl  tmp  www

Zoals je ziet, kun je met rm simpelweg bestand.txt verwijderen. Met de -i optie kun je rm laten vragen om bevestiging, mocht je veel bestanden in 1 keer willen verwijderen. Stel ik wil de inhoud van public_html2 verwijderen met bevestiging; dan kan dat als volgt:

[hostingha@ams110 public_html2]$ rm -i *
rm: remove regular empty file ‘bestand.txt’? y
rm: remove regular file ‘index.php’? y
rm: remove regular file ‘license.txt’? y
rm: remove regular file ‘readme.html’? y
rm: remove regular empty file ‘test’? y
rm: remove regular file ‘wp-activate.php’? y
rm: cannot remove ‘wp-admin’: Is a directory

Voor elk bestand wordt dan expliciet gevraagd of je hem wilt verwijderen, welke je met 'y' (voor yes) of 'n' (voor 'no') kunt beantwoorden. Een commando kun je overigens annuleren met de toetsencombinatie 'Control + C', maar de bestanden waar je al 'y' op hebt geantwoord zijn al wel verwijderd.

Net zoals bij cp & mv kun je standaard niet hele mapjes verwijderen. Ook hier gebruik je de -r optie voor.

[hostingha@ams110 ~]$ rm -r public_html2
[hostingha@ams110 ~]$ ls
access-logs  etc  logs  lscache  mail  public_ftp  public_html  ssl  subdomein.hostinghandleiding.nl  tmp  www

nano - simpele tekstbewerker voor de command line

Als je denkt aan een tekstverwerker, dan denk je waarschijnlijk aan Word, of kladblok op je computer. Ook op de command line zijn er opties om tekst te bewerken, vanuit de command line zelf. De makkelijkste editor is 'nano'; het laatste commando wat ik in deze blog ga behandelen.

Om het bestand 'bestand.txt' aan te maken of te bewerken, typ je het commando:

[hostingha@ams110 ~]$ nano bestand.txt

Vervolgens opent de teksteditor zich; in iets wat lijkt op een nieuw scherm. Met de pijltjestoetsen kun je door het nieuwe bestand heen navigeren, en door te typen kun je iets invullen.

Onderin zie je de acties die je nu kunt doen met het bestand. Het '^' teken staat voor Control, dus met de Control + X combinatie kun je het bestand opslaan en nano afsluiten.

Bij het afsluiten word je eerst gevraagd of je de gemaakte wijzigingen op wilt slaan. Hiervoor type je 'Y' voor Yes.

Vervolgens wordt je gevraagd onder welke naam het bestand opgeslagen moet worden. Standaard staat hier de originele bestandsnaam, of het veld is leeg als je 'nano' hebt geopend zonder een bestand te vermelden. Hier kun je in dit geval gewoon op 'enter' drukken. Nano is nu afgesloten.

Met het commando cat (staat voor: concatenate) kun je de inhoud van een bestand snel zien via de terminal. Hiermee kun je de inhoud van het nieuw gemaakte bestand bekijken:

[hostingha@ams110 ~]$ cat bestand.txt
Hier staat
een zin

Tot zover deze eerste blog. De beste manier om de command line te leren is door te doen; voer dus de bovenste commando's eens uit in je eigen hostingpakket. Het internet staat ook bomvol met nuttige commando's en tips. Wil je iets via de terminal doen, maar weet je niet hoe? Tik dan in een zoekmachine eens 'How to do x via command line' in, en er is waarschijnlijk een hele lijst met StackOverflow antwoorden die je verder kunnen helpen.