Tips en Trucs 2022

LSDeluxe, de ls opdracht van de toekomst

Verschillende terminal opdrachten worden gebruikt om bestanden en mappen aan te maken, te inspecteren, te hernoemen en te verwijderen. Eén van deze opdrachten is ls, dat de namen van de bestanden en mappen in de huidige map (directory) weergeeft. Een map is eigenlijk gewoon een bestand. Het is een speciaal bestand met speciale eigenschappen. De ls utility verscheen in de eerste versie van AT&T UNIX.

Wil je de shell wat levendiger maken? Wil je wat meer schoonheid op je terminal? LSDeluxe (lsd) is een verbetering voor de eerbiedwaardige ls opdracht en is geschreven in Go.

LSDeluxe installeren en gebruiken

Je kunt de laatste versie van LSDeluxe rechtstreeks downloaden van de GitHub webpagina van de ontwikkelaar, met de opdracht:

dany@pindabook:~> curl -s https://api.github.com/repos/Peltoche/lsd/releases/latest | grep "browser_download_url.*x86_64-unknown-linux-gnu\.tar\.gz" | cut -d : -f 2,3 | tr -d \" | wget -i -
--2022-11-21 19:22:38--  https://github.com/Peltoche/lsd/releases/download/0.23.1/lsd-0.23.1-x86_64-unknown-linux-gnu.tar.gz
Herleiden van github.com (github.com)... 140.82.121.3
Verbinding maken met github.com (github.com)|140.82.121.3|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 302 Found
Locatie: https://objects.githubusercontent.com/github-production-release-asset-2e65be/158927812/049bb153-aba9-4ddd-8cc9-96b338139ab1?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221121%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221121T182238Z&X-Amz-Expires=300&X-Amz-Signature=ab61832f12fde97e49c01e3b0489cfeb79d52dfc2bb774ea22e801b0c5bdc4b0&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=158927812&response-content-disposition=attachment%3B%20filename%3Dlsd-0.23.1-x86_64-unknown-linux-gnu.tar.gz&response-content-type=application%2Foctet-stream [volgen...]
--2022-11-21 19:22:38--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/158927812/049bb153-aba9-4ddd-8cc9-96b338139ab1?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221121%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221121T182238Z&X-Amz-Expires=300&X-Amz-Signature=ab61832f12fde97e49c01e3b0489cfeb79d52dfc2bb774ea22e801b0c5bdc4b0&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=158927812&response-content-disposition=attachment%3B%20filename%3Dlsd-0.23.1-x86_64-unknown-linux-gnu.tar.gz&response-content-type=application%2Foctet-stream
Herleiden van objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Verbinding maken met objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: 891038 (870K) [application/octet-stream]
Wordt opgeslagen als: ‘lsd-0.23.1-x86_64-unknown-linux-gnu.tar.gz’

lsd-0.23.1-x86_64-unknown-linux-g 100%[============================================================>] 870,15K  1,54MB/s    in 0,6s    

2022-11-21 19:22:39 (1,54 MB/s) - '‘lsd-0.23.1-x86_64-unknown-linux-gnu.tar.gz’' opgeslagen [891038/891038]

KLAAR --2022-11-21 19:22:39--
Totaal verlopen tijd: 2,1s
Opgehaald: 1 bestanden, 870K in 0,6s (1,54 MB/s)

Daarna pakken we het gedownloade bestand uit met:

dany@pindabook:~> tar -xvf lsd-0.23.1-x86_64-unknown-linux-gnu.tar.gz 
lsd-0.23.1-x86_64-unknown-linux-gnu/LICENSE
lsd-0.23.1-x86_64-unknown-linux-gnu/README.md
lsd-0.23.1-x86_64-unknown-linux-gnu/autocomplete/
lsd-0.23.1-x86_64-unknown-linux-gnu/autocomplete/_lsd
lsd-0.23.1-x86_64-unknown-linux-gnu/autocomplete/lsd.fish
lsd-0.23.1-x86_64-unknown-linux-gnu/autocomplete/lsd.bash-completion
lsd-0.23.1-x86_64-unknown-linux-gnu/lsd
lsd-0.23.1-x86_64-unknown-linux-gnu/lsd.1

LSDeluxe maakt gebruik van moderne pictogrammen die je kunt vinden in verschillende lettertypen. Sommige ontwikkelaars passen verschillende lettertypen aan, zodat ze elkaar beter aanvullen en brengen die dan in één pakket uit. Nerd Fonts is zo'n pakket en kan je downloaden met de volgende opdracht (meer dan 2 GB aan lettertypen downloaden kan een tijdje duren):

