Debian server beheer

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:

-heen makkelijk leesbare vorm waarbij bestandsgrootte in megabyte en gigabyte getoond wordt
-ltoon volledige informatie
-alltoon ook verborgen bestanden
-Fzet / 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.