Terug naar hoofdinhoud

Linux commando: nano

18 augustus 2026

Er is iets stuk op een server, je bent verbonden via SSH, en er moet een regel in een configuratiebestand veranderen. Dit is het moment waarop veel mensen bevriezen, want de editor die opent is ofwel een editor die ze niet uit kunnen komen, ofwel een editor die ze nog nooit gezien hebben. nano is het antwoord op beide problemen: hij staat al op vrijwel elk Linux-systeem, hij drukt zijn eigen instructies onderaan het scherm af, en je kunt eruit weglopen zonder op internet te zoeken hoe je afsluit.

1. De basis

De taak van nano is je een tekstbestand in een terminal laten bewerken zonder dat je eerst iets hoeft te leren. Je geeft een bestandsnaam op, je typt, en wat je typt verschijnt. Dat klinkt te vanzelfsprekend om te noemen, tot je bedenkt dat de andere klassieke Unix-editor, vi, je toetsaanslagen als commando's opvat totdat je iets anders zegt.

$ nano notes.txt

Zo ziet dat er werkelijk uit. Dit is een echt scherm, geen tekening:

  GNU nano 7.2                   notes.txt
Dear reader,

This is a small file opened in nano.
The third line is here.




                                [ Read 4 lines ]
^G Help      ^O Write Out ^W Where Is  ^K Cut       ^T Execute   ^C Location
^X Exit      ^R Read File ^\ Replace   ^U Paste     ^J Justify   ^/ Go To Line

Het scherm bestaat uit vier delen, en als je hun namen kent, is elke latere instructie makkelijker te volgen:

  • De titelbalk bovenaan toont de nano-versie en de bestandsnaam.
  • Het bewerkvenster in het midden bevat je bestand, of zoals nano het intern noemt, de buffer.
  • De statusregel, de derde van onderen, toont meldingen zoals [ Read 4 lines ].
  • De twee sneltoetsregels onderaan zijn de belangrijkste eigenschap van nano. De ^ betekent de Ctrl-toets, dus ^X is Ctrl+X.

nano kent geen modi. Er is geen commandomodus om in of uit te gaan. De pijltjestoetsen verplaatsen de cursor, Backspace wist, en typen voegt tekst in. Al het andere is een Ctrl- of Alt-combinatie, en de twaalf meest gebruikte staan permanent op het scherm.

De editor die je vertelt hoe je hem gebruikt. Hij lijkt het eenvoudigste programma op het systeem, en eronder zitten een configuratiebestand, syntaxkleuring, ongedaan maken, en een set standaardinstellingen die veranderd is op een manier waar de meeste handleidingen nooit achteraan gekomen zijn.

Dit artikel begint met een bestand openen en er weer uit komen, en werkt daarna door naar zoeken, ongedaan maken, het configuratiebestand, syntaxkleuring, en het handjevol gedragingen dat zelfs mensen verrast die nano al jaren gebruiken.

Het juiste denkmodel: nano zet zijn eigen handleiding op het scherm. Die twee onderste regels zijn geen versiering en geen hulpmiddel voor beginners, ze zijn de interface. Als je ze kunt lezen, weet je al hoe je de editor gebruikt.

Naar boven

2. Waar komt de naam vandaan?

Vraag nano wat zijn naam betekent en hij vertelt het je, in de eerste regel van zijn eigen handleiding:

$ man nano
NAME
       nano - Nano's ANOther editor, inspired by Pico

Dat is een recursieve grap in de GNU-traditie, in dezelfde stijl als GNU dat staat voor "GNU's Not Unix". De naam wordt uitgeschreven tot een zin die de naam zelf bevat.

In het begin heette hij niet nano. Chris Allegretta schreef het origineel eind 1999 en noemde het TIP, kort voor Tip Isn't Pico, omdat het een kloon was van een editor genaamd Pico. Die naam hield het maar een paar maanden vol. Er bestond al een Unix-programma tip, een oud gereedschap dat "establishes a full duplex terminal connection to a remote host", en dat met veel oudere Unix-systemen en met Solaris meegeleverd werd. Twee programma's kunnen niet dezelfde commandonaam bezitten, dus werd TIP in januari 2000, bij versie 0.7.4, nano. De release-notities van het project leggen het moment vast:

2000.01.09 - As of this version (0.7.4), TIP has officially
             been renamed to nano.

De nieuwe naam bevat een tweede grap die makkelijk te missen is. Zowel pico als nano zijn SI-voorvoegsels voor heel kleine getallen, maar ze zijn niet even groot: pico betekent een biljoenste en nano een miljardste. Een nano is duizend keer groter dan een pico. Voor een kloon die de interface van Pico wilde behouden en er de ontbrekende functies aan wilde toevoegen, is dat precies de juiste naam.

De GNU ervoor kwam later, toen nano werd opgenomen als officieel GNU-pakket. Daarom staat er GNU nano in de titelbalk en is het programma onder de GPL gelicentieerd, wat toevallig de hele reden is dat het bestaat.

Naar boven

3. Een korte geschiedenis

nano bestaat vanwege een licentie, niet vanwege een ontbrekende functie.

In de jaren negentig las vrijwel iedereen zijn e-mail op een Unix-systeem met een programma van de University of Washington genaamd Pine. Het deel van Pine waarmee je je bericht schreef, was een kleine, vriendelijke editor genaamd Pico, en dat was voor veel mensen hun eerste teksteditor. Hij was prettig, hij toonde zijn sneltoetsen onderaan het scherm, en beginners waren er dol op.

