Tips en Trucs 2008

Tips en Trucs 2008

Bestanden naar UTF-8 converteren.

Wie nog oude tekst of HTML-bestanden heeft en deze wil openen met moderne editors zoals KWrite of Kate krijgt telkens een melding dat de tekst beschadigd is. Hoewel Kate zelf de codering kan aanpassen, kan je als je veel van deze bestanden moet converteren beter gebruik maken van een commando die je in een script kan gebruiken.

Het commando iconv converteert bestanden van de ene codeset naar een andere en toont het resultaat op het scherm. Het volgende voorbeeld converteert een HTML-pagina van de codeset ISO-8859-15 naar UTF-8: iconv --from-code=ISO-8859-15 --to-code=UTF-8 ./oud.htm > ./nieuw.html.

Gedeelde Windows mappen met samba

Veel Linux gebruikers willen hun huisgenoten en/of collega's die met een Windows systeem werken toegang geven tot hun bestanden. Dit kan eenvoudig met behulp van samba. Samba laat toe op Linux systemen de bij Windows gebruikers bekende Gedeelde mappen te gebruiken. De Windows gebruikers kunnen dan in hun bestandsbeheerder de locatie \\192.168.0.194 gebruiken om de gedeelde mappen op de Linux computer met het IP adres 192.168.0.194 te benaderen. Linux gebruikers kunnen vanuit hun bestandsbeheerder via smb://192.168.0.172 in de locatiebalk de gedeelde mappen op het Windows systeem met het IP adres 192.168.0.172 benaderen.

Op Linux (openSUSE 11.0) kan je op de volgende manier een map als een Gedeelde Windows map aanbieden:

  • Open een Terminal.
  • Wordt root met het commando su.
  • Installeer het samba pakket met het commando zypper install samba.
  • Start een root editor. In KDE druk je daarvoor Alt+F2 en voer je het programma kdesu kwrite uit.
  • Open in de editor het configuratie bestand /etc/samba/smb.conf.
  • Zoek in de sectie [global] naar de instelling workgroup en vervang de standaard werkgroep (domein) WORKGROUP door het in uw Windows omgeving gebruikte domein. Bij twijfel gebruik je de standaard WORKGROUP.
  • Plaats onder de instelling workgroup de extra regel
    	security = share
    Deze regel regelt de toegang tot de gedeelde map. De standaard security = user wordt standaard gebruikt door Windows 98 en NT. Deze standaard instelling verlangt identiek geconfigureerde gebruikers op het windows en linux systeem. security = share wordt gebruikt om gedeelde mappen zonder wachtwoord aan te bieden (gast gedeelde mappen). Naast deze security modes heb je nog de zeer complexe security modes domain, server en ads (meer info in de man van smb.conf).
  • Maak op het einde van het configuratie bestand de volgende nieuwe sectie.
    [Gedeeld]
    	comment = Gedeelde map
    	path = /home/sntcursist/Gedeeld
    	read only = no
    	public = yes
    	hide dot files = no
    	force user = sntcursist
    Deze sectie zal de map /home/sntcursist/Gedeeld aanbieden als Gedeeld, de inhoud kan door de gebruiker op een andere computer aangepast worden, is voor iedereen toegankelijk, toont de linux verborgen bestanden en mappen en de bestanden en mappen hebben de rechten van de gebruiker sntcursist.
  • Sla de aanpassingen op.
  • Start de samba server met het root commando /etc/init.d/smb start.

Als je foutmeldingen krijgt bij het opstarten of benaderen van de gedeelde mappen zijn er in de configuratie fouten geslopen, verbeter de fouten en herstart de samba server met het root commando /etc/init.d/smb restart.

Je kan de configuratie testen door de bestandsbeheerder Dolphin te starten en in de locatiebalk smb://127.0.0.1 te typen. Het IP adres 127.0.0.1 is het standaard IP adres van uw eigen computer en werkt altijd. In de persoonlijke map van de gebruiker sntcursist zal het pictogram van de map ~/Gedeeld een kleine blauwe wereldbol tonen, zo kan je lokaal zien welke mappen via samba gedeeld worden. Na het aanpassen van de samba configuratie (en de herstart van de samba server) moet je de bestandsbeheerder voor een test eveneens herstarten. Dit is nodig om opgeslagen instellingen te vernieuwen.

Als de samba server werkt zoals het hoort, kan je het opstarten van de samba server opnemen in de opstartprocedure van uw computer. Dit doe je door als root het commando chkconfig --set smb on uit te voeren.

Om de gedeelde map ook voor andere computers beschikbaar te stellen, moet je de firewall voor de samba server openen. Dit kan met het root commando yast2 firewall services add zone=EXT service=samba-server.

Met wachtwoord beveiligde gedeelde mappen

Gedeelde mappen kan je beveiligen door deze enkel toegankelijk te maken voor bepaalde gebruikers die de login en bijhorend wachtwoord kennen. Dit kan met de volgende werkwijze:

  • Maak met het root commando smbpasswd -a sntcursist een wachtwoord aan voor een bestaande linux gebruiker (hier sntcursist). Eventueel kan je een alias gebruiken die je kan definiëren in het bestand /etc/samba/smbusers
  • Pas als root het configuratiebestand /etc/samba/smb.conf de sectie [global] als volgt aan:
    security = user
    en voeg je de volgende regels toe
    passdb backend = smbpasswd
    encrypt passwords = yes
    username map = /etc/samba/smbusers
    met deze regels bepaal je de procedure bij het controleren van de wachtwoorden die versleuteld (dus niet afgeluisterd kunnen worden) verzonden worden. De laatste regel heb je enkel nodig als je gebruik wilt maken van aliassen (bijnamen).

Na een herstart van de samba server kan je nu de persoonlijke map van de gebruiker sntcursist bereiken door in de bestandsbeheerder Dolphin op de locatie smb://127.0.0.1 de map users te openen en de gebruikersnaam en bijhorende wachtwoord op te geven. Na het opgeven van de gebruikersnaam en bijhorende wachtwoord moet je soms nog eens vernieuwen (F5 drukken) om de inhoud van de gedeelde map te zien. Dit is mogelijk door de in openSUSE voorgedefinieerde sectie [users] in het configuratiebestand /etc/samba/smb.conf. De voorgedefinieerde sectie [profiles] brengt je na het aanmelden in de persoonlijke map van de aangemelde gebruiker. De sectie [printers] zorgt voor het delen van de aangesloten printers, de sectie [print$] bevat de Windows printer drivers en worden evenals de sectie [groups] hier niet verder behandeld (deze secties kan je indien gewenst verwijderen).

Om de voor iedereen toegankelijke map Gedeeld enkel voor bepaalde gebruikers toegankelijk te maken verwijder je in de sectie [Gedeeld] de regel public = yes en voeg je de regel valid users = sntcursist toe om enkel de gebruiker sntcursist toegang tot deze map toe te kennen. Indien je meerdere gebruikers toegang wilt geven, kan je meerdere gebruikers opgeven, gescheiden door komma's. Bij meerdere gebruikers of indien de gebruiker niet dezelfde gebruiker is als de eigenaar van de map moet de regel force user = sntcursist blijven staan.

Raadpleeg de hieronder geplaatste Tip over WebDAV om i.p.v. IP adressen computernamen te gebruiken om de gedeelde mappen te benaderen.

# smb.conf is the main Samba configuration file. You find a full commented
# version at /usr/share/doc/packages/samba/examples/smb.conf.SUSE if the
# samba-doc package is installed.
# Date: 2008-08-28
[global]
	workgroup = WORKGROUP
	security = user
	printing = cups
	printcap name = cups
	printcap cache time = 750
	cups options = raw
	map to guest = Bad User
	include = /etc/samba/dhcp.conf
	logon path = \\%L\profiles\.msprofile
	logon home = \\%L\%U\.9xprofile
	logon drive = P:
	usershare allow guests = Yes
	passdb backend = smbpasswd
	encrypt passwords = yes
#	username map = /etc/samba/smbusers
[homes]
	comment = Home Directories
	valid users = %S, %D%w%S
	browseable = No
	read only = No
	inherit acls = Yes
[profiles]
	comment = Network Profiles Service
	path = %H
	read only = No
	store dos attributes = Yes
	create mask = 0600
	directory mask = 0700
[users]
	comment = All users
	path = /home
	read only = No
	inherit acls = Yes
	veto files = /aquota.user/groups/shares/
[groups]
	comment = All groups
	path = /home/groups
	read only = No
	inherit acls = Yes
[printers]
	comment = All Printers
	path = /var/tmp
	printable = Yes
	create mask = 0600
	browseable = No
[print$]
	comment = Printer Drivers
	path = /var/lib/samba/drivers
	write list = @ntadmin root
	force group = ntadmin
	create mask = 0664
	directory mask = 0775
[Gedeeld]
	comment = Gedeelde map
	path = /home/sntcursist/Gedeeld
	read only = no
#	public = yes
	hide dot files = no
#	force user = sntcursist
	valid users = sntcursist
WebDAV: een standaard om mappen en bestanden te delen

Linux, MacOS en Windows kunnen met WebDAV gedeelde mappen en bestanden beheren. WebDAV gebruikt zoals webservers poort 80 en werkt dus overal op het internet. WebDAV is zeer efficient. M.a.w. ideaal, maar onbekend. Hieronder beschrijf ik hoe je eenvoudig een WebDAV bestandsserver op openSUSE 11.0 kan opzetten.

  • Start een terminal en wordt root met het commando su.
  • Installeer de server lighttpd en de webdav module met het root commando zypper install lighttpd lighttpd-mod_webdav.
  • Start een root editor om het configuratiebestand /etc/lighttpd/lighttpd.conf aan te passen. Bijvoorbeeld met het commando kdesu kwrite /etc/lighttpd/lighttpd.conf.
  • Zoek de regel include "modules.conf" en schakel deze uit door er een #-teken voor te plaatsen (commentaar).
  • Plaats onder de pas uitgeschakelde regel de configuratie om te bepalen welke modules lighttpd moet laden:
    server.modules = (
    "mod_access",
    "mod_webdav",
    "mod_accesslog" )
  • Zoek de regel include "conf.d/access_log.conf" en schakel deze uit door er een #-teken voor te plaatsen (commentaar).
  • Plaats onder de juist uitgeschakelde regel het toegangslogboek van lighttpd:
    accesslog.filename = log_root + "/access.log"
  • Plaats op het einde van het configuratiebestand de webdav specifieke configuratie-regels:
    webdav.activate = "enable"
    webdav.is-readonly = "disable"
  • Sla de aanpassingen op en start de lighttpd server met het root commando /etc/init.d/lighttpd start.
  • Indien je foutmeldingen krijgt bij het opstarten van de lighttpd server, zijn er in het configuratie-bestand fouten gemaakt. M.a.w. overloop de hierboven beschreven aanpassingen en probeer na de correctie(s) de lighttpd server opnieuw te starten.

Start de bestandsbeheerder Dolphin en typ in de Locatiebalk webdav://localhost. Na een druk op Return zie je de inhoud van de door lighttpd server gedeelde webdav map. Deze map wordt in het configuratiebestand bepaald door de regel server.document-root = server_root + "/htdocs" en de regel var.server_root = "/srv/www". M.a.w. je ziet de inhoud van de map /srv/www/htdocs/ op uw computer.

De regels server.username = "lighttpd" en server.groupname = "lighttpd" bepalen de gebruiker en groep waarmee lighttpd werkt. Dit is de reden waarom je geen bestanden kunt uploaden of mappen kunt aanmaken. Met het root commando mkdir /srv/www/htdocs/Upload maak je een map aan waar gebruikers mappen en bestanden naar de webdav server kunnen sturen. Daar de lighttpd server met de gebruiker en groep lighttpd werkt, moet je met het root commando chown lighttpd:lighttpd /srv/www/htdocs/Upload de map aan de lighttpd gebruiker toekennen. Vanaf nu kan je via webdav bestanden uploaden en mappen aanmaken in de map Upload.

De gedeelde webdav map is pas vanaf andere computers op het netwerk bereikbaar als je TCP poort (80) opent. Dit kan op de computer met de webdav map met het root commando yast2 firewall services add zone=EXT service=service:lighttpd. Wie gebruik maakt van een proxy server moet deze op de computer die de webdav map wil gebruiken, uitschakelen. Dit kan door op de computer die gebruik wil maken van de webdav map, in de YaST module Netwerkservices > Proxy in het tekstvak Geen proxy domeinen de netwerknaam of het IP-adres van de computer met de webdav map toe te voegen (vb: localhost, 127.0.0.1, 192.168.0.1, 192.168.0.194). In dit voorbeeld bevat de computer met het IP adres 192.168.0.194 de gedeelde webdav map. De nieuwe proxy configuratie wordt pas bij de volgende aanmelding actief. De IP adressen worden door een DHCP server in uw router uitgedeeld. Om er zeker van te zijn dat de computer met de gedeelde webdav map altijd hetzelfde IP adres krijgt, kan je deze in uw router reserveren voor de computer met de gedeelde webdav map. De netwerkinstellingen zijn pas helemaal af als je de computer met het vaste IP adres in het configuratiebestand /etc/hosts opneemt (voorbeeld: 192.168.0.194 webdav.pindanet.local webdav). Dit kan in openSUSE met de YaST module Netwerkservices > Hostnamen. Indien je van namen gebruik wilt maken en je een proxy server gebruikt, zal je de proxy moeten instellen zodat deze niet gebruikt wordt voor deze namen (vb: localhost, 127.0.0.1, pindanet.local). Je kan de webdav map nu bereiken door in de locatiebalk van Dolphin webdav://webdav.pindanet.be te typen.

Om een gedeelde map toe te voegen, maak je in /srv/www/htdocs/ als root een koppeling naar de map die je wil delen. Om de Persoonlijke map van Dany te delen, gebruik je het root commando ln -s /home/dany/ /srv/www/htdocs/dany. De bestanden en mappen in deze map zijn normaal gezien het eigendom van de gebruiker dany en kunnen dus zonder het aanpassen van de toegangsrechten (door de gebruiker root of dany) enkel gelezen worden.

Als je een webdav map via het internet wil beschikbaar stellen, werk je best met authentificatie. Met andere woorden met een aanmeldprocedure. Dit kan met de volgende stappen:

  • Voeg in het configuratiebestand /etc/lighttpd/lighttpd.conf de server module "mod_auth" toe na de module "mod_webdav".
  • Voeg in het configuratiebestand /etc/lighttpd/lighttpd.conf de volgende regels achteraan toe
    $HTTP["url"] =~ "^/dany($|/)" {
      auth.backend = "htdigest"
      auth.backend.htdigest.userfile = "/etc/lighttpd/htdigest.user"
      auth.require = ( "/dany" =>
                       (
                         "method" => "digest",
                         "realm" => "dany",
                         "require" => "user=dany"
                       )
                     )
    }
    
    De eerste regel bepaalt met een reguliere expressie dat de submap /dany moet gehoorzamen aan wat er tussen accolades staat.
    De tweede regel bepaalt de gebruikte methode om te authentificeren. Hier wordt een md5sum gebruikt (zie verder).
    De derde regel bepaalt welk bestand de authentificatie gegevens bevat. Dit bestand kan met de volgende commando's aangemaakt worden:
    user=dany
    realm=dany
    pass=snt+456
    hash=`echo -n "$user:$realm:$pass" | md5sum | cut -b -32`
    echo "$user:$realm:$hash" > /etc/lighttpd/htdigest.user
    Waarbij realm een tekst is die in het aanmelding venster vermeld wordt.
    Het gedeelte auth.require zorgt dat er een gebruikersnaam en bijpassend wachtwoord wordt gevraagd bij het openen van de submap /dany:
    De gebruikte digest methode verzendt de gegevens versleuteld over het netwerk, zodat luistervinken niets uit de verzonden gegevens kunnen opmaken.
    De require regel bepaalt dat alleen de gebruiker dany (na ingave van het correcte wachtwoord) toegang mag krijgen tot de submap.

Na deze aanpassingen en het herstarten van de lighttpd server met het root commando /etc/init.d/lighttpd restart is de webdav submap dany enkel nog toegankelijk als je de gebruikersnaam en bijpassend wachtwoord kent. Nu we een veilige manier gevonden hebben om onze Persoonlijke map (of een deel ervan, je weet maar nooit) te delen, kan je de rechten toekennen die je normaal zou hebben:

  • Pas in het configuratiebestand /etc/lighttpd/lighttpd.conf de server.username aan naar "dany" en de server.groupname naar "users".
  • Door deze aanpassing zal de lighttpd server niet willen herstarten. De conflicten te wijten aan rechten los je als volgt op:
    • Daar de gebruiker dany geen toegang heeft tot het wachtwoorden bestand kan lighttpd de aanmelding niet op correctheid controleren. Kopieer dus als root het bestand /etc/lighttpd/htdigest.user naar /etc/.
    • Pas als gevolg van de voorgaande aanpassing de regel met de auth.backend.htdigest.userfile in /etc/lighttpd/lighttpd.conf aan naar het nieuwe wachtwoordenbestand.
    • Ook de logboeken kunnen niet langer aangevuld worden. Dit los je op met het root commando chown -R dany:users /var/log/lighttpd.
    • Vergeet ook niet de map /srv/www/htdocs/Upload aan te passen aan de nieuwe lighttpd gebruiker. Zo kunnen de andere gebruikers toch nog bestanden op in de webdav map plaatsen.

Na een herstart van de lighttpd server kan de webdav map nu vanop elke computer met een internetverbinding bereikt worden en kan de submap dany enkel via een correcte aanmelding bereikt worden.

Tip: Bij het gebruik van op het netwerk gedeelde mappen, wordt de inhoud niet automatisch ververst. M.a.w. gebruik bij het niet zichtbaar worden van bewerkingen de toets F5 om te herladen.

Om de webdav gedeelde map bij het opstarten van de computer beschikbaar te maken moet de lighttpd server automatisch starten, dit gebeurt na het uitvoeren van het root commando chkconfig lighttpd on.

Webdav mappen kunnen in de mappenstructuur van linux gekoppeld worden met het pakket wdfs dat samenwerkt met het in openSUSE standaard geïnstalleerde FUSE pakket. Dit gaat als volgt:

  • Installeer met het root commando zypper install wdfs het pakket wdfs.
  • Maak een map aan om de webdav map aan te koppelen. Dit kan als gewone gebruiker met het commando mkdir ~/Webdav.
  • Koppel als gewone gebruiker de webdav map aan de map ~/Webdav met het commando wdfs http://nx9420.pindanet.local ~/Webdav. De webdav map is dan bereikbaar via de lokale map ~/Webdav
  • De webdav map afkoppelen kan met het commando fusermount -u Webdav/.

Als je een beveiligde webdav map wilt koppelen, moet je de gebruiker en het wachtwoord als volgt aan wdfs doorgeven: wdfs http://nx9420.pindanet.local/dany/ ~/Webdav -o username=dany,password=snt+456.

Een permanente koppeling kan opgenomen worden in het configuratiebestand /etc/fstab. De regel wordt dan:
wdfs#http://nx9420.pindanet.local/dany/ /home/dany/Webdav fuse users,allow_other,username=dany,password=snt+456 0 0
De optie allow_others is nodig om andere gebruikers dan de root gebruiker toegang tot te map te geven.

De gebrekkige ondersteuning van Webdav in Windows kan je opvangen door het programma Netdrive te installeren. Netdrive mag je als thuisgebruiker gratis gebruiken. Mac OS X ondersteunt de Webdav standaard zonder problemen.

Deze tutorial kwam tot stand door het raadplegen van de informatie gevonden op de site met de documentatie van Lighttpd.

De in deze tutorial gebruikte configuratie:

#######################################################################
##
## /etc/lighttpd/lighttpd.conf
##
#######################################################################

#######################################################################
##
## Some Variable definition which will make chrooting easier.
##
var.log_root    = "/var/log/lighttpd"
var.server_root = "/srv/www"
var.state_dir   = "/var/run"
var.home_dir    = "/var/lib/lighttpd"
var.conf_dir    = "/etc/lighttpd"

#######################################################################
##
## Load the modules.
server.modules = (
"mod_access",
"mod_webdav",
"mod_auth",
"mod_accesslog" )

