FAQ Non-Windows Operating Systems - Overige vragen

Pagina: 1
Acties:
  • 2.526 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

  • Wilke
  • Registratie: December 2000
  • Laatst online: 07-06 16:59
Overige FAQ Non-Windows Operating Systems (NOS) - versie 20040408

Hier kun je het antwoord vinden op enkele iets ingewikkelder vragen die nogal eens gesteld worden in Non-Windows Operating Systems.
Voor de 'gewone' FAQ, zie hier.
:? Hoe werkt "internet delen" onder Linux?


Hiervoor kun je het beste IP Masquerading gebruiken (ook wel 'NAT' genoemd, Network Address Translation). Een uitgebreide uitleg hierover staat in de Linux IP Masquerading HOWTO. Heb je geen zin om Linux te leren en/of wil je zonder gezeur een niet-Windows router? Probeer dan bijvoorbeeld FreeSCO of CoyoteLinux.
Deze distributies zijn helemaal gericht op internet delen en worden als gemakkelijker ervaren dan een gewone Linuxdistributie. Bijkomend voordeel is dat deze systemen zo compact zijn dat ze op een floppy passen. Je oude computer heeft om router te worden niet eens een harde schijf nodig. Een dergelijk systeem speciaal voor ADSL via KPN is er ook: Lintegrate
:? Kan ik ook servers op het interne netwerk toegankelijk maken op internet met linux?


Dat kan door middel van port forwarding. Je 'forward' de verbinding op bepaalde poorten vanaf de computer die internet deelt naar een computer in het interne netwerk.
De verschillende kernels hebben elk hun eigen systeem om poorten te forwarden.

Voor de 2.0.x en 2.2.x kernels geldt, dat de bijbehorende NAT-programmas (ipfwadm en ipchains resp.) niet de mogelijkheid bieden tot portforwarding. Hiervoor zul je dus externe programma's nodig hebben. Hierbij valt voor 2.0.X te denken aan ipportfw en voor 2.2.X aan bijvoorbeeld ipmasqadm of redir. Bij 2.4.x kernels (iptables) is het wel zo dat portforwarding ondersteund wordt zonder daarvoor losse programma's nodig te hebben.

De 2.4.x kernel biedt de gebruiker de mogelijkheid om van ipchains of iptables gebruik te maken (dus niet beiden door elkaar gebruiken!). Als je een 2.4.x kernel hebt, kies dan voor iptables, aangezien deze veel meer mogelijkheden biedt (iets dat buiten deze FAQ valt).

Een voorbeeld om duidelijk te maken hoe het werkt: stel, we willen poort 80 (webserver) forwarden van onze server (met internet-IP 123.123.123.123) naar de 'echte' webserver in het interne netwerk, op IP 192.168.1.2

2.0.x: ipportfw -A -t123.123.123.123/80 -R 192.168.1.2/80
2.2.x: ipmasqadm portfw -a -P tcp -L 123.123.123.123 80 -R 192.168.1.2 80
2.4.x: iptables -A PREROUTING -t nat -p tcp -d 123.123.123.123 --dport 80 -j DNAT --to 192.168.1.2:80

Als je hierbij foutmeldingen krijgt als "SIOCADDRT: operation not supported" moet je de juiste kernel modules laden of in de kernel compileren (kijk bij 'networking options'). Uiteraard kunnen de respectievelijke manual pages je hier veel meer over vertellen. De webpagina bij uitstek hierover is ipmasq.webhop.net.
:? Hoe krijg ik ADSL aan de praat onder Linux?


Zie www.adsl4linux.nl, een site met documentatie, scripts etc.
:? Waarom werkt mijn @Home verbinding niet? Hoe krijg ik een IP van @Home's DHCP server?


Je moet je hostname meegeven aan je DHCP client:
dhcpcd -h HOSTNAME eth0, of pump -h HOSTNAME -i eth0, of als je dhclient gebruikt: zet in dhclient.conf send host-name "HOSTNAME"; met in de plaats van HOSTNAME de hostname die je van @home hebt gekregen.
Zie ook de pagina van Troubles @Home
:? Verbinding maken via SSH/FTP is traag!


De reverse lookup werkt waarschijnlijk niet. Voeg het IP dat de verbinding maakt met de hostname toe aan /etc/hosts of je lokale DNS server.
:? Hoe kan ik bestanden en printers delen over het netwerk?


