Troubleshooting
11/6 Linux-problemen oplossen 11/6.1 Linux-troubleshooting 11/6.1.1 Inleiding Troubleshooting is niet iets wat u even op een cursus kunt leren. Sommige mensen zeggen dat het een kunst is die jaren toewijding en diepgaande kennis vereist. Hoewel dit ten dele waar is, zijn er ook aardig wat vaardigheden die u kunt aanleren om problemen met Linux op te lossen. Deze paragraaf is opgebouwd als een reeks. We beginnen met een algemeen inleidend deel. Hierin kijken we vooral naar de analyse, want u moet eerst een goede analyse maken van wat er precies aan de hand is voordat u het diepe in kunt. In volgende aanvullingen besteden we aandacht aan verschillende deelgebieden waar zich regelmatig problemen voordoen. 11/6.1.2 Probleemanalyse De problemen zijn onder te verdelen in twee hoofdgebieden. Ten eerste zijn er problemen die gerelateerd zijn aan bepaalde services. Vaak doen deze zich voor wanneer u probeert de service te configureren, maar het kan ook zijn dat de service het altijd goed gedaan heeft en dan om onduidelijke reden zomaar verdwijnt. Om in dit soort situaties beslagen ten ijs te komen moet u de services door en door kennen. Een probleem met een MySQL-server kan bijvoorbeeld worden veroorzaakt doordat een gebruiker niet goed aangemaakt is als MySQL-gebruiker. Zonder de vaardigheid om deze gebruiker aan te maken zult u het probleem nooit kunnen oplossen. In deze reeks gaan we naNovell Netwerkoplossingen, aanvulling 30
11/6.1-1
Linux-problemen oplossen
drukkelijk niet in op configuratieproblemen die ervoor zorgen dat u bepaalde onderdelen niet goed aan het werk krijgt. Dit heeft namelijk niet zozeer te maken met de kunst van het troubleshooten, maar meer met kennis van de betreffende service. De situatie waarin een service die het altijd goed gedaan heeft ineens problemen krijgt, zullen we wel behandelen, omdat hier meer algemene Linuxgeoriënteerde technieken bij om de hoek komen kijken. De tweede hoofdsoort problemen zijn problemen die te maken hebben met de Linux-opstartprocedure. Vaak draaien Linux-servers maanden of jaren lang zonder dat ze ooit opnieuw opgestart worden. Tijdens die jaren van trouwe dienst kan slijtage ontstaan aan bepaalde onderdelen. Zolang het onderdeel in kwestie gewoon door kan draaien, is er niets aan de hand. Op het moment echter dat u een computer opnieuw opstart, veroorzaakt dat een extra belasting op de hardware in de computer. Die belasting kan net te veel blijken te zijn, met als resultaat dat de computer helemaal niet meer wil opstarten. Om deze problemen met succes te kunnen aanpakken is het van belang dat u de juiste scope van het probleem weet aan te wijzen. Dit betekent dat u moet weten wat er gebeurt tijdens het opstarten en dat u ook duidelijk de verschillende fasen in de opstartprocedure van elkaar moet kunnen onderscheiden. We zullen daarom in deze reeks ook uitgebreid aandacht besteden aan de opstartprocedure. Voordat het zover is, zullen we het echter wat diepgaander hebben over het belangrijkste hulpmiddel: logging. Logging Een van de prettigste zaken van het werken met Linux is dat Linux-services loggen. Elke service logt, en voor de meeste services kunt u instellen in welke mate de logging plaatsvindt. Daarnaast genereren services bij het opstarten 11/6.1-2
Novell Netwerkoplossingen, aanvulling 30
Troubleshooting
de nodige meldingen. U moet alleen wel weten hoe u die meldingen te zien kunt krijgen, want zeker als u een drukke server hebt, die per seconde tientallen regels naar /var/ log/messages kan schrijven, kom u niet echt ver door met tail -f /var/log/messages in real time te bekijken wat er in dit bestand allemaal voorbijkomt. U zult hooguit duizelig worden van het hoge tempo. Voordat we dieper ingaan op het naar uw hand zetten van logging, eerst nog wat anders. Als u werkt in een grafische omgeving, ziet u gewoonlijk geen melding als u een toepassing opstart. De service start of de service start niet; als u gewoon op het pictogram klikt dat de service (of het programma) behoort te starten en deze start niet, dan moet u het daar maar mee doen. Daar is verder niets aan te doen toch? Als u een service start door op het pictogram te klikken, is dit inderdaad volkomen waar. Er is echter een oplossing. Vrijwel elke service en vrijwel elk programma (het woord ‘elk’ bestaat niet onder Linux, vandaar de aanduiding ‘vrijwel elk’) stuurt eventuele foutmeldingen naar de Standard Error: STDERR. Dit is normaliter een consolevenster. Als u echter geen consolevenster open hebt, kan die service niets met de standaardfout. De oplossing is heel eenvoudig. Achterhaal eerst wat precies de naam is van het programma en zoek het dan op de harde schijf van de computer op. Vaak kunt u al deze informatie achterhalen door gewoon de eigenschappen te bekijken van het pictogram dat u gebruikt om de service in kwestie op te starten. Zo komt u er bijvoorbeeld achter dat de Linux ‘Verkenner’ in de GNOME-desktop Nautilus heet en op SuSE gestart wordt door middel van het programmabestand /opt/gnome/bin/ nautilus. Open nu op uw distributie een consolevenster en typ daar dit commando eens handmatig. Het resultaat is Novell Netwerkoplossingen, aanvulling 30
11/6.1-3
Linux-problemen oplossen
dat u allemaal opstartmeldingen voorbij ziet komen waarbij ook eventuele foutmeldingen keurig gepresenteerd worden. In de volgende listing is een voorbeeld te zien van hoe u door een grafisch programma vanaf de commandline te starten, precies ziet wat het wil doen. nuuk:~ # /opt/gnome/bin/nautilus & [1] 3726 nuuk:~ # Initializing nautilus-open-terminal extension Initializing nautilus-share extension ** (nautilus:3726): WARNING **: Can not caclulate _NET_NUMBER_OF_DESKTOPS ** (nautilus:3726): WARNING **: Can not calculate _NET_NUMBER_OF_DESKTOPS ** (nautilus:3726): WARNING **: Can not get _NET_WORKAREA ** (nautilus:3726): WARNING **: Can not determine workarea, guessing at layout Nautilus-Share-Message: REFRESHING SHARES Nautilus-Share-Message: ––––––––––––––––––––– Nautilus-Share-Message: spawn arg “net” Nautilus-Share-Message: spawn arg “usershare” Nautilus-Share-Message: spawn arg “info” Nautilus-Share-Message: end of spawn args; SPAWNING Nautilus-Share-Message: returned from spawn: SUCCESS: Nautilus-Share-Message: exit code 255 Nautilus-Share-Message: ––––––––––––––––––––– Nautilus-Share-Message: Called “net usershare info” but it failed: ‘net usershare’ returned error 255: net usershare: usershares are currently disabled
11/6.1-4
Novell Netwerkoplossingen, aanvulling 30
Troubleshooting
Syslog-ng
Configuratie van syslog Als u echt precies wilt weten wat uw services doen, zult u in de meeste gevallen via syslog moeten gaan. Syslog bestaat in twee varianten: het oudere syslog en het nieuwere syslog-ng. De meeste distributies maken gebruik van syslog-ng omdat u daar heel precies in kunt aangeven wat precies waar gelogd moet worden. Zo biedt syslog-ng de mogelijkheid om berichten op basis van een bepaalde inhoud te filteren en weg te schrijven naar een specifiek logbestand. Dit is ideaal om ervoor te zorgen dat niet alles plompverloren weggeschreven wordt in /var/log/messages, maar om voor services die veel loggegevens wegschrijven een apart log te maken en de loginformatie voor die services juist niet weg te schrijven in /var/log/messages. Zo slaat u twee vliegen in één klap: u zorgt er niet alleen voor dat het /var/log/messages-bestand leesbaar blijft, maar ook regelt u dat u specifieke informatie in specifieke logbestanden kunt terugvinden. Op het eerste gezicht is syslog-ng complex, maar als u zich aanleert om op systematische wijze te kijken wat er precies gebeurt, valt het allemaal wel mee. We maken in het vervolg van deze paragraaf gebruik van een voorbeeld waardoor het eenvoudiger wordt de werking van syslog-ng te doorgronden. In dit voorbeeld zorgen we ervoor dat een nieuw logbestand aangemaakt wordt met de naam /var/ log/troep. In dit logbestand willen we alle berichten zetten waarin de tekst ‘troep’ of de tekst ‘onzin’ voorkomt. Tevens willen we ervoor zorgen dat deze tekst niet langer gelogd wordt naar /var/log/messages. Uiteraard zult u in het echt met andere tekststrings werken, maar op basis van dit voorbeeld zult u in staat zijn de werking van syslog-ng te begrijpen. Wanneer u dit voorbeeld begrijpt, kunt u iets soortgelijks opzetten voor elke
Novell Netwerkoplossingen, aanvulling 30
11/6.1-5
Linux-problemen oplossen
willekeurige service, zolang u maar begrijpt wat de service in kwestie precies wegschrijft naar de logbestanden. Het zal u overigens niet verbazen dat er weinig services zijn die berichten met de tekenreeks ‘troep’ of ‘onzin’ loggen. Gelukkig is er het logger-commando. Door als root op de commandoregel de opdracht logger troep te geven, zorgt u ervoor dat de tekst ‘troep’ naar syslog gestuurd wordt. Standaard betekent dit dat er in /var/log/messages een regel komt te staan met daarin de tekst ‘troep’. Deze regel gaan we nu dus uit /var/log/messages weghalen en wegschrijven naar een apart bestand. Opbouw van /etc/syslog/syslog-ng.conf Om te bepalen wat syslog-ng doet, bewerkt u het configuratiebestand /etc/syslog-ng.conf. In dit bestand bepaalt u voor services hoe ze moeten loggen. Dit doet u door per service vier regels aan te maken: • filter: hiermee bepaalt u wat er precies gelogd moet worden; • source: hiermee geeft u aan waar de loginformatie vandaan komt; • destination: hiermee bepaalt u waar de loginformatie weggeschreven moet worden; • log: dit is de regel waarin u source, filter en destination combineert om te bepalen waar de loginformatie weggeschreven moet worden. Over het algemeen begint u ermee een filter te definiëren. Ter oriëntatie ziet u in de volgende listing een aantal voorbeelden van filters. filter f_iptables { facility(kern) and match(“IN=”) and match(“OUT=”); };
11/6.1-6
Novell Netwerkoplossingen, aanvulling 30
Troubleshooting
filter f_console { level(warn) and facility(kern) and not filter(f_iptables) or level(err) and not facility(authpriv); }; filter f_newsnotice { level(notice) and facility(news); }; filter f_newscrit { level(crit) and facility(news); }; filter f_newserr { level(err) and facility(news); }; filter f_news { facility(news); }; filter f_mailinfo { level(info) and facility(mail); }; filter f_mailwarn { level(warn) and facility(mail); }; filter f_mailerr { level(err, crit) and facility(mail); }; filter f_mail { facility(mail); }; filter f_cron { facility(cron); }; filter f_local { facility(local0, local1, local2, local3, local4, local5, local6, local7); }; filter f_acpid { match(‘^\[acpid\]:’); }; filter f_netmgm { match(‘^NetworkManager:’); }; 71,0-1 28%
Zoals u in de voorbeelden kunt zien, kunt u er met sommige filters voor zorgen dat alle gegevens die bij een bepaalde service vandaan komen, worden afgevangen. Dit is het geval in een regel als filter f_news { facility(news); };. In ons geval doen we niet moeilijk en maken we een filter aan dat alleen maar kijkt of in een logregel een bepaald bericht voorkomt. Hiervoor gebruiken we de match. Om een filter aan te maken dat kijkt of de tekst ‘troep’ dan wel de tekst ‘onzin’ voorkomt, gebruiken we het volgende filter:
Novell Netwerkoplossingen, aanvulling 30
11/6.1-7
Linux-problemen oplossen
filter f_troep {match(‘troep’}; or match (‘onzin’); };
In deze filterregel kijken we tegelijkertijd naar twee dingen: komt de tekst ‘troep’ dan wel de tekst ‘onzin’ voor, dan hebben we een match. Tot zover voor wat betreft het aangeven waarnaar gekeken moet worden. Vervolgens moet u aangeven waar het bericht vandaan komt. Hiervoor kunt u gewoon gebruikmaken van de standaard-source-definitie die al bestaat. Deze ziet u in de volgende listing. source src { # # include internal syslog-ng messages # note: the internal() soure is required! # internal(); # # the following line will be replaced by the # socket list generated by SuSEconfig using # variables from /etc/sysconfig/syslog: # @SuSEconfig_SOCKETS@ # # uncomment to process log messages from network: # #udp(ip(“0.0.0.0”) port(514)); }; # # Filter definitions 47,1 14%
11/6.1-8
Novell Netwerkoplossingen, aanvulling 30
Troubleshooting
In dit voorbeeld wordt alleen gekeken naar berichten die lokaal gegenereerd zijn. U kunt echter ook een logserver configureren die kijkt naar berichten die deze host via het netwerk bereiken. Voor een eerste poging om een configuratie aan te maken is het aan te raden niet moeilijk te doen en gewoon de standaardconfiguratie zoals die hier staat te gebruiken. Niets doen dus voor wat betreft de source, dat kan altijd later nog een keer. Als derde element moet u aangeven waar de gegevens die voldoen aan het filter f_troep naartoe weggeschreven moeten worden. Hiervoor maakt u een destination aan. In deze destination verwijst u naar een bestand waarin de loggegevens weggeschreven moeten worden. In ons geval is dit het bestand /var/log/troep. De destination die ervoor zorgt dat de loggegevens in dit bestand weggeschreven worden, ziet er als volgt uit: destination troep { file(“/var/log/troep”); };
U hebt nu alle ingrediënten die u nodig hebt om de ‘troep’ uit dit voorbeeld netjes te kunnen loggen. Het enige wat nog ontbreekt, is een regel waarin het allemaal samenkomt. Deze regel komt er als volgt uit te zien: log { source(src); filter(f_troep); destination(troep); };
Hiermee is /etc/syslog-ng/syslog-ng.conf in orde. U moet nu alleen nog de syslog-ng-service opnieuw starten om de nieuwe configuratie in werking te stellen. Op de meeste distributies kunt u dit doen met behulp van de volgende opdracht: service syslog restart
Novell Netwerkoplossingen, aanvulling 30
11/6.1-9
Linux-problemen oplossen
Als u dit ook gedaan hebt, kunt u testen of het allemaal werkt door deze opdracht te geven: logger troep
Als het goed is, heeft dit als resultaat dat een nieuw bestand wordt aangemaakt met de naam /var/log/troep waarin dit bericht weggeschreven wordt. Werkt dit, dan moet u nu nog één ding doen: ervoor zorgen dat deze berichten niet langer in /var/log/messages verschijnen. Het doel was immers ook om /var/log/messages wat minder omvangrijk te doen. U regelt dit door het filter dat gebruikt wordt in de destination die wegschrijft naar /var/ log/messages, aan te passen. In veel distributies heet dit filter f_messages. Zorg ervoor dat dit filter er als volgt uitziet: filter f_messages { not facility(news, mail) and not filter(f_iptables) and not filter(f_troep); };
Start nu de syslog-ng-service opnieuw op en u hebt de logservice aangepast. Uiteraard zult u in het echt niet willen filteren op ‘troep’ en ‘onzin’. Nu is het zaak om uw /var/ log/messages eens goed te bekijken met als doel te achterhalen van welke berichten u vooral last hebt. Analoog aan wat in het voorgaande beschreven is, maakt u nu een filter aan voor deze berichten dat ervoor zorgt dat ze netjes naar een ander logbestand geschreven worden. Dit maakt de analyse van het system log een heel stuk eenvoudiger. Tot slot In deze paragraaf hebt kunnen lezen hoe u meldingen die door verschillende services op uw Linux-systeem gegenereerd worden, weg kunt schrijven naar specifieke logbe11/6.1-10
Novell Netwerkoplossingen, aanvulling 30
Troubleshooting
standen. Dit is een goed begin van een efficiënte troubleshooting, maar hiermee bent u er natuurlijk nog niet. In het vervolg van deze paragraaf leert u hoe u de opstartprocedure van uw computer analyseert zodat u ook precies weet waar het tijdens het opstarten verkeerd gaat.
Novell Netwerkoplossingen, aanvulling 30
11/6.1-11
Linux-problemen oplossen
11/6.1-12
Novell Netwerkoplossingen, aanvulling 30
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 1
Troubleshooting
11/6.2 Werken op de commandoregel Ook al worden Linux-distributies tegenwoordig met prachtige grafische interfaces geïnstalleerd, om een Linuxserver te kunnen beheren moet u toch echt kunnen werken op de commandoregel. In deze paragraaf vindt u een eerste inleiding daartoe. Een van de belangrijkste vaardigheden die u in deze paragraaf aanleert, is het opzoeken van informatie in de verschillende hulpsystemen. Ook leert u hoe u uw weg vindt in het bestandssysteem van een gemiddelde Linux-distributie. Daarnaast maakt u kennis met de belangrijkste commando’s en is er een korte introductie met betrekking tot de moeder aller editors: Vi. Ook wordt een introductie gegeven over het beheer van gebruikers en van processen. 11/6.2.1 Het belang van de commandoregel Om met Linux aan het werk te kunnen is het noodzakelijk dat u de weg weet in de Linux-console. Veel taken kunt u ook vanuit de grafische interface laten uitvoeren, maar om het systeem volledig te kunnen beheren, moet u in de meeste gevallen gewoon nog ASCII-tekstbestanden aanpassen met een editor. De commando’s en configuratiebestanden bieden namelijk veel meer mogelijkheden dan u ooit vanuit een grafische interface zult hebben. Ook is het werk vanaf de commandoregel redelijk distributie-onafhankelijk. Een optie die het doet op SuSE Linux zal in de meeste gevallen ook gewoon op Red Hat, Debian en andere distributies beschikbaar zijn.
Loginprompt
11/6.2.2 Inloggen Nadat u uw Linux-systeem hebt gestart, wordt u verwelkomd door de loginprompt. Dit kan een grafische prompt zijn, maar ook een tekstuele loginprompt. Vanuit de grafische loginprompt activeert u een tekstuele prompt door
Novell Netwerkoplossingen, aanvulling 23
11/6.2-1
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 2
Linux-problemen oplossen
gebruik te maken van de toetsencombinatie Ctrl-Alt-F1. Ook Ctrl-Alt-F2 tot en met F6 werken; voor dit doel zijn namelijk zes zogenaamde virtuele terminals gereserveerd. Op deze loginprompt moet u zichzelf bekendmaken als een gebruiker die op het systeem gedefinieerd is. Hiermee wordt bedoeld: een gebruiker die niet automatisch ook alle permissies heeft op het systeem. Om er vervolgens voor te zorgen dat u alle permissies op het systeem krijgt, gebruikt u – nadat u als een normale gebruiker bent aangemeld – de opdracht su. Su staat voor ‘switch user’ en zorgt ervoor dat u alles op het systeem kunt doen wat u maar wilt nadat u het wachtwoord van het beheerdersaccount root hebt ingevoerd. Er zijn verschillende manieren om in een susessie te werken. Als u alleen maar su typt, wordt daarmee een zogenaamde subshell gestart. In die subshell zijn niet alle omgevingsvariabelen van de gebruiker root beschikbaar. Typ daarom bij voorkeur su - in plaats van su. De zorgt ervoor dat een loginshell gestart wordt voor de gebruiker waarvan u de identiteit aanneemt. Op SuSE Linux maakt u in een grafische omgeving gebruik van de opdracht sux in plaats van su; de x in sux geeft aan dat deze omgeving geoptimaliseerd is om ook grafische programma’s probleemloos te starten. Tot slot kunt u bij de opdracht su een gebruikersnaam opgeven. Zonder gebruikersnaam gaat het systeem ervan uit dat u de identiteit wilt aannemen van de gebruiker root; met een gebruikersnaam neemt u de identiteit aan van de betreffende gebruiker. Als u als niet-root-gebruiker su hanteert, moet u overigens wel eerst het wachtwoord van de betreffende gebruiker invoeren. Aan het einde van een su-sessie is het aan te raden om weer uw normale identiteit aan te nemen. Dit doet u door vanuit de su-sessie de opdracht exit te gebruiken. Op dat
11/6.2-2
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 3
Troubleshooting
moment hebt u weer de permissies van de gebruiker als wie u was ingelogd. De reden waarom u gebruik moet maken van de opdracht su en er geen gewoonte van moet maken in te loggen als root, is voor de hand liggend. Als u aangemeld bent als een gewone gebruiker, bent u namelijk uitstekend beschermd tegen uw eigen fouten en ook de schade die een eventueel virus aan kan richten. In beide gevallen hebt u alleen rechten op de bestanden in uw eigen homedirectory. Bent u daarentegen aangemeld als gebruiker root, dan hebt u rechten op alle bestanden op het systeem. Dit betekent dat als u bijvoorbeeld een typefout maakt en de opdracht rm -rf / home/pleunie in plaats van rm -rf /home/pleunie typt, het volledige systeem gewist wordt zonder dat er een waarschuwing gegeven wordt.
Log in als gewone gebruiker en stap dan alleen als het nodig is over op root door su te gebruiken.
Novell Netwerkoplossingen, aanvulling 23
11/6.2-3
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 4
Linux-problemen oplossen
Ook virussen vormen een reden om niet als root te werken. Gelukkig bestaan er nog niet al te veel virussen voor Linux en misschien komt dat juist wel door de goede gewoonte van veel Linux-beheerders niet standaard als root te werken. Een virus dat door een gebruiker geactiveerd wordt, kan gebruikmaken van de permissies van deze gebruiker. De schade die dit virus kan aanrichten is om die reden beperkt: alleen bestanden in de directory van die gebruiker kunnen verwijderd worden. Wordt het virus daarentegen door de gebruiker root geactiveerd, dan heeft het virus ook de rechten van deze gebruiker en bent u dus in staat ongewild uw volledige systeem leeg te gooien. Almachtig
Zes consoles
11/6.2-4
Root is almachtig. Deze gebruiker valt buiten de normale beperkingen die u instelt door middel van rechten op het bestandssysteem. Werk dus alleen als root als het echt nodig is. 11/6.2.3 Virtuele consoles Een erg handige eigenschap van Linux is de mogelijkheid te werken met virtuele consoles. Dit betekent dat u meerdere malen gelijktijdig aangemeld kunt zijn. Standaard zijn er op een Linux-systeem zes virtuele consoles beschikbaar. U komt altijd binnen op de eerste virtuele console. Deze heeft bij het systeem de naam tty1. Als u de toetsencombinatie Ctrl-Alt-F2 gebruikt, activeert u daarmee de tweede virtuele console. Hierop kunt u zich aanmelden als een andere gebruiker. Het voordeel hiervan? U kunt op de eerste virtuele console als gebruiker root iets instellen, terwijl u op de tweede virtuele console kunt testen of deze instelling ook inderdaad werkt. Het grote voordeel daarbij is dat u vanuit een virtuele console in kunt loggen en dat is niet het geval als u in de grafische omgeving een terminalsessie opent. In totaal kunt u werken met zes virtuele consoles tegelijk. Is er ook een grafische omgeving actief, dan
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 5
Troubleshooting
kunt u deze op virtuele console nummer zeven terugvinden. Is er momenteel geen grafische omgeving actief? Dan kunt u deze altijd handmatig starten met de opdracht startx, mits de grafische omgeving natuurlijk geïnstalleerd is. Als u werkt met virtuele consoles, is het ook handig te weten hoe u een overzicht op kunt vragen van alle gebruikers die op dit moment op het systeem zijn ingelogd. Het aardige van Linux is dat er verschillende manieren zijn om dit te doen. Gebruik bijvoorbeeld de opdracht who om een lijst te tonen van alle gebruikers die momenteel zijn ingelogd. Wilt u ook nog weten wat die gebruikers nu aan het doen zijn? Typ dan de opdracht w; u ziet dan niet alleen de namen en de TTY’s van de gebruikers, maar ook nog welk programmabestand de gebruikers op dat moment in gebruik hebben. Bent u door al het heen en weer switchen vergeten op welke console u zelf bent ingelogd? Gebruik dan de opdracht who am i. Die toont u wie u bent en op welke TTY u aangemeld bent. Bovendien krijgt u te zien op welke datum en welk tijdstip u bent ingelogd.
Novell Netwerkoplossingen, aanvulling 23
11/6.2-5
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 6
Linux-problemen oplossen
Als u precies wilt weten wie is aangemeld op uw systeem en wat die gebruikers aan het doen zijn, is de opdracht w een goede keuze.
11/6.2.4 Navigeren door de directorystructuur Een van de belangrijkste zaken die u moet weten om efficiënt met Linux te kunnen werken is de manier waarop de directorystructuur is opgebouwd. In Linux draait namelijk bijna alles om bestanden die ergens in deze directorystructuur voorkomen. Als u net bent ingelogd, bevindt u zich op dit moment waarschijnlijk in uw homedirectory. U kunt dit herkennen aan het symbool ~ dat u in de aanduiding van uw prompt ziet. Mocht u dit symbool om de een of andere reden niet zien, dan kunt u altijd de volledige naam van uw huidige pad opvragen met de opdracht pwd (print working directory). Om door de directorystructuur te manoeuvreren kunt u gebruikmaken van de opdracht cd. Deze opdracht werkt bijna net zoals het gelijknamige DOScommando cd, alleen moet u in plaats van backslashes slashes gebruiken. Niet \ maar / dus. Als u bijvoorbeeld de
11/6.2-6
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 7
Troubleshooting
opdracht cd / geeft, brengt u dat naar de root directory van het bestandssysteem. (Vergelijk dit maar met c:\ onder Windows.) Onder deze directory bevindt zich een aantal belangrijke subdirectories. We bespreken kort de belangrijkste hiervan. cd handigheidjes Als u cd typt zonder iets erachter, komt u in uw homedirectory. Typt u cd gevolgd door een -, dan gaat u terug naar de vorige directory die actief was.
Op een Linux-systeem vindt u sommige standaarddirectory’s altijd terug.
•
/usr U kunt deze directory vergelijken met Program Files onder Windows. Onder /usr vindt u alle programmabestanden die niet direct deel uitmaken van de kern van het besturingssysteem. Als u een nieuw programma installeert, is het aannemelijk dat dit pro-
Novell Netwerkoplossingen, aanvulling 23
11/6.2-7
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 8
Linux-problemen oplossen
•
•
11/6.2-8
gramma na installatie ergens onder /usr terug te vinden is. Ook de volledige configuratie van de grafische gebruikersinterface bevindt zich hier. Grotere programmapakketten echter vindt u niet onder /usr, maar in de directory /opt. /etc Linux werkt meestal met ASCII text-configuratiebestanden. Deze configuratiebestanden bevinden zich vrijwel zonder uitzondering in de directory /etc. Betreft het een softwareonderdeel dat gebruikmaakt van meerdere configuratiebestanden (denk bijvoorbeeld aan de Samba-server die gebruikt kan worden om bestanden op het netwerk te delen), dan kan het voorkomen dat er met subdirectories onder /etc gewerkt wordt. Zo vindt u de configuratiebestanden voor de Samba-server onder /etc/samba. Ook erg belangrijk is de directory /etc/rc.d (/etc/init.d op sommige distributies). Hier vindt u namelijk de scripts waarmee services op uw server gestart worden. De volledige opstartconfiguratie staat eveneens in deze directory. /dev In de directory /dev vindt u alle devices (randapparaten). Onder Linux is elk stuk hardware te benaderen door middel van een speciaal device-bestand. Deze device-bestanden treft u aan in de directory /dev. Denk bijvoorbeeld aan/dev/cdrom (cdrom drive), /dev/hda1 (eerste partitie op uw eerste IDE harde schijf), /dev/fd0 (diskettestation) en /dev/null (het zwarte gat op uw computer). Hier vindt u bijvoorbeeld ook uw netwerkkaarten terug met benamingen als /dev/eth0 en /dev/wlan0. Op moderne distributies wordt deze directory automatisch gevuld met hardware die op uw systeem gedetecteerd is. Dit wordt geregeld door het proces udevd.
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 9
Troubleshooting
udevmonitor Altijd al willen weten wat er precies gebeurt als u een plug-and-play-apparaat aansluit op uw computer? Typ dan eens als root in een terminalvenster de opdracht udevmonitor en verbind bijvoorbeeld een USB-stick aan uw computer. U zult precies zien hoe de stick geactiveerd wordt en welke bestanden daarbij komen kijken. •
•
•
/var Onder /var vindt u zaken die nogal snel en onbeheerst van grootte kunnen veranderen. Denk bijvoorbeeld aan de logbestanden die voorkomen onder /var/messages en de printer-spoolbestanden die u aantreft in /var/spool. Een andere beruchte directory die u hier meestal terugvindt, is de mail-spool. Dit zijn de mailboxen van alle gebruikers die op het systeem bekend zijn. Aangezien de directory /var zeer onbeheerst kan groeien, is het gebruikelijk om de directory /var op een aparte partitie te plaatsen zodat deze niet uw hele harde schijf vol kan schrijven. /boot Hier treft u onder andere het bestand /boot/vmlinuz aan (vaak bevat de naam van dit bestand het volledige kernelversienummer van uw systeem). Dit is uw Linux-kernel. Ook andere bestanden die nodig zijn om uw computer op te kunnen starten, treft u in deze directory aan. Zo is er ook het bestand initrd dat ervoor zorgt dat noodzakelijke kernelmodules geladen worden bij het opstarten van uw systeem. /bin en /sbin Hierin treft u de belangrijkste programmabestanden aan die nodig zijn om met uw systeem te kunnen werken. In tegenstelling tot de bestanden onder /usr gaat het hier om essentiële systeemonderdelen. Het
Novell Netwerkoplossingen, aanvulling 23
11/6.2-9
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 10
Linux-problemen oplossen
•
onderscheid tussen /bin en /sbin is dat in /sbin de zogenaamde system binaries staan. Dit zijn programmabestanden die voor het beheer van het systeem gebruikt worden, terwijl de bestanden in /bin ook door gewone gebruikers benaderd kunnen worden. /home Als uw Linux-systeem gebruikt wordt als server, komen op die server meerdere gebruikersaccounts voor. Het is ook gebruikelijk dat elke gebruiker zijn eigen homedirectory heeft. Deze bevinden zich in de directory /home. Sommige speciale gebruikers echter krijgen tijdens installatie hun homedirectory op een andere locatie. Zo bevindt de homedirectory van de gebruiker root zich direct onder de root van het bestandssysteem in de directory /root. Ook de homedirectory van de meeste systeemaccounts die nodig zijn om services te kunnen starten vindt u typisch juist niet in /home.
11/6.2.5 Opdrachten voor beheer van bestanden U weet inmiddels dat u cd kunt gebruiken om uw huidige directory te veranderen. Er is nog een aantal handige commando’s waarvan u binnen een directorystructuur gebruik kunt maken. ls wordt gebruikt om een overzicht op te vragen van bestanden in een directory. Als u alleen maar ls gebruikt, krijgt u een lijst van alle normale bestanden in een directory. Gebruikt u daarentegen de opdracht ls -l dan krijgt u ook nog eens alle eigenschappen van deze bestanden te zien. Wilt u ook verborgen bestanden zien, dan kunt u de opdracht ls -al gebruiken. Op sommige distributies is dit overigens niet nodig en krijgt u automatisch ook alle verborgen bestanden te zien.
11/6.2-10
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 11
Troubleshooting
Onhebbelijkheid
De opdracht ls heeft een onhebbelijkheid als u deze gebruikt om directory’s te bekijken. Typ bijvoorbeeld maar eens de opdracht ls /etc. U krijgt dan niet de eigenschappen van de directory te zien, maar de inhoud ervan. Wilt u ervoor zorgen dat u juist bij directory’s niet standaard de inhoud te zien krijgt, maar de eigenschappen ervan, typ dan ls -d. Overigens ook heel handig is de optie -t; deze zorgt ervoor dat het bestand dat het recentst is aangemaakt bovenaan staat in de lijst.
De opdracht ls kent veel opties om u de inhoud van een directory te laten zien.
De opdracht rm wordt gebruikt om ruimte te maken. Als u rm bestandsnaam geeft, wordt het bestand met de betreffende naam verwijderd. Wilt u echter groots uitpakken, dan gebruikt u de opdracht rm -rf /. Zeker als u root bent, heeft dit commando gegarandeerd succes. U verwijdert er namelijk alle bestanden mee van uw computer. Linux gaat er trouwens meestal van uit dat u weet wat u doet en zal
Novell Netwerkoplossingen, aanvulling 23
11/6.2-11
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 12
Linux-problemen oplossen
niet vragen of u zeker weet dat u dit wilt doen. U hebt er toch om gevraagd? Dus doet Linux het gewoon. Sommige distributies echter hebben maatregelen getroffen zodat u toch eerst zult moeten bevestigen voordat u op deze wijze onbedoeld uw hele systeem leeggooit. Om een nieuwe directory aan te maken gebruikt u de opdracht mkdir. Vooral de optie -p kan handig zijn bij dit commando. Als u bijvoorbeeld de opdracht mkdir -p /test/blah geeft, wordt in de directory /test een subdirectory blah gemaakt. De optie -p zorgt ervoor dat de directory /test ook gelijk aangemaakt wordt als deze nog niet bestond. Een van de dingen die u als beheerder van een server regelmatig in de gaten moet houden, is of u nog wel voldoende schijfruimte tot uw beschikking hebt. Hiervoor dient de opdracht df. Deze opdracht laat uitgedrukt in blokken zien hoeveel schijfruimte er op een bepaald volume is en wat daar nog van beschikbaar is. Juist die grootte in blokken is niet heel handig. Om de grootte op een leesbare wijze weer te laten geven geeft u aan df de optie -h (human) mee. De uitvoer wordt dan in een vorm gegoten die iets beter leesbaar is.
11/6.2-12
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 13
Troubleshooting
Met de opdracht df -h ziet u in één oogopslag hoeveel schijfruimte er nog beschikbaar is.
11/6.2.6 Mounten van devices Als u op een DOS- of Windows-pc een diskette invoert, is deze vrijwel altijd te benaderen onder de letter A:. Als u onder Linux echter A: typt, verschijnt de botte melding command not found. Dat komt omdat Linux een geheel eigen wijze heeft om te werken met diskettes en cd-roms. U moet ze namelijk eerst mounten. Automount
Moderne Linuxen hebben automount. Dit zorgt ervoor dat uw cd’s, USB-sticks en dvd’s automatisch gemount worden als u in een grafische omgeving werkt. Toch hebt u als beheerder een goede kennis van het mount-mechanisme nodig. Als u namelijk niet in een grafische omgeving werkt, zult u echt handmatig moeten mounten. Ook is kennis van het mounten van devices een essentiële vaardigheid om problemen in de opstartprocedure van uw server op te lossen.
Novell Netwerkoplossingen, aanvulling 23
11/6.2-13
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 14
Linux-problemen oplossen
Waar het bij mounten op neerkomt, is dat u een apparaat (bijvoorbeeld een USB-stick) koppelt aan een bepaalde directory. Zodra u klaar bent met werken met het apparaat zult u de mount ook weer handmatig moeten verwijderen, wat u doet met de opdracht umount. Daarbij moet u er overigens wel eerst voor zorgen dat er geen bestanden op het betreffende apparaat in gebruik zijn, anders krijgt u namelijk de foutmelding Device busy. Uiteraard moet u om een mount uit te kunnen voeren er wel eerst voor zorgen dat de directory waarop u iets wilt mounten, al bestaat. Op de meeste distributies bestaan voor dit doel twee directory’s. De directory /media is voor media die regelmatig gebruikt worden, zoals cd’s en dvd’s. Een mount die van tijdelijke aard is, zult u doorgaans terugvinden onder /mnt. Om een mount uit te kunnen voeren is het belangrijk dat u weet hoe het device heet dat u wilt mounten. Om bijvoorbeeld een cd-rom te mounten gebruikt u de opdracht mount /dev/cdrom /media/cdrom. Dit zal tot gevolg hebben dat de cd-rom geactiveerd wordt en u de bestanden die erop voorkomen kunt benaderen. Klaar met werken met de cd-rom? Geef dan eerst even de opdracht cd / zodat u zeker weet dat u niet in de directory /mnt/cdrom staat. Als dit het geval is, kunt u namelijk de opdracht umount niet uitvoeren. Vervolgens geeft u de opdracht umount /dev/cdrom (of umount /media/cdrom). Als u de inhoud van de directory /media/cdrom bekijkt, zult u zien dat dit als gevolg heeft dat u de cd-rom niet langer meer kunt benaderen op deze directory. Wilt u het helemaal eenvoudig regelen? Geef dan gelijk de opdracht eject. Hiermee zorgt u ervoor dat de cd-lade geopend wordt en kunt u het schijfje er gewoon uithalen.
11/6.2-14
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 15
Troubleshooting
Alle partities die voorkomen op de harde schijf van uw computer moet u eveneens eerst mounten. Uiteraard wilt u dat niet elke keer handmatig hoeven doen. Daarom wordt gebruikgemaakt van het bestand /etc/fstab. Hierin staat een aantal veelvoorkomende mounts al bij voorbaat gedefinieerd. Als u een kijkje in dit bestand neemt, ziet u dat er mounts geregeld worden voor al uw partities, maar ook dat er al standaardregels staan om het mounten van een diskette of cd-rom te vereenvoudigen. U kunt dit bestand overigens bekijken met de opdracht less /etc/fstab. Less is namelijk een viewer waarmee u de inhoud van ASCII-tekstbestanden kunt bekijken. U kunt deze viewer weer afsluiten met de opdracht q. (Gewoon in het less-scherm op de letter q drukken dus). Let bij het bekijken van /etc/fstab vooral op de eerste kolom. Hierin staan namelijk de namen van de devices die gemount worden en voor u als beheerder is het erg handig hier enig begrip van te hebben. Niet alles wat u in fstab ziet zijn overigens disk-devices. Er staan ook enkele mounts tussen van systeem-devices: dit zijn apparaten die noodzakelijk zijn voor het functioneren van uw server.
Novell Netwerkoplossingen, aanvulling 23
11/6.2-15
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 16
Linux-problemen oplossen
/etc/fstab zorgt ervoor dat enkele mounts bij het opstarten van uw server automatisch uitgevoerd kunnen worden.
Bestanden bekijken
De opdracht less biedt de mogelijkheid om de inhoud van bestanden te bekijken. Dit is echter niet de enige optie. Als alternatief kunt u gebruikmaken van de opdracht cat. Dit is vooral voor kleinere tekstbestanden handig, omdat de inhoud van het tekstbestand op het scherm gezet wordt – meer niet. U kunt meteen weer verder werken. Bent u alleen benieuwd naar de laatste of juist de eerste regels van een tekstbestand? Gebruik dan tail (laatste regels) of head (eerste regels) gevolgd door de naam van het bestand dat u wilt bekijken. Een van de zaken die u ook in /etc/fstab kunt regelen, is het bestandssysteem dat gebruikt moet worden om het apparaat in kwestie te kunnen mounten. In de voorgaande afbeelding ziet u dat dit gebeurt in de derde kolom. In de meeste gevallen staat hier auto, wat ervoor zorgt dat Linux
11/6.2-16
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 17
Troubleshooting
zelf probeert uit te zoeken wat voor type bestandssysteem gebruikt wordt. Als op een bepaald medium echter altijd gebruikgemaakt wordt van een en hetzelfde bestandssysteem, kunt u dat direct in de derde kolom van /etc/fstab vermelden. 11/6.2.7 Help opvragen We hebben inmiddels al een aantal essentiële zaken besproken. Het belangrijkste is echter nog niet aan de orde geweest: op welke wijze moet u te werk gaan om hulp op te vragen? Linux heeft voor dit doel een uitstekende voorziening: de man-pagina’s. Vrijwel elke opdracht heeft een man-pagina waarin de werking van dit commando uitvoerig beschreven wordt. In sommige gevallen gebeurt dit zelfs veel te uitgebreid. Zo telt de man-pagina van de standaard Shell bash bijna 6000 regels! Het opvragen van een man-pagina voor een bepaalde opdracht is eenvoudig: typ man opdracht en u belandt direct in de beschrijving van de opdracht. Is een manpagina erg uitgebreid? Dan is het handig te weten dat u binnen man-pagina’s kunt zoeken. Gebruik hiervoor een slash gevolgd door de tekenreeks waarnaar u wilt zoeken, bijvoorbeeld /directory om in een man-pagina te zoeken naar het voorkomen van de tekst ‘directory’.
Novell Netwerkoplossingen, aanvulling 23
11/6.2-17
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 18
Linux-problemen oplossen
Met de opdracht man kunt u hulp opvragen over alle commando’s die op uw systeem gebruikt worden. Ook werkt de opdracht voor veel configuratiebestanden.
Een man-pagina van een opdracht is natuurlijk leuk, naar heeft ook een nadeel: u moet namelijk wel weten welke opdracht u nodig hebt. Het kan voorkomen dat u wel weet wat u wilt doen, maar dat het onduidelijk is welke opdracht daarvoor nodig is. Dan is het handig te weten dat u met man -k (keyword) een heel eind kunt komen. Als u bijvoorbeeld de opdracht man -k password geeft, krijgt u een overzicht van alle man-pagina’s op uw systeem waarin in de beschrijving het woord password voorkomt. U zult ook zien dat er achter de namen van de commando’s nummers tussen haakjes vermeld worden. Alleen de commando’s waar (1) of (8) achter staat, zijn de moeite waard. Dit zijn namelijk de commando’s die door gewone gebruikers (1) en beheerders (8) gebruikt kan worden. Staat er (5) achter, dan kan het ook interessant zijn, want dan betreft het een configuratiebestand. Helaas kent de opdracht man -k geen
11/6.2-18
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 19
Troubleshooting
mogelijkheid om direct aan te geven dat u alleen commando’s in een bepaalde sectie wilt zien, bijvoorbeeld alle commando’s die door gewone gebruikers uitgevoerd mogen worden. Dit gemis compenseert u door gebruik te maken van het filter grep. Hiertoe stuurt u de uitvoer van man -k opdracht door naar de opdracht grep door gebruik te maken van piping. Daarbij vertelt u aan grep waarop het moet filteren, in dit geval bijvoorbeeld op alle regels waar een 1 in voorkomt. Als u bijvoorbeeld de opdracht man -k password | grep 1 geeft, wordt de uitvoer van man -k password door grep gefilterd. Grep haalt er alleen die regels uit waarin een 1 voorkomt. Zo weet u zeker dat u alleen de commando’s ziet die voor eindgebruikers relevant zijn. Heel handig
Grep is in het algemeen een zeer handige opdracht: u kunt er op veel manieren mee filteren en u kunt ermee zoeken in bestanden. De opdracht grep iets * bijvoorbeeld doorzoekt alle bestanden in de huidige directory om te kijken of de tekst ‘iets’ erin voorkomt.
Novell Netwerkoplossingen, aanvulling 23
11/6.2-19
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 20
Linux-problemen oplossen
Met de opdracht man -k in combinatie met grep zoekt u naar opdrachten op basis van een bepaald trefwoord.
De hulp die u met de opdracht man over commando’s op kunt vragen is goed, maar soms net een beetje te veel van het goede, zeker als u alleen maar even een kort overzicht wilt hebben van de opties die u bij een bepaald commando kunt gebruiken. In dat geval kunt u bij vrijwel elk commando de optie --help gebruiken. Zo geeft man ls dus de uitgebreide man-pagina van de opdracht ls, terwijl ls -help een redelijk beknopt overzicht geeft van de opties bij ls. Helaas is dit overzicht niet altijd zo kort dat het op één scherm past. Om ervoor te zorgen dat u toch ook rustig het begin van het scherm kunt lezen, kunt u de output van ls --help doorsturen (‘pipen’) naar de opdracht less. De opdracht ls --help | less laat u dus keurig scherm voor scherm de korte hulp over het gebruik van de opdracht ls zien.
11/6.2-20
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 21
Troubleshooting
Als u er met deze twee vormen van elektronische hulp niet uitkomt, is het goed te weten dat u altijd nog terechtkunt op internet. De eerste site die absoluut de moeite waard is, is de site van ‘the Linux Documentation Project’. U vindt deze site op www.tldp.org. Hier vindt u vrijwel alles wat ooit als open source-documentatie (niet-commercieel dus) over Linux geschreven is. Een andere site die zeer de moeite waard is, is de site van het toonaangevende tijdschrift Linux Journal. Deze site kunt u benaderen op http://linuxjournal.com. Daarnaast is Google natuurlijk ook voor Linux een nuttig medium.
www.tldp.org is de meest waardevolle site op internet als het gaat om Linux-documentatie.
11/6.2.8 Zoeken naar tekst en bestanden Een andere vaardigheid die handig is om te beheersen als u met Linux aan de slag wilt, is het zoeken. U weet al hoe u met de opdracht man zoekt naar informatie over het
Novell Netwerkoplossingen, aanvulling 23
11/6.2-21
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 22
Linux-problemen oplossen
Drie opdrachten
gebruik van opdrachten, maar het zal ook regelmatig voorkomen dat u wilt zoeken naar bestanden. Dit kunnen bestanden zijn met een bepaalde naam; soms zullen het echter bestanden zijn die aan een bepaalde eigenschap voldoen. Denk bijvoorbeeld aan alle bestanden die de tekst ‘Gwen’ bevatten, of alle bestanden die zijn aangemaakt op een bepaalde datum. Er zijn drie opdrachten die u voor dit doel kunt gebruiken. Om te beginnen is er de opdracht locate, waarmee u snel kunt zoeken naar bestanden met een bepaalde naam. Vervolgens is er de opdracht find, waarmee u uitgebreid kunt zoeken naar bestanden die aan een bepaalde eigenschap voldoen. Tot slot is er de utility grep. Deze utility kunt u voor veel doelen gebruiken, onder andere om te zoeken in bestanden naar bepaalde tekst. Locate De eenvoudigste manier om snel te zoeken naar een bestand met een bepaalde naam is door de opdracht locate te gebruiken. Het enige nadeel van locate is echter dat dit commando werkt op basis van een database. Deze database wordt periodiek via een automatisch geplande opdracht (een zogenaamde cron-job) automatisch opnieuw gegenereerd met de opdracht updatedb. Dit betekent dat u met locate geen bestanden terug kunt vinden die u zeer kort geleden hebt aangemaakt. Toch is het een zeer interessante utility: locate werkt namelijk razendsnel, omdat het niet het volledige bestandssysteem af hoeft te zoeken, maar zijn informatie uit een database haalt. Om met locate bijvoorbeeld te zoeken naar bestanden waarin in de naam de tekenreeks ‘host’ voorkomt, gebruikt u de opdracht locate host. U zult zien dat dit commando een aanzienlijke lijst geeft van bestanden waarin in de volledige naam de tekenreeks host voorkomt. Wilt u ook bestanden terug kunnen vinden die zeer kort geleden zijn aangemaakt? Gebruik dan eerst de opdracht updatedb &. Gebruik van het
11/6.2-22
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 23
Troubleshooting
teken & is niet verplicht, maar wel erg handig: hiermee zorgt u er namelijk voor dat de opdracht als achtergrondproces wordt uitgevoerd. Het voordeel hiervan is dat u gewoon verder kunt werken totdat de opdracht klaar is.
Met de opdracht locate kunt u snel zoeken naar bestanden op basis van een tekenreeks die voorkomt in de volledige naam van het bestand.
Grep U hebt reeds eerder kunnen lezen over de opdracht grep. We hebben in combinatie met de opdracht man -k bijvoorbeeld al grep gebruikt als filter. Door de constructie man -k password | grep 1 filterde grep het resultaat van de opdracht man -k, zodat alleen regels getoond werden waarin het cijfer 1 voorkomt. U kunt deze opdracht echter ook gebruiken om te zoeken in de inhoud van bestanden in een bepaalde directory: als u bijvoorbeeld de opdracht grep root * geeft vanuit de directory /etc (geef dus eerst de opdracht cd /etc), zoekt grep in de tekst van alle
Novell Netwerkoplossingen, aanvulling 23
11/6.2-23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 24
Linux-problemen oplossen
bestanden in deze directory of er ergens de tekenreeks ‘root’ in voor komt. Zoals u in de afbeelding kunt zien, verschijnt er vervolgens een vrij rommelig resultaat. De opdracht laat namelijk niet alleen de namen van de betreffende bestanden zien, maar standaard ook de regels waarin de betreffende tekenreeks gevonden is.
Als u de opdracht grep geeft, krijgt u alle regels te zien waarin de gezochte tekenreeks voorkomt.
Wilt u ervoor zorgen dat u alleen de namen ziet van de bestanden waarin de betreffende tekenreeks voorkomt? Gebruik dan de opdracht grep met de optie -l (list). Als u bijvoorbeeld de opdracht grep -l root * geeft, ziet u alleen de namen van bestanden waarin deze tekenreeks voorkomt.
11/6.2-24
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 25
Troubleshooting
Als u grep gebruikt met de optie -l, ziet u een veel overzichtelijker resultaat.
Subdirectory’s en grep U kunt met grep ook subdirectory’s doorzoeken. De voorziening hiervoor is echter niet gestandaardiseerd tussen de verschillende Linux-distributies. Soms hebt u de opdracht rgrep nodig; in andere gevallen gebruikt u grep -r om subdirectory’s te doorzoeken. Find De krachtigste opdracht om te zoeken naar bestanden is de opdracht find. Deze opdracht is zelfs zo uitgebreid dat het mogelijk is direct aan te geven dat op het resultaat van de opdracht gelijk een actie uitgevoerd moet worden. Zo zoekt u bijvoorbeeld naar bestanden die aangemaakt zijn door gebruiker bob en verwijdert u deze bestanden net zo eenvoudig met één en hetzelfde commando. Het grote voordeel van find is dat u ermee kunt zoeken naar bestanden die aan een bepaald kenmerk voldoen. U kunt werke-
Novell Netwerkoplossingen, aanvulling 23
11/6.2-25
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 26
Linux-problemen oplossen
lijk zoeken naar alle mogelijke kenmerken van bestanden. Denk bijvoorbeeld aan: • de naam van het bestand; • de naam van de gebruiker die eigenaar is (de owner) van het bestand; • de grootte van het bestand; • de aanmaakdatum/tijd van het bestand; • permissies die op het bestand van toepassing zijn. Als u find gebruikt, is het aan te raden u aan een vaste structuur van dit commando te houden. Direct na de opdracht geeft u eerst aan vanaf welk punt u wilt zoeken. Vervolgens geeft u aan op basis van welk kenmerk u wilt zoeken. Eventueel kunt u daarna nog aangeven welke actie er uitgevoerd moet worden op de bestanden die door find gevonden zijn. Om eenvoudig te beginnen: u kunt met find zoeken naar bestanden die een bepaalde naam hebben met een opdracht als find / -name “hosts”. Let even op het gebruik van de quotes: het is aan te raden de naam van de bestanden die u zoekt altijd tussen quotes te plaatsen. Als resultaat van dit commando krijgt u een lijst van alle bestanden met de naam hosts die op uw systeem voorkomt. Let overigens ook even op het nuanceverschil met locate host, die u een overzicht geeft van alle commando’s waarin in de naam van de opdracht de tekenreeks hosts voorkomt. Quotes Bij Linux is het onderscheid tussen aanhalingstekens, enkelvoudige aanhalingstekens en backquotes belangrijk. Om het zo duidelijk mogelijk te houden hanteren wij voor deze items de Engelstalige namen. Als we het hebben over quotes, dan gaat het om dit teken: “. Spreken we van single quotes, dan gaat het om dit teken: ‘. Als we spreken over backquotes, ten slotte, bedoelen we `.
11/6.2-26
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 27
Troubleshooting
Met find is het echter ook mogelijk op basis van andere criteria te zoeken dan de naam van het bestand alleen. Zo kunt u met de opdracht find / -user “gwen” zoeken naar alle bestanden waarvan gebruiker gwen eigenaar is. Helemaal handig wordt het als u weet dat u op het resultaat van een zoekactie met find direct een andere opdracht uit kunt voeren. Gebruik bijvoorbeeld de opdracht find / name “jeroen” -exec rm -rf {} \; om alle bestanden waarvan gebruiker jeroen eigenaar is van het systeem te verwijderen; handig als de gebruiker niet langer bij uw bedrijf in dienst is bijvoorbeeld. Met de optie -exec kunt u achter find alle commando’s uit laten voeren die u maar wilt. In dit geval is dat het verwijderen van alle bestanden van jeroen. Let even op de verdere opbouw van deze opdracht. Achter de opdracht (rm -rf) komt de verwijzing naar wat er verwijderd moet worden; u ziet dat als de aanduiding {}. Door middel van deze tekens verwijst u naar het resultaat van de opdracht find. Vervolgens moet u een opdracht die u met -exec aanroept, altijd afsluiten met de tekenreeks \;.
Vi
11/6.2.9 Tekstbestanden bewerken Een van de belangrijkste taken van de beheerder van een Linux-systeem is het aanpassen van ASCII-configuratiebestanden. De configuratie van vrijwel alle services op een Linux-server wordt namelijk bewaard in ASCII-tekstbestanden. Dit betekent dat u moet beschikken over een goede, krachtige editor om dit werk voor elkaar te krijgen. Er is eigenlijk maar één editor die hiervoor in aanmerking komt en dat is vi. Vi is niet de meest gebruikersvriendelijke editor, maar heeft wel het voordeel dat u deze op elk UNIXsysteem dat na 1974 gemaakt is aantreft. Als u vi beheerst, kunt u dus altijd en overal tekstbestanden aan-
Novell Netwerkoplossingen, aanvulling 23
11/6.2-27
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 28
Linux-problemen oplossen
maken. Wij raden u dan ook van harte aan u te verdiepen in de werking van dit programma.
Alternatieve editors
Ook al raden wij het gebruik van vi aan, we weten dat sommige mensen er echt niet aan kunnen wennen. In dat geval is er natuurlijk niets op tegen gebruik te maken van een alternatieve editor. Probeer bijvoorbeeld vanuit een grafische omgeving eens gedit of kate. Geen grafische omgeving bij de hand? In dat geval is pico een goed alternatief, dat vaak wel voorhanden is. Over vi zijn dikke boeken geschreven en u kunt bij specialisten cursussen van meerdere dagen over dit onderwerp volgen. U begrijpt dat wij in dit werk een andere aanpak moeten kiezen. We beperken ons tot de meest essentiële zaken die u moet weten om met vi te kunnen werken: • wisselen tussen commando en input modus; • tekst invoeren; • bestanden opslaan en vi afsluiten; • knippen, kopiëren, plakken en verwijderen. Voordat we beginnen nog één opmerking. De oorspronkelijke versie is spartaans. In de vroegste versies van vi is het niet eens mogelijk gebruik te maken van de pijltjestoetsen om door de tekst heen te bewegen. Gelukkig wordt bij alle Linux-versies een verbeterde (gebruikersvriendelijke?) versie van vi mee geleverd onder de naam vim (Vi Improved). U kunt deze editor opstarten met de opdracht vi, maar vim werkt ook. Als u vi start zonder daarbij de naam in te voeren van een bestand dat u wilt aanmaken of openen, komt u in de helptekst van vi terecht. Bent u nog niet gewend te werken met vi, dan is dat verwarrend, want voordat u die helptekst ook daadwerkelijk doorgelezen hebt, weet u waarschijnlijk niet hoe u vi af moet sluiten. Om die reden kunt u beter direct achter de opdracht vi waarmee u de
11/6.2-28
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 29
Troubleshooting
editor activeert, de naam geven van het bestand dat u wilt bewerken; bijvoorbeeld vi boeken om een bestand met de naam boeken te openen en bewerken.
Als u de opdracht vi geeft zonder daarna een bestandsnaam te specificeren, ziet u een korte helptekst.
Command en input mode Als nieuwkomer in vi is het dus handig de editor te openen en gelijk de naam mee te geven van het bestand dat u wilt bewerken. Hierbij moet u wel even opletten: u kunt namelijk niet direct beginnen met het bewerken van het bestand! Als u de editor net geopend hebt, komt u in de zogenaamde commando-modus terecht. Zoals de naam al aangeeft, is deze modus ontworpen om u in de gelegenheid te stellen opdrachten in te voeren. Denk bijvoorbeeld aan de opdracht dat u zou willen gebruiken om tekst op te slaan. Als u tekst wilt invoeren, moet u ervoor zorgen dat u in de zogenaamde input-modus terechtkomt. Dit regelt u
Novell Netwerkoplossingen, aanvulling 23
11/6.2-29
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 30
Linux-problemen oplossen
door op de toets i te drukken. U ziet nu dat links onder in beeld de tekst INSERT komt te staan; dit betekent dat u nu kunt beginnen met het invoeren van tekst. Als alternatief voor de opdracht i kunt u vanuit de commando-modus ook de opdracht o geven. Hiermee opent u een nieuwe regel, waar u vervolgens tekst kunt invoeren. Dit is vooral handig als u bestaande bestanden moet gaan bewerken. Om vervolgens terug te gaan naar commando-modus drukt u op de Escape-toets. Opslaan en afsluiten Zodra u klaar bent met het invoeren van tekst, wilt u de wijzigingen die u hebt aangebracht waarschijnlijk ook opslaan. Om dit te doen moet u eerst weer van de inputmodus naar de commando-modus. Dit doet u met de toets Esc. Als u nu in de commando-modus bent beland, kunt u de opdracht :wq! geven (let op de dubbele punt in het begin!). Hiermee vertelt u vi dat het programma eerst de wijzigingen weg moet schrijven (w), vervolgens de editor af moet sluiten (q) en dat er vooral geen moeilijke vragen gesteld moeten worden, maar vi gewoon zijn werk moet doen (!). Zonder het uitroepteken lukt het overigens ook wel: u loopt dan alleen het risico dat vi met opmerkingen komt als ‘File already exists. Overwrite?’ Dat kan weer verwarrend zijn en daarom vermijden we dat liever. Knippen, kopiëren, plakken en verwijderen De laatste activiteit die handig is, is het knippen, kopiëren, plakken en verwijderen van tekst. Knippen betekent dat u tekst uit de tekst verwijdert en in een tijdelijke buffer plaatst. Als u daarna opnieuw tekst gaat verwijderen, wordt deze buffer overschreven en is de tekst ook echt verwijderd. Totdat u dat gedaan hebt, kunt u de laatst verwijderde tekst gewoon terughalen. Als u één teken wilt verwijderen, kunt u vanuit de input-modus de Delete- en
11/6.2-30
Novell Netwerkoplossingen, aanvulling 23
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 31
Troubleshooting
Backspace-toetsen gebruiken. Om vanuit de commandomodus een hele regel tekst in één keer te verwijderen plaatst u de cursor op de betreffende regel en geeft u vervolgens de opdracht dd. Met de opdracht dd in de commando-modus hebt u de regel tekst in een tijdelijke buffer geplaatst. Om die tekst er nu weer uit te halen (plakken) plaatst u de cursor op de positie waar u de tekst wilt plakken. Vervolgens geeft u de opdracht p om de tekst terug te zetten op deze nieuwe positie. Zolang de tekst zich in de buffer bevindt, kunt u dit een oneindig aantal keren herhalen. Geeft u honderd keer de opdracht p, dan plakt u de tekst daarmee dus gewoon honderd keer. Als alternatief voor de opdracht dd, waarmee u een regel tekst kunt knippen, is het natuurlijk ook mogelijk deze regel gewoon te kopiëren. Dit doet u met de opdracht yy (de y staat voor ‘yank’). De werking is verder gelijk als hierboven beschreven. Tot zover onze spoedcursus vi. Realiseer u wel dat we veel meer niet dan wel verteld hebben. U zou echter op basis van deze informatie even vooruit moeten kunnen! Belangrijkste vi-commando’s
Vi-commando i, o Esc :wq! dd yy p
Novell Netwerkoplossingen, aanvulling 23
Toelichting Ga van commando-modus naar inputmodus Ga van input-modus weer naar commando-modus Schrijf wijzigingen weg en sluit vi af Verwijder een regel tekst Kopieer een regel Plak de inhoud van de buffer op de huidige locatie
11/6.2-31
deel 11_6-2-AV23.qxp:deel 11_5-AV20
17-04-2007
07:57
Pagina 32
Linux-problemen oplossen
Vi-commando g G dG
v
Toelichting Ga naar het begin van het bestand Ga naar het einde van het bestand Verwijder alles vanaf de huidige cursorpositie tot aan het einde van het bestand Zet de functie Blok markeren aan. Gebruik nu de pijltjestoetsen op het toetsenbord om een blok tekst te markeren dat u vervolgens kunt verwijderen of kopiëren
11/6.2.10 Samenvatting In deze paragraaf hebt u kennisgemaakt met het essentiële gereedschap om u te redden op de commandoregel. U hebt geleerd hoe u hulp opvraagt bij opdrachten, u hebt kennisgemaakt met een aantal belangrijke opdrachten, de opbouw van de directory-structuur op een Linux-systeem en tot slot hebt u geleerd tekstbestanden aan te maken met vi.
11/6.2-32
Novell Netwerkoplossingen, aanvulling 23
Troubleshooting
11/6.3 Troubleshooten van Linuxnetwerkproblemen 11/6.3.1 Inleiding Elke beheerder wordt er vroeger of later wel een keer mee geconfronteerd: de opmerking dat het netwerk zo langzaam is. Niet zo mooi natuurlijk, maar de vraag is of er ook wat tegen te doen valt. In deze paragraaf leest u hoe u ervoor zorgt dat op uw Linux-server het netwerk zo optimaal mogelijk presteert. Netwerkproblemen kunnen op verschillende niveaus voorkomen. Kunt u een andere host gewoon niet bereiken? Dan is het een kwestie van pingen en kijken waar op de route zich problemen voordoen. Veel lastiger echter wordt het wanneer u te maken hebt met vage problemen, zoals pakketjes die gedropt worden of verbindingen die traag zijn. In dat geval is het zaak de kernel te optimaliseren zodat het verkeer alsnog zo goed mogelijk voortgang kan vinden. Mocht dat niet lukken, dan kunt u altijd nog proberen om TCP/IP-parameters aan te passen. In deze paragraaf leest u hoe u dit doet op basis van SuSE Linux Enterprise Server 10.
Twee interfaces
Voordat we beginnen eerst in het algemeen een paar woorden over het aanpassen van kernelinstellingen. Hiervoor zijn twee interfaces beschikbaar. Als eerste is er procfs, het virtuele bestandssysteem dat u terugvindt in de directory /proc. U kunt de instellingen in dit bestandssysteem aanpassen door de nieuwe waarde die u wilt gebruiken ernaartoe te echoën, bijvoorbeeld:
echo 0 > /proc/sys/net/ipv4/tcp_keepalive_intvl
Novell Netwerkoplossingen, aanvulling 30
11/6.3-1
Linux-problemen oplossen
Het nadeel van deze werkwijze is dat de instelling verloren gaat op het moment dat u de server opnieuw opstart. Daarom kunt u als alternatief gebruikmaken van de service sysctl. Sysctl is een service die automatisch gestart wordt bij het opstarten van de server en op dat moment het bestand /etc/sysctl.conf inleest. Dan worden de nieuwe instellingen vanzelf weggeschreven naar het /proc-bestandssysteem, wat garandeert dat u altijd met dezelfde instellingen kunt werken. Omdat dit een veel handiger werkwijze is dan de werkwijze waarbij u elke keer opnieuw weg moet schrijven naar /proc, maken we hier alleen gebruik van de sysctl-optie. 11/6.3.2 Kernelparameters aanpassen Om pakketjes te kunnen zenden en ontvangen alloceert de kernel een read (receive)- en een write (send)-buffer waarin pakketjes tijdelijk worden opgeslagen. Zit de readbuffer vol, dan worden overige binnenkomende gegevens gedropt. Als de writebuffer vol zit, heeft de toepassing op de server die gegevens wil uitsturen daar last van. Het is mogelijk dat in dat geval de toepassing zelf blokkeert omdat deze haar gegevens niet meer kwijt kan; het is ook mogelijk dat de toepassing wel probeert gegevens te versturen maar dat dit niet lukt, met als gevolg dat de kernel een foutmelding terugstuurt zodat de toepassing het opnieuw mag proberen. Op het moment dat deze buffers vol zitten, kan het een oplossing zijn de buffers te vergroten. U moet hierbij echter wel in de gaten houden dat dit niet noodzakelijk ook de ultieme oplossing is. Vergelijk deze buffers maar met de wachtkamer bij de tandarts: als die continu vol zit, is het niet noodzakelijkerwijs ook de beste oplossing de wachtkamer te vergroten. Misschien moeten er gewoon tandartsen bij komen. Zo kan het in het geval van netwerkbuffers 11/6.3-2
Novell Netwerkoplossingen, aanvulling 30
Troubleshooting
ook gewoon nodig zijn om meer verwerkingskracht in te zetten. Wellicht is de server in het geheel gewoon overbelast. Mocht u desalniettemin willen proberen de buffercapaciteit op de netwerkkaart te vergroten, dan doet u dat door in het /proc-bestandssysteem twee parameters aan te passen: /proc/sys/net/core/rmem_max /proc/sys/net/core/wmen_max
Bekijk om te beginnen hoe groot de ingestelde waarde op dit moment is. Dit doet u met de opdracht cat /proc/sys/ net/core/rmem_max: BTN:/proc/sys/net/core # cat rmem_max 131071
Zoals u in dit voorbeeld ziet, is de huidige instelling met 128 KB vrij beperkt. Als u denkt dat hier de problemen vandaan komen, gebruik dan het sysctl-commando om nieuwe instellingen te definiëren. De volgende twee opdrachten zorgen ervoor dat zowel de read- als de writebuffers opgehoogd worden naar 8 MB. Door dit met sysctl te doen regelt u dat de wijziging ook na een herstart gewoon nog van toepassing is. sysctl -w net.core.rmem_max=8388608 sysctl -w net.core.wmem_max=8388608
Houd bij het doen van deze instelling wel heel goed in de gaten of u hier wel voldoende geheugen voor hebt. Het is leuk om 16 MB te reserveren voor de read- en writebuffers,
Novell Netwerkoplossingen, aanvulling 30
11/6.3-3
Linux-problemen oplossen
maar als u sowieso al krap zat in het werkgeheugen, gaat dit op andere plaatsen weer problemen veroorzaken. Twee andere kernelinstellingen hebben betrekking op het aantal pakketjes dat maximaal in de wacht gezet kan worden. Om te beginnen is dat de parameter netdev_max_ backlog. De standaardinstelling voor deze parameter is op SLES 10 gezet op 1000 pakketjes en dat is voor een drukke netwerkverbinding veel te weinig. Dit betekent dat zelfs al hebt u 8 MB gereserveerd voor de incoming queue, deze queue sowieso als vol beschouwd wordt op het moment dat er 1000 pakketjes in zitten. Zeker op netwerken met lange latencytijden is het zeer de moeite waard deze waarde omhoog te brengen. Een reden om dit te doen is als het commando ifconfig u veel dropped packets toont. In dat geval gebruikt u het volgende commando om het maximale aantal pakketjes in de queue in te stellen op bijvoorbeeld 4000: sysctl -w net.core.netdev_max_backlog=4096
Gerelateerd aan deze instelling is er ook nog een setting die bepaalt hoeveel connectierequests er tegelijkertijd kunnen zijn. Hier gaat het dus om het aantal gelijktijdig openstaande verbindingen. De standaardwaarde op SLES 10 is 128, maar voor bijvoorbeeld een druk bezochte webserver is dit veel te weinig. Hebt u er regelmatig mee te maken dat de server een ‘connection refused’-foutmelding geeft? Gebruik dan de onderstaande opdracht om het maximale aantal gelijktijdige verbindingen op te hogen: sysctl -w net.core.somaxconn=512
Als laatste van de kernelparameters is er de definitie van de grootte van de sockets. Dit is de hoeveelheid geheugen 11/6.3-4
Novell Netwerkoplossingen, aanvulling 30
Troubleshooting
die initieel wordt gealloceerd aan een nieuwe verbinding. Standaard staat deze ingesteld op 10240 bytes, wat in de meeste gevallen meer dan genoeg is. Als er echter veel gewerkt wordt met jumboframes die 9 kilobytes groot zijn, kan deze instelling problemen opleveren en is het de moeite om de socketruimte groter te maken. Om deze bijvoorbeeld in te stellen op 100 KB gebruikt u de volgende opdracht: sysctl -w net.core.optmem_max=102400
11/6.3.3 TCP/IP-opties Naast de netwerkopties die u in de kernel aanpast, is er ook nog een aantal TCP-opties dat aangepast kan worden. Een belangrijke kernparameter in TCP/IP-communicatie is de window size. Hiermee wordt bepaald hoeveel gegevens een client tegelijkertijd kan ontvangen. In essentie is het vrij eenvoudig: hoe groter de receiver-socketbuffer, hoe groter het window dat geadverteerd kan worden. Het is dus op langzame connecties de moeite waard om dit aan te passen. Net als de netwerkverbinding op zich werkt ook TCP/IP met read- en write-socketbuffers. Deze worden ingesteld door middel van de opties /proc/sys/net/ipv4/tcp_rmem en /proc/sys/net/ipv4/tcp_wmem. Beide opties bevatten als waarde een array die uit drie onderdelen bestaat. Als eerste wordt de minimale grootte genoemd, vervolgens is er de standaardgrootte en tot slot is er de maximale grootte. De tcp_rmem-optie hoeft u zelf niet in te stellen, want de kernel doet dat automatisch. Dit geldt echter niet voor de writebuffer. Voor beide loont het vooral de moeite om de maximale grootte aan te passen, zodat wanneer nodig voldoende geheugen gereserveerd kan worden voor binnenkomende pakketjes. De volgende twee opdrachten zorgen Novell Netwerkoplossingen, aanvulling 30
11/6.3-5
Linux-problemen oplossen
ervoor dat de vrij beperkte standaardwaarden op SuSE Linux Enterprise Server worden aangepast. De minimale waarde blijft hierbij gelijk, maar de standaardwaarde en maximale waarde worden beide aanzienlijk opgehoogd: sysctl -w net.ipv4.tcp_rmem=”4096 87380 4194304” sysctl -w net.ipv4.tcp_wmem=”4096 87380 4194304”
De volgende relevante instelling bepaalt hoe de Linuxkernel omgaat met de TCP window size. Onder normale omstandigheden staat deze ingesteld op een maximum van 64 KB. Zeker op verbindingen met een hoge latency is het de moeite waard om deze maximale window size te vergroten. Dit doet u door de tcp_window_scaling-instelling een waarde 1 te geven. Gebruik hiervoor het volgende commando: sysctl -w net.ipv4.tcp_window_scaling=1
Een van de kenmerken van TCP/IP is dat het connectiegeoriënteerd is. Dit betekent dat de ontvanger een negatieve acknowledgement stuurt als een pakketje in een reeks niet is aangekomen. Vervolgens zal de zender alles vanaf dat pakketje opnieuw versturen. Dit betekent dat wanneer de zender de pakketjes 10 tot en met 30 in één burst gestuurd heeft en er was iets mis met pakketje 11, de zender normaliter de pakketjes 11 tot en met 31 opnieuw en in één burst zal versturen. De pakketjes 12 tot en met 30 worden in dat geval dus dubbel verstuurd. Zeker op langzame verbindingen is dat niet handig en kunt u er beter voor zorgen dat alleen dat pakketje waar iets mis mee was opnieuw verstuurd wordt. De instelling tcp_sack (selective acknowledgements) zorgt hiervoor. Als de verbinding langzaam is, moet u ervoor zorgen dat deze instelling aanstaat. Op snelle LAN-verbindingen echter verliest u meer tijd aan de 11/6.3-6
Novell Netwerkoplossingen, aanvulling 30
Troubleshooting
ontvangende zijde als u al die pakketjes weer in de juiste volgorde moet zetten dan dat u tijd wint door alleen dat pakketje dat niet goed aangekomen was opnieuw te sturen; zorg er daarom op snelle verbindingen voor dat deze waarde juist uitstaat door de waarde 0 ernaartoe te schrijven. Het onderstaande commando laat zien hoe u selective acknowledgements uitzet: sysctl -w net.ipv4.tcp_sack=0
Als u tcp_sack uitzet, zorg er dan altijd voor dat ook tcp_ dsack en tcp_fack uitstaan want deze zijn afhankelijk van tcp_sack. De volgende parameter die we bespreken is tcp_max_syn_ backlog. Deze instelling bepaalt de hoeveelheid geheugen die per inkomende TCP-connectie beschikbaar is. Deze waarde moet op zijn minst ingesteld staan op 4096. Hebben clients vaak problemen met binnenkomende verbindingen, zorg er dan zeker voor dat deze waarde wordt opgehoogd. Met het volgende commando geeft u deze parameter de waarde 8192: sysctl -w net.ipv4.tcp_max_syn_backlog=8192
Vervolgens is er nog een aantal instellingen waarmee u bepaalt hoe de kernel reageert op syn/ack-pakketjes. Op het moment dat er zo’n pakketje binnenkomt, zal de kernel maximaal vijf keer proberen contact op te nemen met de afzender om het pakketje te bevestigen. Dit is goed als u ervoor wilt zorgen dat de kans dat het alsnog goed komt met een nieuwe verbinding groot is. Aan de andere kant kunt u er bij de betrouwbare netwerken die tegenwoordig gebruikt worden, ook van uitgaan dat als het na drie keer niet lukt, het waarschijnlijk helemaal niet meer gaat lukNovell Netwerkoplossingen, aanvulling 30
11/6.3-7
Linux-problemen oplossen
ken. Als u dus gebruikmaakt van een betrouwbaar netwerk, is het de moeite deze waarde juist te verlagen. Dit betekent dat u eerder een falende netwerkverbinding zult detecteren en dat komt de performance van het netwerk in het geheel ten goede. Met de volgende opdracht kunt u deze parameter bijvoorbeeld de waarde 3 geven: sysctl -w net.ipv4.tcp_synack_retries=3
Wanneer een verbinding eenmaal tot stand gebracht is, kan het ook wel eens voorkomen dat er tijdens de verbinding iets misgaat en pakketjes gedropt worden. Op dat moment zal de TCP/IP-stack het automatisch weer opnieuw gaan proberen. De tcp_retries2-waarde bepaalt met een standaardinstelling van 15 dat daar maximaal 15 pogingen overheen gaan. Dit betekent dat het maximale zal gebeuren om ervoor te zorgen dat het alsnog goed komt met een verbinding. Ook hier echter geldt dat het gezien de grote mate van betrouwbaarheid van moderne netwerken misschien wat veel is om hier 15 pogingen aan te besteden; in veel gevallen zal het bijvoorbeeld met een totale waarde van 5 ook wel goed komen (maar vergeet niet dat u er alleen door te testen achter kunt komen of dit inderdaad het geval is!). Om deze waarde aan te passen gebruikt u de volgende opdracht: sysctl -w net.ipv4.tcp_retries2=5
Is eenmaal een connectie tot stand gebracht, dan is het zaak deze verbinding ook actief te houden. Standaard zorgt de optie tcp_keepalive_time ervoor dat elke verbinding in elk geval twee uur in stand gehouden wordt. Dit betekent dat ook bij het optreden van een storing waarbij de andere host niet meer bereikbaar is, de verbinding toch twee uur opengehouden is. Dit kost de nodige resources op uw 11/6.3-8
Novell Netwerkoplossingen, aanvulling 30
Troubleshooting
server. Wilt u ervoor zorgen dat falende verbindingen eerder beëindigd worden? Geef deze parameter dan een lagere waarde, bijvoorbeeld 900, om ervoor te zorgen dat falende verbindingen na een kwartier afgesloten worden. Dit doet u met behulp van de volgende opdracht: sysctl -w net.ipv4.tcp_keepalive_time=450
Gerelateerd aan de maximale keepalive_time zijn er twee instellingen die bepalen hoeveel pakketjes er verzonden moeten worden om de beschikbaarheid van een verbinding te testen en hoe vaak dat dan zou moeten gebeuren. De parameter tcp_keepalive_intvl specificeert dat elke 75 seconden een pakketje verstuurd wordt en met tcp_keepalive_ probes wordt bepaald dat er standaard negen pakketjes verstuurd worden. Voeg dit toe aan de tcp_keepalive_time die een standaard waarde van 2 uur heeft en u komt eropuit dat na twee uur en een kwartier de verbinding automatisch verbroken wordt. Aangezien eerder al aangegeven is dat het nuttig is de tcp_keepalive_time terug te brengen, is het ook nuttig het aantal probes en de interval tussen die probes terug te brengen, zeker als gebruik wordt gemaakt van een snelle netwerkverbinding. U regelt dit met de volgende twee opdrachten: sysctl -w net.ipv4.tcp_keepalive_intvl=15 sysctl -w net.ipv4.tcp_keepalive_probes=3
11/6.3.4 Tot slot De TCP/IP-stack op een Linux-server is flexibel. Na installatie van een server krijgt u instellingen die het in vrijwel alle gevallen wel goed doen, maar tegelijkertijd ook instellingen die niet geoptimaliseerd zijn als de server echt zwaar werk moet verzetten. Daarom komt in heel veel gevallen juist de TCP/IP-stack in aanmerking voor optimaliNovell Netwerkoplossingen, aanvulling 30
11/6.3-9
Linux-problemen oplossen
satie. In deze paragraaf hebt u gelezen over de belangrijkste parameters die hiervoor in aanmerking komen.
11/6.3-10
Novell Netwerkoplossingen, aanvulling 30
Troubleshooting
11/6.4 Logging In de meeste gevallen zal uw Linux-computer het prima doen. Soms echter komt het voor dat een programma niet wil starten, of dat een bepaalde systeemcomponent er spontaan mee ophoudt. Als dit het geval is, hebt u alle hulp nodig die u maar kunt krijgen. U weet inmiddels al hoe u een commando of programma naar behoren laat functioneren, daarvoor gebruikt u man of -help. Dus als het op dit moment niet langer lukt om services naar behoren te laten werken, hebt u iets anders nodig. Dat brengt ons tot logging. 11/6.4.1 Logging begrijpen Een van de zaken die het meest krachtig ontwikkeld is in Linux, is logging. Linux-logging biedt heel veel mogelijkheden en u kunt logberichten naar aanleiding van heel veel soorten events vrijwel overal naartoe laten sturen. Het resultaat is veel meer dan alleen maar berichten die geschreven worden naar /var/log/messages; u kunt er zelfs voor zorgen dat op het moment dat iets niet goed gaat, een bericht wordt geschreven op de terminal waar root is ingelogd, een mailbericht wordt verstuurd naar de systeembeheerder of zelfs alle gebruikers een bericht te zien krijgen. Ook handig: u kunt bijvoorbeeld ook alle logberichten naar een speciale virtuele console laten schrijven, zodat u in real time kunt monitoren. Tip
Op Linux beschikt u over verschillende virtuele consoles die u kunt activeren door gebruik te maken van de toetsencombinatie Ctrl-Alt-Fn. Niets weerhoudt u ervan logberichten te sturen naar tty8 en daar vervolgens met de toetsencombinatie Ctrl-Alt-F8 naartoe te gaan.
Novell Netwerkoplossingen, aanvulling 31
11/6.4-1
Logging
Alle logging wordt afgehandeld door een proces met de naam syslogd. Dit proces heeft een configuratie die het in staat stelt in de gaten te houden wat er op uw computer gebeurt. Dit doet het door te observeren wat er aan berichten gegenereerd wordt door de diverse opdrachten waarvan u op uw computer gebruikmaakt. Syslog vangt deze berichten af en op basis van de wijze waarop het geconfigureerd is, stuurt het de berichten door naar een bestand of andere bestemming. De helft van wat er gebeurt bij het loggen valt onder de verantwoordelijkheid van syslog. De andere helft heeft te maken met het commando dat berichten verstuurt. Ook al kunt u syslog configureren om alles in de gaten te houden, dit gebeurt niet automatisch. Sommige berichten die door commando’s en programma’s gegenereerd worden, zijn te obscuur en alleen in heel specifieke omstandigheden interessant. Denk bijvoorbeeld aan berichten met een status als informational of debug. Echter, als het niet goed werkt, kunnen ook deze berichten de moeite waard zijn. Bij sommige opdrachten kunt u ze tonen door bij het opstarten de optie -v mee te geven (voor verbose). Een willekeurig voorbeeld is bijvoorbeeld de opdracht cp, waaraan u met de optie -v vertelt dat deze precies moet laten zien wat hij doet (zie listing 11/6.4-1). Heel veel opdrachten hebben een soortgelijke optie beschikbaar. ilulissat:~ # cp -v /etc/[qx]* /tmp ’/etc/quotagrpadmins’ -> ‘/tmp/quotagrpadmins’ ’/etc/quotatab’ -> ‘/tmp/quotatab’ ’/etc/xattr.conf’ -> ‘/tmp/xattr.conf’ cp: omitting directory ‘/etc/xdg’ ’/etc/xinetd.conf’ -> ‘/tmp/xinetd.conf’ cp: omitting directory ‘/etc/xinetd.d’
11/6.4-2
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
cp: omitting directory ‘/etc/xml’ cp: omitting directory ‘/etc/xscreensaver’ Listing 11/6.4-1 Bij veel opdrachten kunt u de optie -v gebruiken om exact weer te laten geven wat het programma doet.
Daarnaast zijn er de opdrachten die u normaal vanuit een grafische omgeving gebruikt. Normaal laten deze grafische commando’s geen logberichten zien om duidelijk te maken wat ze aan het doen zijn. Als u echter uitvindt wat de naam en exacte locatie is van het betreffende programmabestand (wat u bijvoorbeeld kunt doen met opdrachten als which of whereis als u de betreffende opdracht niet vanuit het pad kunt starten), kunt u het programma handmatig opstarten vanuit een console. U zult verbaasd zijn hoeveel informatie het programma dan soms zal genereren. In listing 11/6.4-2 ziet u bijvoorbeeld de berichten die voorbijkomen als u Gnome Nautilus (het programma waarmee u bewerkingen op bestanden en directory’s uitvoert) handmatig opstart. Let goed op de foutmelding, want het programma vertelt in deze listing ook precies waar het niet in slaagt. ilulissat:~ # nautilus Initializing nautilus-share extension Initializing nautilus-open-terminal extension ** (nautilus:8474): WARNING **: Can not calculate _NET_NUMBER_OF_DESKTOPS ** (nautilus:8474): WARNING **: Can not calculate _NET_NUMBER_OF_DESKTOPS ** (nautilus:8474): WARNING **: Can not get _NET_WORKAREA
Novell Netwerkoplossingen, aanvulling 31
11/6.4-3
Logging
** (nautilus:8474): WARNING **: Can not determine workarea, guessing at layout Nautilus-Share-Message: REFRESHING SHARES Nautilus-Share-Message: ––––––––––––––––––––– Nautilus-Share-Message: spawn arg “net” Nautilus-Share-Message: spawn arg “usershare” Nautilus-Share-Message: spawn arg “info” Nautilus-Share-Message: end of spawn args; SPAWNING Nautilus-Share-Message: returned from spawn: SUCCESS: Nautilus-Share-Message: exit code 255 Nautilus-Share-Message: ––––––––––––––––––––– Nautilus-Share-Message: Called “net usershare info” but it failed: ‘net usershare’ returned error 255: net usershare: usershares are currently disabled Listing 11/6.4-2 Als u een grafisch programma vanaf de commandoregel start, ziet u soms ook veel loginformatie.
De meeste commando’s schrijven echter ook naar het system log als er iets niet in orde is. Voordat we bespreken hoe u deze logs kunt configureren, leest u nu eerst meer over de verschillende logbestanden en hoe u ze in de gaten kunt houden. 11/6.4.2 Log files monitoren Er bestaat geen absolute regel die bepaalt welke logbestanden waar weggeschreven worden, maar één bestand vindt u altijd: /var/log/messages. Dit is het meest algemene logbestand dat er is en het doel is om alle berichten die op uw computer gegenereerd worden op te slaan. Omdat het een tekstbestand betreft, kunt u het ook gewoon als tekstbestand benaderen. De opdracht less /var/log/ messages voldoet bijvoorbeeld. Nog handiger echter is om
11/6.4-4
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
het bestand met tail -f te bekijken. Deze opdracht toont de laatste regels uit het bestand en zorgt ervoor dat de weergave ververst wordt op het moment dat er nieuwe regels bij komen. Zo ziet u dus altijd in real time wat er gebeurt. Dit is erg nuttig als u in real time wilt uitpluizen waarom iets niet werkt zoals het zou moeten werken! Bij het bekijken van logbestanden vergeten veel mensen dat er meer is dan alleen maar /var/log/messages. Wij raden u daarom aan om gewoon eens te kijken wat er zich allemaal bevindt in de directory /var/log en te proberen te begrijpen wat de bedoeling is voor de betreffende bestanden. Wist u bijvoorbeeld dat de meeste distributies een logbericht genereren voor elk mailbericht dat verstuurd wordt, maar ook voor elke mislukte poging om mail te versturen? Deze informatie wordt echter niet verstuurd naar /var/log/messages. Met alleen dit bestand komt u er dus niet. Neem daarom eens een kijkje in de inhoud van /var/log en probeer te begrijpen wat u hier allemaal ziet staan. Listing 11/6.4-3 geeft een indruk van hoe het eruit zou kunnen zien. Houd er overigens ook rekening mee dat niet elke toepassing logbestanden schrijft onder /var/log/, sommige toepassingen maken een logdirectory in hun eigen toepassingsdirectory. ilulissat:~ # nautilus Initializing nautilus-share extension Initializing nautilus-open-terminal extension ** (nautilus:8474): WARNING **: Can not calculate _NET_NUMBER_OF_DESKTOPS ** (nautilus:8474): WARNING **: Can not calculate _NET_NUMBER_OF_DESKTOPS
Novell Netwerkoplossingen, aanvulling 31
11/6.4-5
Logging
** (nautilus:8474): WARNING **: Can not get _NET_WORKAREA ** (nautilus:8474): WARNING **: Can not determine workarea, guessing at layout Nautilus-Share-Message: REFRESHING SHARES Nautilus-Share-Message: ––––––––––––––––––––– Nautilus-Share-Message: spawn arg “net” Nautilus-Share-Message: spawn arg “usershare” Nautilus-Share-Message: spawn arg “info” Nautilus-Share-Message: end of spawn args; SPAWNING Nautilus-Share-Message: returned from spawn: SUCCESS: Nautilus-Share-Message: exit code 255 Nautilus-Share-Message: ––––––––––––––––––––– Nautilus-Share-Message: Called “net usershare info” but it failed: ‘net usershare’ returned error 255: net usershare: usershares are currently disabled ilulissat:~ # ilulissat:~ # cd /var/log ilulissat:/var/log # ilulissat:/var/log # ls SaX.log
boot.msg
XFree86.0.log
mail.warn
boot.omsg
zmd-backend.log
messages
zmd-backend.
log-20090228.bz2 XFree86.0.log.old
cups
news
zmd-backend.log-
20090305.bz2 Xorg.0.log
faillog
ntp
zmd-backend.log-20090311.
bz2 Xorg.0.log.old
gdm
samba
zmd-backend.log-20090319.
bz2 YaST2
krb5
acpid
lastlog
scpm
zmd-backend.log-20090326.bz2
slpd.log
zmd-backend.log-20090330.
bz2 apache2
11/6.4-6
localmessages
smpppd
zmd-messages.log
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
apparmor audit boot.log
mail
susehelp.log
mail.err
warn
mail.info
wtmp
Listing 11/6.4-3 In /var/log komt meer voor dan alleen maar het bestand messages.
11/6.4.3 Configuratie van syslog Er zijn voor Linux twee logservices: syslog en syslog-ng. De ‘ng’ in syslog-ng staat voor ‘next generation’; het betreft hier een veel krachtiger versie van syslog. Om syslogng te kunnen begrijpen moet u ook begrijpen hoe syslog werkt. Daarom beginnen we met een bespreking van syslog en leert u daarna hoe u werkt met syslog-ng. Sommige distributies gebruiken overigens nog steeds syslog en niet syslog-ng, ook om die reden moet u dus weten hoe syslog werkt. Syslog bestaat uit twee onderdelen. Als eerste is er het proces zelf, normaliter /usr/sbin/syslogd. Daarnaast is er het configuratiebestand dat het proces precies vertelt wat het tijdens opstarten moet doen. De naam van dit configuratiebestand is /etc/syslog.conf. In listing 11/6.4-4 ziet u hoe dit bestand eruit kan zien. root@ubuntu:/etc# cat syslog.conf # /etc/syslog.conf Configuration file for syslogd. # #
For more information see syslog.conf(5)
#
manpage.
# # First some standard logfiles. Log by facility. #
Novell Netwerkoplossingen, aanvulling 31
11/6.4-7
Logging
auth,authpriv.*
/var/log/auth.log
*.*;auth,authpriv.none
-/var/log/syslog
#cron.*
/var/log/cron.log
daemon.*
-/var/log/daemon.log
kern.*
-/var/log/kern.log
lpr.*
-/var/log/lpr.log
mail.*
-/var/log/mail.log
user.*
-/var/log/user.log
# # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # mail.info
-/var/log/mail.info
mail.warn
-/var/log/mail.warn
mail.err
/var/log/mail.err
# Logging for INN news system # news.crit
/var/log/news/news.crit
news.err
/var/log/news/news.err
news.notice
-/var/log/news/news.notice
# # Some ‘catch-all’ logfiles. # *.=debug;\ auth,authpriv.none;\ news.none;mail.none
-/var/log/debug
*.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none
-/var/log/messages
#
11/6.4-8
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
# Emergencies are sent to everybody logged in. # *.emerg * # # I like to have messages displayed on the console, but only on a virtual # console I usually leave idle. # #daemon,mail.*;\ #
news.=crit;news.=err;news.=notice;\
#
*.=debug;*.=info;\
#
*.=notice;*.=warn /dev/tty8
# The named pipe /dev/xconsole is for the ‘xconsole’ utility. To use it, # you must invoke ‘xconsole’ with the ‘-file’ option: # #
$ xconsole -file /dev/xconsole […]
# # NOTE: adjust the list below, or you’ll go crazy if you have a reasonably #
busy site..
# daemon.*;mail.*;\ news.err;\ *.=debug;*.=info;\ *.=notice;*.=warn
|/dev/xconsole
Listing 11/6.4-4 Inhoud van de klassieke syslog.conf die door syslog gebruikt wordt.
Om te begrijpen wat er in /etc/syslog.conf gebeurt, moet u weten dat er verschillende logregels gedefinieerd worden. Elke logregel bestaat uit drie onderdelen: de log facility, de log priority en de action. De facility definieert de Novell Netwerkoplossingen, aanvulling 31
11/6.4-9
Logging
services en andere delen van het besturingssysteem waar de logberichten vandaan komen. De priority definieert de ernst van het evenement en de action tot slot vertelt aan syslog wat het moet doen in het geval een bericht met deze priority voorbij komt. Facilities
11/6.4-10
Syslog werkt met de volgende facilities: • auth: heeft betrekking op authenticatie. • authpriv: zelfde als auth. • cron: berichten die door crond gegenereerd worden. • daemon: logberichten die door een daemon gegenereerd worden. Er wordt geen verder onderscheid gemaakt in daemons; daarom kan deze facility voor alle daemons gebruikt worden. • ftp: berichten die gerelateerd zijn aan het File Transfer Protocol (FTP). • kern: kernel messages. Hieronder vallen ook berichten die gerelateerd zijn aan de iptables-firewall. • lpr: berichten die te maken hebben met het oude LPRprintsysteem. • mail: berichten die te maken hebben met het afhandelen van mail. • mark: wordt alleen intern door syslog gebruikt. Syslog plaatst periodiek een marker in de logbestanden. Dit is handig als uw computer weinig logberichten genereert: door deze markerberichten ziet u in elk geval dat syslog nog wel operationeel is. • news: berichten die gerelateerd zijn aan de NNTPnieuwsservices. • security: beveiligingsberichten. • syslog: berichten die betrekking hebben op syslog zelf. • user: berichten die op een of andere wijze aan gebruikers gerelateerd zijn.
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
uucp: berichten die gegenereerd worden door het Unix to Unix Copy Protocol (UUCP). • local0-local7: faciliteiten die u voor alle overige services kunt gebruiken. U moet dan eerst de betreffende service configureren om met een van de local facilities te werken. Vervolgens bepaalt u in syslog hoe deze facility afgehandeld moet worden. •
Tip
Priorities
Als u berichten wilt loggen die door specifieke services gegenereerd worden, kunt u beter gebruikmaken van syslog-ng. Zoals u verderop zult lezen, biedt syslog-ng veel uitgebreidere mogelijkheden om te loggen. U kunt hiermee bijvoorbeeld ook loggen op basis van een match, zodat alle berichten waarin een bepaalde tekst voorkomt, weggeschreven worden. Aan elk logbericht is ook een priority verbonden. Op basis van deze priorities kunt u belangrijke berichten op een andere wijze afhandelen dan de minder belangrijke berichten. Hieronder treft u een overzicht van de priorities die door syslog gebruikt worden. • debug: zoals de naam al suggereert, gaat het hier om debugginginformatie. Dit is gedetailleerde informatie over alles wat deze facility aan het doen is. Over het algemeen is debugginginformatie alleen interessant voor programmeurs die proberen hun services te optimaliseren. • info: heeft betrekking op alle normale informatie over wat een proces aan het doen is. Zie dit maar als een statuslog. U ziet bijvoorbeeld welke bestanden de service opent, maar uitgebreide informatie over system en library calls wordt niet weergegeven. • notice: geeft informatie over foutmeldingen die niet kritisch zijn. Denk daarbij aan een service die een bestand probeert te benaderen dat niet bestaat en waar-
Novell Netwerkoplossingen, aanvulling 31
11/6.4-11
Logging
•
•
• • •
bij dat bestand automatisch wordt aangemaakt. Bepaald geen foutsituatie, maar met de prioriteit notice krijgt u het wel te zien. warn/warning: geeft informatie over waarschuwingen die gegeven zijn. Gebruik liever warn: hoewel warning hetzelfde doet, zou u die niet meer moeten gebruiken. In Linux-jargon gezegd: de priority warning is ‘deprecated’. De priority warn heeft te maken met situaties waarbij de functionaliteit afneemt, maar de facility nog wel operationeel is. err/error: geeft informatie over fouten. Dit zijn situaties waarbij de functionaliteit van de service onderbroken wordt. Error is de oude manier om naar de foutsituatie te verwijzen, gebruik liever err. crit: dit betreft kritische situaties die het functioneren van uw computer in het gedrang brengen. alert: geeft informatie over situaties die ervoor zullen zorgen dat uw gehele computer stopt. emerg/panic: situaties waarin de computer niet langer operationeel is. De oude manier om deze priority weer te geven is panic, gebruik in plaats daarvan emerg.
Om log events te definiëren combineert u in syslog.conf facilities met priorities. Als er geen uitzonderingen gedefinieerd worden, wordt er bij het verwijzen naar een priority ook verwezen naar alle hogere priorities. Met andere woorden, als u verwijst naar alert, omvat dat automatisch ook berichten met de priority emerg. Als u dus bijvoorbeeld alles wilt zien dat betrekking heeft op de kernel en een priority info of hoger heeft, dan specificeert u dat in de volgende regel: kern.info
11/6.4-12
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
U kunt ook verwijzen naar meerdere facilities in één regel. Zorg er dan voor dat de facilities met een komma van elkaar gescheiden worden. De volgende regel bijvoorbeeld verwijst naar alles met een priority info wat bij de kernel of bij cron vandaan komt: kern,cron.info
Ook is het mogelijk te verwijzen naar alle facilities. Gebruik in dat geval een asterisk: *.crit
Zoals gezegd, als u verwijst naar een bepaalde priority, omvat dat normaliter ook alle hogere priorities. Als u dat niet wilt en alleen maar één specifieke priority wilt afhandelen, gebruikt u een =-teken in de definitie. U ziet hier in de volgende regel een voorbeeld van: mail.=info
U kunt ook aangeven dat een priority en alle hogere priorities uitgesloten moeten worden. Zet dan een uitroepteken voor de naam van de priority: mail.!info
Destinations
Als een log event optreedt, wordt op basis van dat event een actie ondernomen. Deze actie houdt in dat het bericht ergens naartoe gestuurd moet worden. In syslog zijn de verschillende acties die u kunt gebruiken duidelijk gedefinieerd. U kunt één actie koppelen aan meerdere facilities en priorities. In listing 11/6.4-4 hebt u hier verschillende voorbeelden van kunnen zien. Syslog staat het u toe logberichten door te sturen naar de volgende destinations:
Novell Netwerkoplossingen, aanvulling 31
11/6.4-13
Logging
•
Regular file. Als u een bestandsnaam specificeert, worden logberichten aan dat bestand toegevoegd. U moet de bestandsnaam altijd opnemen als een absolute bestandsnaam. Dat betekent dat u het complete pad moet opnemen. Om te voorkomen dat syslog elk afzonderlijk bericht apart gaat loggen, kunt u een - voor de naam van het bestand zetten. Hiermee zorgt u ervoor dat berichten gebufferd worden en periodiek worden weggeschreven. In listing 11/6.4-4 hebt u gezien dat dit gebeurt met berichten met een debugstatus. Hieronder ziet u voor alle duidelijkheid de betreffende code: *.=debug;\ auth,authpriv.none;\ news.none;mail.none
•
-/var/log/debug
Named pipe. Loggen naar een named pipe maakt het mogelijk te loggen naar een device. Om een named pipe te gebruiken, moet u een pipesymbool voor de naam van de destination zetten. Het volgende voorbeeld uit syslog.conf laat zien hoe gelogd wordt naar de named pipe /dev/xconsole: daemon.*;mail.*;\ news.err;\ *.=debug;*.=info;\ *.=notice;*.=warn
|/dev/xconsole
Terminal of console. Als het bestand dat u hebt opgegeven een terminal (tty) is, zal syslog berichten in real time daarnaartoe schrijven. Het is bijvoorbeeld gebruikelijk hiervoor de terminal /dev/console te gebruiken. • Logserver. Ook erg handig is dat u met syslog kunt loggen naar een logserver. Dit is een andere computer die u open hebt gesteld om logberichten te ontvangen. In •
11/6.4-14
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
de logbestanden op deze computer zult u per binnenkomend bericht keurig zien dat het bericht bij een andere server vandaan komt. Om logbestanden naar een andere computer te versturen moet u aan twee voorwaarden voldoen: – Syslog moet met de remote loggingoptie gestart zijn. Standaard ondersteunt syslog namelijk geen berichten van andere computers. U kunt remote logging aanzetten door syslog met de optie -r te starten. Hierdoor weet uw machine dat hij berichten van andere computers moet accepteren. – In syslog.conf op de machines die naar een andere host moeten loggen, moet u aangeven dat ze naar een andere machine moeten schrijven. Dit doet u in de destination door de machinenaam op te nemen, voorafgegaan door een @. Gebruik bijvoorbeeld @nuuk om aan te geven dat u wilt loggen naar de machine met de naam nuuk. Uiteraard moet de machinenaam wel te resolven zijn tot een IP-adres. • User. U kunt logberichten direct naar een gebruiker sturen. Dit is nuttig als het gaat om berichten met een hoge prioriteit. De gebruiker in kwestie zal het bericht dan ontvangen op de console waarop hij is ingelogd. Is de gebruiker niet aangemeld op een console, dan zal hij het bericht dus ook niet te zien krijgen. De volgende regel bijvoorbeeld zorgt ervoor dat alle berichten die betrekking hebben op de kernel en een status hebben van critical of hoger, doorgestuurd worden naar de gebruiker root: kern.crit root •
Iedereen. In uiterste noodzaak kan een bericht verstuurd worden naar alle gebruikers die momenteel aan-
Novell Netwerkoplossingen, aanvulling 31
11/6.4-15
Logging
gemeld zijn. Dit doet u door een asterisk te specificeren als log destination. Opstartparameters meegeven In sommige gevallen is het nodig om opstartparameters mee te geven aan het syslogproces. Dit geldt zowel voor syslog als voor syslog-ng. Een voorbeeld hiervan is de optie -r, die tijdens opstarten moet worden meegegeven om remote logging aan te zetten. Veel distributies hebben hier een elegante oplossing voor: u kunt de opstartparameter plaatsen in het bestand /etc/sysconfig/syslog. In listing 11/6.4-5 ziet u hoe dit bestand eruitziet op SuSE Linux. Zoals u ziet, wordt het niet alleen gebruikt om opstartparameters mee te geven, maar kunt u er ook in opgeven of u syslog dan wel het nieuwere syslog-ng wilt gebruiken. Houdt er echter rekening mee dat de precieze inhoud van dit bestand per distributie anders is. ilulissat:/etc # cat /etc/sysconfig/syslog ## Path:
System/Logging
## Description:
System logging
## Type:
list(0,1,2,3,4,5,6,7)
## Default:
1
## Config:
“”
## ServiceRestart:
syslog
# # Default loglevel for klogd # KERNEL_LOGLEVEL=1 ## Type:
string
## Default:
“”
## Config:
“”
## ServiceRestart: syslog #
11/6.4-16
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
# if not empty: parameters for syslogd # for example SYSLOGD_PARAMS=”-r -s my.dom.ain” # SYSLOGD_PARAMS=”” ## Type:
string
## Default:
-x
## Config:
“”
## ServiceRestart:
syslog
# # if not empty: parameters for klogd # for example KLOGD_PARAMS=”-x” to avoid (duplicate) symbol resolution # KLOGD_PARAMS=”-x” ## Type:
list(syslogd,syslog-ng)
## Default:
syslogd
## Config:
syslog-ng
## Command:
/sbin/rcsyslog restart
## PreSaveCommand:
/sbin/rcsyslog status && /sbin/
rcsyslog stop # # The name of the syslog daemon used as # syslog service: “syslogd”, “syslog-ng” # SYSLOG_DAEMON=”syslog-ng” ## Type:
yesno
## Default:
yes
## Config:
syslog-ng
## ServiceRestart:
syslog
# # If you don’t want to let SuSEconfig generate your # syslog-ng configuration file, set this to “no”.
Novell Netwerkoplossingen, aanvulling 31
11/6.4-17
Logging
# # SuSEconfig is using a template configuration file #
/etc/syslog-ng/syslog-ng.in
# you can adopt it to your needs instead… # SYSLOG_NG_CREATE_CONFIG=”yes” ## Type:
string
## Default:
“”
## Config:
“”
## ServiceRestart:
syslog
# # Parameters for Syslog New-Generation – see syslog-ng(8) # SYSLOG_NG_PARAMS=”” Listing 11/6.4-5 Veel distributies maken gebruik van een eigen configuratiebestand om tijdens het opstarten opties mee te geven aan syslog.
11/6.4.4 Configuratie van syslog-ng Het hiervoor besproken syslog doet zijn werk prima, maar er zijn toch wat beperkingen. De belangrijkste beperkingen hebben betrekking op de mogelijkheid om berichten te filteren en op het beperkte aantal log facilities. Om deze problemen op te lossen is syslog-ng ontwikkeld. Dit is de volgende generatie syslog die inmiddels beschikbaar is voor vrijwel elke Linux-distributie. In syslog-ng wordt voortgeborduurd op de oude elementen die ook al in syslog beschikbaar waren. Dit betekent dat u ook werkt met facilities, priorities en destinations. Er zijn echter de nodige uitbreidingen op het systeem aangebracht die ervoor zorgen dat het toch een heel ander systeem betreft. Om syslog-ng te begrijpen is het het handigst om een voorbeeld van het configuratiebestand /etc/syslog11/6.4-18
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
ng/syslog-ng.conf te bekijken. U moet aan de onderkant van dit bestand beginnen te lezen en van daaruit naar boven werken om de verschillende elementen bij elkaar te zoeken. In listing 11/6.4-6 vindt u een voorbeeld van het syslog-ng.conf-configuratiebestand. ilulissat:/etc # cat /etc/syslog-ng/syslog-ng.conf # # /etc/syslog-ng/syslog-ng.conf # # # Global options. # options { long_hostnames(off); sync(0); perm(0640); stats(3600); }; # # ‘src’ is our main source definition. you can add # more sources driver definitions to it, or define # your own sources, i.e.: # #source my_src { …. }; # source src { # # include internal syslog-ng messages # note: the internal() soure is required! # internal(); # # the following line will be replaced by the # socket list generated by SuSEconfig using # variables from /etc/sysconfig/syslog: # unix-dgram(“/dev/log”); #
Novell Netwerkoplossingen, aanvulling 31
11/6.4-19
Logging
# uncomment to process log messages from network: # #udp(ip(“0.0.0.0”) port(514)); }; # # Filter definitions # filter f_iptables
{ facility(kern) and match(“IN=”) and
match(“OUT=”); }; filter f_console
{ level(warn) and facility(kern) and
not filter(f_iptables) or level(err) and not facility(authpriv); }; filter f_newsnotice { level(notice) and facility(news); }; filter f_newscrit
{ level(crit) and facility(news); };
filter f_newserr
{ level(err) and facility(news); };
filter f_news
{ facility(news); };
filter f_mailinfo
{ level(info) and facility(mail); };
filter f_mailwarn
{ level(warn) and facility(mail); };
filter f_mailerr
{ level(err, crit) and facility(mail);
}; filter f_mail
{ facility(mail); };
filter f_cron
{ facility(cron); };
filter f_local
{ facility(local0, local1, local2,
local3, local4, local5, local6, local7); }; filter f_acpid
{ match(‘^\[acpid\]:’); };
filter f_netmgm
{ match(‘^NetworkManager:’); };
filter f_messages
{ not facility(news, mail) and not
filter(f_iptables); }; filter f_warn
{ level(warn, err, crit) and not
filter(f_iptables); }; filter f_alert
{ level(alert); };
# # Most warning and errors on tty10 and on the xconsole
11/6.4-20
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
pipe: # destination console { pipe(“/dev/tty10” group(tty) perm(0620)); }; log { source(src); filter(f_console); destination(console); }; destination xconsole { pipe(“/dev/xconsole” group(tty) perm(0400)); }; log { source(src); filter(f_console); destination(xconsole); }; # Enable this, if you want that root is informed immediately, # e.g. of logins: # #destination root { usertty(“root”); }; #log { source(src); filter(f_alert); destination(root); }; # # News-messages in separate files: # destination newscrit { file(“/var/log/news/news.crit” owner(news) group(news)); }; log { source(src); filter(f_newscrit); destination(newscrit); }; destination newserr
{ file(“/var/log/news/news.err” owner(news) group(news)); };
log { source(src); filter(f_newserr); destination(newserr); }; destination newsnotice { file(“/var/log/news/news.notice” owner(news) group(news)); }; log { source(src); filter(f_newsnotice); destination(newsnotice); }; # # and optionally also all in one file: # (don’t forget to provide logrotation config) #
Novell Netwerkoplossingen, aanvulling 31
11/6.4-21
Logging
#destination news { file(“/var/log/news.all”); }; #log { source(src); filter(f_news); destination(news); }; # # Mail-messages in separate files: # destination mailinfo { file(“/var/log/mail.info”); }; log { source(src); filter(f_mailinfo); destination(mailinfo); }; destination mailwarn { file(“/var/log/mail.warn”); }; log { source(src); filter(f_mailwarn); destination(mailwarn); }; destination mailerr { file(“/var/log/mail.err” fsync(yes)); }; log { source(src); filter(f_mailerr); destination(mailerr); }; # and also all in one file: # destination mail { file(“/var/log/mail”); }; log { source(src); filter(f_mail); destination(mail); }; # # acpid messages in one file: # destination acpid { file(“/var/log/acpid”); }; log { source(src); filter(f_acpid); destination(acpid); flags(final); }; # # NetworkManager messages in one file: # destination netmgm { file(“/var/log/NetworkManager”); }; log { source(src); filter(f_netmgm); destination(netmgm); flags(final); }; # # Cron-messages in one file: # (don’t forget to provide logrotation config) #
11/6.4-22
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
#destination cron { file(“/var/log/cron”); }; #log { source(src); filter(f_cron); destination(cron); }; # # Some boot scripts use/require local[1-7]: # destination localmessages { file(“/var/log/localmessages”); }; log { source(src); filter(f_local); destination(localmessages); }; # # All messages except iptables and the facilities news and mail: # destination messages { file(“/var/log/messages”); }; log { source(src); filter(f_messages); destination(messages); }; # # Firewall (iptables) messages in one file: # destination firewall { file(“/var/log/firewall”); }; log { source(src); filter(f_iptables); destination(firewall); }; # # Warnings (except iptables) in one file: # destination warn { file(“/var/log/warn” fsync(yes)); }; log { source(src); filter(f_warn); destination(warn); }; # Enable this, if you want to keep all messages in one file: # (don’t forget to provide logrotation config) # #destination allmessages { file(“/var/log/allmessages”); }; #log { source(src); destination(allmessages); }; Listing 11/6.4-6 Loggen met syslog-ng.
Novell Netwerkoplossingen, aanvulling 31
11/6.4-23
Logging
Op SuSE Linux bestaan er twee configuratiebestanden voor syslog-ng. Het bestand /etc/syslog-ng/syslog-ng.conf.in wordt gebruikt als invoerbestand. In dit bestand brengt u al uw wijzigingen aan. Vervolgens gebruikt u SuSEconfig om de wijzigingen weg te schrijven naar het hoofdbestand /etc/syslog-ng/syslog-ng.conf. Deze procedure wordt gebruikt om te voorkomen dat u bij een update op syslog-ng wijzigingen kwijtraakt die u zelf aangebracht hebt in het syslog-ng.conf-configuratiebestand.
Elementen
In de syslog-ng-configuratie vormt het log-statement de definitie van wat er uiteindelijk moet gebeuren. Hierin worden drie elementen gedefinieerd die bepalen hoe er gelogd moet worden: • source: dit is de bron waar de logberichten vandaan komen. • filter: specificeert op basis van wat er gelogd moet worden. • destination: bepaalt waarnaartoe gelogd moet worden. Om te begrijpen hoe syslog-ng werkt, is het aan te raden het configuratiebestand van onder naar boven te lezen. Helemaal onder in het configuratiebestand vindt u de verschillende log-statements die definiëren hoe en wat er gelogd moet worden. Boven in het bestand vindt u een verdere uitwerking van de componenten waaruit een logstatement is opgebouwd. Op de volgende regel vindt u een voorbeeld van zo’n log-statement: log { source(src); filter(f_warn); destination(warn); };
In dit voorbeeld ziet u als eerste de specificatie van de bron, die gedefinieerd wordt als (src). Hiermee wordt ver11/6.4-24
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
wezen naar de definitie die in het begin van het configuratiebestand gemaakt wordt. Deze ziet er als volgt uit: source src { # # include internal syslog-ng messages # note: the internal() soure is required! # internal(); # # the following line will be replaced by the # socket list generated by SuSEconfig using # variables from /etc/sysconfig/syslog: # unix-dgram(“/dev/log”); # # uncomment to process log messages from network: # #udp(ip(“0.0.0.0”) port(514)); };
Zoals u kunt zien, accepteert de src-definitie standaard twee sources: berichten die intern gegenereerd zijn en berichten waarvoor het besturingssysteem het device /dev /log gebruikt heeft. Deze definitie handelt alle berichten af die op uw computer gegenereerd worden, maar kan niet overweg met berichten die van buiten komen. Het is echter niet moeilijk ervoor te zorgen dat ook berichten van buiten geaccepteerd worden. Hiervoor zet u de volgende regel aan: udp(ip(“0.0.0.0”) port(514));
De bovenstaande regel zorgt ervoor dat elke remote host op uw computer mag loggen. U kunt er ook voor zorgen Novell Netwerkoplossingen, aanvulling 31
11/6.4-25
Logging
dat berichten van alleen gespecificeerde hosts gelogd kunnen worden. Hiervoor gebruikt u het IP-adres of de reeks IP-adressen van de host(s) in kwestie. De volgende regel bijvoorbeeld zorgt ervoor dat alleen berichten verwerkt worden die afkomstig zijn van een host in het netwerk 192.168.1.0: udp(ip(“192.168.1.0”) port(514));
U weet op dit punt hoe u de source moet opgeven. Tijd om terug te gaan naar de logdefinitie en te kijken naar het tweede onderdeel waar het filter gedefinieerd wordt. Zoals u in de voorbeeldregel ziet, is dat in dit geval het filter f_warn. Dit filter wordt als volgt gedefinieerd: filter f_warn { level(warn, err, crit) and not filter(f_iptables); };
In de definitie van het filter kunt u aangeven waar het bericht vandaan komt, naar welke prioriteit gekeken moet worden en eventueel verdere specificaties opnemen. Zoals u in het voorgaande voorbeeld ziet, kunt u in een filter juist ook berichten van een bepaalde bron uitsluiten. Filters in syslog-ng zijn erg flexibel, zeker als u ook nog eens gebruikmaakt van het match-statement. Met dit statement kunt u een regular expression gebruiken om syslog-ng te vertellen dat het naar een bepaalde specifieke tekst moet kijken. Hieronder ziet u hier een voorbeeld van: filter f_acpid { match(‘^\[acpid\]:’); };
In dit filter wordt een match aangemaakt waarin wordt gekeken naar een reguliere expressie. De reguliere expressie bepaalt dat syslog-ng alle regels moet afhandelen die beginnen met de tekst [acpid]. Op deze wijze maakt u dus 11/6.4-26
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
feitelijk een speciale log target aan voor de acpid-service. Als u zelf definities gaat maken in syslog-ng, zult u veel profijt hebben van dergelijke functionaliteit. Als laatste onderdeel van de syslog-ng-configuratie kunt u aangeven waar de berichten naartoe gestuurd moeten worden. Dit doet u door een log destination te specificeren. Hieronder ziet u een complex voorbeeld van zo’n log destination: destination newscrit { file(“/var/log/news/news.crit” owner(news) group(news)); };
In syslog-ng destinations kunt u alle destinations gebruiken die ook beschikbaar zijn in syslog. Het is hier echter ook mogelijk om heel specifiek te zijn. Zo is in de bovenstaande definitie niet alleen de naam gegeven van het bestand waarnaar geschreven moet worden, maar zelfs ook de eigenaar en groep van het betreffende bestand. 11/6.4.5 Logberichten genereren met logger Een heel handige opdracht bij het werken met logbestanden is logger. Met behulp van deze opdracht kunt u zelf berichten sturen naar syslog. Dit is vooral handig om ervoor te zorgen dat bijvoorbeeld vanuit een shellscript logberichten gegenereerd worden. U kunt bij gebruik van logger ook opgeven dat het een bepaalde prioriteit moet gebruiken, maar dit zult u meestal niet doen. Als u logger gebruikt vanuit een syslog-ng-omgeving, is het genoeg om een filter aan te maken dat kijkt naar de tekst die met logger naar syslog verstuurd wordt. Gebruik van het commando logger is eenvoudig. De volgende opdracht bijvoorbeeld kan worden gebruikt om een bericht te versturen naar syslog:
Novell Netwerkoplossingen, aanvulling 31
11/6.4-27
Logging
logger hallo
Als u logger gebruikt, kan het handig zijn om elke resulterende regel met een speciale tag te markeren. Dit maakt het eenvoudiger om deze regels later terug te vinden in uw logbestanden. Om dit te doen maakt u gebruik van de optie -t tag. Een voorbeeld hiervan is de opdracht logger -t blah hallo. Hiermee wordt het bericht ‘hallo’ naar syslog gelogd met de tag blah. Zo wordt het voor u nog eenvoudiger om het betreffende bericht terug te vinden. 11/6.4.6 Rotatie van logbestanden Loggen is goed, maar op het moment dat uw systeem te enthousiast logt, kan logging problematisch worden. Een oplossing hiervoor wordt geboden door de logrotate-service. Deze service wordt door middel van een dagelijkse cron-job uitgevoerd en kijkt of er op een van de logbestanden een rotatie moet worden uitgevoerd. Als dit het geval is, kunt u ervoor zorgen dat een nieuw logbestand wordt aangemaakt, waarbij het oude bestand wordt afgesloten. Ook hebt u mogelijkheden om het oude bestand te bewaren, waarbij het zelfs ook mogelijk is om het gecomprimeerd op te slaan. Logrotate werkt met twee verschillende configuratiebestanden. Als eerste is er het hoofdbestand /etc/logrotate. conf. In dit bestand worden algemene instellingen gedaan die bepalen hoe logrotate zijn werk moet doen. U ziet in listing 11/6.4-7 een voorbeeld van dit bestand. ilulissat:/etc # cat logrotate.conf # see “man logrotate” for details # rotate log files weekly weekly
11/6.4-28
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
# keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress # uncomment these to switch compression to bzip2 compresscmd /usr/bin/bzip2 uncompresscmd /usr/bin/bunzip2 # former versions had to have the compresscommand set accordingly #compressext .bz2 # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp – we’ll rotate them here #/var/log/wtmp { #
monthly
#
create 0664 root utmp
#
rotate 1
#} # system-specific logs may be also be configured here. Listing 11/6.4-7 Voorbeeld van logrotate.conf.
In listing 11/6.4-7 wordt gebruikgemaakt van een aantal belangrijke keywords. Deze woorden zijn beschreven in tabel 11/6.4-1. Novell Netwerkoplossingen, aanvulling 31
11/6.4-29
Logging
Optie
Beschrijving
weekly
Geeft aan dat de logbestanden wekelijks geroteerd moeten worden.
rotate 4
Bepaalt dat vier oude versies van het bestand bewaard moeten worden. Als de optie rotate niet gebruikt wordt, worden oude bestanden verwijderd.
create
Zorgt ervoor dat het oude bestand wordt opgeslagen onder een andere naam en een nieuw bestand met de oorspronkelijke naam wordt aangemaakt.
compress
Bepaalt dat geroteerde bestanden gecomprimeerd moeten worden.
compresscmd
Stelt u in staat op te geven welke opdracht gebruikt moet worden voor de compressie.
uncompresscmd
Het commando dat u wilt gebruiken om gecomprimeerde bestanden weer uit te pakken.
include
Deze belangrijke optie zorgt ervoor dat de inhoud van de directory /etc/logrotate.d ook wordt uitgevoerd zodat afzonderlijke logbestanden geroteerd kunnen worden.
Tabel 11/6.4-1 Belangrijke keywords voor logrotate.
Zoals u gezien hebt, komt u in logrotate.conf algemene code tegen die bepaalt hoe logbestanden afgehandeld worden. Daarnaast bestaat er voor de verschillende logbestanden een specifieke configuratie in /etc/logrotate.d. De inhoud van de servicespecifieke bestanden in /etc /logrotate.d is meer specifiek dan de inhoud van het algemene bestand logrotate.conf. In listing 11/6.4-8 ziet u hoe bijvoorbeeld het logrotate-bestand voor /var/log/ntp eruit kan zien. Dit bestand geeft een goede indruk van de beschikbare opties. ilulissat:/etc # cat /etc/logrotate.d/ntp /var/log/ntp { compress dateext maxage 365
11/6.4-30
Novell Netwerkoplossingen, aanvulling 31
Troubleshooting
rotate 99 size=+2048k notifempty missingok copytruncate postrotate chmod 644 /var/log/ntp endscript } Listing 11/6.4-8 Voorbeeld van een logrotate-configuratiebestand.
In listing 11/6.4-8 zijn verschillende opties genoemd. In tabel 11/6.4-2 wordt de betekenis van deze opties uitgelegd. Optie
Omschrijving
dateext
Gebruikt de datum als extensie voor de oude logbestanden.
maxage
Specificeert het aantal dagen waarna de oude logbestanden verwijderd moeten worden.
rotate
Geeft aan hoe vaak een bestand geroteerd moet worden voordat het verwijderd of verstuurd wordt naar het mailadres dat met de mail-optie is aangegeven.
size
Zorgt ervoor dat logbestanden groter dan een bepaalde grootte automatisch geroteerd worden.
notifempty
Roteert bestanden niet als ze leeg zijn.
missingok
Geeft aan dat als het logbestand niet bestaat, verdergegaan moet worden met de volgende zonder een foutmelding te geven.
copytruncate
Kort het huidige logbestand in nadat het geroteerd wordt. Hierdoor hoeft er niet een nieuw bestand aangemaakt te worden. Dit werkt beter voor sommige services die in de war raken als ze ineens naar een ander bestand moeten loggen.
postrotate
Hiermee kunt u opdrachten specificeren die uitgevoerd moeten worden nadat er een logrotate-actie op het bestand in kwestie is uitgevoerd.
endscript
Geeft aan dat het einde van dit specifieke logrotate-configuratiebestand bereikt is.
Tabel 11/6.4-2 Opties uit de servicespecifieke logrotate-bestanden. Novell Netwerkoplossingen, aanvulling 31
11/6.4-31
Logging
U kunt een logrotate-bestand aanmaken voor elk bestand dat u maar wilt. U kunt zelfs bestanden roteren die helemaal geen logbestanden zijn! Er zijn nog meer opties beschikbaar; raadpleeg voor een volledig overzicht de manpagina van logrotate. Tot slot In deze paragraaf hebt u geleerd hoe u logging beheert op een Linux-systeem. Door logging goed te configureren maakt u het voor uzelf een stuk eenvoudiger om te achterhalen waarom bepaalde services niet naar behoren werken.
11/6.4-32
Novell Netwerkoplossingen, aanvulling 31