#######################################################################
##
##  Basic Configuration
## ---------------------
##
## Run as a different username/groupname.
## This requires root permissions during startup. 
##
server.username  = "dany"
server.groupname = "users"

##
## Document root
##
server.document-root = server_root + "/htdocs"

##
## store a pid file
##
server.pid-file = state_dir + "/lighttpd.pid"

#######################################################################
##
##  Logging Options
## ------------------
##
## all logging options can be overwritten per vhost.
##
## Path to the error log file
##
server.errorlog             = log_root + "/error.log"

##
## Access log config
## 
#include "conf.d/access_log.conf"
accesslog.filename = log_root + "/access.log"

#######################################################################
##
##  Tuning/Performance
## --------------------
##
## set the event-handler (read the performance section in the manual)
##
## possible options on linux are:
##
## select
## poll
## linux-sysepoll
##
## linux-sysepoll is recommended on kernel 2.6.
##
server.event-handler = "linux-sysepoll"

##
## The basic network interface for all platforms at the syscalls read()
## and write(). Every modern OS provides its own syscall to help network
## servers transfer files as fast as possible 
##
## linux-sendfile - is recommended for small files.
## writev         - is recommended for sending many large files
##
server.network-backend = "linux-sendfile"

#######################################################################
##
##  Filename/File handling
## ------------------------

##
## Should lighttpd follow symlinks?
## 
server.follow-symlink = "enable"

#######################################################################
##
## custom includes.
##
webdav.activate = "enable"
webdav.is-readonly = "disable"

$HTTP["url"] =~ "^/dany($|/)" {
  auth.backend = "htdigest"
  auth.backend.htdigest.userfile = "/etc/htdigest.user"
  auth.require = ( "/dany" =>
                   (
                     "method" => "digest",
                     "realm" => "dany",
                     "require" => "user=dany"
                   )
                 )
}
Proces- en taakbeheer

Wanneer een applicatie gestart wordt, start Linux verschillende processen. Deze processen kennen verschillende toestanden: ze kunnen actief zijn, stoppen, herstarten, en - onder normale omstandigheden - opnieuw stoppen. Enkel de gebruiker die het proces heeft gestart, kan het proces stoppen, herstarten of afsluiten. De enige uitzondering op deze regel is de root gebruiker, deze kan alle processen op het systeem beheren. Er zijn ook processen die werken onder een systeem gebruiker, zoals nobody of lp - opnieuw heeft enkel de gebruiker root volledige toegang tot deze processen.

Eén grote familie

Processen zijn nooit eenzaam en altijd in goed gezelschap. Ze hebben een eigen hiërarchie, met proces nummer 1, init, aan de top. init is het eerste proces dat bij het opstarten wordt gestart. Alle andere processen hebben deze gemeenschappelijke voorouder - init start de basisprogramma's van Linux. pstree toont de relatie tussen de ouder en kinder processen. De boomstructuur toont wie afstamt van wie.

Extra informatie

Het -a argument zorgt ervoor dat pstree de argumenten waarmee de programma's werden opgestart toont. In een terminal die verschillende lettertypen en vette letters ondersteunen, zoals Gnome Terminal of KDE's Konsole, kan je het argument -h gebruiken. Dit benadrukt zijn eigen processen en voorouders. Wil je deze praktische functie voor andere processen gebruiken, gebruik je -H met het proces ID, en pstree zal het opgegeven proces en zijn stamboom benadrukken. Gebruik het -p argument om de proces ID (PID), en -u om de eigenaar te zien. Al deze argumenten kan je combineren - voorbeeld, pstree -apu.

Een overzicht van de processen met ps

Het ps commando toont je een overzicht van de op het systeem opgestarte processen. Zonder extra argumenten zal het hulpprogramma zich beperken tot de in de huidige shell opgestarte processen. Met het argument x krijg je in een tabel een overzicht van alle processen. De tabel bevat de volgende gegevens:

  • PID: Een uniek getal waarmee je een proces kan identificeren.
  • TTY: De terminal waarop het proces werd gestart. Een vraagteken betekent dat het proces niet in een terminal werkt.
  • STAT: De status van het proces kan S (slapen), R (running, actief), D (dead, het proces kan niet herstart worden) of Z (zombie, een afgesloten proces dat geen geldige afsluitstatus teruggaf).
  • TIME: De gebruikte processortijd.
  • COMMAND: Het volledige commando met al de argumenten.

Het u argument toont de eigenaar van het proces, het CPU en geheugen gebruik. a toont de processen van alle gebruikers. Het l argument toont de PPID (parent process identifier) en de UID (user identifier) van de gebruiker die het proces startte. Het argument w toont alle informatie, ook als deze niet op een regel past (de volgende regel wordt dan gebruikt). Het argument w dubbel gebruiken zorgt voor een ongelimiteerde regellengte.

Voorgrond en achtergrond

In sommige gevallen, zal het starten van een programma de terminal blokkeren, waardoor je geen commando's meer kunt invoeren. Grafische programma's die in een terminal gestart worden, vertonen dit gedrag. In zo'n geval kan je een kop koffie gaan drinken of je start een tweede terminal om verder te werken. Een alternatief is het proces op de achtergrond plaatsen. Om een proces bij het starten op de achtergrond te plaatsen, zet je een ampersand (&) achter het commando waarmee je het proces start. Het commando kwrite & zal KWrite starten en de terminal toont het proces ID en bash kan het volgende commando ontvangen. Voor het proces ID staat tussen rechte haken het taak ID. Het taak ID wordt door de terminal toegewezen in oplopende volgorde. Start je een tweede programma in dezelfde terminal dan krijgt deze het taak ID 2. Het jobs commando toont welke taken in de terminal uitgevoerd worden. Nadat een programma zijn taak heeft volbracht, toont de terminal de taak ID met een status bericht (Done) en de programma naam (bij grafische programma's kan Ctrl+C noodzakelijk zijn om de prompt terug te krijgen):

[1]-  Done                    kwrite

Het taak ID is ook nuttig bij het naar de voorgrond halen van een achtergrondproces, of andersom. Bij het starten van een programma zonder ampersand moet je Ctrl+Z drukken om het proces te stoppen. De terminal bevestigt dit met de melding:

[1]+  Stopped                 kwrite

Na het typen van bg (background) zal het proces in de achtergrond verder werken. Het taak ID is nuttig als je verschillende processen hebt gestopt. Het bg %3 commando laat proces met taak ID 3 weten dat het op de achtergrond verder moet werken. Op dezelfde manier plaats het fg (foreground) commando een taak op de voorgrond. Ook het fg commando kan met taak ID's werken door deze na een percentteken op te geven.

Afkoppelen

Bij het sluiten van de terminal worden alle processen afgesloten die in de afgesloten terminal werden gestart. Het nohup commando beschermt het proces tegen het afsluiten van de terminal waarin een proces gestart werd, waardoor het blijft werken. Dit commando verbreekt de band tussen het kind proces en de ouder. Plaats nohup voor het programma (en zijn argumenten):