Als je wilt dat je Windowsmachine de bestanden op een Unix-like systeem gemakkelijk kan benaderen, gebruik dan Samba. Als Windows niet aan de orde is of je gewoon geen samba wilt, kan je ook NFS gebruiken, dat zit wat beter in elkaar, maar werkt niet meteen onder Windows (maar het is zeker wel werkend te krijgen).

Zie ook de Samba HOWTO en de Linux NFS HOWTO.
:? Ik vermoed dat mijn systeem is gekraakt. Wat nu?


Een stappenplan:
  • Stap 1: verwijder de computer van het internet voor je verder gaat met onderzoeken. Als dit niet mogelijk is (bv. bij een colocated machine) handel dan in ieder geval zo snel mogelijk de andere stappen af.
  • Stap 2: Weet je echt zeker dat het systeem is gekraakt? Kan het niet veroorzaakt zijn door defecte hardware of 'gewoon' een op hol geslagen programma? Een handige tool om te controleren of een cracker zogenaamde 'rootkits' (iets waarmee hij later weer makkelijk toegang kan krijgen tot dit systeem) of gewijzigde versies van belangrijke programma's zoals 'ls', 'ps', 'top' e.d. heeft achtergelaten is chkrootkit.
  • Stap 3: Als je zeker weet dat de machine gecompromitteerd is maar ook in geval van twijfel: probeer te achterhalen hoe dit heeft kunnen gebeuren, en installeer in ieder geval de hele machine opnieuw. Echt opnieuw, dus vanaf een backup waar je zeker van weet dat er toen niets aan de hand was, of opnieuw vanaf CD installeren nadat alles is geformatteerd. Halve maatregelen zijn in dit geval erger dan helemaal geen maatregelen.
Wat men je ook vertelt, zo'n systeem is niet meer te vertrouwen - en ja, een reinstall is echt de enige goede oplossing (en op de lange termijn echt minder werk dan de boel laten voor wat het is of de gok maar nemen).
:? Console commandos! Hoe kom ik erachter wat ze doen?


Als je wilt weten wat een bepaald commando doet, gebruik dan 'man [commando]' of 'info [commando]'. Voor allerhande filesystem bewerkingen zoals kopieren, verplaatsen e.d. is het programma 'mc' (Midnight Commander) erg handig.

Ook is er nog een handige HOWTO over het overstappen van Dos/Windows naar Linux (ook in het Nederlands beschikbaar).
:? Hoe werken bestands-permissies in Linux?


Dit deel van Linux is inderdaad wel even wennen als je een iedereen-mag-alles omgeving als Windows 95/98 gewend bent :)

In alle UNIX-achtige besturingssystemen (dus ook Linux) heeft elk bestand of directory een owner (eigenaar), een group (een naam voor een aantal users) waar hij bij hoort en 3 paar access control attributen.
Als je ls -al intikt, zie je regels als deze: '-rwxr----- 25 henk users 1024 Sep 2 02:45 nos-faq.html'.
Het eerste teken geeft het 'type' file aan (een directory of een device is ook een file - onder UNIX wordt alles gemodelleerd als een file). Bij gewone files staat hier een '-'.
Daarna staan er 3 groepen met de letters 'rwx', eventueel met streepjes er in ('-') op plekken waar een permissie uit is gezet. 'r' staat voor Read, 'w' voor Write, x voor 'eXecute'. De eerste groep van 3 geeft aan welke rechten de 'owner' heeft, de tweede welke rechten de 'groep' heeft, en de derde welke rechten ieder ander (niet de owner of de groep) heeft. In de kolommen daar achter zie je dan ook wie de feitelijk eigenaar is, en aan welke groep het bestand toegekend is. In dit geval is 'henk' de owner, en 'users' de groep.
Op bovenstaande file heeft 'henk' dus schrijf, lees, en execute-rechten, alle 'users' leesrechten, en ieder ander geen enkel recht. Let op: op een directory moet je 'execute' rechten hebben wil je een listing kunnen opvragen van de files in die directory. Als je leesrechten hebt in een directory maar geen 'execute' rechten, dan kun je wel files openen als je precies uit je hoofd weet hoe ze heten!
:? Hoe verander ik bestands-permissies in Linux?


Eigenaar veranderen: chown eigenaar bestand
Groep veranderen: chgrp groep bestand
Eigenaar en groep tegelijk veranderen: chown eigenaar.groep bestand
Toegangsrechten veranderen doe je zo: chmod [ugoa][+-][rwxX]filenaam
u = user (eigenaar)
g = group
o = others
a = all (user, group en others tegelijk)
+ = aanzetten
- = uitzetten.

Bijvoorbeeld: chmod a+r zooi.txt, dat zorgt ervoor dat iedereen (user, group en others) de file zooi.txt mag lezen.
r, w en x staan uiteraard voor read, write en execute. Naast de gewone 'x' is er nog 'X'. X staat voor "execute-rechten als het om een directory gaat, of als het om een file gaat die al execute-rechten heeft voor user of group of other".

"chmod a+X blaat" geeft iedereen dus execute-rechten als blaat een directory is, en doet effectief niks als het een file zonder execute-rechten is. De X flag is handig om meerdere directories en files tegelijk te wijzigen, waarbij je alleen de directories execute-rechten wilt geven (iets wat in de praktijk vrij vaak voorkomt, omdat je van directories zonder execute rechten niet de listing kunt opvragen!)

Voor extra 1337-punten B) is er nog de kortere "octale" notatie. Daarbij geldt voor elk rwx-groepje:
r+w+x
-----
4+2+1

Zo staat een 6 voor r+w (4+2), een 5 voor r+x (4+1) etc. Door de cijfers achter elkaar te zetten geef je 'per groepje' aan wat de rechten zijn voor owner, group en others. 777 is dus eigenlijk rwxrwxrwx en 000 is ---------:

'chmod 754 zooi.txt' geeft dus de owner 'alle' rechten, de group r+x rechten, en de rest leesrechten.

Zie verder: man chmod en chown.
:? Hoe laat ik programma's opstarten tijdens het booten? Hoe zit het met 'runlevels'?


Voor de duidelijkheid een uitleg van wat er gebeurt als je Linux opstart. Na het laden van de kernel wordt het programma 'init' gestart. Dit programma zorgt ervoor dat de startup scripts en runlevel scripts op de gewenste wijze worden uitgevoerd. Er zijn 2 manieren om de startup scripts te organiseren: BSD style en SysV style. Wat voor beiden gelijk is, is de indeling in runlevels:
0=halt (power down), 1=single user, 2-5=multi user, 6=reboot. Vaak is 2 'kaal' multi-user, 3 multi-user + netwerk apps, en 5 ook nog de GUI erbij.
In /etc/inittab kun je instellen wat 'init' vervolgens moet gaan doen. Het "default" runlevel kun je daar veranderen, en bijvoorbeeld ook hoeveel consoles er geopend worden e.d.

Even vooraf: de files en directories kunnen afhankelijk van de door jou gebruikte distributie op een iets andere plek staan dan hier is aangegeven. Je zult in ieder geval wel in de /etc/-directory moeten zoeken, dat is gelukkig zeker :)

BSD style:
Behalve natuurlijk de BSD varianten zelf, wordt dit systeem door Slackware (nagenoeg hetzelfde) gebruikt. Na het sysinit script (iets als /etc/rc.d/rc.S) dat de absoluut noodzakelijke dingen regelt, wordt het systeem in een runlevel gebracht. Bij het ingaan van een runlevel wordt het bij dit runlevel behorende script gestart. In veel gevallen heet dit bijvoorbeeld /etc/rc.d/rc.3 voor runlevel 3. Het runlevel script roept meestal ook het script rc.local aan, het makkelijkst is om hier je eigen te starten programmas aan toe te voegen.

SysV style:
De indeling hiervan is wat complexer. Alle scripts die programmas starten en stoppen staan in de directory /etc/init.d . Elk runlevel heeft zijn eigen directory. Sysinit is meestal /etc/rcS.d en de runlevel directories: /etc/rc0.d , /etc/rc1.d etc, maar dat kan ook bv. /etc/init.d/rc1.d zijn. In deze directories staan alleen symlinks naar de al aanwezige scripts in '/etc/init.d'. De namen van deze symlinks zijn als volgt opgebouwd: S##naam of K##naam. S roept een script aan met de optie start, K met de optie stop. Bij het intreden van een runlevel worden alle scripts die beginnen met een S in de directory van dat runlevel gedraaid, bij het verlaten juist die met een K. De ## tekens staan voor een getal, hoe hoger het getal, hoe later het script aan de beurt komt. Voor je eigen programmas maak je een script in /etc/init.d en symlink dit op de juiste manier in de juiste runlevel directorie(s). Vaak zijn hier ook tooltjes voor die dat voor jou doen (update-rc.d bijvoorbeeld).
:? Hoe wordt het 'load average' berekend?


