Debian basics
in dit hoofdstuk vind je een aantal handigheden die je over linux moet weten. Als je wilt weten welke versie van Debian je hebt:
cat /etc/debian_version
6.0.7
De TAB toets
De TAB toets is wel de allereerste die je moet weten. Linux denkt mee als je bestandnamen en paden intikt. Als je een deel van een map of bestand intikt en daarna TAB, maakt Linux de naam af. In het bovenstaande voorbeeld is /e gevolgd door TAB genoeg om door te springen naar /etc/.
Schijfruimte
Om te kijken hoeveel vrije schijfruimte je nog hebt gebruik je:
df -h
De uitvoer ziet er ongeveer zo uit
Filesystem Size Used Avail Use% Mounted on /dev/vzfs 50G 3.2G 47G 7% / tmpfs 3.0G 0 3.0G 0% /lib/init/rw tmpfs 3.0G 0 3.0G 0% /dev/shm
Je kunt ook het schijfgebruik per gebruiker opvragen:
du -sh /home/*
160K /home/gebruiker1 11M /home/gebruiker2 224M /home/gebruiker3 3.3M /home/gebruiker4
Dat veronderstelt dan dat je de gebruikers dwingt zich te beperken tot hun thuismap. Zie hier. Op de laatste regel vindt je het totaal van de hele /home map. Naarmate je max-depth hoger maakt krijg je meer onderliggende mappen te zien maar als je te ver gaat wordt de uitvoer onleesbaar.
Welkomstbericht aanpassen
Als je inlogt over ssh krijg je een welkomstbericht te zien. Je kunt dit bericht aanpassen. Ik heb er bijvoorbeeld een paar herinneringen in gezet aan bestandslocaties en commando's die ik vaak gebruik. Doe dit:
nano /etc/motd
Pas het bestand aan en zet er de informatie in die je handig vindt om te zien bij inloggen. Bijvoorbeeld:
tail /var/log/apache2/error.log om apache foutmeldingen te zien.
Sla op met control-o. In het vervolg krijg je iedere keer dat je inlogt bovenstaande tekst te zien.
Inhoud van een map bekijken
De simpelste manier om de inhoud van een map te bekijken is ls:
ls
De uitvoer is een lijst met alle mappen en bestanden in je huidige werkmap:
black.list Maildir procmail.log white.list
Voor meer informatie over de bestanden in de mappen gebruik je de -l
modifier (long).
ls -l
Je ziet dan:
-rw-r--r-- 1 root root 22 May 20 07:39 black.list drwxr-xr-x 8 jan root 4096 Jun 2 06:27 Maildir -rw------- 1 jan jan 2757 Jun 2 03:38 procmail.log -rw-r--r-- 1 root root 3907 May 20 07:39 white.list
Als je op de eerste positie van de regel een d ziet gaat het om een map (directory). Vervolgens komen in 9 letter (rwxrwxrwx) de rechten op dit bestand voor de eigenaar, de group en de rest van de wereld. Dan volgend de eigenaar van dit bestand en de groep die eigenaar is. Vervolgens de datum en tijd van de laatste bewerking en de naam van het bestand. ls kent onder meer de volgende modifiers:
-h | een makkelijk leesbare vorm waarbij bestandsgrootte in megabyte en gigabyte getoond wordt |
-l | toon volledige informatie |
-all | toon ook verborgen bestanden |
-F | zet / achter namen van mappen en @ achter namen van snelkoppelingen |
Open bestanden
Het kan handig zijn om te weten hoeveel bestanden een bepaalde gebruiker open heeft. Bijvoorbeeld om te zien hoeveel bestanden dovecot open heeft:
lsof -u dovecot | wc -l
175
Het | symbool
In het bovenstaande voorbeeld zie je het | symbool, uitgesproken als "pipe". Met dit symbool geef je de uitvoer van de ene opdracht door aan de volgende opdracht. In het voorbeeld over open bestanden zie je eerst de opdracht die een lijst maakt van open bestanden van dovecot, dan het pipe symbool en tenslotte de opdracht die het aantal regel telt en toont.
Woorden en regels tellen
De opdracht wc telt regels, woorden en bytes in een bestand. Bijvoorbeeld:
wc procmail.log
Geeft als resultaat:
72 337 3029 procmail.log
Dat is achtereenvolgens het aantal regels, woorden en karakters. In het bovenstaande voorbeeld heb je kunnen zien dat je wc
ook kunt gebruken om alleen de regels te tellen:
wc -l procmail.log
72 procmail.log
Geheugengebruik
als je wilt zien hoeveel geheugen de belangrijkste applicaties gebruiken kan dat zo:
ps -A --sort -rss -o comm,pmem | head -n 11
COMMAND %MEM clamd 5.2 spamd 1.2 spamd 1.1 spamd 1.1 mysqld 0.6 apache2 0.5 apache2 0.5 apache2 0.4 apache2 0.3 apache2 0.3
Je kunt ook meer informatie krijgen op deze manier:
ps -A --sort -rss -o pid,comm,pmem,rss | head -n 11
PID COMMAND %MEM RSS 9512 clamd 5.2 212240 16447 spamd 1.2 49252 16448 spamd 1.1 47912 16449 spamd 1.1 47912 11238 mysqld 0.6 27508 14872 apache2 0.5 21484 14613 apache2 0.5 20752 14873 apache2 0.4 18932 14267 apache2 0.3 12952 14809 apache2 0.3 12576
Bestanden bekijken: head, tail, cat, less en more
Er zijn meerdere manieren om bestanden te bekijken. Met head krijg je de eerste 10 regels van een bestand te zien. Dat aantal kun je aanpassen:
head -20 /var/log/mail.log
Toont de eerste 20 regels van het bestand. Met tail doe je het omgekeerde. Je krijgt de laatste 10 regels van een bestand tenzij je dat aanpast:
tail -40 /var/log/mail.log
Toont de laatste 40 regels van mail.log. Tail heeft ook een handige 'follow' modus:
tail -f /var/log/mail.log
Dit toont in eerste instantie de laatste 10 regels van mail.log maar tail blijft nu openstaan en toont nieuwe regels zodra die aan het bestand toegevoegd worden. Dit is heel handig als je problemen ervaart met een programma op je server. Je kunt live zien wat er gebeurt en ingrijpen als de fout zich voordoet. Sluit tail af met control-z.
Met cat toon je in één keer een heel bestand:
cat /var/log/mail.log
Bij langere bestanden is dit niet zo zinvol. De uitvoer vliegt zo snel over je scherm dat je er eigenlijk niets aan hebt. Daarom is more uitgevonden, more toont een bestand bladzijde voor bladzijde op je scherm:
more /var/log/mail.log
Onderaan het scherm zie je hoeveel procent van het bestand je al gezien hebt. Met de spatiebalk spring je naar het volgende scherm. Sluit more af met de q toets of met control-z. Met more kun je alleen naar beneden scrollen in het bestand. Als je less gebruikt kun je ook bladzijden terug bladeren:
less /var/log/mail.log
Je kunt nu met de pijltjes of de pagina omhoog/omlaag toetsen door het bestand bladen.
Zoeken in bestanden: grep en zgrep
Met grep kun je handig in bestanden. Bijvoorbeeld zoeken in auth.log naar gebruikers die met success ingelogd hebben:
grep "Accepted" /var/log/auth.log
Jun 15 08:55:56 server1 sshd[12202]: Accepted password for xyz from 10.11.12.13 port 54576 ssh2 Jun 15 08:56:48 server1 sshd[12219]: Accepted password for abc from 10.11.12.14 port 54606 ssh2 Jun 15 08:57:13 server1 sshd[12223]: Accepted password for xyz from 10.11.12.13 port 54609 ssh2
Overigens kun je de zoekopdracht ook combineren met bovenstaande less of more:
grep "lost connection" /var/log/mail.log | less
grep kan ook zoeken in meerdere bestanden tegelijk, bijvoorbeeld
grep "lost connection" /var/log/mail.log /var/log/mail.log.1 | less
Met zgrep kun je zoeken in ongecomprimeerde en gecomprimeerde (.gz) bestanden tegelijk. Dit is heel handig bij het doorzoeken van log files:
zgrep "lost connection" /var/log/mail.log* | more
Daarmee doorzoek je mail.log maar bijvoorbeeld ook mail.log.3.gz
cut om regels te knippen
Met de cut opdracht kun je regels opknippen in verschillende delen. Om verder te gaan op bovenstaand voorbeeld kun je met deze opracht de gebruikersnamen en ip-adressen uit auth.log halen:
grep "Accepted" /var/log/auth.log | cut -f10,12 -d" "
xyz 10.11.12.13 abc 10.11.12.14 xyz 10.11.12.13
cut gebruikt de spatie om het einde van een veld aan te geven (-d" ") en toont het 10e en 12e veld (-f10,12).
sort om regels te sorteren
Met de sort opdracht kun je regels oplopend sorteren. Ik bouw weer verder op het voorbeeld uit de vorige sectie:
grep "Accepted" /var/log/auth.log | cut -f10,12 -d" " | sort
abc 10.11.12.14 xyz 10.11.12.13 xyz 10.11.12.13
Je kunt ook aflopend sorteren met de -r modifier:
grep "Accepted" /var/log/auth.log | cut -f10,12 -d" " | sort -r
xyz 10.11.12.13 xyz 10.11.12.13 abc 10.11.12.14
Unieke regels tonen met uniq
voor het analyseren van log files is het nog handiger als je unieke regels kunt tonen:
grep "Accepted" /var/log/auth.log | cut -f10,12 -d" " | sort -r | uniq
xyz 10.11.12.13 abc 10.11.12.14
Met de -c modifier kun je er een telling aan toevoegen:
grep "Accepted" /var/log/auth.log | cut -f10,12 -d" " | sort -r | uniq -c
2 xyz 10.11.12.13 1 abc 10.11.12.14
Zip en Unzip
soms kan het handig zijn om bestanden te zippen (comprimeren) en unzippen op de server. Installeer eerst zip en unzip als je die nog niet hebt:
apt-get install zip apt-get install unzip
Je kunt nu de bestanden in een map inpakken. Als je bijvoorbeeld alles van een bepaalde gebruiker in wilt pakken:
cd /home/gebruiker zip -r backup *
De -r optie betekent recursief, dus de inhoud van mappen wordt ook toegevoegd. backup is de naam die het bestand krijgt, .zip wordt automatisch toegevoegd. * betekent dat alle bestanden in de map gcomprimeerd worden.
Je kunt de opdracht ook zo geven:
zip -r backup /home/gebruiker
Het bestand backup.zip wordt dan gemaakt in de map waar je nu bent. Om het bestand weer uit te pakken doe je:
unzip backup.zip
Het bestand wordt dan uitgepakt inclusief de mappenstructuur die er bij hoort.
bash shell alias
Met een alias kun je je eigen commando's in Debian maken. Ga naar je thuismap en open .bash_profile:
nano ~/.bash_profile
voeg daarin de volgende regel toe:
alias mappen="mkdir public_html public_html/webalizer logs logs/apache2 Maildir"
Bash moet nu opnieuw de configuratie inladen:
. ~/.bash_profile
Je kunt nu, als je in de thuismap van een gebruiker bent, met de opdracht mappen
in één keer alle mappen voor die gebruiker aanmaken.
Je kunt in je .bash_profile ook functies aanmaken om meerdere opdrachten in één keer uit te voeren:
c() { builtin cd $1 echo -e "\033[0;37mlisting: $(pwd) \033[0m" ls -F$2 }
Hiermee maak je een aangepaste versie van de cd opdracht die je zo kunt gebruiken:
c /home l
De functie doet dan een cd naar de map /home, toont in lichtgrijs de tekst "listing /home" en doet vervolgens de ls opdracht. De tweede modifier l is niet verplicht maar als je die gebruikt wordt die toegevoegd aan ls -F. Ik heb dit geknutseld omdat ik, als ik cd naar een map, dan bijna altijd ook gelijk de inhoud wil weten.
Debian bijwerken
Het bijwerken van Debian met de laatste beveiligingsupdates e.d. gaat in twee stappen:
apt-get update
Get:7 http://security.debian.org squeeze/updates/main amd64 Packages [412 kB] Fetched 758 kB in 0s (1,310 kB/s) Reading package lists... Done
Daarmee heb je de informatie over de meest recente updates binnen gehaald. Om die updates daadwerkelijk uit te voeren doe je:
apt-get upgrade
Je krijgt dan ongeveer dit te zien:
Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be upgraded: bind9-host dnsutils gnupg gpgv host libapache2-mod-php5 libbind9-60 libdns69 libgcrypt11 libisc62 libisccc60 libisccfg62 liblwres60 php5 php5-cli php5-common php5-curl php5-gd php5-mcrypt php5-mysql 20 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 10.7 MB of archives. After this operation, 32.8 kB disk space will be freed. Do you want to continue [Y/n]?
Uiteraard zal de lijst van software die bijgewerkt wordt steeds anders zijn. Typ nu 'y' om de updates te installeren.
32 of 64 bits systeem?
Wil je weten of je een 32 of 64 bits systeem hebt, gebruik dan:
uname -m
Je ziet dan bijvoorbeeld:
x86_64
Debian upgraden
Howtoforge heeft twee prima artikelen over het upgraden van Debian zelf:
Beide artikelen zijn in het Engels.