nohup find Documents/Muziek -name "*.ogg" > ogg_lijst.txt

Deze benadering plaatst het proces automatisch in de achtergrond en koppelt het proces los van de terminal. De terminal afsluiten, betekent dat de communicatie met het proces verbroken wordt - of toch niet? Zelf zonder directe verbinding kan je een proces beheren door signalen te gebruiken.

Aan alles komt een eind?

Hoewel de naam anders doet vermoeden, is het commando kill niet altijd fataal. In tegendeel, je kan het gebruiken om signalen naar processen te sturen, waaronder een beleefde vraag om af te sluiten. Zoals verwacht kunnen gewone gebruikers enkel praten met hun eigen processen en kan de root gebruiker signalen naar alle processen sturen.

Instructies

Het commando kill -l toont de instructies die kill naar een proces kan sturen. Het volgende overzicht toont de meest relevante instructies voor dagelijks gebruik:

  • SIGHUP: Laat het proces herstarten na het afsluiten en wordt veel gebruikt om diensten (servers) aangepaste configuratie bestanden te laten gebruiken.
  • SIGTERM: Laat het proces normaal afsluiten, dus nadat het proces alles netjes heeft opgeruimd.
  • SIGKILL: Laat een proces geforceerd afsluiten, kost wat kost. In sommige gevallen zal zelfs dit niet volstaan en zal na eindeloos wachten op een timeout een herstart van het systeem de enige oplossing zijn.
  • SIGSTOP: Onderbreekt een proces tot je een SIGCONT stuurt om door te gaan.

Om een signaal naar een proces te sturen, gebruik je de signaalnaam (of nummer) gevolgt door het proces ID (vb.: kill -19 11236). Daarbij kunnen meerdere proces ID's meegegeven worden. Het kill commando gebruiken zonder het signaal te vermelden, zal het signaal SIGTERM naar het proces sturen.

Zoeken en vinden

Om het proces ID te vinden kan je het ps commando gebruiken. Dit kan op gebruikelijke manier gecombineerd worden met commandos' zoals grep. Met het commando ps aux | grep ssh kan je processen vinden met ssh in de naam. Naast de SSH server (sshd), bevat deze lijst alle ssh verbindingen. Om hetzelfde signaal naar al deze processen te sturen, zou je normaal alle PID's in het kill commando opnemen, wat lastig kan worden als de lijst lang is. Het killall commando gebruikt procesnamen in plaats van ID's. Het commando killall -19 ssh stopt alle ssh verbindingen. Omdat killall alle processen in één keer kan verwijderen, kan je maar beter de interactieve mode (-i argument) gebruiken. Je moet dan elk signaal per proces bevestigen.

Nog meer speurwerk

Het commando pgrep combineert ps en grep. Alle processen opsporen met ssh in de naam kan je met pgrep ssh. Met het argument -l krijg je als extra de naam van het proces te zien. Met de argumenten -l en -f kom je zelfs te weten met welke argumenten het proces gestart werd.

In groep

Het pkill commando gebruikt dezelfde argumenten als pgrep en wordt gebruik zoals kill om signalen naar processen te sturen.

pkill -19 ssh

Systeembeheerders kunnen de processen van de gebruikers beheren met het -u argument. Samen met dit argument wordt een gebruikersnaam meegegeven. Voorbeeld: pgrep -lfu sntcursist.

VMware Player 2.5 installeren

Onlangs kwam VMware met een nieuwe VMware Player, versie 2.5. Buiten de betere prestaties en extra functies (zie Features) valt bij Linux vooral het nieuwe configuratie programma op.

Om de nieuwe VMware Player op openSUSE 11.0 te installeren onderneem je de volgende stappen:

  1. Haal de voor uw systeem geschikte rpm af (VMware Download). Het afgehaalde RPM bestand eindigd op .x86_64.rpm voor een 64-bits systeem en op .i386.rpm voor een 32-bits systeem.
  2. Start een Terminal en wordt root met het commando su.
  3. Installeer het afgehaalde pakket met het root commando zypper install Documents/Linux/VMware/VMware-Player-2.5.0-118166.*.rpm .
  4. Om VMware Player te configureren en zich aan te passen aan het systeem heeft het extra onderdelen nodig. Deze kan je als root installeren met het commando zypper install gcc kernel-source make.
  5. Start de VMware Player (K menu > Programma's > Systeem > Meer programma's > VMware Player). Volg de instructies van de VMware Player Assistent.
  6. De bibliotheken nodig om VMware te configureren, kunnen nu verwijderd worden (mogen ook blijven staan). Daarbij zal meer dan 260 MB ruimte op de harde schijf vrijkomen. Dit kan met met het root commando zypper remove gcc kernel-source make.

De VMware Player kan je van de computer verwijderen door de volgende stappen uit te voeren:

  1. Start een Terminal en wordt root met het commando su.
  2. Start het root commando vmware-uninstall.
  3. Na de succesvolle uninstall moet je het VMware Player pakket verwijderen met het root commando zypper remove vmware-player.

Opmerking

Na een opwaardering (update) van de kernel via het internet, moet je de configuratie opnieuw uitvoeren. Dit is noodzakelijk om de VMware Player de kans te geven zich aan de nieuwe kernel aan te passen.

HTTP repositories downloaden

Sommige repositories (softwarebronnen) kunnen alleen via het HTTP-protocol benaderd worden, waardoor het downloaden van deze repositories via FTP of RSYNC niet mogelijk is. Een repositorie downloaden kan nuttig zijn om verschillende computers in een lokaal netwerk te bedienen zonder de gemeenschappelijke internetverbinding te belasten. De repositorie met de drivers voor de ATI grafische kaart is zo'n repositorie. Met het volgende script kan je de ATI repositorie downloaden:

#!/bin/bash
# ati_repo_download.sh

function update_ati
{
  REPO_DIR=`dirname $0`/ATI
  REPO_URL='http://www2.ati.com/suse/11.0/'
  REPO_URL2='http:\/\/www2.ati.com\/suse\/11.0\/'
  REPO_URL_CUT=2
  REPO_TMP=$TMPDIR/ati
  mkdir -p $REPO_TMP/repodata/
  cd $REPO_TMP
  wget -nH -x --cut-dirs=$REPO_URL_CUT $REPO_URL/repodata/repomd.xml
  wget -nH -x --cut-dirs=$REPO_URL_CUT $REPO_URL/repodata/repomd.xml.asc
  wget -nH -x --cut-dirs=$REPO_URL_CUT $REPO_URL/repodata/repomd.xml.key
  cat $REPO_TMP/repodata/repomd.xml | sed -e 's/ /\n/g' -e 's/</\n/g' | grep -E -o 'href=".+"' | sed -e "s/^href=\"//g" -e 's/^/'$REPO_URL2'/' -e 's/"//g' |xargs wget -nH -x --cut-dirs=$REPO_URL_CUT
  gzip -d -c $REPO_TMP/repodata/primary.xml.gz | sed -e 's/ /\n/g' -e 's/</\n/g' | grep -E -o 'href=".+"' | sed -e "s/^href=\"//g" -e 's/^/'$REPO_URL2'/' -e 's/"//g' | xargs wget -nH -x --cut-dirs=$REPO_URL_CUT
  rm -fr $REPO_DIR/*
  mkdir -p $REPO_DIR
  cp -R $REPO_TMP/* $REPO_DIR
  rm -fr $REPO_TMP
} >ati.log 2>&1

update_ati

Met wget halen we de bestanden met de repositorie-informatie op. Uit deze informatie-bestanden filteren we de bestanden die deel uitmaken van de repositorie (waaronder de pakketten). Deze bestanden halen we dan eveneens met wget van het internet af. Een eenvoudige truc die werkt.

De computer na een langdurige taak automatisch afsluiten

Soms moet een computer een taak uitvoeren waarvoor veel tijd nodig is. Zoals het uploaden van één groot bestand of vele kleinere bestanden. Daarbij zou het handig zijn dat de computer zichzelf na het uitvoeren van de taak automatisch uitschakeld. Een voorbeeld:
ftp -u ftp://gebruiker:wachtwoord@ftp.webhost.be/www/linux/cursus/ openSUSE-11.0.i686-2.7.0.iso; qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout 0 2 3

Het ftp commando zorgt voor het versturen van het iso-bestand naar de webserver. De puntkomma scheidt het ftp commando van het commando dat na het ftp commando uitgevoerd moet worden. Het qdbus commando stuurt een bericht naar KDE om de computer af te sluiten.

M.a.w. Na het uploaden van het iso-bestand wordt de computer netjes afgesloten.

Meer informatie over het qdbus commando vindt je in de cursus Systeembeheer op deze site. Gebruik daarvoor het zoekveld met de zoektekst ksmserver in het linkerpaneel.

Hoelang is een proces al actief?

Deze vraag wordt opgelost door het commando time.

Een voorbeeld:
$ time find / -name csh.1 -print (afgebroken met Ctrl+C)
real 0m17.313s (verlopen tijd tussen het starten en beeindigen)
user 0m0.236s (tijd doorgebracht in gebruikers proces code)
sys 0m1.252s (tijd doorgebracht in systeem proces code)

Het commando wordt door time als kind-proces gestart en de verschillende tijden worden gerapporteerd.

Zypper tips en trucs

Zypper is een ondergewaardeerde gebruiksvriendelijke en krachtige pakketbeheerder. Met de laatste versie in openSUSE 11.0 werd libzypp razend snel en kreeg het een aantal nieuwe mogelijkheden. Een overzicht van de nieuwe mogelijkheden:

Pakketten installeren met behulp van de naam of versie

Pakketten installeren en verwijderen met jokers (wildcards)
# zypper rm gtk*devel*
# zypper in gtk-sharp?

Meerdere versies tegelijkertijd behandelen
# zypper in package-1.2.3
# zypper rm package>1.2.3

Tegelijkertijd installeren en verwijderen, + is installeren, - is verwijderen.
# zypper in <package to install> -<package to remove> +<another package to install>

Herinstallatie forceren
# zypper in --force <package>

Installeren van gewone RPM bestanden en hun afhankelijkheden vervullen via de lokale of internet softwarebronnen.

# zypper in ./file.rpm
# zypper in http://<url>/file.rpm

Alle geinstalleerde pakketten opwaarderen

Om alle pakketten enkel op te waarderen met verbeteringen gebruik je:
# zypper up

Om alle pakketten met nieuwe versies op te waarderen, of om naar een andere versie van openSUSE op te waarderen:
# zypper dup

Patronen

Een lijst opvragen van alle beschikbare patronen:
# zypper pt

Het patroon xfce installeren:
# zypper in -t pattern xfce

Softwarebronnen (repositories) eenvoudig beheren

Een lijst van de beschikbare softwarebronnen opvragen:
# zypper lr

Een softwarebron toevoegen:
# zypper ar <url> <name>

De eerste softwarebron uitschakelen:
# zypper mr -d 1

Een softwarebron met een bepaalde naam uitschakelen:
# zypper mr -d repo-oss

De eerste softwarebron verwijderen:
# zypper rr 1

Pakketinformatie

Naar een pakket zoeken:
# zypper se banshee-1
# zypper se bans*

Naar een patroon zoeken:
# zypper se -t pattern media

Standaard krijg je bij het zoeken en de naam, een samenvatting en het type. Om detail zoals uit welke softwarebron welke versie van het pakket afkomstig is, ga je als volgt te werk:
# zypper se -s package

Geeft informatie, waaronder een korte beschrijving over een pakket:
# zypper if package

Andere spectaculaire trucs

Je kan een Zypper opdracht simuleren door er --dry-run bij te plaatsen
# zypper in --dry-run <package>

Je kan een pakket in zijn huidige status (geïnstalleerd/niet geïnstallleerd) blokkeren
# zypper addlock <package>
# zypper removelock <package>

Meer informatie over de nieuwe mogelijkheden van zypper en hoe deze te gebruiken, kan je vinden op:
http://en.opensuse.org/Zypper/Features
http://en.opensuse.org/Zypper/Usage

Tips bij het gebruik van het cd (Change Directory) commando

Het commando cd uitvoeren zonder argumenten brengt u van de huidige directory naar de directory gespecifieerd door de $HOME omgevingsvariabele:
dany@antec:~> cd /tmp/
dany@antec:/tmp> cd
dany@antec:~>

Het cd commando uitvoeren met een hyphen (-) argument brengt u terug naar uw vorige huidige directory. Dit is vooral handig na een per ongeluk uitgevoerd cd commando zonder argumenten, na het typen van cd - kom je terug terecht waar je vandaan kwam, m.a.w. werkt dit als ongedaan maken:
dany@antec:~/een/lang/pad/naar/enkele/bestanden> cd
dany@antec:~> cd -
/home/dany/een/lang/pad/naar/enkele/bestanden
dany@antec:~/een/lang/pad/naar/enkele/bestanden>

Of als je wilt wisselen tussen twee directories maakt cd - dit eenvoudig:
dany@antec:~/pad/naar/enkele/bestanden> cd ~/ander/pad/naar/enkele/bestanden/
dany@antec:~/ander/pad/naar/enkele/bestanden> cd -
/home/dany/pad/naar/enkele/bestanden
dany@antec:~/pad/naar/enkele/bestanden> cd -
/home/dany/ander/pad/naar/enkele/bestanden
dany@antec:~/ander/pad/naar/enkele/bestanden>

De opdrachten geschiedenis merken om commando's sneller terug te vinden

Wanneer je op zoek bent naar de oplossing voor een probleem in een dienst als Apache en MySQL, dan moet je een aantal opdrachten meerdere malen herhalen. Een voorbeeld:

/etc/init.d/apache stop
/etc/init.d/mysql stop
/etc/init.d/apache start
/etc/init.d/mysql start

Je kan daarvoor een script schrijven of de opdrachten gescheiden door punt komma's op één regel zetten.

/etc/init.d/apache stop; /etc/init.d/mysql stop; /etc/init.d/apache start; /etc/init.d/mysql start

Terwijl je bezig bent met andere zaken, gebeurt het wel eens dat je de snelle toegang tot de opdrachtregelgeschiedenis verliest. Om dit te vermijden kan je opdrachtregels merken:

/etc/init.d/apache stop; /etc/init.d/mysql stop; /etc/init.d/apache start; /etc/init.d/mysql start #apmy

Om de opdrachtregel snel in de geschiedenis te halen, druk je Ctrl-R + apmy, en daar is de opdracht.

Zoeken naar inhoudelijk identieke bestanden

Wie in de toekomst ooit nog naar identieke bestanden in een mappenstructuur moet zoeken, kan beroep doen op de volgende opdrachtregel:
  find . -type f -print0 | xargs -0 md5sum | sort | awk 'dup[$1]++{print $2}'

NVidia en ATI drivers installeren in openSUSE 11.0

Hier heb je een handige gids om de ATI en NVIDIA stuurprogramma's in openSUSE te installeren.

Of met de opdrachtregel:
  su -c "OCICLI http://opensuse-community.org/ati.ymp"
  su -c "OCICLI http://opensuse-community.org/nvidia.ymp"

Een andere manier met de opdrachtregel:
NVIDIA:
zypper sa http://download.nvidia.com/opensuse/11.0 nvidia
zypper in x11-video-nvidiaG01
ATI:
zypper sa http://www2.ati.com/suse/11.0 ati
zypper in x11-video-fglrxG01

Hoewel sommige bronnen beweren dat na de installatie geen stappen meer ondernomen moeten worden, heb ik ondervonden dat voor ATI de stuurprogramma's pas aan het werk gaan na het uitvoeren van het root commando
  sax2 -r -m 0=fglrx

Na het herstarten van de X server (grafische omgeving), profiteer je van de extra mogelijkheden van uw grafische kaart en kan je genieten van de hardware versnelde bureaublad effecten. De film hieronder toont de mogelijkheden van KDE 4.1.

Installeer Flash Player en activeer JavaScript om deze film af te spelen.

De URL's met de stuurprogramma's kunnen niet met een browser benaderd worden. Toch kan je de nodige rpm's downloaden als je de complete URL's kent. Met de filter Bronnen in de module Softwarebeheer van YaST kan je de bestandsnaam van de pakketten achterhalen. Als je de structuur van een softwarebron kent, kan je de bestanden met het commando wget downloaden. Dit is vooral handig als je veel installaties moet uitvoeren. De twee commando's wget http://www2.ati.com/suse/11.0/x86_64/ati-fglrxG01-kmp-default-8.493_2.6.25.5_1.1-2.1.x86_64.rpm en wget http://www2.ati.com/suse/11.0/x86_64/x11-video-fglrxG01-8.493-7.1.x86_64.rpm plaatsen de voor mijn computer noodzakelijke RPM bestanden in de huidige map, waar ik ze dan met het root commando rpm -Uvh *fglrxG01*.rpm kan installeren. Om de weten welk afhankelijk RPM-bestand je nodig hebt kan je in het Softwarebeheer x11-video-fglrxG01 voor installatie aanduiden en met behulp van de filter Bronnen nagaan welke afhankelijke pakketten nog nodig zijn. Vervang in het pad en de bestandsnaam x86_64 door i586 om de 32-bits versies af te halen.

LiveCD naar LiveUSB-stick

Verplaatst naar een andere pagina. Klik hier om de tip te lezen.

Afbeeldingen uit PDF bestanden halen

Om afbeeldingen uit een PDF bestand te halen gebruik je het programma pdfimages uit het poppler pakket. Om alle afbeeldingen uit een PDF bestand te halen gebruik je het commando:

pdfimages bestand.pdf image-root

Om de afbeeldingen uit een pagina-bereik te halen gebruik je de -f en -l opties die de eerste en laatste pagina in een bereik bepalen. Om de afbeeldingen van pagina twee tot vier te exporteren, gebruik je het commando:

pdfimages -f 2 -l 4 bestand.pdf image-root

De afbeeldingen worden in bestanden met de naam image-root-nnn.xxx geschreven, waarbij nnn het afbeeldingsnummer is en xxx het afbeeldingstype (bijvoorbeeld jpg).

Controleren of een script door de systeembeheerder werd gestart

Als je een script hebt dat als root gestart moet worden, kan je dit controleren aan het begin van het script met:

if [[ $UID -ne 0 ]]; then
  echo "Moet als root gestart worden"
  exit 1
fi

Als je sudo gebruikt, kan je indien het script niet als root gestart werd, herstarten met sudo:

if [[ $UID -ne 0 ]]; then
  sudo -p "Herstarten met sudo. Wachtwoord: " sh $0 $*
  stat=$?
  exit $stat
fi

Het sudo commando start het script met sh $0 $*. sh werd toegevoegd om scripts zonder uitvoerrecht toch te kunnen uitvoeren.

Indien je geen sudo gebruikt kan je terugvallen op:

if [[ $UID -ne 0 ]]; then
  su -c " sh $0 $*"
  stat=$?
  exit $stat
fi

Afhalen via http en verspreiden via bittorrent

Als je van mening bent dat afhalen via bittorrent niet snel genoeg is voor de openSUSE 11.0 betas, kan je helpen om de druk op de servers te verlichten. Waardoor de afhaalsnelheid voor de anderen zal stijgen. Daar bittorrent in staat is een controle uit te voeren op de afgehaalde data, zal de via http verkregen data ook aan deze controle worden onderworpen, waarbij corrupte data opnieuw wordt afgehaald.

Ziehier de werkwijze (ik gebruik KTorrent, maar de gebruikte methode moet ook werken met andere clients zoals Azureus):

    • Haal de iso af via http/ftp of
    • Haal de deltaiso (voorbeeld) af en pas deze toe op de iso van de vorige ontwikkel-versie.
  1. Haal de corresponderende torrent, en stop deze onmiddellijk (rechterklik -> Stoppen).
  2. Verplaats de in stap 1 afgehaalde iso naar de map aangemaakt in stap 2. Overschrijf daarbij het reeds aanwezige bestand. Bij het gebruik van een deltaiso moet je de aangemaakte iso dezelfde naam geven als de iso in de torrent.
  3. Klik rechts op de gestopte torrent, en kies de opdracht Gegevensintegriteit controleren.

    Afhalen via http en verdelen via bittorrent

    Dit gaat uw via http en/of applydeltaiso verkregen iso controleren. Indien de zo verkregen iso fouten vertoont, worden enkel de foutieve delen opnieuw afgehaald. M.a.w. compleet opnieuw afhalen is dus overbodig.

  4. Na het beeindigen van de gegevensintegriteitscontrole start je de torrent (rechterklik -> Starten), en het verdelen start onmiddellijk.

Je hebt met deze werkwijze het volgende bereikt:

  • Snel afhalen via http/ftp
  • Controle van de afgehaalde/aangemaakte iso
  • Hulp voor openSUSE en spiegelservers door voor anderen het afhalen via bittorrent te versnellen
  • Een goed gevoel
openSUSE berichten opsporen op Digg

Digg.com kan massa's berichten ontvangen, waardoor op een feed abonneren (zelfs beperkt tot een bepaalde sectie) niet altijd wenselijk is. Gelukkig kan je abonneren op feeds van digg gebaseerd op sleutelwoorden; zoals openSUSE:

http://digg.com/rss_search?search=opensuse

Meteen op een feed abonneren en help met het opgraven van openSUSE verhalen!

Firewall instellen met YaST vanaf de commandoregel

De Automatische Configuratie in de openSUSE 11.0 installatie is goed, want je moet minder Volgende klikken, maar ik mis de knop om de SSH poort in de firewall te openen.

Ziehier een commando om dit met YaST in te stellen:

# yast2 firewall services add zone=EXT service=service:sshd

Probeer ook:

# yast2 firewall help
# yast2 firewall longhelp
# yast2 firewall summary
# yast2 firewall services list
# yast2 -l
# yast2 FOO help

(Het gebruik van "yast" in plaats van "yast2" zou ook moeten werken, maar let op voor bug 374259.)

RPM sleutels beheren

Met volgend commando kan je GPG sleutels die je voor RPM gebruikt (en dus vertrouwt) opvragen:

rpm -qa --nodigest --nosignature --qf '%{VERSION}-%{RELEASE} %{SUMMARY}\n' gpg-pubkey\* | sed 's/ gpg(/ /;s/)$//'

Als je een sleutel uit de RPM sleutelbos wilt verwijderen, vervang je HASH door het eerste veld van de bovenstaande lijst in het commando:

rpm -e gpg-pubkey-HASH

(dit commando voer je uiteraard uit als root).

Schermafdruk nemen

Je kan een schermafdruk van het volledige scherm nemen met het commando:

import -window root schermafdruk.png

Om met de muis een oppervlak te selecteren, gebruik je het commando import zonder de -window optie. Met de optie pause kan je jezelf wat tijd in seconden geven tussen het uitvoeren van het commando en het nemen van de schermafdruk.

import -pause 3 -window root schermafdruk.png

Het import hulpmiddel is een onderdeel van de ImageMagick hulpmiddelen suite.

Dubbele bestanden opsporen

De hulpmiddelen fdupes en freedup zijn zeer behulpzaam bij het opruimen van een volle harde schijf. Met deze hulpmiddelen kan je dubbele bestanden opsporen en verwijderen (wees voorzichtig!).

In openSUSE installeer je fdupes met het rootcommando

zypper in fdupes

freedup voor openSUSE 10.3 kan je vinden op: http://software.opensuse.org/search?baseproject=openSUSE%3A10.3&p=1&q=freedup

Voorbeelden voor fdupes:

fdupes -r -n ./<map>/ #<- onderzoekt de <map> recursief, zonder rekening te houden met lege bestanden
fdupes -S -r -n ./<map>/ #<- toon eveneens de grootte van de bestanden

Gekleurde shell

Ben je de witte letters op een zwart scherm beu? Probeer dit eens! Veel plezier...
Bovenaan een gekleurde shell-balk met klok:

export PS1='\e[1A\e[s\e[H\e[37;44;1m\e[K \u@\h: \e[33;44;1m\w \e[199C\e[8D\e[37;44;1m [\A] \e[0m\e[u\n$ '

of een gekleurde shell:

export PS1='\[\033[0;33m\][\[\033[1;32m\]\u\[\033[0;36m\]@\[\033[1;32m\]\h\[\033[1;36m\]:\[\033[1;31m\]\w\[\033[0;33m\]]\[\033[0m\]'

Als je deze opmaak altijd wilt gebruiken, kan je de regel plaatsen in het bestand ~/.bashrc
Interesse? Lees verder op http://tldp.org/HOWTO/Bash-Prompt-HOWTO/c327.html, http://mikewest.org/archive/now-i-have-a-colourful-bash-prompt en http://networking.ringofsaturn.com/Unix/Bash-prompts.php

Gewijzigde bestanden opsporen

Soms wil je alle tijdens een installatie gewijzigde bestanden opsporen. Dit probleem kan je als volgt oplossen:

echo temp > /tmp/afile
# Installeer het pakket
find /etc -newer /tmp/afile
# Zoek naar aangepaste bestanden in /etc

Een bruikbare variatie is het opsporen van "geopende" bestanden tijdens het werken met een programma. Als je wilt weten welke bestanden in /etc geopend werden, kan dit als volgt:

echo temp > /tmp/afile
# Start en gebruik het programma
find /etc -anewer /tmp/afile

Een geniepige variant is het opsporen van alle gewijzigde bestanden tussen tijd1 en tijd2. Laten we de tijden 2008-04-20 13:45 en 2008-04-21 01:30 als voorbeeld gebruiken:

touch -t 200804201345.00 /tmp/file1
touch -t 200804210130.00 /tmp/file2
find /etc -newer /tmp/file1 -a ! -newer /tmp/file2

Dit werkt door gebruik te maken van touch -t om de tijd van wijziging van de bestanden te veranderen en zo een tijdvenster te maken om te gebruiken met find.

Snel host-to-host transport

Te lui om een ftp server op te zetten om enkele bestanden van de ene computer naar de andere te transporteren? Je vertrouwd jouw maatje niet zover om hem een ssh-account te geven? Je wil geen wachtwoord op iemand anders zijn computer ingeven? Hier de oplossing om bestanden te kopiëren van computer2 naar computer1:

computer1:$ netcat -lvp 12345 | tar -xv
computer2:$ tar -cv file [files...] | netcat -v IP_of_host1 12345

Je kan dit ook gebruiken in combinatie met dd om partities te kopiëren:

computer1:$ netcat -lvp 12345 >part_xyz.img
computer2:$ netcat -v IP_if_host1 12345 </dev/sda1

Geek feiten over netcat:

  • door velen beschouwd als het meest waardevolle netwerk hulpmiddel
  • beschikbaar via de gekende installatie-procedures
  • wanneer de telnet poort wordt gebruikt om een TCP verbinding te testen of om contact te krijgen met een tekst gebaseerde server, dan is netcat het ideale hulpmiddel daarvoor.
  • de ideale poort scanner
  • op sommige systemen en busybox, afgekort tot nc