De gemiddelde load (zoals bijvoorbeeld weergegeven door het 'uptime' commando) is simpelweg het aantal timeslices dat een proces (programma) moet wachten voor het aan de beurt komt op de CPU. Als je gemiddelde load 2.5 is, dan duurt het gemiddeld 2.5 timeslices voordat een proces weer van de CPU gebruik kan maken. Als je 1 proces hebt draaien dat de CPU continu probeert te gebruiken (100% cpu), dan zal je gemiddelde load (ongeveer) 1.00 zijn. Immers: omdat dit proces continu de CPU probeert te claimen, zal het voor willekeurige andere processen gemiddeld 1 timeslice duren voordat ze aan de beurt komen. Als je twee processen hebt draaien die de hele tijd zoveel mogelijk CPU proberen te gebruiken, dan zal het voor andere processen gemiddeld 2 timeslices duren voor ze aan de beurt komen, dus is de load ca. 2.00. CPU-gebruik is niet het enige dat load kan veroorzaken. Als de kernel moet wachten op i/o (met name van de HD en de netwerkkaart), dan kan de kernel soms even geen processen aan de beurt laten, dus duurt het langer voor processen aan de beurt komen, en dus zie je een hogere gemiddelde load. Zo kan het dus zijn dat een bak die heel hard staat te swappen (vanwege geheugen-tekort) een erg hoge gemiddelde load heeft, terwijl er geen processen op draaien die veel cpu trekken.

Het komt er in ieder geval op neer, dat hoe hoger je gemiddelde load is, hoe minder werkbaar de computer zal zijn. Wanneer je het precies gaat merken, hangt vrij sterk af van je soort compu. Een 486 met IDE en weinig ram zal al snel een hoge load hebben, en zal een load van 5 al merkbare vertraging geven. Een dikke UltraSparc met SCSI en veel ram zal iig niet zo snel een hoge load hebben, maar waarschijnlijk zou je van een load van 5 niet eens zo veel merken (nouja, quake 3 spelen kun je dan vergeten, maar verder...)

Als je computer niks staat te doen, hoort de load in ieder geval heel laag te zijn, en als hij druk bezig is (van uit het standpunt van een desktop) zal het meestal niet boven de 2-3 uit komen. Met 'top' kun je checken welke programma's CPU-tijd gebruiken.
uptime geeft 3 getallen weer, dit zijn 'moving averages' over resp. de laatste minuut, 5 minuten, en het laatste kwartier.
:? Waarom zit in Linux altijd mijn geheugen (bijna) vol?


Veel tooltjes geven vaak aan dat je geheugen compleet vol zit (of lijken dat aan te geven als je de output verkeerd interpreteert).

De reden hiervoor is dat de Linux kernel geheugen dat niet aan applicaties is toegewezen kan gebruiken voor caches en buffers voor block devices. De block devices die hierbij de grootste rol spelen zijn meestal je harddisks. Als een programma een block van de harddisk inleest, dan zal de kernel dat block in het geheugen houden. Als een programma datzelfde block nog eens opvraagt (wat in de praktijk vaak gebeurt), dan kan de data uit het geheugen komen, wat enorm veel sneller is dan vanaf de HD. Dit heet caching. Buffering is het tegenovergestelde: als een programma data wegschrijft dan schrijft de kernel dat niet echt weg, maar bewaart het even in het geheugen. Als de kernel dan even tijd heeft wordt de data weggeschreven.

Zowel caching als buffering hebben een enorme invloed op de snelheid van harddisk lees- en schrijfacties. Buffers en (vooral) caches kunnen oplopen tot al het geheugen dat niet door applicaties gebruikt is. Dat is geen enkel probleem, want op het moment dat applicaties meer geheugen nodig hebben zal de kernel automatisch de buffers en/of caches verkleinen.

Het commando "free -m" geeft (in megabytes) weer hoeveel geheugen er is en er in gebruik is, zowel inclusief als exclusief caches. Hier de output van "free -m" op mijn computer:
code:
[marcelm@something marcelm]$ free -m
total used free shared buffers cached
Mem: 630 ^626 4 0 31 393
-/+ buffers/cache: *201 429
Swap: 59 0 59


Veel mensen kijken alleen naar de waarde met ^ ervoor, maar dat is inclusief caches en buffers. Als je wilt weten hoeveel er in gebruik is door programma's (en dat is vaak interessanter), dan moet je kijken naar de waarde met * ervoor.
:? Sommige programma's lijken heel veel geheugen te gebruiken. Hoe zit dat??


Elk programma heeft twee "geheugengebruiken", en veel tools (zoals "ps auxf" en "top") geven beide weer. De ene heet doorgaans "VSZ", "SIZE", of "VIRTUAL" en houdt in hoeveel memory address space een process in zijn eigen virtual memory omgeving heeft. Hier zitten vaak dingen als memory mapped I/O, mmap()ed files en in het geval van XFree memory mapped videogeheugen bij, wat geen fysiek RAM is. Dit getal kan dus groter zijn dan het eigenlijke RAM gebruik van het proces.

De ander heet normaalgesproken "RSS" of "RES" en houdt in hoeveel fysiek RAM een process toegewezen heeft gekregen. Dit is de waarde waar je naar moet kijken als je wilt weten hoeveel een proces nou echt van je je geheugen gebruikt.

Vooral XFree is nogal eens "slachtoffer", met 'virtuele' geheugengebruiken van over de 200 MB.
:? Als ik uitlog stoppen mijn programma's (servers), hoe laat ik ze gewoon draaien?
Als je uitlogt, heeft je programma geen controlling terminal meer, geen plaats meer om input van te krijgen, en output heen te sturen, dus zal het afsluiten. Een manier om dat te voorkomen is nohup(1) gebruiken:
nohup(1) - invoke a command immune to hangups
Als een programma met nohup is opgestart, zal het gewoon doordraaien als er een hangup (door uit te loggen bijvoorbeeld) komt. De output komt dan in een bestand nohup.out en je kunt verder weinig meer veranderen, weinig flexibel dus.
Een andere manier is & achter het commando zetten, de shell zal dan het commando in de achtergrond uitvoeren, default gaat de output nog gewoon naar je terminal, wat soms nogal verwarrend kan zijn. Zie ook de manpage van je favoriete shell (op de meeste linux-systemen bash dus) voor de exacte werking en toepassing van & en andere operators voor job management)
De derde, en erg krachtige optie is screen. Dit werkt in tegenstelling tot de eerste 2 niet direct op elk UNIX-systeem. nohup en & zijn al jaren standaard onderdeel van UNIX-besturingssystemen, screen zul je moeten installeren. Dit kan vaak gewoon via de packages van je distributie, en anders is de source gewoon te downloaden, het project is op freshmeat te vinden op http://freshmeat.net/projects/screen/ .
Wat is screen precies:
Screen is a full-screen window manager that multiplexes a physical terminal between several processes, typically interactive shells, dat is precies wat het is :)
Het zorgt ervoor dat je een soort virtuele console krijgt, waar je verschillende programma's tegelijk op kunt draaien, en die je gewoon door kunt laten lopen als je uitlogt, de eigenlijke reden van deze entry in de FAQ.
Voor de ongeduldigen onder ons:
code:
1
2
screen COMMANDO
CTRL-a CTRL-d
en het programma zal ongemerkt voor de huidige shell draaien, en blijven draaien als je uitlogt. Als je geen commando opgeeft zal screen een shell voor je maken, waarvoor hetzelfde geldt. De toetsenbord-combinatie C-a C-d zorgt ervoor dat screen detached, naar de background gaat dus. Allemaal leuk en aardig, maar wat nou als je het weer naar de voorgrond wilt?
code:
1
screen -r
en je krijgt het programma of je shell weer tevoorschijn. Met C-a C-c maak je binnen screen een nieuwe shell, zodat je met 1 screen, 2 of meer programma's tegelijk in de background kunt houden, met C-A 1 ga je naar window 1, en logischerwijs met C-a 2 naar window 2, en zo zijn er standaard al talloze mogelijkheden om tussen windows te switchen (C-a C-a, C-a C-SPACE enzovoorts). Wat screen allemaal nog meer kan staat uitgelegd in de manpage van screen, te vinden met 'man screen', het kan namelijk heel veel.


Met dank aan:
Jotti, Nelske, Valium, Zemanova, Aaargh!, theJKid, Balk, RonaldH, deadinspace, moto-moi, blaataaps, Beelzebubu en Wilke.

NOS FAQ
27 september 2003 - grotendeels herschreven door Wilke
8 april 2004 - update door blaataaps



[ Voor 255% gewijzigd door BalusC op 03-03-2006 18:27 . Reden: iets had de layout verneukt. ]


Dit topic is gesloten.