Focus op Linux:
ls
door Peter Martin /
db8.nl
slides:
https://petermartin.nl
--- ### Waarom `ls` belangrijk is - `ls` is je
info over bestandssysteem
.
Je gebruikt het voordat je bestanden
kopieert, verplaatst, verwijdert of bewerkt. - Het is
veilig
: `ls` *leest* alleen en verandert niets. - Een handvol
opties
: `-l`, `-a`, `-h`, `-t`, `-r`, `-R` ---- ### De denkwijze > Een directory =
lijst van namen die naar bestanden wijzen
. `ls` leest die lijst en toont hem aan jou. Elke
optie
is een
andere vraag over die lijst
:
"laat me de verborgen bestanden zien", "sorteer op tijd",
"geef me de details", "volg het de submappen in".
---
1. De basis
---- ### 1.1 Waar `ls` voor staat `ls` =
l
i
s
t (list directory contents).
Vroeger:
Typen op
trage teletypeterminals
:
elke toetsaanslag telde.
Dus klinkers werden weggelaten: korte commando's
(`cp`, `mv`, `rm`, `cd`, `ls`…).
---- ### 1.2 Een beetje geschiedenis - `ls` kwam van
Multics
(voorloper Unix)
in
Unix 1st Edition, Bell Labs 1971
. - In
elk Unix-achtig systeem
:
Linux, macOS, BSD, Solaris, AIX. - Meeste Linux-systemen: -
GNU coreutils
-versie van `ls` - macOS/BSD:
BSD
-versie (voor 95% hetzelfde). ---- ### 1.2 Een beetje geschiedenis | Tijdperk | Mijlpaal | |---|---| | ~1965 | `ls` bestaat in Multics | | 1971 | Verschijnt in Unix 1st Edition | | jaren '80 | BSD voegt kleur, kolommen en `-G` toe | | Vandaag |
GNU coreutils
`ls` op de meeste Linux-distributies | > `ls` ruim
50 jaar oud
. In essentie onveranderd. ---- ### 1.3 Simpel gebruik Typ `ls` zonder iets erbij → toont de
huidige directory
: ```bash $ ls Documents Downloads Music Pictures notes.txt todo.md ``` - Standaard
alfabetisch
gesorteerd. - Gerangschikt in
kolommen
om in je terminal te passen. -
Verborgen bestanden worden niet getoond
. ---- ### 1.3 Het naar een pad laten wijzen ```bash $ ls /etc # een specifieke directory $ ls Documents # een submap via relatief pad $ ls notes.txt # bevestig dat één bestand bestaat $ ls Documents Downloads # meerdere dingen tegelijk ``` > Toont `ls` bestandsnaam?
bestand bestaat + directory leesbaar.
> Foutmelding? verkeerde pad of geen rechten. ---- ### 1.4 Verborgen bestanden:
`-a`
punt
(`.`) naam bestanden zijn "verborgen".
`-a` (
a
ll) maakt ze zichtbaar: ```bash $ ls -a . .. .bashrc .config .ssh Documents notes.txt ```
| Item | Betekenis | |---|---| | `.` |
Deze
directory | | `..` | De
bovenliggende
directory | | `.bashrc` | Een verborgen configuratiebestand | > `-A` ("Almost All") verbergt `.` en `..`
---- ### 1.5 Het lange formaat:
`-l`
`-l` (
l
ong) toont één bestand per regel met alle details: ```bash $ ls -l drwxr-xr-x 2 peter staff 4096 Jun 1 09:14 Documents -rw-r--r-- 1 peter staff 1234 May 28 17:02 notes.txt ``` ``` -rw-r--r-- 1 peter staff 1234 May 28 17:02 notes.txt └────┬────┘ │ │ │ │ │ │ rechten │ eigenaar groep grootte datum naam links ``` ---- ### 1.5 Een regel in lang formaat: | Kolom | Wat het je vertelt | |---|---| | `-rw-r--r--` | Bestandstype + rechten (deel 3) | | `1` | Aantal hard links | | `peter` | Eigenaar | | `staff` | Groep | | `1234` | Grootte in bytes | | `May 28 17:02` | Tijdstip laatste wijziging | | `notes.txt` | De naam | ---
2. De dagelijkse opties
---- ### 2.1 Leesbare groottes: `-h` `-h` (
h
uman) zet ze om naar K, M, G. Werkt samen met `-l`: ```bash $ ls -lh -rw-r--r-- 1 peter staff 1.2K May 28 17:02 notes.txt -rw-r--r-- 1 peter staff 45M May 30 11:20 video.mp4 ``` ---- ### 2.2 Opties combineren Unix-opties = losse letters
samenvoegbaar
achter één streepje stapelen
.
Deze zijn allemaal identiek: ```bash $ ls -l -a -h $ ls -lah $ ls -hal $ ls -alh # de volgorde van de letters maakt niet uit ``` > `ls -lah` — long, all, human
---- ### 2.3 Sorteren | Optie | Sorteert op | Typisch gebruik | |---|---|---| | `-t` |
Tijd
(nieuwste eerst) | "Wat heb ik net gewijzigd?" | | `-S` |
Grootte
(grootste eerst) | "Wat vreet mijn schijf op?" | | `-X` |
Extensie
| Groeperen per bestandstype | | `-v` |
Versie
/ natuurlijke volgorde | `file2` vóór `file10` | | `-r` |
Omgekeerd
elke sortering | Combineer met bovenstaande | ---- ### 2.3 Sorteren in de praktijk ```bash $ ls -lt # nieuwste bovenaan $ ls -ltr # nieuwste ONDERAAN — handig in een drukke logmap $ ls -lhS # grootste bestanden eerst, leesbare groottes ``` > `ls -ltr` handig voor systeembeheerders:
> meest recent gewijzigde bestand op
laatste regel
,
> vlak boven de prompt dus makkelijkst te lezen. ---- ### 2.4 Types markeren: `-F` `-F` (classi
F
y) voegt een type symbool toe: ```bash $ ls -F Documents/ script.sh* notes.txt link@ ``` | Achtervoegsel | Betekent | |---|---| | `/` | Directory | | `*` | Uitvoerbaar bestand | | `@` | Symbolische link | | `\|` | Een named pipe (FIFO) | ---- ### 2.4 De directory zelf:
`-d`
`-d` (
d
irectory) toont het
eigen item
van een directory: ```bash $ ls -ld Documents drwxr-xr-x 2 peter staff 4096 Jun 1 09:14 Documents ``` > Zonder `-d` toont
> `ls Documents`
> bestanden in Documents. ---- ### 2.5 Kleur Veel distributies: `ls` alias voor `ls --color=auto`
directories, links en uitvoerbare bestanden krijgen automatisch kleuren. ```bash $ ls --color=auto # GNU/Linux $ ls -G # BSD / macOS $ alias # Toont alle aliassen ``` > Kleuren uit `LS_COLORS` alleen voor weergave.
> pipe `ls` naar een ander commando, dan zonder kleuren. ---
3. Het lange formaat lezen
---- ### 3.1 De rechten Lees 1e kolom van `ls -l` in
vier stukjes
: ``` - rwx r-x r-- │ │ │ │ type eigenaar groep anderen ``` -
Eerste teken
= het *type* bestand. - Dan
negen
groepen van `rwx`
-
r
ead,
w
rite, e
x
ecute (lezen, schrijven, uitvoeren)
voor eigenaar, groep en alle anderen. ---- ### 3.1 `rwxr-xr--` ontcijferen ``` -rwxr-xr-- │└┬┘└┬┘└┬┘ │ │ │ └─ anderen: alleen lezen │ │ └──── groep: lezen + uitvoeren │ └─────── eigenaar: lezen + schrijven + uitvoeren └───────── gewoon bestand ``` > Een streepje betekent "recht afwezig".
>
rwx
r-x
r--
lees je als:
de eigenaar mag alles,
de groep mag lezen en uitvoeren,
anderen mogen alleen lezen. ---- ### 3.2 Het type-teken Het 1e teken = *wat voor soort* ding: | Teken | Type | |---|---| | `-` | Gewoon bestand | | `d` | Directory | | `l` | Symbolische link | | `c` | Character device (bijv. een terminal) | | `b` | Block device (bijv. een schijf) | | `p` | Named pipe (FIFO) | | `s` | Socket | ---- ### 3.2 Types in het wild ```bash $ ls -l /dev | head crw-rw-rw- 1 root root 1, 3 Jun 2 08:00 null brw-rw---- 1 root disk 8, 0 Jun 2 08:00 sda ``` > doe een keer `ls -l /dev`
om de `c`- en `b`-types te zien
->
"alles is een bestand"
. ---- ### 3.3
Inodes
en de optie
`-i`
Elk bestand =
inode
, een genummerd record
met metadata en verwijzingen naar de data.
*bestandsnaam* = alleen een label die naar een inode wijst. ```bash $ ls -li 1310721 -rw-r--r-- 1 peter staff 1234 May 28 17:02 notes.txt 1310722 -rw-r--r-- 2 peter staff 512 May 28 17:05 original.txt 1310722 -rw-r--r-- 2 peter staff 512 May 28 17:05 hardlink.txt ``` > `original.txt` en `hardlink.txt` delen
inode
1310722
en een linkteller van
2
.
> Twee namen voor *hetzelfde* bestand. Die kolom met de linkteller wordt opeens logisch. ---
4. Dieper graven
---- ### 4.1 Recursief weergeven: `-R` `-R` (
R
ecursive) toont inhoud elke submap: ```bash $ ls -R Documents Documents: invoices letters notes.txt Documents/invoices: 2025.pdf 2026.pdf Documents/letters: draft.md ``` ---- ### 4.2 De andere tijdstempels Elk bestand heeft
drie
tijden.
`ls `
`-l`
toont standaard de
wijzigingstijd
: | Optie | Toont | Betekenis | |---|---|---| | (standaard) |
mtime
| Inhoud laatst **gewijzigd** | | `-u` (met `-lt`) |
atime
| Inhoud laatst **benaderd** | | `-c` (met `-lt`) |
ctime
| **Metadata** laatst gewijzigd | | `--time-style=full-iso` | — | De volledige, precieze tijdstempel | ---- ### 4.2 Precieze tijdstempels ```bash $ ls -l --time-style=full-iso notes.txt -rw-r--r-- 1 peter staff 1234 2026-05-28 17:02:41.000000000 +0200 notes.txt ``` > Veel mensen beseffen nooit dat `ls` ook de *toegangs*- en *metadata-wijzigings*tijden kan tonen, niet alleen de wijzigingstijd. `ls -lu` en `ls -lc` zijn de sleutels. ---- ### 4.3 Numerieke ID's en quoting | Optie | Effect | |---|---| | `-n` | Als `-l` maar met
numerieke
gebruikers-/groeps-ID's | | `-Q` | Zet namen tussen
"dubbele aanhalingstekens"
| | `-b` | Niet-afdrukbare tekens als
escape-codes
| | `-m` | Namen als één
komma-gescheiden
lijst | | `-Z` | De
SELinux-context
van elk bestand | ---- ### 4.3 Wanneer ze helpen ```bash $ ls -b my\ file\ with\ spaces.txt # spaties getoond als escapes $ ls -Z unconfined_u:object_r:user_home_t:s0 notes.txt # SELinux-context ``` ---- ### 4.4 Eén bestand per regel: `-1` `-1` (het
cijfer één
) forceert één kolom met één naam per regel.
```bash $ ls -1 Documents Downloads notes.txt ``` > Uitvoer naar een pipe of bestand?
> Dan automatisch al naar één per regel. ---
5. `ls` in de praktijk
---- ### 5.1
Globbing
— shell zoekt match `ls *.txt`:
shell
regelt `*`, en vindt overeenkomende namen vóórdat `ls` ooit draait. ```bash $ ls *.txt # alle .txt-bestanden in deze map $ ls Doc* # alles dat met "Doc" begint $ ls report-?.md # ? = precies één teken $ ls *.{jpg,png} # brace-expansie: jpg ÉN png ``` > `ls` zelf heeft
geen idee
wat `*` betekent.
> Daarom geeft `ls *.txt` de fout "No such file" wanneer er *niets* matcht
> Er was niets om aan `ls` door te geven. ---- ### 5.2 `ls` output naar andere tools `ls` werkt samen met andere tools: ```bash $ ls | wc -l # tel items in een directory $ ls -lt | head # de 10 meest recent gewijzigde $ ls -lhS | head # de grootste bestanden $ ls *.log | xargs rm # verwijder elk .log-bestand $ ls -1 | grep -i invoice # filter de lijst ``` > ⚠️ "`ls` parsen" in scripts is fragiel — bestandsnamen kunnen spaties en newlines bevatten. > Voor scripting beter globs gebruiken (`for f in *.txt`) of `find -print0`. > Voor *interactief* gebruik is `ls` doorsluizen prima. ---- ### 5.3 De aliassen die iedereen maakt Veel Linux-gebruiker maken alias in `~/.bashrc`: ```bash alias ll='ls -lh' alias la='ls -lah' alias l='ls -CF' ``` > Typ `ll` en je krijgt lange, leesbare lijst. ---- ### 5.3 Een alias omzeilen ```bash $ alias ls # vaak: alias ls='ls --color=auto' $ \ls # draai de echte ls, negeer de alias $ command ls # hetzelfde, explicieter ``` > De backslash vooraan (`\ls`) of `command ls` draait de
echte binary
. ---- ### 5.4 Wanneer `ls` de verkeerde tool is | Behoefte | Gebruik | Waarom | |---|---|---| | Een boom
doorzoeken
| `find` | Filtert op naam/grootte/tijd/type | |
Metadata
van één bestand | `stat` | Alle drie de tijden, inode, blokken | | Een
directoryboom
-weergave | `tree` | Getekend als ingesprongen boom | ```bash $ stat notes.txt # alles wat ls -l toont, en veel meer ``` ---- ### 5.5 Moderne vervangers Sommigen gebruiken alternatieven,
maar `ls` =
altijd geïnstalleerd
. | Tool | Wat het toevoegt | |---|---| |
`exa` / `eza`
| Kleuren, iconen, git-status, boomweergave | |
`lsd`
| Iconen, moderne look, `ls`-compatibele opties | |
`tree`
| Een speciale recursieve boomweergave | ```bash $ eza --long --git --icons # een chique moderne lijst $ tree -L 2 # twee niveaus diep, als een boom ``` ---
6. Alles bij elkaar
---- ### 6.1 Onthoud combinaties | Commando | "Toon me…" | |---|---| | `ls` | …wat hier staat | | `ls -a` | …inclusief verborgen bestanden | | `ls -lh` | …met details en leesbare groottes | | `ls -lah` | …dat alles in één keer | | `ls -ltr` | …oudste→nieuwste (nieuwste onderaan) | | `ls -lhS` | …grootste bestanden eerst | | `ls -ld */` | …alleen de directories zelf | | `ls -li` | …met inode-nummers | | `ls -R` | …recursief, in elke submap | ---- ### 6.2 Altijd hulp beschikbaar Twee commando's geven offline info over ls: ```bash $ man ls # de volledige handleiding $ ls --help # een snel optieoverzicht (GNU) $ info coreutils 'ls invocation' # de uitgebreide GNU-handleiding ``` ---- ### 6.3 Drie mythes | Mythe | Werkelijkheid | |---|---| | "Kleur zit ingebouwd in `ls`." | Meestal een
shell-alias
. Draai `\ls` en het verdwijnt. | | "`ls` is een Linux-commando." | Het is een
Unix
-commando, ~20 jaar ouder dan Linux. | | "`ls -l` toont alles." | Het verbergt dotfiles. Je hebt
`ls -la`
nodig. | > Kleur leeft in een *alias*, de geschiedenis gaat terug tot *Unix*, en "alles" betekent altijd *vergeet `-a` niet*. ---
7. Belangrijkste punten
---- ### Belangrijkste punten
-
`ls` = "list"
— uit Unix in 1971 (Multics daarvoor), op elk Unix-achtig systeem. - Het is
alleen-lezen en veilig
— het perfecte commando om mee te verkennen. -
`-a`
onthult verborgen bestanden,
`-l`
het lange formaat,
`-h`
leesbare groottes. `ls -lah` combineert alle drie. - De eerste kolom van het lange formaat codeert
type + rechten
(`drwxr-xr-x`). - Sorteer met
`-t`
(tijd),
`-S`
(grootte),
`-r`
(omgekeerd) — `ls -ltr` is de dagelijkse klassieker. - Ga dieper met
`-R`
,
`-i`
(inodes verklaren hard links),
`-d`
, en de
`-u`/`-c`
alternatieve tijden.
---- ### Belangrijkste punten (vervolg)
-
Globbing
(`ls *.txt`) wordt gedaan door de
shell
, niet door `ls`. En `ls` combineert netjes met `wc`, `head`, `grep`. -
Kleur is meestal een alias
— `\ls` of `command ls` draait het kale commando. - Weet waar `ls`
ophoudt
: `find` om te zoeken, `stat` voor één bestand, `tree` voor een boomweergave. - Moderne tools (
eza
,
lsd
,
tree
) zijn fraaier, maar `ls` is
er altijd
— leer het eerst. - Bij twijfel:
`man ls`
.
---
Vragen?