Tips en Trucs 2013

Leuke en/of nutteloze opdrachten

Werken met opdrachten in de terminal lijkt voor een niet terminal gebruiker saai en omslachtig. Niets is minder waar. Vandaag toont ik enkele opdrachten die plezant, soms een tikkeltje nutteloos (of lijken) maar toch interessant kunnen zijn.

rev

Deze opdracht keert ingegeven tekstregels om. Met de sneltoets Ctrl + c breek je de opdracht af.

dany@linux-e1kr:~> rev
Tips en Trucs op PinDaNet.be
eb.teNaDniP po scurT ne spiT
^C

Met een bestand als argument wordt het volledige tekstbestand regel per regel omgekeerd.

dany@linux-e1kr:~> rev capsized/Linux.README 
.xuniL/UNG rof dezispaC 'semaG partneilA si sihT

moc.obibijitibilf@obibijitibilf ta eeL nahtE ot detroper eb dluohs sguB

2LDS-emaGonoM tuobA
-------------------
:buHtiG no dnuof eb nac dezispaC stroppus taht hcnarb emaGonoM ehT

emaGonoM/obibijitibilf/moc.buhtig//:sptth

sknahT laicepS
--------------
.reyalp oediv #yalParoehT eht dna #2LDS ,emaGonoM htiw pleh rof ,woG divaD
.#yalParoehT htiw pleh lanoitidda rof ,thgiLratS

:sretset fo hcnub elohw A
irelegnA onafetS -
rekceB niveK -
ikswokcaG walsinatS -
zednanreH einaleM -
trepliH nitraM -
drawoH miT -
arecuK rehpotsirhC -
relløM sucraM -
sennahoJ -
wehttaM -


!dezispaC yojne uoy epoh eW

tibilf ,evoL

yes

Deze eigenaardige opdracht herhaalt een tekenreeks tot de opdracht met de sneltoets Ctrl + c wordt afgebroken.

dany@linux-e1kr:~> yes linux
linux
linux
linux
linux
linux
linux
linux
linux
linux
linux
linux
linux
linux
linux
linux
linux
linux
linux
^Clinux
linux
linux
linux
linux
linux
linux
linux

dany@linux-e1kr:~>

factor

Om de priemgetallen van een getal te kennen, gebruik je de opdracht factor. Ik heb de limieten van de opdracht niet getest, maar de opdracht lijkt me krachtig. Priemgetallen en het ontbinden in priemgetallen is de basis voor moderne versleuteling en internetbeveiliging.

dany@linux-e1kr:~> factor 256944597
256944597: 3 7 13 73 12893

time

Deze opdracht gebruik je als een ingebouwde timer. Het werkt in de achtergrond terwijl je met een andere opdracht werkt. Na het afsluiten van de opdracht toont time hoelang de uitgevoerde opdracht duurde.

dany@linux-e1kr:~> time factor 256944597
256944597: 3 7 13 73 12893                                                      
                                                                                
real    0m0.002s
user    0m0.000s
sys     0m0.001s

cal

Elk Unix systeem heeft een ingebouwde kalender. De opdracht toont zonder argumenten de huidige maand. Door argumenten op te geven kan je om het even welke maand in om het even welk jaar weergeven. Het argument -j geeft het aantal dagen vanaf 1 januari weer (Julian days).

dany@linux-e1kr:~> cal
    oktober 2013    
ma di wo do vr za zo
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

dany@linux-e1kr:~> cal 12 2014
    december 2014   
ma di wo do vr za zo
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

dany@linux-e1kr:~> cal -j
        oktober 2013       
 ma  di  wo  do  vr  za  zo
    274 275 276 277 278 279
280 281 282 283 284 285 286
287 288 289 290 291 292 293
294 295 296 297 298 299 300
301 302 303 304

pi

De opdracht pi toont een benadering van het getal PI, handig voor wiskundigen en dergelijke. Als argument geef je het aantal weer te geven cijfer op.

dany@linux-e1kr:~> pi 100
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823L0

vdir

De opdracht vdir toont een gedetailleerde inhoud van een map. Deze opdracht is overtollig omdat de opdracht ls -l identiek hetzelfde doet.

dany@linux-e1kr:~> vdir
totaal 72
drwxr-xr-x  2 dany users 4096 30 sep 16:01 bin
drwxr-xr-x 11 dany users 4096 11 jul 20:56 capsized
-rw-r--r--  1 dany users   72 28 sep 12:17 C:\\nppdf32Log\\debuglog.txt
drwxr-xr-x  3 dany users 4096 19 sep 15:11 Desktop
lrwxrwxrwx  1 dany users   20  7 apr 17:56 Documents -> /usr/home/Documents/
drwxr-xr-x  5 dany users 4096  3 okt 15:56 Downloads
drwxr-xr-x  6 dany users 4096 30 sep 16:01 Games
drwxr-xr-x  4 dany users 4096 19 jun 15:42 highlight
-rw-r--r--  1 dany users  544 17 jun 20:49 html.html
-rw-r--r--  1 dany users   18 16 jun 21:34 html.sh
-rw-r--r--  1 dany users  102 29 jun 19:24 index.php
drwxr-xr-x  4 dany users 4096 28 jul 17:50 LegendsOfAthereus
lrwxrwxrwx  1 dany users   27  7 apr 17:56 Music -> /usr/home/Documents/Muziek/
lrwxrwxrwx  1 dany users   33  7 apr 17:56 Pictures -> /usr/home/Documents/Afbeeldingen/
drwxr-xr-x  2 dany users 4096  6 apr 20:30 Public
drwxr-xr-x  2 dany users 4096  6 apr 20:30 public_html
-rw-r--r--  1 dany users  929 29 jul 17:52 Settings.ini
-rwxr-xr-x  1 dany users  597  3 okt 15:14 snow.sh
drwxr-xr-x  2 dany users 4096  6 apr 20:30 Templates
drwxr-xr-x  2 dany users 4096 21 sep 11:26 Torrents
lrwxrwxrwx  1 dany users   28  7 apr 17:57 Videos -> /usr/home/Documents/Video's/
drwxr-xr-x  9 dany users 4096 28 aug 12:25 vmware

clear

Deze opdracht wist alle regels in een terminal, waardoor het terminal scherm leeg is. Een doorwinterde terminal gebruiker gebruikt daarvoor de sneltoets Ctrl + l. De enige plaats waar je de opdracht clear wel kunt gebruiken is in scripts.

clear(1)                                                              clear(1)



NAME
       clear - clear the terminal screen

SYNOPSIS
       clear

DESCRIPTION
       clear clears your screen if this is possible.  It looks in the environ-
       ment for the terminal type and then in the terminfo database to  figure
       out how to clear the screen.

       clear ignores any command-line parameters that may be present.

SEE ALSO
       tput(1), terminfo(5)

       This describes ncurses version 5.9 (patch 20130119).


 Manual page clear(1) line 1 (press h for help or q to quit)

ul

Deze opdracht gebruik je om tekens in een terminal te onderstrepen. Ik heb de opdracht nog niet helemaal onderzocht, maar heb ontdekt dat het meta-teken \b_ het vorige teken onderstreept.

dany@linux-e1kr:~> echo $'hello w\b_o\b_r\b_l\b_d\b_ ' | ul
hello world

w

Naar mijn weten is dit de kortste opdracht die ik ken. De w opdracht toont informatie over de huidige gebruiker.

dany@linux-e1kr:~> w
 17:52:20 up  6:33,  3 users,  load average: 0,24, 0,17, 0,15
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
dany     :0       console          11:19   ?xdm?  12:03   0.03s /bin/sh /usr/bi
dany     pts/0                     11:19    6:33m  0.00s  2.42s kdeinit4: kded4
dany     pts/1                     17:28   20.00s  0.03s  0.00s w

tafels van vermenigvuldiging

Dit is eigenlijk meer een script dan een opdracht en toont de tafels van vermenigvuldiging. Mooi weergegeven in kolommen, maar niet een opdracht die je zomaar kunt onthouden.

dany@linux-e1kr:~> for i in {1..9}; do for j in $(seq 1 $i); do echo -ne $i×$j=$((i*j))\\t;done; echo;done
1×1=1
2×1=2   2×2=4
3×1=3   3×2=6   3×3=9
4×1=4   4×2=8   4×3=12  4×4=16
5×1=5   5×2=10  5×3=15  5×4=20  5×5=25
6×1=6   6×2=12  6×3=18  6×4=24  6×5=30  6×6=36
7×1=7   7×2=14  7×3=21  7×4=28  7×5=35  7×6=42  7×7=49
8×1=8   8×2=16  8×3=24  8×4=32  8×5=40  8×6=48  8×7=56  8×8=64
9×1=9   9×2=18  9×3=27  9×4=36  9×5=45  9×6=54  9×7=63  9×8=72  9×9=81

Het script snow

Het snow.sh script toont vallende sneeuwvlokjes in de terminal. Kopieer en plak onderstaande script in een tekst bestand (bijvoorbeeld in KWrite), sla het op als snow.sh (in uw Persoonlijke map), maak het uitvoerbaar (chmod +x snow.sh), start het (./snow.sh) en bewonder uw terminal. Onderbreek het script (sneeuwen) met de sneltoets Ctrl + C.

#!/bin/bash
 
LINES=$(tput lines)
COLUMNS=$(tput cols)
 
declare -A snowflakes
declare -A lastflakes
 
clear
 
function move_flake() {
  i="$1"
 
  if [ "${snowflakes[$i]}" = "" ] || [ "${snowflakes[$i]}" = "$LINES" ]; then
    snowflakes[$i]=0
  else
    if [ "${lastflakes[$i]}" != "" ]; then
      printf "\033[%s;%sH \033[1;1H " ${lastflakes[$i]} $i
    fi
  fi
 
  printf "\033[%s;%sH*\033[1;1H" ${snowflakes[$i]} $i
 
  lastflakes[$i]=${snowflakes[$i]}
  snowflakes[$i]=$((${snowflakes[$i]}+1))
}
 
while :
do
  i=$(($RANDOM % $COLUMNS))
 
  move_flake $i
 
  for x in "${!lastflakes[@]}"
  do
    move_flake "$x"
  done
 
  sleep 0.1
done