Het probleem was de licentie. De University of Washington legde beperkingen op aan het verspreiden van gewijzigde versies, waardoor Pine en Pico niet voldeden aan de definitie van vrije software van de Free Software Foundation of Debian. Distributies namen ze niet op. Wie de editor mocht, kon hem niet via zijn pakketbeheerder krijgen. De FAQ van nano zelf, die met het programma meegeleverd wordt, beschrijft wat er toen gebeurde:

It was in late 1999 when Chris Allegretta (our hero) was yet again
complaining to himself about the less-than-perfect license Pico was
distributed under, the 1000 makefiles that came with it and how just a
few small improvements could make it the Best Editor in the World (TM).
...
Finally something snapped inside and Chris coded and hacked like a
madman for many hours straight one weekend to make a (barely usable)
Pico clone.

Dat weekend leverde iets op dat niet eens bestanden kon opslaan. Vijfentwintig jaar later is het de standaardeditor op de meeste Linux-distributies.

PeriodeMijlpaal
jaren negentig Pico, de editor in de Pine-e-mailclient, leert een hele generatie zijn eerste sneltoetsen
eind 1999 Chris Allegretta schrijft in een weekend een GPL-kloon en noemt die TIP (Tip Isn't Pico)
januari 2000 Versie 0.7.4 hernoemt TIP naar nano, om het bestaande commando tip te ontwijken
vanaf 2001 nano wordt een officieel GNU-pakket, gelicentieerd onder de GPL
2006 nano 2.0 brengt UTF-8-ondersteuning, springen naar regel en kolom, en betere syntaxkleuring
2019 nano 4.0 verandert de standaardinstellingen: geen automatische regelafbreking meer, vloeiend scrollen wordt standaard
Vandaag Onderhouden door Benno Schulenberg; nano 7.x staat vrijwel overal en is de standaardeditor van Debian en Ubuntu

Je kunt controleren welke versie je hebt, en het antwoord doet er meer toe dan gewoonlijk vanwege die regel uit 2019:

$ nano --version
 GNU nano, version 7.2
 (C) 2023 the Free Software Foundation and various contributors
 Compiled options: --disable-libmagic --enable-utf8

Paragraaf 7 legt uit waarom nano 4.0 de waterscheiding is, en waarom heel veel advies dat je online vindt inmiddels een editor beschrijft die zich niet meer zo gedraagt.

Naar boven

4. Eenvoudige toepassingen

4.1 Een bestand openen

Geef nano een bestandsnaam. Bestaat het bestand, dan gaat het open; bestaat het niet, dan begint nano met een lege buffer en maakt het bestand aan zodra je opslaat.

$ nano /etc/hosts          # open an existing file
$ nano newfile.txt         # start a new one

Waar hij ontbreekt, is het een klein pakket en heeft elke distributie het:

$ nano --version                 # is it here at all?
$ sudo apt install nano          # Debian, Ubuntu
$ sudo dnf install nano          # Fedora, RHEL
$ sudo pacman -S nano            # Arch
$ apk add nano                   # Alpine

Die laatste regel staat er vanwege een machine op mijn eigen bureau. Ik heb Alpine Linux op een oude thin client met een 8 GB SSD gezet, omdat een normale Ubuntu-installatie er simpelweg niet op paste, en ontdekte toen dat er helemaal geen nano was om iets mee te bewerken. Alpine levert in plaats daarvan BusyBox mee, waar vi een symlink is naar /bin/busybox en er geen tweede editor is. Een commando loste het op:

$ apk update && apk add nano

Dit is de moeite waard om te weten, ook als je nooit een thin client aanraakt, want Alpine is de gebruikelijke basis-image voor Docker-containers. Open daar een shell en je treft dezelfde lege gereedschapskist aan. De installatie is ook niet zwaar: op Alpine is nano ongeveer 300 KB, of ruwweg 0,7 MB zodra zijn ncurses-afhankelijkheden meekomen, en dat is een redelijke ruil, zelfs op een heel kleine schijf.

Draai nano zonder bestandsnaam en je krijgt een lege buffer met een vriendelijke begroeting:

  GNU nano 7.2                       New Buffer

               [ Welcome to nano.  For basic help, type Ctrl+G. ]
^G Help      ^O Write Out ^W Where Is  ^K Cut       ^T Execute   ^C Location
^X Exit      ^R Read File ^\ Replace   ^U Paste     ^J Justify   ^/ Go To Line

Je kunt ook meteen naar een regel springen, wat handig is als een programma net gemeld heeft dat er iets mis is op regel 47:

$ nano +47 /etc/apache2/apache2.conf      # open with the cursor on line 47
$ nano +47,10 file.txt                    # line 47, column 10
$ nano +/ServerName /etc/apache2/apache2.conf   # jump to the first match instead

4.2 Je werk opslaan

De sneltoetsregel noemt opslaan Write Out, en dat is ^O. Druk erop en nano vraagt waarheen geschreven moet worden, met de huidige naam als voorstel:

File Name to Write: notes.txt
^G Help             M-D DOS Format      M-A Append          M-B Backup File
^C Cancel           M-M Mac Format      M-P Prepend         ^T Browse

Druk op Enter om de naam te accepteren en het bestand wordt geschreven. Typ er eerst een andere naam, en je hebt in plaats daarvan een kopie opgeslagen, wat de snelste manier is om een backup te bewaren voordat je iets riskants verandert.

Moderne nano heeft ook gewoon opslaan op ^S, dezelfde toets die elk grafisch programma gebruikt. Hij schrijft het bestand meteen weg, zonder enige vraag:

                                [ Wrote 1 line ]

Zodra een buffer niet-opgeslagen wijzigingen bevat, markeert de titelbalk hem met een sterretje, zodat je het altijd in een oogopslag ziet:

  GNU nano 7.2                     notes.txt *

4.3 Er weer uit komen

Dit is de vraag die mensen naar een zoekmachine stuurt, en in nano staat het antwoord op het scherm: ^X voor Exit. Heb je niets veranderd, dan sluit nano gewoon. Heb je dat wel, dan vraagt hij het eerst:

Save modified buffer?
 Y Yes
 N No           ^C Cancel

Die vraag kun je eerlijk beantwoorden, door de manier waarop nano werkt. Een bestand openen vergrendelt of verandert het niet. nano leest een kopie in het geheugen, de buffer, en elke toetsaanslag bewerkt die kopie. Het bestand op schijf blijft onaangeroerd tot je opslaat, en daarom gooit N werkelijk alleen je wijzigingen weg en laat het origineel precies zoals het was.

Drie toetsen, drie uitkomsten, en geen ervan kan je verrassen:

  • Y slaat op en vraagt daarna om de bestandsnaam, precies zoals ^O.
  • N gooit je wijzigingen weg en sluit af.
  • ^C annuleert en zet je terug in het bestand.

Die vraag is de belangrijkste reden om naar nano te grijpen als je moe bent of onder druk staat om twee uur 's nachts. Het is heel lastig om per ongeluk werk kwijt te raken.

4.4 Dingen vinden

Zoeken is ^W, met het label Where Is. Typ je tekst en druk op Enter, en nano springt naar de volgende overeenkomst. Druk nogmaals op ^W en dan Enter om dezelfde zoekopdracht te herhalen.

Search:
^G Help         M-C Case Sens   M-B Backwards   ^P Older        ^T Go To Line
^C Cancel       M-R Reg.exp.    ^R Replace      ^N Newer

Kijk naar die rij opties, want die beantwoordt vragen waarvan mensen meestal aannemen dat nano ze niet aankan. M-C maakt het zoeken hoofdlettergevoelig, M-B zoekt achteruit, en M-R schakelt over op reguliere expressies. Zoeken en vervangen is ^\, of ^R vanuit de zoekprompt.

4.5 Knippen en plakken

De ene sneltoets die je meteen uit je hoofd moet leren is ^K, die de hele huidige regel knipt. Druk er een paar keer achter elkaar op en de regels stapelen zich op, dus ^K^K^K knipt drie regels als een blok. ^U plakt ze terug.

^K    cut this line (repeat to cut several lines as one block)
^U    paste

Dit paar is hoe het meeste echte configuratiewerk gedaan wordt: knip een regel, plak hem ergens anders, of knip hem, typ hem goed over en ga verder. Let op: dit is het eigen klembord van nano, niet dat van het systeem, dus plakken in een ander venster gaat nog steeds via de normale plakfunctie van je terminal.

Naar boven

5. Gemiddelde toepassingen

5.1 De sneltoetsnotatie lezen

Twee voorvoegsels komen overal in nano voor, en de ingebouwde hulp (^G) legt ze precies uit:

Shortcuts are written as follows: Control-key sequences are notated with
a '^' and can be entered either by using the Ctrl key or pressing the Esc
key twice.  Meta-key sequences are notated with 'M-' and can be entered
using either the Alt, Cmd, or Esc key, depending on your keyboard setup.

Dus ^K is Ctrl+K en M-U is Alt+U. Het detail dat je moet onthouden is het alternatief: twee keer op Esc drukken werkt als Ctrl, en een keer op Esc drukken werkt als Alt. Dat doet ertoe als je op een Mac zit, in een terminal die Alt-combinaties opslokt, of op een console op afstand waar de modificatietoetsen verminkt aankomen. Doet M-U niets, druk dan op Esc en daarna op U.

5.2 Ongedaan maken, wat nano wel degelijk heeft

Een verrassend aantal mensen denkt dat nano niets ongedaan kan maken. Hij heeft die functie al sinds 2008 en ze werkt voor elke bewerking, inclusief knippen, plakken en uitvullen:

M-U    undo the last operation
M-E    redo the last undone operation

Ze staan niet op de twee sneltoetsregels, en precies daarom houdt de mythe stand. Onderaan het scherm staan de twaalf meest gebruikte commando's, niet allemaal. ^G toont de rest.

5.3 Tekst selecteren zonder muis

Wil je met een blok werken in plaats van met hele regels, zet dan een markering, verplaats de cursor, en de tekst ertussen is geselecteerd:

M-A  (or ^6)   set the mark where the cursor is
               then move the cursor; the region highlights
^K             cut the marked region
M-6            copy the marked region
^O             save just the marked region to a separate file

Op de meeste moderne terminals kun je ook gewoon Shift ingedrukt houden en de pijltjestoetsen gebruiken, waarmee je tekst selecteert zoals in elk ander programma. Elke cursorbeweging zonder Shift heft die selectie op.

5.4 Snel bewegen

ToetsenGaat naar
^/ of M-G Een specifiek regelnummer (en eventueel kolomnummer)
M-\ / M-/ De eerste regel / de laatste regel van het bestand
^Y / ^V Vorige pagina / volgende pagina
^A / ^E Begin / einde van de huidige regel
^C Geen commando: het meldt waar de cursor staat
M-] Het bijbehorende haakje