dany@pindabook:~> wget https://github.com/ryanoasis/nerd-fonts/archive/refs/heads/master.zip
--2022-11-22 10:45:19--  https://github.com/ryanoasis/nerd-fonts/archive/refs/heads/master.zip
Herleiden van github.com (github.com)... 140.82.121.4
Verbinding maken met github.com (github.com)|140.82.121.4|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 302 Found
Locatie: https://codeload.github.com/ryanoasis/nerd-fonts/zip/refs/heads/master [volgen...]
--2022-11-22 10:45:19--  https://codeload.github.com/ryanoasis/nerd-fonts/zip/refs/heads/master
Herleiden van codeload.github.com (codeload.github.com)... 140.82.121.10
Verbinding maken met codeload.github.com (codeload.github.com)|140.82.121.10|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: niet-opgegeven [application/zip]
Wordt opgeslagen als: ‘master.zip’

master.zip                            [                                         <=>                 ]   2,06G  7,81MB/s    in 5m 13s  

2022-11-22 10:50:33 (6,74 MB/s) - '‘master.zip’' opgeslagen [2215129980]

Het gedownloade pakket met fonts pak je uit met:

dany@pindabook:~> unzip master.zip
...
  inflating: nerd-fonts-master/src/unpatched-fonts/iA-Writer/iA Writer Quattro/Readme.md  
   creating: nerd-fonts-master/src/unpatched-fonts/iA-Writer/iA Writer Quattro/Regular/
  inflating: nerd-fonts-master/src/unpatched-fonts/iA-Writer/iA Writer Quattro/Regular/iAWriterQuattroS-Regular.ttf

Om de uitgepakte lettertypen te activeren voor de gebruiker, open je de map met lettertypen:

dany@pindabook:~> cd nerd-fonts-master/

En installeer je deze met het installatiescript dat bij het pakket hoort:

dany@pindabook:~/nerd-fonts-master> ./install.sh
...
/home/dany/.local/share/fonts/NerdFonts: caching, new cache contents: 942 fonts, 0 dirs
/var/cache/fontconfig: not cleaning unwritable cache directory
/home/dany/.cache/fontconfig: cleaning cache directory
/home/dany/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded

Daarna kunnen we terugkeren naar de Home map:

dany@pindabook:~/nerd-fonts-master> cd

De nieuwe lsd opdracht kan je uitproberen door deze in de uitgepakte map te starten. De lsd opdracht gebruikt gelijkaardige opties als ls. In het voorbeeld gebruik ik de -l (--long) optie om details weer te geven. En wordt de inhoud van de uitgepakte LSDeluxe map weergegeven:

dany@pindabook:~> lsd-0.23.1-x86_64-unknown-linux-gnu/lsd -l lsd-0.23.1-x86_64-unknown-linux-gnu/
LSDeluxe

LSDeluxe kan met de optie --tree de mappenstructuur binnen een map weergeven. Samen met de optie -d (--directory-only) ook zonder bestanden.

dany@pindabook:~> lsd-0.23.1-x86_64-unknown-linux-gnu/lsd --tree lsd-0.23.1-x86_64-unknown-linux-gnu/
dany@pindabook:~> lsd-0.23.1-x86_64-unknown-linux-gnu/lsd --tree -d lsd-0.23.1-x86_64-unknown-linux-gnu/
LSDeluxe tree

Als je de opdracht verder wilt blijven gebruiken, kan je de lsd opdracht kopiëren naar de bin map in jouw Home map:

dany@pindabook:~> cp lsd-0.23.1-x86_64-unknown-linux-gnu/lsd bin/

Waardoor je de vorige LSDeluxe opdracht nu veel korter kunt starten:

dany@pindabook:~> lsd --tree -d lsd-0.23.1-x86_64-unknown-linux-gnu/

LSDeluxe bevat eveneens een handig aanvulscript voor Bash, zodat je via een druk op de Tab toets opties automatisch kunt alten aanvullen. Indien dit niet lukt toont nogmaals drukken op de Tab toets de verschillende mogelijkheden. Daarvoor maken we een map aan om lokale aanvulscripts in te plaatsen:

dany@pindabook:~> mkdir ~/.bash_completion.d

Daarin plaatsen we indien nodig het reeds aanwezige aanvulscript:

dany@pindabook:~> mv ~/.bash_completion ~/.bash_completion.d/
mv: kan status van '/home/dany/.bash_completion' niet opvragen: Bestand of map bestaat niet

Met het volgende nieuwe aanvulscript worden alle scripts in de map ~/.bash_completion.d/ automatisch als aanvulscripts uitgevoerd:

dany@pindabook:~> cat < .bash_completion
> for bcfile in ~/.bash_completion.d/* ; do
>   . \$bcfile
> done
> EOT

Daarbij verschijnen de >-tekens automatisch telkens na het drukken van Return. Kopieer de LSDeluxe aanvulsript naar de lokale aanvulmap:

dany@pindabook:~> cp lsd-0.23.1-x86_64-unknown-linux-gnu/autocomplete/lsd.bash-completion .bash_completion.d/

Daarna voer je alle lokale aanvulscripts uit met:

dany@pindabook:~> . ~/.bash_completion

En kan je het automatisch aanvullen van LSDeluxe testen:

dany@pindabook:~> lsd <Tab> <Tab>
-1                         --directory-only           --ignore-config            --size
-a                         --extensionsort            --ignore-glob              --sizesort
-A                         -F                         --inode                    --sort
--all                      ...                  -l                         -t
--almost-all               --group-directories-first  -L                         --timesort
--blocks                   --group-dirs               --long                     --total-size
--classic                  -h                         --no-sort                  --tree
--classify                 --header                   --no-symlink               -U
--color                    --help                     --oneline                  -v
--config-file              --human-readable           --permission               -V
--context                  --hyperlink                -r                         --version
-d                         -i                         -R                         --versionsort
--date                     -I                         --recursive                -X
--depth                    --icon                     --reverse                  -Z
--dereference              --icon-theme               -S

Opruimen en LSDeluxe volledig verwijderen

Na het downloaden en uitpakken van de verschillende onderdelen, kan je opruimen zonder de werking van LSDeluxe te storen. De volgende opdrachten verwijderen overbodig geworden bestanden en mappen:

dany@pindabook:~> rm lsd-0.23.1-x86_64-unknown-linux-gnu.tar.gz master.zip
dany@pindabook:~> rm -r lsd-0.23.1-x86_64-unknown-linux-gnu/ nerd-fonts-master/

Om LSDeluxe van de computer te verwijderen, wis je de volgende bestanden:

dany@pindabook:~> rm bin/lsd .bash_completion.d/lsd.bash-completion

De voor LSDeluxe geïnstalleerde lettertypen verwijder je met:

dany@pindabook:~> rm -r .local/share/fonts/NerdFonts/

En brengen we het systeem op de hoogte van de verwijderde lettertypen met:

dany@pindabook:~> fc-cache -f -v
/usr/share/fonts: caching, new cache contents: 0 fonts, 11 dirs
/usr/share/fonts/100dpi: caching, new cache contents: 398 fonts, 0 dirs
/usr/share/fonts/75dpi: caching, new cache contents: 398 fonts, 0 dirs
/usr/share/fonts/Type1: caching, new cache contents: 29 fonts, 0 dirs
/usr/share/fonts/baekmuk: caching, new cache contents: 0 fonts, 0 dirs
/usr/share/fonts/cyrillic: caching, new cache contents: 0 fonts, 0 dirs
/usr/share/fonts/encodings: caching, new cache contents: 0 fonts, 1 dirs
/usr/share/fonts/encodings/large: caching, new cache contents: 0 fonts, 0 dirs
/usr/share/fonts/ghostscript: caching, new cache contents: 52 fonts, 0 dirs
/usr/share/fonts/misc: caching, new cache contents: 168 fonts, 0 dirs
/usr/share/fonts/texlive-lm: caching, new cache contents: 164 fonts, 0 dirs
/usr/share/fonts/truetype: caching, new cache contents: 459 fonts, 0 dirs
/usr/share/fonts/xscreensaver: caching, new cache contents: 5 fonts, 0 dirs
/usr/X11R6/lib/X11/fonts: skipping, no such directory
/opt/kde3/share/fonts: skipping, no such directory
/usr/local/share/fonts: skipping, no such directory
/home/dany/.local/share/fonts: caching, new cache contents: 0 fonts, 0 dirs
/home/dany/.fonts: caching, new cache contents: 0 fonts, 0 dirs
/usr/share/fonts/100dpi: skipping, looped directory detected
/usr/share/fonts/75dpi: skipping, looped directory detected
/usr/share/fonts/Type1: skipping, looped directory detected
/usr/share/fonts/baekmuk: skipping, looped directory detected
/usr/share/fonts/cyrillic: skipping, looped directory detected
/usr/share/fonts/encodings: skipping, looped directory detected
/usr/share/fonts/ghostscript: skipping, looped directory detected
/usr/share/fonts/misc: skipping, looped directory detected
/usr/share/fonts/texlive-lm: skipping, looped directory detected
/usr/share/fonts/truetype: skipping, looped directory detected
/usr/share/fonts/xscreensaver: skipping, looped directory detected
/usr/share/fonts/encodings/large: skipping, looped directory detected
/var/cache/fontconfig: not cleaning unwritable cache directory
/home/dany/.cache/fontconfig: cleaning cache directory
/home/dany/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded