Behalve basishandelingen en basiscommando's zijn er ook nog enkele essentieële begrippen, zoals wildcards, path, opties, piping en redirection die hieronder behandeld worden.
- wildcards
Er zijn twee wildcard tekens.
De belangrijkste is de * (asterisk)
De tweede wildcard is ? (vraagteken)
Waar je de wildcard * plaatst wordt deze opgevuld door om het even wat met om het even welke lengte, ook lengte nul.
Indien er een directoryoefening2
bestaat, zal het volgende commando alle bestanden in de huidige directory copieren naar de subdirectoryoefening2
:jan@cassandra ~ $ cp * oefening2
Het volgende commando brengt alle files en directories die beginnen met de kleine letter a uit directory
/etc
op scherm.jan@cassandra ~ $ ls -d /etc/a* drwxr-xr-x 3 root root 4096 2010-04-27 12:28 /etc/acpi -rw-r--r-- 1 root root 2981 2010-04-27 12:03 /etc/adduser.conf drwxr-xr-x 2 root root 4096 2010-05-23 23:21 /etc/akonadi drwxr-xr-x 2 root root 12288 2010-07-30 11:49 /etc/alternatives -rw-r--r-- 1 root root 395 2010-03-05 03:31 /etc/anacrontab drwxr-xr-x 7 root root 4096 2010-05-25 21:09 /etc/apache2 drwxr-xr-x 6 root root 4096 2010-04-27 12:13 /etc/apm drwxr-xr-x 3 root root 4096 2010-05-02 19:41 /etc/apparmor drwxr-xr-x 5 root root 4096 2010-07-07 23:37 /etc/apparmor.d drwxr-xr-x 4 root root 4096 2010-05-24 10:26 /etc/apport drwxr-xr-x 6 root root 4096 2010-05-23 22:37 /etc/apt -rw-r----- 1 root daemon 144 2010-03-05 03:42 /etc/at.deny drwxr-xr-x 3 root root 4096 2010-04-27 12:29 /etc/avahi
Het volgende commando verplaatst alle files uit de home directory die beginnen met coldplay en eindigen op mp3 naar de directory
Music
jan@cassandra ~ $ mv ~/coldplay*mp3 ~/Music
De tweede wildcard is ? (vraagteken). Het vraagteken vervangt telkens 1 en slechts 1 karakter.
Het volgende commando brengt alle files en directories uit/etc
op scherm met exact 8 karakters en die beginnen met de letter s:jan@cassandra ~ $ ls -ld /etc/s??????? -rw-r--r-- 1 root root 3663 2009-11-10 19:54 /etc/screenrc drwxr-xr-x 4 root root 4096 2010-07-10 23:54 /etc/security -rw-r--r-- 1 root root 18832 2009-12-03 17:11 /etc/services drwxr-xr-x 2 root root 4096 2010-04-27 12:03 /etc/sysctl.d
- absoluut/relatief path
In een path worden directories van mekaar gescheiden door de / (slash)
Alle bestanden bevinden zich op een linux machine ergens in een directory. Dat kan bijvoorbeeld je home-directory zijn. Indien je aan het werken bent op een linux terminal, bevindt je terminal zich in een bepaalde directory. We noemen deze vaak de huidige directory of de working directory. De huidige directory kunnen we op scherm kunnen brengen metpwd
. Het commandopwd
geeft altijd de absolute path naar je huidige directory.
Veronderstel dat er een file genaamdcopyrc.tar.gz
bestaat die zich bevindt in de subdirectorybackups
van de home directory van jan.
Het absolute path naarcopyrc.tar.gz
is dan/home/jan/backups
Als jij je op dat ogenblik bevindt in de subdirectoryDesktop
van de home directory van jan (/home/jan/Desktop
), dan is het relatieve path naarcopyrc.tar.gz
gelijk aan../backups
Bevind ik mij in een terminalvenster in de home directory van jan dan is mijn relatief path naarcopyrc.tar.gz
simpelweg gelijk aanbackups
Je home directory wordt dikwijls afgekort tot ~ (tilde)
Je huidige directory wordt aangegeven met . (de punt)
Je parent directory wordt aangegeven met ..
Vanuit de directory Desktop in het hogere voorbeeld is het relatieve path naar/home/karl
gelijk aan../../karl
-
opties
Met de nodige opties kun je het gedrag of het output-formaat van een commando aanpassen. We hebben reedsrm -r
enls -l
vermeld, maar er zijn er nog een paar belangrijke:
rm -r
verwijdert recursief files en directories
rm -v
verbose: brengt op scherm welke acties werden ondernomen
ls -l
geeft een zogenaamde longlist van een directory met vermelding van permissions, eigenaar, groep, grootte, modification date en natuurlijk ook de filenaam
ls -a
geeft eveneens hidden files weer
ls -R
geeft eveneens de inhoud van alle subdirectories weer
mv -v
brengt op scherm welke acties werden ondernomen
cp -r
copieert inclusief alle subdirectories
cp -p
bewaart alle file eigenschappen
cp -v
brengt op scherm welke acties werden ondernomen
Je kan opties bij elkaar combineren.
Voorbeeld:ls -alR
is hetzelfde alsls -a -R -l
De volgorde van de opties is dikwijls niet van belang.
- symbolic links
Met het commandoln -s
maken we symbolic links.
Een symbolic link is een alias in je filesystem naar een andere file ...
voorbeeld 1:
jan@cassandra ~ $
nano dit-is-een-text.txt
jan@cassandra ~ $
ln -s dit-is-een-text.txt link-2-text.txt
jan@cassandra ~ $
ls -l
-rw-rw-r-- 1 jan jan 16 Dec 9 10:40 dit-is-een-text.txt -rw-r--r-- 1 jan jan 1529 May 21 2016 ipv6-startup2.txt lrwxrwxrwx 1 jan jan 19 Dec 9 10:40 link-2-text.txt -> dit-is-een-text.txt -rw-r--r-- 1 jan jan 181 Aug 2 23:47 nintendo.txt -rw-r--r-- 1 jan jan 2197 Jun 18 2016 osmc_installer_log.txt
voorbeeld 2:
jan@cassandra ~ $
ln -s /etc/passwd de-etc-passwd
jan@cassandra ~ $
ls -l *pass*
lrwxrwxrwx 1 jan jan 11 Dec 9 10:43 de-etc-passwd -> /etc/passwd
jan@cassandra ~ $
tail -n 5 de-etc-passwd
ftp:x:126:135:ftp daemon,,,:/srv/ftp:/bin/false bind:x:127:136::/var/cache/bind:/bin/false jan:x:1003:1003::/home/jan:/bin/bash student:x:1004:1004::/home/student: user:x:999:999:Guest:/home/user:/bin/bash
-
piping
Als we eenls -l
commando intikken, komt er vaak veel te veel informatie op ons scherm.
Tik dit maar eens:
jan@cassandra ~ $
ls -l /etc
In veel gevallen biedt de grafische terminal de mogelijkheid om terug te scrollen, maar dit werkt slechts voor 500 tekstregels. Bovendien hebben we niet altijd de beschikking over een grafische terminal, maar werken we op servers dikwijls op een CLI-machine (geen grafisch environment). Gelukkig kunnen we dan de OUTPUT vanls -l
PIPEN met | naar de INPUT vanless
. | is de vertikale streep die je op belgische toetsenborden vindt door<ALTGR><1>
in te tikken.
jan@cassandra ~ $
ls -l /etc | less
De output vanls -l
is de catalog van/etc
. Die gebruiken we als ware het een tekstfile, als input voorless
. Dat doen we allemaal met het 'pipe'-teken|
We kunnen door het hogere commando omhoog en omlaag scrollen in de directory listing, en zoekfuncties gebruiken die standaard inless
aanwezig zijn.
Een andere veel gebruikte pipe is de volgende:
jan@cassandra ~ $
ps -A | grep <process-name>
ps -A
geeft alle processen weer die draaien op je computer.
grep
zoekt in een file alle regels op die de zoekstring bevatten.
Het volgende voorbeeld geeft de processen weer, met hun PID's (process identifiers) waar de string 'gnome' in voorkomt:jan@cassandra ~ $ ps -A | grep gnome 6478 ? 00:00:00 gnome-keyring-d 6597 ? 00:00:00 gnome-settings- 6741 ? 00:00:01 gnome-panel 6752 ? 00:00:01 gnome-screensav 6798 ? 00:00:32 gnome-do 6805 ? 00:00:00 gnome-power-man 7519 ? 00:00:00 gnome-terminal 7521 ? 00:00:00 gnome-pty-helpe
- redirection
Redirection is het versassen van de output van een commando naar een file of een device. Dit is o.a. nuttig indien er logfiles moeten worden aangemaakt en bewaard. Later kan je dan met zoekopdrachten deze logs bekijken.
cassandra jan #
tcpdump -i eth0 > dumpfile
tcpdump
brengt alle netwerkpakketten op scherm. Door de redirect komt dit terecht in een bestand. Je kan dat bestand later napluizen om te kijken waar bepaalde protocollen vandaan komen (vb.:# grep arp dumpfile
haalt alle arp-pakketten uit de dump)
Een andere mogelijkheid is het redirecten van info naar een andere terminal of naar een printer. Maar meestal heb je daar root rechten voor nodig.
Het volgende voorbeeld stuurt de configuratiefile/etc/vsftpd
van de ftp-server naar de printer, als je dat tenminste mag:
jan@cassandra ~ $
cat /etc/vsftpd > /dev/lp
Als je het volgende commando ingeeft zalcat
de standaardinput (toetsenbord) doorsturen naar het bestand testfile. Je kan het commando beëindigen met<CTRL><D>
(EOF end of file karakter).
jan@cassandra ~ $
cat > testfile
De redirection > wist altijd het originele bestand.
Informatie toevoegen aan een reeds bestaande file, kun je met >>
Test dit maar eens uit:jan@cassandra ~ $ ls -l / >> ~/catalog_rootdir jan@cassandra ~ $ ls -l / >> ~/catalog_rootdir jan@cassandra ~ $ cat ~/catalog_rootdir
Tenslotte kun je ook een tekstbestand gebruiken als input voor een commando. Dit wordt vaak gebruikt in scripts om bestanden te lezen, en uitzonderlijk in dit dikwijls geciteerde maar door mij nooit gebruikte voorbeeld:
jan@cassandra ~ $
mail karl@telenet.com < my_preformatted_mail