Die ^C verdient een waarschuwing. In vrijwel elk ander terminalprogramma betekent ^C "stop". In nano toont hij je positie in het bestand en onderbreekt hij niets. Om nano te verlaten heb je ^X nodig.

5.5 Vlaggen die het kennen waard zijn

Regelnummers maken foutmeldingen veel makkelijker om iets mee te doen, en -l (kort voor linenumbers) zet ze aan:

$ nano -l notes.txt

  GNU nano 7.2                   notes.txt
 1 Dear reader,
 2
 3 This is a small file opened in nano.
 4 The third line is here.
 5

Nog een paar die hun plek in het dagelijks werk verdienen:

VlagLange vormWat het doet
-l --linenumbers Toon regelnummers aan de linkerkant
-v --view Open alleen-lezen, zodat je het bestand niet per ongeluk verandert
-S --softwrap Toon lange regels afgebroken op het scherm, zonder het bestand te wijzigen
-m --mouse Laat je klikken om de cursor te plaatsen
-B --backup Bewaar bij het opslaan een backup van de vorige versie
-E --tabstospaces Voeg spaties in als je op Tab drukt
-i --autoindent Behoud de inspringing van de vorige regel

De alleen-lezenmodus verdient een aparte vermelding voor het lezen van logbestanden en configuraties van anderen. In de titelbalk staat View, en elke toets die iets zou veranderen wordt geweigerd:

  GNU nano 7.2                     notes.txt                     View

                        [ Key is invalid in view mode ]

5.6 Meerdere bestanden tegelijk

nano kan meer dan een bestand open hebben. ^R leest een ander bestand in de huidige buffer op de cursorpositie, en ^R gevolgd door M-F opent het juist in een aparte buffer. Met meerdere buffers open wissel je ertussen met M-> en M-<.

$ nano file1.conf file2.conf     # open both at once

Twee dingen op het scherm veranderen om je te vertellen dat je in deze modus zit. De titelbalk vervangt de versie door een teller, en de onderste regel zegt nu Close in plaats van Exit, want ^X sluit het huidige bestand en laat het andere open:

  [1/2]                         file1.conf

                              [ file1.conf -- 1 line ]
^G Help      ^O Write Out ^W Where Is  ^K Cut       ^T Execute   ^C Location
^X Close     ^R Read File ^\ Replace   ^U Paste     ^J Justify   ^/ Go To Line
Naar boven

6. Gevorderde toepassingen

6.1 Het configuratiebestand

nano leest instellingen uit /etc/nanorc voor het hele systeem en uit ~/.nanorc voor jou persoonlijk. Het systeembestand op Debian en Ubuntu bestaat vrijwel geheel uit commentaar; slechts een paar regels zijn echt actief:

$ grep -vE '^\s*#|^\s*$' /etc/nanorc
set historylog
set locking
set stateflags
include "/usr/share/nano/*.nanorc"

Al het andere staat uit en wacht af. Je eigen ~/.nanorc overschrijft het, en dit is een redelijk startpunt:

set linenumbers          # show line numbers
set softwrap             # wrap long lines on screen only
set autoindent           # keep the indent of the previous line
set tabsize 4            # a tab looks four columns wide
set tabstospaces         # pressing Tab inserts spaces
set constantshow         # always show the cursor position
set backup               # keep a ~ backup of the previous version
set mouse                # allow clicking to move the cursor

Elke optie in dat bestand heeft een tweelingbroer op de commandoregel, dus alles wat je permanent kunt instellen, kun je ook eerst een keer met een vlag uitproberen voordat je je eraan vastlegt.

6.2 Syntaxkleuring

Die include-regel in /etc/nanorc doet meer dan hij lijkt. Hij laadt een map met syntaxdefinities, en op een standaard Ubuntu-installatie zijn dat er 42:

$ ls /usr/share/nano/*.nanorc | wc -l
42

$ ls /usr/share/nano/ | head
asm.nanorc      c.nanorc        css.nanorc      go.nanorc
autoconf.nanorc changelog.nanorc default.nanorc  groff.nanorc
awk.nanorc      cmake.nanorc    elisp.nanorc    guile.nanorc

nano kiest er een door de bestandsnaam te matchen, dus script.sh, site.conf of playbook.yml openen kleurt het bestand automatisch, zonder instellen. Heeft een bestand geen extensie, forceer het dan met -Y:

$ nano -Y sh /usr/local/bin/deploy      # treat it as a shell script

6.3 Tabs versus spaties

Dit doet er op een server meer toe dan in een tekstdocument, want verschillende bestandsformaten hechten sterk aan het verschil. Python en YAML willen spaties. Makefiles hebben echte tabtekens nodig en gaan zonder die tekens op verwarrende manieren stuk.

$ nano -E playbook.yml     # Tab inserts spaces
$ nano Makefile            # leave it alone: this file needs real tabs

Paragraaf 7.2 behandelt een verwant gedrag dat beide overschrijft en bijna iedereen verrast.

6.4 Regeleindes: het andere onzichtbare teken

Tabs zijn niet het enige dat je niet kunt zien. Unix beeindigt een regel met een enkele line feed (\n); Windows doet dat met een carriage return en een line feed (\r\n). Een shellscript dat op Windows geschreven is en naar een server geupload wordt, faalt met foutmeldingen die nergens op slaan, omdat de losse \r onderdeel wordt van het laatste woord op elke regel.

nano gaat hier goed mee om, en meldt het als het gebeurt. Open een bestand met Windows-regeleindes en de statusregel zegt het:

$ nano dos.txt

                  [ Read 2 lines (Converted from DOS format) ]

Het belangrijkste is wat er daarna gebeurt. nano onthoudt het formaat en schrijft het op dezelfde manier terug. Een Windows-bestand op een Linux-server bewerken zet het niet stilletjes om:

$ file dos.txt
dos.txt: ASCII text, with CRLF line terminators      # before

$ nano dos.txt        # make an edit, save, exit
$ file dos.txt
dos.txt: ASCII text, with CRLF line terminators      # after: unchanged

Dat is de juiste standaard, maar het betekent ook dat nano een kapot script niet voor je repareert. Wil je werkelijk Unix-regeleindes, vraag er dan om met -u (kort voor unix):

$ nano -u script.sh    # edit, save, exit
$ file script.sh
script.sh: ASCII text                                 # the CRs are gone

Je kunt het formaat ook voor een enkele keer omzetten: druk op ^O en de promptregel biedt M-D voor DOS-formaat en M-M voor Mac-formaat, die het bestand omzetten terwijl je het wegschrijft.

De derde vlag is de diagnostische. -N (kort voor noconvert) zegt nano niets om te zetten bij het lezen, zodat de carriage returns als ^M in de tekst verschijnen en je precies ziet waar je mee te maken hebt:

$ nano -N dos.txt

  GNU nano 7.2                     dos.txt
first line^M
second line^M

                                [ Read 2 lines ]

Faalt een script zonder zichtbare reden, dan is dat een snelle manier om te bewijzen dat de regeleindes de oorzaak zijn, voordat je iets gaat bewerken.

6.5 Toetsen opnieuw toewijzen

Vecht een sneltoets tegen je spiergeheugen, verander hem dan in ~/.nanorc. Zo laten mensen die van andere editors komen nano normaal aanvoelen:

bind ^Z undo main          # Ctrl+Z undoes, as everywhere else
bind ^Y redo main
bind ^F whereis main       # Ctrl+F searches
bind ^Q exit all

Het laatste woord is de context waarin de toewijzing geldt: main voor het bewerkvenster, all voor overal, inclusief prompts.

Die eerste regel is veiliger dan hij vroeger was. Oudere nano ging op ^Z naar de achtergrond en zette je terug in de shell tot je fg typte, wat mensen verraste die ongedaan maken verwachtten. Sinds nano 6.0 doet de kale toetsaanslag dat niet meer; hij vertelt je wat je in plaats daarvan moet indrukken:

                           [ To suspend, type ^T^Z ]

Dus ^Z opnieuw toewijzen aan ongedaan maken kost je nu niets, en wil je die functie met een enkele toets terug, dan vraag je er expliciet om met bind ^Z suspend main.

6.6 Beperkte modus

De vlag -R (kort voor restricted, beperkt) verhindert dat nano een ander bestand leest of schrijft dan het bestand dat hij meekreeg. Niet elders opslaan, geen andere bestanden inlezen, geen shellcommando's, niet naar de achtergrond.

$ nano -R /etc/motd

Dit bestaat voor situaties waarin nano namens iemand gestart wordt en geen manier mag worden om over het bestandssysteem te zwerven. Zet je ooit een beperkt account op dat een bestand mag bewerken, dan is dit de vlag die dat veilig maakt.

6.7 Commando's draaien zonder weg te gaan

^T heeft het label Execute. Druk erop en de sneltoetsregels veranderen in een menu dat makkelijk over het hoofd te zien is, want daar wonen verschillende losse functies:

Command to execute:
^G Help         M-F New Buffer  ^S Spell Check  ^J Full Justify ^V Cut Till End
^C Cancel       M-\ Pipe Text   ^Y Linter       ^O Formatter    ^Z Suspend

Typ een commando en de uitvoer wordt in je buffer ingevoegd, wat echt handig is als je een configuratie schrijft en een waarde van het systeem nodig hebt:

^T   then type:  ip -4 addr show
     the command output lands in the file

M-F stuurt de uitvoer eerst naar een nieuwe buffer, zodat je bestand onaangeroerd blijft. M-\ stuurt de buffer door een commando heen en vervangt hem door het resultaat, zodat je een lijst kunt sorteren of een blok kunt herformatteren met elk gereedschap op het systeem. De spellingcontrole, de linter en de formatter hangen aan hetzelfde menu, waar een syntax ze definieert.

6.8 nano als systeemeditor

Veel programma's openen "de editor" zonder dat jij er een kiest: crontab -e, git commit, visudo, sudoedit. Op Debian en Ubuntu is die editor nano, aangesloten via het alternatievensysteem:

$ update-alternatives --display editor
editor - auto mode
  link best version is /bin/nano
  link currently points to /bin/nano
  link editor is /usr/bin/editor

Twee omgevingsvariabelen overschrijven dat voor jouw account. EDITOR is de algemene, en VISUAL krijgt voorrang in programma's die beide controleren:

export EDITOR=nano
export VISUAL=nano        # put these in ~/.bashrc to make them stick

Git houdt zijn eigen instelling aan, die het wint van beide variabelen, dus stel die apart in als je commitberichten op de commandoregel schrijft:

$ git config --global core.editor "nano"
$ git config --global core.editor        # check what it is now
nano

Wil je het systeembreed veranderen op Debian of Ubuntu, gebruik dan select-editor voor je eigen account of update-alternatives --config editor als root. Dit is de moeite waard om bewust in te stellen: het slechtste moment om te ontdekken dat je server standaard vi opent, is halverwege een visudo-sessie.

Naar boven

7. Iets wat de meeste gebruikers niet weten

7.1 De vlag -w die iedereen aanraadt is nu de standaard

Zoek naar advies over het bewerken van configuratiebestanden met nano en je krijgt keer op keer te horen dat je nano -w moet gebruiken. De reden was echt: oudere nano brak lange regels automatisch af om ze op het scherm te laten passen, waardoor een configuratieregel over twee regels gesplitst kon worden en een dienst niet meer startte. -w zette dat uit.

Kijk wat nano --help vandaag over die vlag zegt:

$ nano --help | grep -- '-w '
 -w             --nowrap                Don't hard-wrap long lines [default]

Die laatste twee woorden zijn het punt. Het gedrag draaide om in nano 4.0, uitgebracht in maart 2019, en de release-notities zijn er expliciet over:

2019.03.24 - GNU nano 4.0 "Thy Rope of Sands"
- An overlong line is no longer automatically hard-wrapped.
- Option --breaklonglines (-b) turns automatic hard-wrapping back on.

Dus -w werkt nog steeds, maar hij vraagt om iets wat je al hebt. Hem typen is een onschuldige gewoonte, geen bescherming.

Het interessantere deel is wat het gevaar werkelijk was, want de gangbare beschrijving ervan klopt niet. Afbreken werd nooit veroorzaakt door alleen maar een bestand openen en opslaan. Neem een lange configuratieregel, open hem met afbreken bewust aangezet, sla hem onaangeraakt op, en er gebeurt niets:

$ nano -b httpd.conf      # open, save, exit without typing
$ diff httpd.conf httpd.conf.orig
                          # no output: the file is unchanged

De regel breekt alleen af als je erin typt en hem voorbij de afbreekkolom duwt. Hier is hetzelfde bestand twee keer bewerkt, een keer met afbreken aan en een keer met de huidige standaard, waarbij er nog een host achteraan een lange regel gezet wordt:

# with -b (--breaklonglines), 2 lines became 3:
# comment
AllowedHosts host-one.example.com host-two.example.com
host-three.example.com host-four.example.com host-five.example.com host-six.example.com

# with the modern default, still 2 lines:
# comment
AllowedHosts host-one.example.com host-two.example.com host-three.example.com host-four.example.com host-five.example.com host-six.example.com

Dat eerste resultaat is een kapot configuratiebestand. Er is nog een voorwaarde: nano kan een regel alleen bij witruimte afbreken. Een lange, ononderbroken waarde, zoals een TLS-cipherlijst die met dubbele punten aan elkaar hangt, overleeft het zelfs met afbreken aan, omdat er nergens is om af te breken.

Sinds 2019 is het veilige gedrag de standaard, en de echte regel was nooit "nano verminkt bestanden die je opent". Hij was "nano herformatteerde vroeger regels waarin je typte". Beide zijn het weten waard, want er draaien nog volop servers met oudere versies.

7.2 Tab voegt niet altijd een tab in

Druk in nano op Tab en je verwacht een tabteken. Open een YAML-bestand en je krijgt iets heel anders. Hier is dezelfde toetsaanslag in twee bestanden, met de bytes in hexadecimale notatie:

$ nano plain.txt     # press Tab, save
$ od -An -tx1 plain.txt
  09  6c  69  6e  65  0a              # 09 = a real tab

$ nano conf.yml      # press Tab, save
$ od -An -tx1 conf.yml
  20  20  6c  69  6e  65  0a          # 20 20 = two spaces

Niets in jouw configuratie veroorzaakte dit. De reden is een regel in het YAML-syntaxbestand dat met nano meekomt:

$ grep tabgives /usr/share/nano/yaml.nanorc
tabgives "  "

De opdracht tabgives laat de Tab-toets een opgegeven tekenreeks produceren voor bestanden die bij die syntax horen, en de handleiding merkt op dat dit de instelling tabstospaces overschrijft. Een syntaxbestand wint dus stilletjes van je eigen ~/.nanorc.

In dit geval doet het je een plezier, want YAML verbiedt tabs voor inspringing en een per ongeluk ingevoegde tab in een Ansible-playbook of een docker-compose-bestand is een parseerfout. Maar het is goed om te weten dat de regel bestaat, want hij verklaart gedrag dat er anders als een bug uitziet, en omdat je dezelfde regel met extendsyntax aan een eigen syntax kunt toevoegen.

7.3 Je werk overleeft een weggevallen verbinding

Deze heeft echt werk gered. Je bewerkt een bestand via SSH, de verbinding valt weg, en de editor verdwijnt met alles wat je getypt hebt. Behalve dat dat niet gebeurt.

Als nano gedood wordt door een hangup, precies wat een weggevallen SSH-sessie stuurt, schrijft hij de niet-opgeslagen buffer weg naar een bestand dat naar het origineel genoemd is met .save erachter, en laat hij het origineel onaangeroerd:

$ ls
crash.txt  crash.txt.save

$ cat crash.txt              # the original, exactly as it was
original line

$ cat crash.txt.save         # everything you had typed
UNSAVED WORK original line

Ben je ooit midden in het bewerken je verbinding kwijtgeraakt en nam je aan dat het werk weg was, kijk dan in de map. Het staat er waarschijnlijk nog.

Er is een bijbehorende functie op Debian en Ubuntu, aangezet door die regel set locking in /etc/nanorc. Zolang nano een bestand open heeft, maakt hij er een lockbestand naast aan, en het systeem kan je precies vertellen wat het is:

$ file .notes.txt.swp
.notes.txt.swp: Nano swap file, pid 109282, user pe7er, host xps, file notes.txt

Open hetzelfde bestand in een tweede venster en nano waarschuwt dat iemand anders het al bewerkt, wat voorkomt dat twee beheerders elkaar stilletjes overschrijven op een gedeelde server. Het lockbestand verdwijnt als nano netjes afsluit. Een achtergebleven .swp-bestand betekent meestal dat een sessie gesneuveld is, en het is veilig te verwijderen zodra je zeker weet dat niemand aan het bewerken is.

7.4 Weten waar nano ophoudt

Een deel van vakmanschap is weten wanneer je naar iets anders grijpt. nano is het juiste gereedschap om een paar regels in een bestand op een server te veranderen. Hij is niet het juiste gereedschap voor alles.

BehoefteGebruikWaarom
Bewerken op een systeem waar nano ontbreekt vi nano is niet gegarandeerd. Alpine, de meeste containers en veel rescue-images geven je BusyBox, waar vi een symlink is naar /bin/busybox
Hetzelfde wijzigen in 200 bestanden sed Voor bewerken via een script heb je helemaal geen interactieve editor nodig
Een groot logbestand lezen less Opent meteen zonder het hele bestand te laden, en kan het niet wijzigen
Zwaar bewerken, macro's, veel bestanden vim of emacs Modaal bewerken en macro's betalen de leercurve terug als je de hele dag tekst bewerkt
Een serverbestand bewerken vanaf je desktop Een editor via SSH of sshfs Je normale gereedschap, terwijl het bestand op de server blijft staan
Een systeembestand veilig bewerken sudoedit Bewerkt een kopie als jezelf en installeert die daarna als root, zodat de editor nooit met rootrechten draait

Die laatste rij is het waard om als gewoonte over te nemen. sudo nano /etc/iets geeft een volledige editor rootrechten, en van binnenuit kunnen ^R en ^T elk bestand op het systeem bereiken. sudoedit /etc/iets geeft je dezelfde bewerking met veel minder blootgesteld.

Naar boven

8. Best practices

  • Leer vier toetsen en je bent klaar. ^O opslaan, ^X afsluiten, ^W zoeken, ^K knippen. De rest lees je van het scherm af wanneer je het nodig hebt.
  • Maak een backup voordat je iets belangrijks bewerkt. Doe eerst cp bestand bestand.bak, of gebruik ^O met een andere bestandsnaam, of zet set backup permanent aan.
  • Gebruik sudoedit in plaats van sudo nano. Hetzelfde resultaat, en de editor draait nooit als root.
  • Open logbestanden en configuraties van anderen met -v. De alleen-lezenmodus haalt de kans weg dat een verdwaalde toetsaanslag een bestand verandert waar je alleen naar wilde kijken.
  • Zet regelnummers aan. set linenumbers in ~/.nanorc verdient zichzelf terug de eerste keer dat een dienst een fout op regel 214 meldt.
  • Controleer het bestand nadat je het opgeslagen hebt. Een snelle diff tegen je backup, of de eigen configuratietest van de dienst (nginx -t, apachectl configtest, sshd -t), vangt fouten op voordat een herstart dat doet.
  • Ken je terugvaloptie. Leer net genoeg vi om een bestand te openen, een regel te wijzigen en op te slaan (i, Esc, :wq). Ooit staat nano er niet.
  • Vecht niet tegen de editor. Vertraagt nano je bij echt bewerkwerk, dan is dat een signaal om vim te leren, niet om vijftig toetstoewijzingen toe te voegen.
  • Grijp naar de documentatie. ^G in nano is een volledig toetsenoverzicht, en het is er altijd.
$ man nano             # the program
$ man nanorc           # every configuration option
$ nano --help          # the flags, with their long forms
  ^G                   # the built-in key reference, from inside nano
Naar boven

9. Veelgemaakte fouten

9.1 Veelvoorkomende mythes

MytheWerkelijkheid
"Gebruik altijd nano -w of hij verwoest je configuratie." Sinds nano 4.0 (2019) is dat de standaard. --help markeert -w letterlijk als [default].
"nano kan niets ongedaan maken." M-U maakt ongedaan en M-E doet opnieuw. Ze staan alleen niet op de twee sneltoetsregels.
"^C sluit af, net als overal." In nano meldt ^C de cursorpositie. Afsluiten is ^X.
"nano staat op elk Linux-systeem." Op de meeste wel, maar niet op Alpine, niet in de meeste containers, en niet in veel rescue-images. vi is de veiligere aanname.
"nano kan geen reguliere expressies." M-R bij de zoekprompt zet ze aan, voor zowel zoeken als vervangen.
"De Tab-toets voegt een tabteken in." Niet in YAML-bestanden, waar het meegeleverde syntaxbestand tabgives " " zet en je eigen instellingen overschrijft.

9.2 Valkuilen om te vermijden

  • Een bestand bewerken waar je geen schrijfrechten op hebt. nano opent het vrolijk en klaagt pas als je probeert op te slaan, nadat je het werk gedaan hebt. Controleer het vooraf, of open het met sudoedit.
  • Aannemen dat een opgeslagen bestand een werkende dienst betekent. Bewerken is niet toepassen. Herlaad of herstart de dienst, en test eerst de configuratie waar de dienst dat aanbiedt.
  • Een groot blok in een terminal plakken. Automatisch inspringen en de afhandeling door de terminal zelf kunnen het verminken. Zet set autoindent uit voor het plakken, of breng het bestand met scp over.
  • Een Makefile bewerken met set tabstospaces aan. Makefiles hebben echte tabtekens nodig, en de fout die je krijgt is berucht onbehulpzaam.
  • Verwachten dat nano Windows-regeleindes repareert. Hij behoudt het formaat dat hij aantrof, dus een CRLF-script blijft een CRLF-script. Gebruik nano -u, of dos2unix, als je het omgezet wilt hebben.
  • .save- en .swp-bestanden laten slingeren. Ze zijn nuttig voor herstel en daarna rommel. Ruim ze op zodra je hebt wat je nodig had.
  • Uit gewoonte sudo nano draaien. Een editor als root kan van binnenuit alles op het systeem lezen en schrijven.
  • Vertrouwen op spiergeheugen van andere editors. ^S slaat in moderne nano wel op, maar ^C meldt je positie in plaats van af te sluiten, en ^Z maakt niets ongedaan tenzij je hem zelf toewijst.
  • Vergeten dat het bestand elders nog open staat. Op een gedeelde server overschrijven twee mensen die dezelfde configuratie bewerken elkaar stilletjes, tenzij vergrendeling aanstaat.
Naar boven

10. Samenvatting

nano is de editor die je gebruikt als het om het bestand gaat en niet om het bewerken. Hij vraagt vooraf niets van je en het is heel lastig om er werk in kwijt te raken.

  • nano is een terminaleditor zonder modi die zijn eigen sneltoetsen onderaan afdrukt. ^ betekent Ctrl, M- betekent Alt, en twee keer op Esc drukken werkt als Ctrl wanneer je toetsenbord tegenwerkt.
  • De naam is een recursieve grap, "Nano's ANOther editor". Hij begon als TIP (Tip Isn't Pico) en werd in januari 2000 hernoemd omdat het commando tip al bestond.
  • Hij bestaat omdat Pico, de editor in de Pine-mailclient, een licentie had die hem uit Linux-distributies hield. Chris Allegretta schreef eind 1999 in een weekend een GPL-kloon.
  • De vier toetsen die ertoe doen: ^O opslaan, ^X afsluiten, ^W zoeken, ^K knippen met ^U om te plakken. ^S slaat zonder vragen op.
  • Hij heeft wel degelijk ongedaan maken (M-U), opnieuw doen (M-E), zoeken met reguliere expressies (M-R) en tekstselectie (M-A, of Shift met de pijltjestoetsen).
  • ~/.nanorc stelt hem permanent in; elke instelling heeft een tweelingvlag op de commandoregel. Syntaxkleuring gaat automatisch, vanuit 42 definities in /usr/share/nano.
  • nano -w is advies van voor 2019. nano 4.0 maakte het de standaard, en het afbreekgevaar gold altijd alleen voor regels waarin je typte, en alleen bij witruimte.
  • Tab voegt niet altijd een tab in: de meegeleverde YAML-syntax zet tabgives " ", wat tabstospaces overschrijft.
  • nano herkent Windows-regeleindes, meldt het, en schrijft ze onveranderd terug. -u zet om naar Unix, -N toont de carriage returns als ^M zodat je een falend script kunt diagnosticeren.
  • Een weggevallen verbinding laat je niet-opgeslagen werk achter in bestandsnaam.save, en een open bestand wordt bewaakt door een .swp-lockbestand.
  • Kies sudoedit boven sudo nano, en leer net genoeg vi voor de systemen waar nano niet geinstalleerd is.

Dit is het overzicht dat je het beste kunt bewaren:

nano file              open a file
nano +47 file          open with the cursor on line 47
nano -l file           show line numbers
nano -v file           read-only, cannot change the file
nano -E file           Tab inserts spaces
nano -u file           save with Unix (LF) line endings
nano -N file           show Windows carriage returns as ^M
sudoedit file          edit a root-owned file without a root editor

^O    write out (save)          ^X    exit
^S    save, no prompt           ^G    the full key reference
^W    search                    ^\    search and replace
^K    cut a line                ^U    paste
M-U   undo                      M-E   redo
M-A   set the mark              M-6   copy the marked region
^/    go to line number         ^C    show cursor position
^T    run an external command   ^R    read another file in
M-]   jump to matching bracket  ^Y/^V page up / page down

Kleine gereedschappen als nano zijn waar veel serverwerk werkelijk gebeurt: die ene regel in een virtual host, die instelling in een cron-bestand, die typefout die om vier uur 's middags een site offline haalde.

Naar boven
Linux commando: nano
Peter Martin
Peter Martin
Joomla Specialist

Peter is Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.

Gerelateerde artikelen