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
.
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:
su
.zypper install samba
.kdesu kwrite
uit.security = shareDeze 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).
[Gedeeld] comment = Gedeelde map path = /home/sntcursist/Gedeeld read only = no public = yes hide dot files = no force user = sntcursistDeze 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.
/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
.
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:
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/smbuserssecurity = useren voeg je de volgende regels toe
passdb backend = smbpasswd encrypt passwords = yes username map = /etc/samba/smbusersmet 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
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.
su
.zypper install lighttpd lighttpd-mod_webdav
.kdesu kwrite /etc/lighttpd/lighttpd.conf
.include "modules.conf"
en schakel deze uit door er een #
-teken voor te plaatsen (commentaar).server.modules = (
"mod_access",
"mod_webdav",
"mod_accesslog" )
include "conf.d/access_log.conf"
en schakel deze uit door er een #
-teken voor te plaatsen (commentaar).accesslog.filename = log_root + "/access.log"
webdav.activate = "enable"
webdav.is-readonly = "disable"
/etc/init.d/lighttpd start
.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:
$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.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.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:
"dany"
en de server.groupname naar "users"
.chown -R dany:users /var/log/lighttpd
.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:
zypper install wdfs
het pakket wdfs.mkdir ~/Webdav
.wdfs http://nx9420.pindanet.local ~/Webdav
. De webdav map is dan bereikbaar via de lokale map ~/Webdavfusermount -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" ) ) }
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.
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.
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
.
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:
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.
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.
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.
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.
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:
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.
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.
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.
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
.
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:
su
.zypper install Documents/Linux/VMware/VMware-Player-2.5.0-118166.*.rpm
.zypper install gcc kernel-source make
.zypper remove gcc kernel-source make
.De VMware Player kan je van de computer verwijderen door de volgende stappen uit te voeren:
su
.vmware-uninstall
.zypper remove vmware-player
.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.
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.
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.
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 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 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>
# zypper in ./file.rpm
# zypper in http://<url>/file.rpm
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
Een lijst opvragen van alle beschikbare patronen:
# zypper pt
Het patroon xfce installeren:
# zypper in -t pattern xfce
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
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
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
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>
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.
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}'
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"
zypper sa http://download.nvidia.com/opensuse/11.0 nvidia
zypper in x11-video-nvidiaG01
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.
Verplaatst naar een andere pagina. Klik hier om de tip te lezen.
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).
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
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):
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.
Je hebt met deze werkwijze het volgende bereikt:
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!
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.)
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).
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.
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
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
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.
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: