Persönliche Linux-Unix-IRIX-howtos & FAQs
Autor: Dr. David Völker
Institut für Geowissenschaften, Freie Universität Berlin, Malteserstr.74-100, D-12249 Berlin; Raum B138, tel: 70-289
email: voelker@zedat.fu-berlin.de

Siegel der FU Berlin

wird immer mal wieder erweitert


Verzeichnis


Update

am Einfachsten via ftp aus YaST heraus (Installationsquelle ftp)

ftp.uni-tuebingen.de
/pub/linux/suse/i386/6.4

Ärger mit dem booten

z.B. weil master-bootrecord überschrieben wurde, LILO kaputt o.Ä.

  1. Starten von Boot-CD

  2. booten von installiertem System, um zu schauen, ob es noch da ist (meistens /dev/hda2)

  3. Neu-Installieren von lilo

Der mbr kann mit fdisk /mbr ausradiert werden, z.B. wenn man Lilo nicht mehr haben will Wenn die boot-Partition im Eimer ist, d.h. zwar noch da, aber nicht mehr eingetragen, kann man mit das Rettungssystem von der Suse-Boot-CD starten, und mit fdisk die Partition wieder eintragen. Wenn weiter nichts verändert wurde, sind die Daten wieder zugänglich (Uff!)

Bei unclean unmount, z.B. bei warmstart, weil x-server eingefroren ist können Fehler auf dem reiserfs filesystem zurückbleiben (Inkonsistenz), weil diese Daten nicht zurück geschrieben werden konnten. Fsck – chek and repair linux filesystem. z.B.

fsck -r

Löschen einer Linux-Partition

  1. mit fdisk Partition löschen

  2. mit fdisk /mbr Lilo rauswerfen

  3. Partition mit anderem Betriebssystem neu formatieren


Wichtige Konfigurationsdateien

/.profile

root-profile

/.bashrc

roots bash-Profil

/etc/profile

globale Shellkonfiguration, alias etc., wird bei update überschrieben

/etc/profile.local

globale Shellkonfiguration, alias etc. wird bei update nicht überschrieben

/etc/hosts.allow

andere Rechner, denen Zugang gewährt wird

/etc/hosts.deny

andere Rechner, denen Zugang verweigert wird. Reihenfolge: erst deny dann allow z.B.
deny ALL: ALL
allow ALL 160.45.86.

~/.profile

individuelle Shellkonfiguration

~/.bashrc

individuelle Konfiguration der bash-Shell

~/.alias

Aliastabelle

/etc/lilo.conf

Linux Loader Konfigurationsdatei

/etc/fstab

Partitionstabelle

/etc/rc.config

Konfiguration für init

/etc/conf.modules

Konfiguration der ladbaren Module

/etc/route.conf

Angaben zum routing

/etc/hosts

Konversion von Rechneradressen in -namen

/etc/mtools.conf

Konversionstabelle für die DOS-Partitionen & Laufwerken

/vmlinuz

Lokation des Kernel

/etc/xf86config

X-Windows-Konfigurationsdatei

/usr/X11R6/bin/XF86Setup

X-Windows-Konfigurationsprogramm einfach

/usr/X11R6/bin/xf86config

X-Windows-Konfigurationsprogramm komplett


Wichtige Verzeichnisse

/etc

Konfigurationsdateien

/etc/init.d

Shellscripte, die beim booten abgearbeitet werden

/usr/doc/faq

Faqs


Wichtige Befehle zur Abfrage der Konfiguration

ls -l -h

ls in lesbarem Format (in MB, KB etc

df

Verfügbarer Plattenplatz (disk free)

du

Plattenverbrauch, geordnet nach Verzeichnissen

du -m

In MB

fdisk

Überblick über die Partitionen

mount

gemountete Dateisysteme

dmesg

Ausgabe der Bootsequenz-Meldungen

top

Prozesse

lsmod

Liste der geladenen Module

insmod

Laden von Modulen

rmmod

Entfernen von Modulen

netstat

Status der Netzwerkverbindungen

route

Routing

which 'Programmname'

Zeigt den Pfad des gesuchten Programms an

nslookup

sucht den eingetragenen Nameserver

xlock

macht Bildschirm dicht

ps ax

Statusabfrage der laufenden Prozesse


alias

alias ll='ls -l'
alias f77=g77
unalias f77

Drucker und Drucken

/etc/printcap

Druckerwarteschlangen

/var/lib/apsfilter/bin/apsfilter

apsfilter (Druckerfilter)

lpq

Queue-Abfrage

a2ps -8 datei

druckt beliebige Texte schön vorformatiert auf PS-Drucker

lpr -Pbrothercolor test.ps Ausdrucken einer PS-Datei auf eine vordefinierte Warteschlange, die mit einem PS-fähigen Drucker verbunden ist

vi-editor

:q

quit

:q!

quit auf jeden Fall

:wq

write and quit

esc

Wechsel in den command-mode

i

Wechsel in den insert-mode

a

Wechsel in den append-mode

/

Beginn einer Suche nach regular expression

:1,$ s/Mist/Super/g

Ersetzt Mist durch Super in der gesamten Datei (Spalte 1 bis Ende)


find

find /opt -name "S10W100.DEM"

grep

-n

Ausgabe der Zeilennummer

grep Länge ./haupt.f -n

einfach

grep "Länge von" ./haupt.f -n

zusammengesetzte regexp

.

steht für irgendein Zeichen innerhalb der regexp

grep "Modell Nr ." ./haupt.f -n

mit Platzhalter

grep velox ./*.f -n

in mehreren Dateien


Vergleich von Dateien

diff datei1 datei2
diff -w -y datei1 datei2
Zeilenweise Unterschiede als Gegenüberstellung in 2 Spalten ohne Berücksichtigung von white space

Packen & Zippen

Sichern mit tar in Datei

Achtung! Probleme mit symbolischen Links. Diese werden u.U. von einer tar-Version gespeichert, von der nächsten nicht gelesen : "checksum error". Am besten vermeiden

dir1=/home/davo/modell
dir2=/home/davo/gmtscripts
tar -cvzf save_neu.tgz $dir1 $dir2
        c - create
        v - verbose
        z - zip
        f - Ausgabegerät (i.A. Datei

Restaurieren aus Datei

erster Schritt: entzippen
gunzip save_neu_tgz
zweiter Schritt: tar aufwickeln
tar -xvf save_neu.tar
        x - extract
in einem Schritt:
gunzip < datei.tar.gz | tar xvf -  
        

Wenn man die gezippte Version mit tar bearbeitet, kommt Murks raus tar erzeugt sämtliche Pfade in dem aktuellen Verzeichnis noch einmal. Wenn man nur einzelne Pfade restaurieren will, dann hängt man den Pfadnamen an den tar Befehl und zwar ohne den root-Strich, z.B.:

tar -xvf L280199.tar home/voelker/modell7/src/tcl
Lediglich Inhaltsverzeichnis der gezippten tar-Datei anzeigen:
tar tzf L280199.tgz

Symbolische Links

ln -s /usr/X11R6/bin/kde .xsession

stellt einen symbolischen Link auf die zuerst genannte Datei her - mit demNamen der zweiten (.xsession).


Tastenkürzel

strg+alt+del

shutdown -r "now"

strg+alt+backspace

shutdown xserver

alt+Funktionstaste

Umschalten zwischen den Konsolen

strg+alt+Funktionstaste

Umschalten zwischen kde-Konsole und Konsole


Laden von Modulen

rmmod /lib/modules/2.0.33/misc/lp.o

Entfernen des Druckertreibers lp.o

kill [Nummer für /usr/sb/lpd

Löschen der Druck-Prozesse

insmod /lib/modules/2.0.33/scsi/ppa.o

Installieren des Zip-Treibers

insmod /lib/modules/2.5.5/net/3c59x

Installieren der Netzwerkkarte


Mounten

Standardbefehl

mount -t [dateisystem] [Gerät] [Mountpoint]

alles, was in der /etc/fstab steht mounten:

mount -a		mounten aller in der /etc/fstab gelisteten Geräte
mount -l		listen der gemounteten Geräte
mount -t vfat /dev/sdc4 /zip                  mounten des zip-LW auf /zip
mount -t vfat /dev/fd0 /floppy                mounten von Disketten LW

Normalerweise kann nur der superuser Dateisysteme mounten. Wenn aber in der /etc/fstab die "user" -Option gesetzt wurde, dann kann jeder das Ding mounten. Mit folgender Zeile in der /etc/fstab

/dev/scd0 /cdrom iso9660 ro,user,noauto,unhide

kann jeder das iso9660 - Dateisystem auf seinem cdrom-LW starten mit

mount /cdrom

mounten einer Platte auf einem anderen Rechner

mount -t xfs 160.45.86.25:/dev/dsk/dks1d7s0 /dummy 

Remounten einer Festplatte als rw

mount -n -o remount,rw /

Starten von Befehlen zu einem bestimmten Zeitpunkt: crontab

crontab überwacht eine Tabelle von Befehlen (eben die crontab), die zu einem bestimmten Zeitpunkt oder in bestimmten Intervallen automatisch gestartet werden sollen. Die Tabelle steht in der Datei /var/spool/cron/crontabs. Der user muss in /usr/lib/cron/cron.allow eingetragen sein, oder zumindest nicht in der /usr/lib/cron/cron.deny auftauchen.

crontab -l		Listen der crontab
crontab -e		Editieren der crontab mit vi
crontab datei	Hochladen der Datei als crontabelle

Die Einträge der crontab sind folgendermassen aufgebaut:
Minutenangabe Stundenangabe Tag_im_Monat Monat Tag_der_Woche Kommando

5 12 * * 3 /home/dvoelk/chile/supercommands/weekly_quakes.gmt

Würde also bedeuten: Jeden Mittwoch um 12:05.
Achtung: cron hat seine eigene default-Einstellungen. Wenn die aufgerufenen Befehle bestimmte Einstellungen (Pfade etc.) benötigt, die in ./profile oder ./bashrc eingestellten Werte des users benötigt, muss die shell explizit aufgerufen werden:

5 12 * * 3 bash --login /home/dvoelk/chile/supercommands/weekly_quakes.gmt

Einbinden einer NTFS-Partition

dazu muss in der /etc/fstab folgende Zeile eingetragen werden

/dev/hda1   /nt   ntfs  ro,noauto   0   0

danach läßt sich die Partition zum Lesezugriff mounten

mount /nt

und ist danach unter /nt eingebunden

wenn die Partition hda1 (erste Partition der IDE-Platte) ist (läßt sich unter Yast abfragen) ro=readonly erlaubt nur lesenden Zugriff, was aber von SuSe empfohlen wird, da der Zugriff noch im Experimentierstadium ist.


Aufruf eines Programms in einem neuen x-Terminal

exec -ls -e /modell.exe

Telnet

telnet -l [user] [maschine]

Um Programme die auf der anderen Maschine gestartet werden, auf dem eigenen X-Window laufen zu lassen, sind 3 Dinge notwendig.

  1. dem fremden Rechner muss erlaubt werden den eigenen display zu benutzen(Eingabe in der home-shell):

    xhost +bgeolm20.kfunigraz.ac.at
  2. Einloggen auf der remote-Maschine:

    telnet -l dvoelker bgeolm20.kfunigraz.ac.at
  3. die auf dem Fremdrechner laufende shell muss wissen wohin gesendet werden soll (Eingabe in der remote-shell):

    export DISPLAY=led12.gpi.geowissenschaften.uni-tuebingen.de:0.0

Programme im Hintergrund und der nice-Faktor

Wenn die Programme im Hintergrund laufen, ist die shell weiter eingabefähig - das Amperesand machts

xemacs &

die Priorität läßt sich durch den nice-Faktor bestimmen. Ein hoher nice-Faktor bedeutet eine niedrige Priorität, die geringste Priorität ist 19

renice +19 -p [pid]
setzt die Priorität herunter (den nice-Wert um 16 rauf)

Man kann den nice-Faktor eines bestimmten Prozesses von vorneherein angeben:

nice -n 19 mbedit 
startet den Befehl mbedit mit einer niedrigen Priorität von 19



Shellprogrammierung bash

echo $PATH

Ausgabe der Umgebungsvariablen

set

Ausgabe aller Umgebungsvariablen

GMTHOME=/opt/GMT3.3.2

Setzen einer Umgebungsvariablen

PATH=$PATH:$GMTHOME/bin

Additives Setzen einer Umgebungsvariablen

echo

Ausgabe

read

Eingabe

export

exportiert Variable, die in einer Shellskript definiert wurdenin die Basishell (und jede spätere Subshell)

let a=b*c

einfache Operationen mit Variablen (nur Integer)

$

kennzeichnet Variablen

#

kennzeichnet Kommentar

;

trennt Befehle (wie Zeilenende


Einrichten einer cshell

~/.cshrc

wird jedesmal gelesen, wenn neue cshell aufgerufen wird

~/.login

wird nach ~/.cshrc abgearbeitet

~/.profile

loginscript fuer sh user

set path (usr/freeware)

Setzen einer Umgebungsvariablen (additiv?)


Datumsangaben in Variablen schreiben (z.B. für tar)

tag=$(date +'%d')
monat=$(date +'%m')
jahr=$(date +'%y')

dateiname=../sedmodell_$tag$monat$jahr.tgz
echo Schreibe Bachup-Datei $dateiname

tar -cvzf $dateiname $dir2
tag=$(date +'%d')
monat=$(date +'%m')
jahr=$(date +'%y')

dateiname=../sedmodell_$tag$monat$jahr.tgz
echo Schreibe Bachup-Datei $dateiname

tar -cvzf $dateiname $dir2

Zeit-Synchronisation mit anderem Rechner oder Zeit-Server

Das Network Time Protocol (ntp) ist für die Synchronisation der lokalen Uhr mit anderen Rechnern zuständig. Dokumentation: http://ntp.isc.org/bin/view/Main/WebHome. Die Datei /etc/ntp.conf enthält eine Liste von servern, deren Zeitangaben berücksichtigt werden, unterstellt jedoch eine ständige Internetverbindung.


Abfrage der Belegung von ports

netstat -all

netstat -na | grep -i listen

netstat -na | grep -i established
bzw
netstat -na | grep -i verbunden

Abfrage der gestarteten Prozesse

Gestartete Prozesse verfolgen:

ps ax

Häufige Konstruktionen bei der Shellprogrammierung

Zusammenfügen von Textdateien mit paste

paste test1.txt text2.txt > text3.txt

Konstruktion mit <<end<< um Text in einen Befehl einzuspeisen

Der Text bis zu END wird in denBefehl (z.B. psxy) eingespeist, die Ausgabe erfolgt in die Variable ps (in diesem Fall mit append)

psxy ... <<END>> $ps
12.0 15. 0. DSDP218
END

Der Text 0.5 0.5 scale wird an die Datei(oder Variable ps drangehängt

cat  -v <<END>> $ps
0.5  0.5 scale
END

Suchen nach Zeichen, Ausschneiden von Werten, Umlenken in Variablen

grep $datei1 'Werte' | cut -d";" -f3 > dummy
read xmax < dummytest

Kombinieren von Variablen

additiv: klebt die Variablen zusammen

neu="$alt1$alt2"

subtraktiv: Schneidet den Rest (.for) ab.

neu=${alt%.for}

Datum und Zeitangaben verwenden

tag=$(date +'%d')
monat=$(date +'%m')
jahr=$(date +'%y')
dateiname=./backup_$tag$monat$jahr.tgz
echo Schreibe Bachup-Datei $dateiname
tar -cvzf $dateiname $dir1

Kommandosubstitution (Einfügen einer Befehleingabe in eine Variable)

Datum=$(date +'%d')
Pfad=$(pwd)
allg. Variable=(Befehl)

strings suchen und ersetzen mit awk

        {
        gsub(/#define equi/,"$SET(EQUI=.TRUE.)")
        gsub(/#if defined.equi./,"$IF(EQUI=.TRUE.)")
        print $0}' ./src/f77/sedcalc1.F > ./src/f77_HPUX/sedcalc1.F

Erklärung: öffnet Datei 1 und schreibt in Datei2mit gsub wird zeilenweise nach dem in // stehenden string gesucht. Achtung:Klammern und & im Suchstring werden nicht als solche erkannt. Um auch Klammern im Suchbegriff zu verwenden, kann man sie durch einen . (steht für beliebiges Zeichen) ersetzen (wie hier im zweiten gsub-Aufruf).


Strings im mehreren Dateien mit suchen und ersetzen

for datei [in haupt.f sedcalc1.f press.f]
do
        rumpf=${datei%f}
         '        {
                gsub(/#define equi/,"$SET(EQUI=.TRUE.)")
                gsub(/#if defined.equi./,"$IF(EQUI=.TRUE.)")
                print $0}' $datei > $rumpf.F
done

Erklärung: die Variable datei wird nacheinander mit dem Inhalt der Liste [in ...] gefüllt, für jeden der Listeneinträge wird die Schleife abgearbeitet. In diesem Fall wird die Dateiendung durch ein großes F ersetzt.


Spalten rausschreiben, Header weglassen

awk 'NR > 11 {print $1, $5}' porenfluiddruck.prn > Ph.prn

Erklärung: Wenn die Bedingung Zeilennummer > 11 erfüllt ist, wird die erste und fünfte Spalte extrahiert.


Spalten neuberechnen & herausschreiben

awk '{print $1*1000, $2}' Pfb.dat > pfb_m.dat

Zeilen nach Kriterien <>= aus datei herausfiltern

awk '$1 < 0 {print $1}' test.xy > clipped.xy

Spalten trennen, die durch andere Feldseperatoren als das Leerzeichen getrennt sind

awk -F: '{print $4, $5, $24}' uf.txt > features.xyz

Erklärung: -F definiert den Field Seperator (hier :) der anstelle des Default (Leerzeichen) genommen wird. Wenn es der horizontal tab (ht) ist, dann funktioniert es mit dem HEX-Code \x09 awk -F"\x09" '{print $4, $5, $24}' "$namepath"/UF.txt > undersea_names.txt


Zeilen ausschreiben wenn in Spalte ein bestimmter Text (nicht) steht

awk '$24~/Seamount/ {print $4, $5}' UF.txt > UF_Seamount.txt

Erklärung: Wenn in Spalte 24 der Text Seamount enthalten ist, dann werden Zeile 4,5 ausgeschrieben.

awk '$4~!/ERROR/ {print $4, $5}' UF.txt > UF_Seamount.txt

Erklärung: Wenn in Spalte 4 der Text ERROR enthalten ist, dann werden Zeile 4,5 nicht ausgeschrieben.


Befehle als Schleife wiederholen lassen

COPYDIR=~/gmt01
for USERNUMMER in 02 03 04 05 06 07
do
        TARGET=~/gmt"$USERNUMMER"
        cp $COPYDIR/*.gmt $TARGET
        echo $TARGET abgearbeitet
done

Erklärung: Innerhalb der do done -Schleife wird die Variable nacheinander durch den Inhalt der Liste erstetzt.


Mit awk Spalten nach Suchmustern durchsuchen und Aktion auslösen

 awk '$3~/12:00:../||$3~/13:00:../  {print $5, $4, $3}' 20011103.dat > out.dat

Erklärung: Wenn in Spalte 3 der Begriff 12:00:.. (Punkte sind Stellvertreter für ein beliebiges Zeichen) oder (||) 13:00:.. gefunden wird, dann werden die anderen Spalten ausgeschrieben.


Header löschen mit sed

sed -e '1,3d' hypocenter_comte2004.xyz | more

Erklärung: sed liest die Datei ein und löscht (d) Zeilen 1 bis 3 (1,3d). Das Ergebnis kann in einen Befehl oder Datei gelenkt werden.


Zeilen löschen (ausdünnen) mit sed

sed -e '1~2d' dummy2 > dummy3

Erklärung:sed löscht (d) jede zweite Zeile, beginnend mit Zeile 1 ('1~2d').


Splitten von Feldern in awk mit split

cat dummy |awk '{n=split($3,zeit,".")
		print $4,$5,$2,zeit[1]
	}
'>dummy2

Erklärung:cat lenkt den Inhalt der Datei dummy in awk. awk trennt die Spalte 3 (zeit) in einen Vektor auf, das Trennzeichen ist ein Punkt. Es existieren nun zeit[1] und zeit[2]. gedruckt wird nun statt der ganzen Spalte $3 nur noch der erste Teil.


geschachtelte ifs in awk

awk 'NR > 4 {
	if ($12>1){
		if ($14>0){
			if ($7=="CHILE"){print $12, $14}
			}
		}
	}' tsunamievents_chile.csv

Erklärung:Wenn die Zeilenzahl größer 4 ist, ausserdem Spalte 12>1 und Spalte 14>0, und Spalte 7 das Wort Chile enthält, dann werden die zwei Zeilen ausgedruck.
Alternativ in einer Zeile:

awk 'NR>4&&$12>1&&$14>0&&$7=="CHILE"{print $12, $14}' tsunamievents_chile.csv

Zeichenfolgen ersetzen mit sed

sed -e 's/alfa/beta/' intext > outtext

Erklärung:sed sucht (s) den Begriff (alfa) und ersetzt durch string (beta)


Zeilen nach Mustern suchen und löschen mit sed

sed -e '/Shore*/d' chile_sonne0_coastline.xy 

Erklärung:sed sucht (//) das Muster (Shore*) und löscht die entsprechende Zeile (d)


Löschen von Leerzeilen mit sed

sed -e '/^[ ]*$/d' AlteDatei > NeueDatei
Erklärung:sed sucht und löscht alle Leerzeilen der alten Datei


Tabulatoren durch Leerzeichen ersetzen mit expand

expand alte.datei > neue.datei
Erklärung:expand ersetzt alle Tabulatoren durch eine entsprechende Anzahl von Leerzeichen


Dateien suchen und löschen

find /home -name "dummy*.*" | awk '{print "rm", $1}' > deldummy
chmod +x deldummy
deldummy

Erklärung:find sucht alle Dateien mit dem Suchmuster dummy* im Verzeichnis /home (+Unterverzeichnisse), übergibt die Liste an awk, das an den Anfang jeder Zeile ein rm setzt und das ganze in die Datei deldummy schreibt. deldummy wird aktiviert und ausgeführt.

Ablaufentscheidung mit case

	case $BASE in
		chile_0) WEST=-76.5;EAST=-71.0;SOUTH=-32;NORTH=-29;WESN=-76.5/-71.0/-32/-29;;
		chile_1) WEST=-76.5;EAST=-71.0;SOUTH=-35;NORTH=-32;WESN=-76.5/-71.0/-35/-32;;
	esac

Erklärung:innerhalb von case esac wird eine Fallunterscheidung getroffen. Wenn die Variable einem Wert enstpricht, wird alles nach der ) , getrennt durch ; ausgeführt. das Ende der Bedingung markiert ;;


Befehlsausgabe in eine Variable leiten

FIRST=$(sed -n 2p neic_quakes.d | awk -F, '{printf "%s %s\n", $1, $2}')
TAG=$(date +'%d')

Erklärung:Die Ausgabe der Befehle, die innerhalb der $() stehen werden in die Variable geschrieben


Rückgabewerte zur Ablaufsteuerung verwenden

cd /opt/nvs
if test "$?" = 0
then
	echo 'Verzeichnis gefunden' 
else
	echo 'Verzeichnis nicht existent'
fi

Erklärung:Wenn der letzte Befehl (in diesem Fall cd) erfolgreich war, schreibt er den Rückgabewert 0 in die Variable $?, ansonsten - je nach auftretendem Fehler - einen anderen Rückgabewert. Mit test kann dieser Wert abgefragt und zur weiteren Ablaufsteuerung verwendet werden.
Zweites Beispiel:

# erster check: sda1 bereits gemountet? Taucht sda1 in der Ausgabe des Befehls mount auf?
mount > mountlist
grep sda1 mountlist
if test "$?" = 0
then
	echo $?
	echo 'sda1 ist bereits gemountet' 
else
	echo $?
	echo 'ist noch nicht gemountet, versuche zu mounten'
	mount /dev/sda1
	if test "$?" = 0
	then
		echo $?
		echo 'mount erfolgreich' 
	else
		echo $?
		echo 'mount fehlgeschlagen'
	fi
fi

Erklärung:Hier wird getestet, ob ein Gerät bereits gemountet ist, d.h., ob grep das Gerät in der Liste der gemounteten Geräte findet. Wenn nicht, wird ein Versuch gestartet, zu mounten.


Komplexere Berechnungen mit Tabellenspalten

gmtmath dummy.tab -C1 LOG2 = dummy2.tab

Erklärung:Mathematische Operation (log2) an Spalte 2 (-C1, Zählung beginnt mit -C0).


Fragen zu Linux (persönliche FaQs)


Wie kann man beeinflussen, mit welchen Rechten eine Datei zur Welt kommt

daß z.B. Dateien mit Endung .gmt für den owner executable sind?

Prinzipiell geht für den Zweck der Befehl umask. Damit lassen sich die Rechte an neuen Dateien beschränken. Da aber neue Daten normalerweise mit rw_rw_rw_ zur Welt kommen, geht der Befehl für diesen Zweck nicht (nur für zusätzliche Einschränkungen). Daher: chmod o+x


Kann man Dateien auf Text durchsuchen lassen und diesen automatisch durch einen anderen Text austauschen ?

Nicht in einem Schritt: grep und awk geben ihr Suchergebnis (und Ersetzergebnis)immer erst in neue Dateien aus (die alten können dann freilich gelöscht werden) * Eine Möglichkeit, ungenehme Zeilen verschwinden zu lassen ist die grep -invert-Fuktion z.B. grep -v -i "IF DEFINED" Sedcalc1.for > Sedcalc.f. Der Befehl läßt alle Zeilen, die die Zeichenkette enthalten verschwinden. -v =InVertieren -i = Ignorieren Groß/Kleinschreibung

Eine Möglichkeit auszutauschen geht mit der awk-Funktion gsub z.B.

awk '{gsub(/end/,"END"); print $0}' Sedcalc1.for > Sedcalc.f

Jede Zeile wird eingelesen (leeres Muster), der Suchbegriff end wird durch END ersetzt, die Zeile wird ausgegeben und in eine zweite Datei umgelenkt. Bei dieser Möglichkeit treten Probleme auf, wenn das Suchmuster oder Ersetzungsmuster Zeichen enthält, die von awk als Steuerzeichen verwendet werden wie z.B. () $ Das Suchmuster wird von der Routine gsub wie vom Befehl grep interpretiert. Innerhalb eines Shellscripts wird dabei versucht werden das Zeichen $ durch eine Variable zu ersetzen. Eine Möglichkeit besteht darin, schwierige Zeichen im Suchmuster durch einen . zu ersetzen (. steht für jedes Zeichen). Das Ersetzungsmuster wird wie Text interpretiert, d.h. hier können $'s stehen.


Wie rechne ich in einem Shellscript mit REAL-Zahlen?

eine Möglichkeit besteht darin einen awk-Befehl einzubauen. Die unten gezeigte Sequenz liest die 2 Spalten einer Datei zeilenweise ein, die Zahlen werden in die Variablen $1 und $2 gesteckt. Mit diesen Zahlen kann gerechnet werden, das Ergebnis wird mit dem Befehl printf formatiert in eine neue Datei ausgegeben.

input=brittle.xy
output=brittle_gmt.xy
awk '{  prop=0.05
        mp=$2/2+$1
        du=$2*prop
        printf("%10.4f %10.4f %10.4f\n", mp, 0, du)
}' $input > $output

Was ist los, wenn nach einer Neu-Installation das Netzwerk nicht kontaktiert werden kann ?

Ein Ping auf den eigenen Rechner ist erfolgreich, ein ping auf einen anderen Rechner ergibt 100% packet loss, jedoch nicht die Meldung "network unreachable".

  1. Alle Rechneradressen korrekt angegeben ?

  2. Netmask 255.255.255.0 (route.conf) ?

  3. Gateway-Adresse korrekt ?

  4. Ethernet-Karte richtig konfiguriert (die Optionen des Treibers sind in /usr/src/linuxDocumentation/networking/vortex.txt beschrieben -es sollten dieselben wie unter NT sein - und müssen in /etc/conf.modules eingetragen werden.)

  5. Stehen in der Datei /etc/conf.modules mehrere options-Zeilen zum Treiber, die einander widersprechen ?

Letzter Punkt war der entscheidende !


Problem: ein user kann zwar lesend auf die DOS-Partitionen zugreifen, aber nicht auf sie schreiben

(z.B. auf das ZIP-LW, um ein tar-Backup abzulegen). user root kann das, aber er kann keinem sonst das Recht dazu verleihen. Weder direkt (chmod o+w /dev/sdb4), noch durch Gruppenzuweisung (chown davo /dev/sdb4). Liegt das an der Eigenschaft von DOS-Partitionen, dass ihre Rechte und Besitzverhältnisse unveränderbar sind, oder liegt ein Denkfehler vor?

Die Rechte werden beim mounten festgelegt. Am besten bereits in der /etc/fstab. die mount-Option uid= und gid= legen owner und gruppe fest. Siehe man mount