/usr/share/doc/HOWTO/de-html/DE-DOS-nach-Linux-HOWTO-2.html is in doc-linux-de 2003.10-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.65">
<TITLE>Von DOS nach Linux HOWTO : Dateien und Programme</TITLE>
<LINK HREF="DE-DOS-nach-Linux-HOWTO-3.html" REL=next>
<LINK HREF="DE-DOS-nach-Linux-HOWTO-1.html" REL=previous>
<LINK HREF="DE-DOS-nach-Linux-HOWTO.html#toc2" REL=contents>
</HEAD>
<BODY>
<A HREF="DE-DOS-nach-Linux-HOWTO-3.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-DOS-nach-Linux-HOWTO-1.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-DOS-nach-Linux-HOWTO.html#toc2"><IMG SRC="toc.png" ALT="Inhalt"></A>
<HR>
<H2><A NAME="s2">2.</A> <A HREF="DE-DOS-nach-Linux-HOWTO.html#toc2">Dateien und Programme</A></H2>
<H2><A NAME="ss2.1">2.1</A> <A HREF="DE-DOS-nach-Linux-HOWTO.html#toc2.1">Dateien: Grundlegende Begriffe</A>
</H2>
<P>Die Struktur des Filesystems von Linux ist für den Benutzer nach außen hin
der von DOS recht ähnlich. Mit Struktur des Filesystems ist hier die
Anordnung von Verzeichnissen und der darin enthaltenen Dateien gemeint.
Die Namen für Verzeichnisse und Dateien gehorchen bestimmten Regeln,
Dateien werden in Verzeichnissen abgelegt, es gibt ausführbare Dateien und
diese haben oft auch wie unter DOS Kommandozeilenparameter. Darüber hinaus
kann man auch Platzhalter, Umlenkung und Piping verwenden. Es gibt jedoch
gegenüber DOS ein paar Unterschiede:</P>
<P>Unter DOS sind die Dateinamen in der 8.3-Form, d.h. wie etwa
<CODE>NICHGENG.TXT</CODE>. Unter Linux sind die Regeln für Dateinamen bei
Benutzung des UMSDOS- oder EXT2-Filesystems wesentlich liberaler,
vergleichbar etwa mit Win95. Es können bis zu 255 Zeichen verwandt
werden, und der Punkt kann beliebig oft auftreten. Ein Beispiel für einen
Dateinamen unter Linux ist z.B. <CODE>Das_ist.ein.SEHR_langer.dateiname</CODE>.
Man beachte, daß hier sowohl große als auch kleine Buchstaben verwandt
werden, denn es wird auch hier zwischen großen und kleinen Buchstaben im
Gegensatz zu DOS unterschieden. Das heißt, <CODE>FILENAME.tar.gz</CODE> und
<CODE>filename.tar.gz</CODE> sind zwei unterschiedliche Dateien. So ist <CODE>ls</CODE> ein
Kommando, <CODE>LS</CODE> dagegen wird höchst wahrscheinlich nur eine Fehlermeldung
bringen.</P>
<P>Windows 95 Nutzer werden wahrscheinlich Leerzeichen innerhalb der
Dateinamen verwenden wollen. Wenn ein Name solche enthält (was nicht sehr
empfehlenswert ist), muß er immer wenn er verwendet wird in
Anführungszeichen eingeschlossen werden. Beispielsweise:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ # das folgende Kommando legt ein Verzeichnis namens "Meine alten Dateien"
$ mkdir "Meine alten Dateien"
$ ls
Meine alten Dateien bin tmp
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Einige Zeichen können zwar verwendet werden, sollten es aber nicht, wie
zum Beispiel <CODE>!*$&</CODE>. Ich will nicht erklären wie man das
macht, denn es ist wirklich keine gute Idee. Diese Zeichen haben alle eine
spezielle Bedeutung für die Shell, und wenn sie in Dateinamen auftauchen,
kann das unerwartete Ergebnisse zeitigen wenn man nicht genau aufpaßt.</P>
<P>Für Programme gibt es keine zwangsweisen Erweiterungen wie .exe .com oder
.bat für Batchdateien. Ausführbare Programme werden beim Auflisten mit dem
Kommando <CODE>ls -F</CODE> mit einem Sternchen '<CODE>*</CODE>' am Ende des Namens
versehen, zum Beispiel:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ ls -F
Brief_an_Joe cindy.jpg cjpg* Ein_Verzeichnis/ mein_1._script* alt~
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Hier sind die Dateien <CODE>cjpg</CODE> und <CODE>mein_1._script</CODE> ausführbar, d.h.
Programme. Man beachte, daß der Stern <EM>nicht</EM> Teil der Dateinamen ist,
sondern nur zur Kennzeichnung als ausführbar beim Auflisten dient. Unter
DOS enden Backup-Dateien üblicherweise auf .BAK, während sie unter Linux
im allgemeinen mit einer Tilde '<CODE>~</CODE>' enden. Wenn Linux
entsprechend konfiguriert ist, können Auflistungen von Verzeichnissen auch
farbig gekennzeichnet werden. Namen von Programmen könnten z.B. rot
ausgegeben werden, Verzeichnisse blau und Bilder lila. Dateien, deren Name
mit einem Punkt beginnt, werden als versteckte Dateien behandelt. Sie
werden bei einem normalen Auflisten mit <CODE>ls</CODE> nicht angezeigt. Die Datei
<CODE>.Ich.bin.eine.versteckte.Datei</CODE> wird also normalerweise bei einer
Auflistung ignoriert, erst ein <CODE>ls -a</CODE> bringt sie zum Vorschein.</P>
<P>Optionen und Schalter werden unter DOS als <CODE>/schalter</CODE> angegeben,
unter Linux mit <CODE>-schalter</CODE> oder <CODE>--schalter</CODE>. Beispiel: <CODE>dir /s</CODE>
wird zu <CODE>ls -R</CODE>. Man beachte, daß viele DOS-Programme Schalter nach
UNIX-Art verwenden, so z.B. <CODE>PKZIP</CODE> oder <CODE>ARJ</CODE>.</P>
<P>Wer will, kann jetzt mit dem Abschnitt
<A HREF="#Files">Übertragen von Kommandos von DOS nach Linux</A> weitermachen, aber es ist nützlich, sich
vorher noch kurz ein paar Dinge anzuschauen, die es nicht in DOS oder
Windows gibt.</P>
<H2><A NAME="ss2.2">2.2</A> <A HREF="DE-DOS-nach-Linux-HOWTO.html#toc2.2">Links</A>
</H2>
<P>UNIX hat noch einen weiteren Dateityp, der bei DOS nicht existiert. Es ist
der Link. Ein Link ist eigentlich keine richtige Datei, sondern nur eine
Art Verweis auf eine andere, bereits existierende Datei oder Verzeichnis.
Es gibt zwei Typen von Links, den Hardlink und den symbolischen Link. Es
soll hier nicht weiter auf den Unterschied zwischen beiden eingegangen
werden, da sie sich äußerlich für den Nutzer kaum unterscheiden.
Heutzutage werden üblicherweise vorwiegend symbolische Links eingesetzt, da
sie etwas flexibler sind. Am ehesten vergleichbar sind symbolische Links
mit den Win95 Shortcuts. Beispiele für symbolische Links sind z.B. das
Verzeichnis <CODE>/usr/X11</CODE> welches ein Link auf <CODE>/usr/X11R6</CODE> ist
und <CODE>/dev/modem</CODE>, welches entweder auf <CODE>/dev/cua0</CODE> oder
<CODE>/dev/cua1</CODE> zeigt.</P>
<P>Um einen symbolischen Link anzulegen gibt man ein:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ ln -s <Datei_oder_Verzeichnis> <Linkname>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Beispiele:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ ln -s /usr/doc/g77/DOC g77manual.txt
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Jetzt kann man sich auf <CODE>g77manual.txt</CODE> beziehen anstelle von
<CODE>/usr/doc/g77/DOC</CODE>.
Links werden bei der Auflistung eines Verzeichnisses wie folgt angezeigt:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ ls -F
g77manual.txt@
$ ls -l
(verschiedene Angaben zur Datei ...) g77manual.txt -> /usr/doc/g77/DOC
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H2><A NAME="Permissions"></A> <A NAME="ss2.3">2.3</A> <A HREF="DE-DOS-nach-Linux-HOWTO.html#toc2.3">Rechte und Eigentümer </A>
</H2>
<P>Dos-Dateien haben folgende Attribute: A (archivieren), H (versteckt), R (nur
lesbar) und S (System). Nur H und R sind unter Linux sinnvoll: H sind
Dateien die mit einem Punkt anfangen, und R wird später besprochen.</P>
<P>Unter UNIX besitzt jede Datei <EM>Rechte</EM> und einen Eigentümer, der wiederum
zu einer <EM>Gruppe</EM> gehört. Hier ein Beispiel:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Das erste Feld enthält die Rechte der Datei <CODE>/bin/ls</CODE>, die <CODE>root</CODE>
gehört, sowie der Gruppe <CODE>bin</CODE>. Die Zeichenfolge <CODE>-rwxr-xr-x</CODE> bedeutet
von links nach rechts:</P>
<P><CODE>-</CODE> ist der Dateityp (- = normale Datei, d = Verzeichnis, l = Link,
usw.); <CODE>rwx</CODE> sind die Rechte für den Eigentümer der Datei
(lesen,schreiben,ausführen); <CODE>r-x</CODE> sind die Rechte für die Gruppe des
Eigentümers (lesen,ausführen) - auf das Prinzip von Gruppen soll hier nicht
weiter eingegangen werden, man kann als Anfänger auch sehr gut ohne das
auskommen ;-) - ; <CODE>r-x</CODE> sind die Rechte für den Rest der Nutzer
(lesen,ausführen). Für die Leute, bei denen Englisch nicht die zweite
Muttersprache ist, hier die englische Bedeutung der Kürzel: r - Read,
w - Write, x - eXecute, sowie beim Dateityp d für Directory.
Der Rest der Ausgabe soll hier nicht weiter behandelt
werden, wer Näheres wissen will kann in den einschlägigen Büchern
nachlesen (z.B. im Buch von Matt Welsh).</P>
<P>Im Falle unseres <CODE>/bin/ls</CODE> kann man also die Datei nicht verändern,
es sei denn, man ist <CODE>root</CODE>: alle anderen haben nicht die notwendigen
Schreibrechte. Das Kommando, um die Rechte einer Datei zu ändern, ist:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ chmod <werXrecht> <datei>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>wobei <EM>wer</EM> für den steht, dessen Rechte geändert werden, also entweder
<CODE>u</CODE> (user, der Eigentümer), <CODE>g</CODE> (group, die Gruppe), <CODE>o</CODE> (other,der
Rest) oder <CODE>a</CODE> (all, alle Nutzer), <EM>X</EM> ist entweder <CODE>+</CODE>, <CODE>-</CODE>
oder <CODE>=</CODE>, je nachdem, ob das Recht hinzugefügt oder weggenommen wird,
bzw. auf den angegebenen Wert gesetzt wird, und <EM>recht</EM> ist das Recht, was
geändert wird, also entweder <CODE>r</CODE> (read), <CODE>w</CODE> (write), oder <CODE>x</CODE>
(execute).</P>
<P>Beispiele:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ chmod u+x file
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>setzt die Ausführungsrechte für den Eigentümer.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ chmod go-wx file
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>nimmt das Schreibrecht und das Ausführungsrecht für alle außer den
Eigentümer weg.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ chmod ugo+rwx file
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>setzt für alle Schreib-, Lese- und Ausführungsrechte. Man kann hier auch
die Folge <EM>ugo</EM> einfach durch <EM>a</EM> ersetzen.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ chmod u+s file
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>dieses setzt das sogenannte (oben nicht erwähnte) <EM>setuid</EM> oder <EM>suid</EM>
Recht (meistens setuid-Bit genannt). Damit wird eine Datei, wenn sie
ausführbar ist, automatisch beim Aufruf mit den Rechten des
<EM>Eigentümers</EM> ausgeführt und nicht wie sonst üblich mit den Rechten des
Aufrufers. Gehört die Datei z.B. <CODE>root</CODE>, wird sie mit <CODE>root</CODE>-Rechten
ausgeführt und hat somit vollen Zugriff auf das System (und kann bei einem
Fehler auch entsprechenden Schaden anrichten). Also Vorsicht mit dem
Setzen des suid-Bits. </P>
<P>Ein kürzerer Weg zur Angabe von Rechten ist die Angabe von Zahlen:
<CODE>rwxr-xr-x</CODE> kann z.B. als 755 angegeben werden. Dabei entspricht jeder
Buchstabe einem Bit: <CODE>---</CODE> ist 0, <CODE>--x</CODE> ist 1, <CODE>-w-</CODE> ist 2,
<CODE>-wx</CODE> ist 3... . Es ist zu Beginn etwas gewöhnungsbedürftig, aber nach
und nach bekommt man Routine mit diesen Werten.</P>
<P>Normalerweise darf nur der die Rechte einer Datei ändern, der auch ihr
Eigentümer ist. <CODE>Root</CODE> jedoch als sogenannter Superuser kann die Rechte
aller Dateien ändern. Zum Kommando <CODE>chmod</CODE> gibt es noch weiteres zu sagen,
das aber nicht in diesen Rahmen paßt. Also --- MSL.</P>
<H2><A NAME="Files"></A> <A NAME="ss2.4">2.4</A> <A HREF="DE-DOS-nach-Linux-HOWTO.html#toc2.4">Übertragen von Kommandos von DOS nach Linux </A>
</H2>
<P>Auf der linken Seite ist das DOS Kommando aufgeführt, auf der Rechten das
Linux-Pendent</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
COPY: cp
DEL: rm
MOVE: mv
REN: mv
TYPE: more, less, cat
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Umleitungs- und Pipingoperatoren: <CODE> < > >> |</CODE></P>
<P>Platzhalter: <CODE>* ?</CODE></P>
<P><CODE>nul: /dev/null</CODE></P>
<P><CODE>prn, lpt1: /dev/lp0 or /dev/lp1; lpr</CODE></P>
<P>Beispiele:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
DOS Linux
________________________________________________________________
C:\GUIDO>copy joe.txt joe.doc $ cp joe.txt joe.doc
C:\GUIDO>copy *.* total $ cat * > total
C:\GUIDO>copy fractals.doc prn $ lpr fractals.doc
C:\GUIDO>del temp $ rm temp
C:\GUIDO>del *.bak $ rm *~
C:\GUIDO>move paper.txt tmp\ $ mv paper.txt tmp/
C:\GUIDO>ren paper.txt paper.asc $ mv paper.txt paper.asc
C:\GUIDO>print letter.txt $ lpr letter.txt
C:\GUIDO>type letter.txt $ more letter.txt
C:\GUIDO>type letter.txt $ less letter.txt
C:\GUIDO>type letter.txt > nul $ cat letter.txt > /dev/null
nicht vorhanden $ more *.txt *.asc
nicht vorhanden $ cat section*.txt | less
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Bemerkungen:</P>
<P>Der * ist unter Linux intelligenter: * paßt auf alle Dateien, außer auf
die versteckten, *.* paßt nur auf solche Dateien, die ein '.' in der Mitte
oder am Ende haben, p*r paßt auf `peter' und `pfeiffer' (mit 3 f ;-), *c*
paßt auf `picken', `pack.txt', `mac' und `c' selbst.</P>
<P>Wenn man <CODE>more</CODE> benutzt, kann man mit <CODE>LEERTASTE</CODE> in der Datei
weiterblättern, mit 'q' oder CTRL-C beendet man es. <CODE>less</CODE> ist etwas
intuitiver und läßt einen mit den Cursortasten durch die Datei wandern.
Manchmal ist <CODE>more</CODE> einfach nur ein Link auf <CODE>less</CODE>, so daß sich
beide gleich verhalten.</P>
<P>Es gibt kein <CODE>UNDELETE</CODE>, also <EM>zweimal überlegen</EM> bevor man
etwas löscht.</P>
<P>Zusätzlich zu den DOS-üblichen <CODE>< > >></CODE> hat Linux noch
<CODE>2></CODE> um Fehlermeldungen umzulenken (<CODE>stderr</CODE>). Darüber hinaus
lenkt <CODE>2>&1</CODE> <CODE>stderr</CODE> nach <CODE>stdout</CODE> um und
<CODE>1>&2</CODE> <CODE>stdout</CODE> nach <CODE>stderr</CODE>.</P>
<P>Linux hat noch einen anderen Platzhalter: das <CODE>[]</CODE>. Verwendung:
<CODE>[abc]*</CODE> paßt z.B. auf alle Dateien, die auf a, b oder c beginnen;
<CODE>*[I-N,1,2,3]</CODE> paßt auf alle Dateien, die mit I, J, K, L, M, N, 1, 2
oder 3 enden.</P>
<P>Es gibt standardmäßig kein DOS-ähnliches <CODE>RENAME</CODE>; d.h. <CODE>mv</CODE> *.xxx
*.yyy funktioniert nicht. Es gibt jedoch ein Programm namens <CODE>mmv</CODE>
(Multiple MoVe), das Analoges leistet. Es ist in vielen Distributionen
bereits enthalten. Um die Shell daran zu hindern, den Platzhalter selber
zu interpretieren, muß der erste Dateiname in Anführungszeichen
eingeschlossen werden. Beispiel:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# mmv '*.xxx' #1.yyy
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>#1 wird hierbei durch den zum ersten (und in diesem Falle einzigen)
Platzhalter in <CODE>*.xxx</CODE> passenden String ersetzt. Es gibt noch ein paar
andere kleine Unterschiede zu <CODE>RENAME</CODE>, also hier wieder mal --- MSL.</P>
<P>Man benutze <CODE>cp -i</CODE> und <CODE>mv -i</CODE> , um gewarnt zu werden, wenn
eine Datei dadurch überschrieben würde;</P>
<H2><A NAME="ss2.5">2.5</A> <A HREF="DE-DOS-nach-Linux-HOWTO.html#toc2.5">Programme starten: Multitasking und Sessions</A>
</H2>
<P>Um ein Programm auszuführen, gibt man einfach den Namen wie unter DOS ein.
Falls das Verzeichnis (Abschnitt
<A HREF="DE-DOS-nach-Linux-HOWTO-3.html#Directories">Verzeichnisse</A>), in dem sich das Programm befindet, im Pfad
<CODE>PATH</CODE> (Abschnitt
<A HREF="DE-DOS-nach-Linux-HOWTO-6.html#System Initialization">Der Systemstart</A>) ist, wird das Programm starten. Unterschied zu DOS: ein
Programm, das sich im aktuellen Verzeichnis befindet, wird <EM>nicht</EM>
gefunden - es sei denn, das aktuelle Verzeichnis ist als '.' explizit im
Pfad enthalten. Wenn nicht, hilft ein <CODE>./programm</CODE>. Hinweis: das
aktuelle Verzeichnis ist unter UNIX/Linux oft am Ende des Pfades
eingetragen (aus Gründen der Systemsicherheit), d.h. es werden erst alle
anderen Verzeichnisse nach <CODE>programm</CODE> durchsucht und zum Schluß erst
das aktuelle Verzeichnis. Wenn man z.B. ein kleines Progrämmchen
geschrieben hat und es <CODE>test</CODE> nennt, wird, wenn man es mit <CODE>test</CODE>
aufruft und nicht mit <CODE>./test</CODE>, zuerst das UNIX-Kommando <CODE>test</CODE>
selbigen Namens gefunden (oder die Shell-interne Funktion, je nach Shell)
und ausgeführt und nicht das eigene Programm im aktuellen Verzeichnis. Das
führt oft zu langem Grübeln, bis man endlich merkt, daß das falsche
Programm aufgerufen wurde, denn <CODE>test</CODE> ohne Parameter gibt keinerlei
Meldungen o.ä. aus. Auf diesen "Trick" sind schon Generationen von
Einsteigern hereingefallen und werden wahrscheinlich auch noch weitere
Generationen hereinfallen.</P>
<P>Hier das Aussehen eines typischen Kommandos:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ kommando -s1 -s2 ... -sn par1 par2 ... parn < input > output
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>wobei <CODE>-s1</CODE>, ..., <CODE>-sn</CODE> die Programmschalter sind und
<CODE>par1</CODE>, ..., <CODE>parn</CODE> die Parameter. Der Rest sind die Umlenkungen,
d.h. das Programm erhält seine Eingaben aus der Datei <CODE>input</CODE> und
schreibt die Ausgaben in die Datei <CODE>output</CODE>. Es müssen natürlich nicht
immer alle Teile enthalten sein. Mehrere Kommandos hintereinander können so
eingegeben werden:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ kommando1 ; kommando2 ; ... ; kommandon
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Das ist alles, was man braucht, um ein Kommando aufzurufen. Es gibt jedoch
darüber hinaus Möglichkeiten, die Linux zusätzlich zu den von DOS bekannten
bietet. Einer der Gründe die für Linux sprechen ist es, daß es ein
Betriebsystem mit Multitasking ist, d.h. es kann mehrere Programme (ab
jetzt Prozesse genannt) gleichzeitig ausführen. Man kann einen Prozeß im
Hintergrund starten und mit einem anderen weiterarbeiten. Darüber hinaus
bietet Linux auch mehrere Sitzungen (Sessions) gleichzeitig an. Es ist so,
als ob man an mehreren Rechnern arbeiten würde.</P>
<P>Um zu den Sessions 1..6 zu wechseln:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ ALT-F1 ... ALT-F6
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Wenn man gerade unter X-Windows ist, benutzt man statt dessen CTRL-ALT-Fn.</P>
<P>Um eine neue Session zu starten ohne die aktuelle zu verlassen
(z.B. um als anderer Nutzer mit anderen Rechten weiterzuarbeiten):</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ su - <loginname>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Beispiel:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ su - root
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Dieses ist nützlich wenn man etwas erledigen muß, was normalerweise nur
<CODE>root</CODE> darf, z.B. eine Floppy mounten
(siehe
<A HREF="DE-DOS-nach-Linux-HOWTO-4.html#Floppies">Floppies, Harddisks, und Ähnliches</A>). </P>
<P>Um eine Session zu beenden:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ exit
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Wenn es noch angehaltene Jobs gibt (siehe unten), wird man gewarnt.</P>
<P>Um einen Prozeß im Vordergrund zu starten:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ progname [-schalter] [parameter] [< input] [> output]
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Um einen Prozeß im Hintergrund zu starten, fügt man ein
Kaufmanns-Und am Ende der Zeile hinzu: '<CODE>&</CODE>' </P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ progname [-schalter] [parameter] [< input] [> output] &
[1] 123
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Die Shell gibt dem Prozeß eine Jobnummer (z.B. <CODE>[1]</CODE>; siehe unten) und
eine PID (ProzessID), 123 in unserem Beispiel.</P>
<P>Um alle Prozesse auflisten zu lassen:
<BLOCKQUOTE><CODE>
<PRE>
$ ps -a
</PRE>
</CODE></BLOCKQUOTE>
Dieses gibt eine Liste aller gerade laufenden Prozesse aus. </P>
<P>Um einen Prozeß zu beenden:
<BLOCKQUOTE><CODE>
<PRE>
$ kill <PID>
</PRE>
</CODE></BLOCKQUOTE>
Dies ist nützlich, um einen Prozeß zu beenden, wenn man entweder
nicht weiß, wie man das Programm "vorschriftsmäßig" beendet, oder diese
eigentlich vorgesehene Methode nicht mehr funktioniert.
Manchmal kann ein Prozeß nur noch durch folgendes Kommando beendet
werden:
<BLOCKQUOTE><CODE>
<PRE>
$ kill -9 <PID>
</PRE>
</CODE></BLOCKQUOTE>
kill -9 beendet jeden Prozeß, da dieses Signal nicht vom
Prozeß abgefangen werden kann, d.h. der Prozeß wird vom Betriebssystem
zwangsweise rausgeschmissen.</P>
<P>Darüber hinaus erlaubt es die Shell, einen Prozeß zu stoppen oder
zeitweise anzuhalten, einen laufenden Prozeß in den Hintergrund zu
schicken, oder aus dem Hintergrund in den Vordergrund zu holen. In diesem
Zusammenhang werden die Prozesse <EM>Jobs</EM> genannt.</P>
<P>Um sich die laufenden Jobs der aktuellen Shell anzuschauen:
<BLOCKQUOTE><CODE>
<PRE>
$ jobs
</PRE>
</CODE></BLOCKQUOTE>
hierbei werden Jobs durch ihre Nummer und nicht durch ihre PID
gekennzeichnet.</P>
<P>Um einen im Vordergrund laufenden Prozeß anzuhalten (funktioniert
nicht immer, das Programm kann das explizit verhindern):
<BLOCKQUOTE><CODE>
<PRE>
$ CTRL-C
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Um einen im Vordergrund laufenden Prozeß zeitweise anzuhalten
(dito):
<BLOCKQUOTE><CODE>
<PRE>
$ CTRL-Z
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Um einen vorübergehend angehaltenen Prozeß in den Hintergrund zu
schicken (dadurch wird er zu einem Job):
<BLOCKQUOTE><CODE>
<PRE>
$ bg <job>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Um einen Job in den Vordergrund zu bringen:
<BLOCKQUOTE><CODE>
<PRE>
$ fg <job>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Um einen Job zu beenden:
<BLOCKQUOTE><CODE>
<PRE>
$ kill <%job>
</PRE>
</CODE></BLOCKQUOTE>
wobei <job> 1, 2, 3, ... sein kann. Mit diesen Kommandos kann man
Disketten formatieren, Archive komprimieren, Programme kompilieren,
Berechnungen ausführen usw. und trotzdem noch einen benutzbaren Prompt
haben. Man versuche das einmal mit DOS! Windows kennt zwar auch
Multitasking, jedoch ist das System meistens mit einem Programm bereits so
ausgelastet, daß es für ein sinnvolles Arbeiten mit einem weiteren kaum noch
reicht.</P>
<H2><A NAME="ss2.6">2.6</A> <A HREF="DE-DOS-nach-Linux-HOWTO.html#toc2.6">Programme via Netz auf anderen Rechnern ausführen</A>
</H2>
<P>Um ein Programm auf einem anderen Rechner auszuführen, dessen Adresse z.B.
<CODE>remote.bigone.edu</CODE> ist, gibt man ein:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ telnet remote.bigone.edu
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>nachdem man eingeloggt ist, kann man sein gewünschtes Programm starten.
Natürlich muß man einen Account (Zugangsberechtigung) auf dieser Maschine
haben. Wenn man X-Windows benutzt, kann man sogar ein X-Programm auf dem
anderen Rechner starten und sich die Ausgabe auf den eigenen Rechner
umlenken. Wenn <CODE>remote.bigone.edu</CODE> der entfernte Rechner ist und
<CODE>local.linux.box.de</CODE> der eigene Linuxrechner, muß man folgendes
machen, um ein Programm auf <CODE>remote.bigone.edu</CODE> zu starten und es von
<CODE>local.linux.box.de</CODE> aus zu bedienen:</P>
<P>
<UL>
<LI> X11 auf <CODE>local.linux.box.de</CODE> starten, ebenso ein xterm oder
Äquivalentes. Dort gibt man ein:
<BLOCKQUOTE><CODE>
<PRE>
$ xhost +remote.bigone.edu
$ telnet remote.bigone.edu
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> nach dem einloggen auf dem entfernten Rechner:
<BLOCKQUOTE><CODE>
<PRE>
remote:$ DISPLAY=local.linux.box.de:0.0
remote:$ progname &
</PRE>
</CODE></BLOCKQUOTE>
(anstelle von <CODE>DISPLAY...</CODE>, muß man evtl. <CODE>setenv DISPLAY local.linux.box.de:0.0</CODE> eingeben. Das hängt von der Shell auf dem
entfernten Rechner ab.)
</LI>
</UL>
</P>
<P>Und siehe da! <CODE>progname</CODE> startet jetzt auf <CODE>remote.bigone.edu</CODE> und
wird auf dem eigenen lokalen Rechner angezeigt. Man sollte jedoch
vorsichtig sein beim Versuch, dies über eine langsame Modemleitung o.ä. zu
machen. Bei so geringer Transferrate dürfte ein sinnvolles Arbeiten kaum
möglich sein. Dafür gibt es eine spezielle Abart des X Windows, das
Low-Bandwidth X, das hier jedoch nicht näher besprochen werden soll.</P>
<HR>
<A HREF="DE-DOS-nach-Linux-HOWTO-3.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-DOS-nach-Linux-HOWTO-1.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-DOS-nach-Linux-HOWTO.html#toc2"><IMG SRC="toc.png" ALT="Inhalt"></A>
</BODY>
</HTML>
|