Linux Grundlagen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(52 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=Einführung=
+
*[[Thomas Will]]
==Geschichte Unix==
 
 
*[[Geschichte Unix]]
 
*[[Geschichte Unix]]
==Distributionen==
+
*[[Opensource vs. Freeware vs. Shareware]]
 
*[[Distributionen]]
 
*[[Distributionen]]
==Bücher==
+
*[[Wo läuft denn überall Linux?]]
*[[Linux Bücher]]
 
==Betriebssystem==
 
 
*[[Betriebsystem]]
 
*[[Betriebsystem]]
 
+
*[[Was ist ein Kernel?]]
==Die Installation im Überblick==
 
 
*[[Die Installation im Überblick]]
 
*[[Die Installation im Überblick]]
 
+
*[[Erste Schritte (grafisch)]]
==Erste Schritte==
+
*[[Erste Schritte (terminal)]]
===Anmelden===
 
Sie können sich nun mit dem Usernamen und dem Passwort, das sie bei der Installation angelegt haben anmelden!
 
[[Image:benutzer.jpg]]
 
 
 
[[Image:passwd.jpg]]
 
 
 
===Terminal öffnen===
 
 
 
Ein Terminal öffnen Sie über das Startmenü:
 
 
 
[[Image:Terminalde.jpg]]
 
 
 
Das geöffnete Terminal sieht dann folgendermaßen aus:
 
 
 
[[Image:Terminalde2.jpg]]
 
 
 
===Sudo===
 
Rootrechte erlangen sie über den "Sudo"-Befehl
 
 
''Den nächsten Befehl als root ausführen''
 
xinux@zero:~$ sudo cat /etc/shadow
 
[sudo] password for xinux:
 
 
 
''Eine komplette Sitzung als root starten''
 
xinux@zero:~$ sudo -i
 
[sudo] password for xinux:
 
root@zero:~#
 
 
 
===Virtuelle Konsolen===
 
 
 
In die Virtuelle Konsole gelangen sie über "STRG+ALT+(F1-F6)".
 
Sie funktioniert wie ein ganz normales Terminal, und mit "ALT+F7"
 
gelangen sie wieder zurück auf die grafische Benutzeroberfläche
 
 
 
===Abmelden===
 
 
 
Abmelden können Sie sich wieder über das Startmenu unter:
 
 
 
[[Image:Logout.jpg]]
 
 
 
Fals sie nur einzelne Sitzungen in einem der Terminals oder
 
den Virtuellen Konsolen Abmelden wollen benutzen sie dazu den Befehl: "exit"
 
 
 
===Herunterfahren===
 
 
 
Das Herunterfahren funktioniert auf dem selben Weg.
 
 
 
Entweder sie Benutzen wieder das Startmenü und benutzen diesmal den "Ausschalten ..." Knopf,
 
 
 
Oder sie geben den äquivalenten "shutdown"-Befehl in einem Terminal bzw. der virtuellen Konsole ein.
 
 
 
Allerdings müssen sie dazu als Administrator angemeldet sein s. "Sudo"
 
 
 
Wenn Sie den "shutdown"-Befehl benutzen wollen muss hinter den Befehl
 
 
 
eine Zeitangabe in Minuten oder das wort "now" für sofortiges Ausschalten hinzugefügt werden:
 
 
 
xinux@zero:~$ sudo -i
 
root@zero:~# shutdown 60
 
 
Broadcast message from xinux@zero
 
        (/dev/pts/3) at 14:29 ...
 
 
The system is going down for maintenance in 60 minutes!
 
 
 
Sollten sie den Befehl widerrufen wollen dann drücken sie "STRG+C",
 
 
 
in dem Terminal in dem der shutdown Befehl gestartet wurde,
 
 
 
oder geben sie den "shutdown"-Befehl zusammen mit der Abbruchoption "-c" in einem anderen Terminal ein:
 
 
 
root@zero:~# shutdown -c
 
 
 
shutdown: Shutdown cancelled
 
root@zero:~#
 
 
 
Wenn Sie den Rechner Neustarten möchten gibt es dazu die Option "-r" für den "shutdown"-Befehl
 
 
 
oder den "reboot"-Befehl die beide auch als root ausgeführt werden müssen:
 
 
 
xinux@zero:~$ sudo -i
 
[sudo] password for xinux:
 
root@zero:~# shutdown -r now
 
 
 
root@zero:~# reboot
 
 
 
===Mögliche Reboots===
 
root@zero:~# reboot
 
root@zero:~# init 6
 
root@zero:~# shutdown -r now
 
 
 
===Mögliche Halts===
 
root@zero:~# halt
 
root@zero:~# init 0
 
root@zero:~# shutdown -h now
 
 
 
==="passwd"===
 
passwd wechselt Passwörter für User- und Gruppenaccounts. Ein Normaluser darf nur sein Passwort ändern, der Superuser darf die Passwörter aller Accounts ändern. Der Administrator einer Gruppe darf das Passwort dieser Gruppe ändern. passwd kann auch die Account-Informationen wie Kommentar, Loginshell oder Passwort-Auslaufzeiten und -intervalle ändern.
 
 
 
Der User muss vor der Änderung sein altes Passwort angeben
 
thomas@zero:~$ passwd
 
Ändern des Passworts für thomas.
 
(aktuelles) UNIX Passwort:
 
Geben Sie ein neues UNIX Passwort ein:
 
Geben Sie das neue UNIX Passwort erneut ein:
 
passwd: Passwort erfolgreich geändert
 
 
 
Root kann das Passwort ohne das alte zu kennen ändern
 
root@zero:~# passwd thomas
 
Geben Sie ein neues UNIX Passwort ein:
 
Geben Sie das neue UNIX Passwort erneut ein:
 
passwd: Passwort erfolgreich geändert
 
 
 
Root kann auch das eigene Passwort ändern
 
root@zero:~# passwd
 
Geben Sie ein neues UNIX Passwort ein:
 
Geben Sie das neue UNIX Passwort erneut ein:
 
passwd: Passwort erfolgreich geänder
 
 
 
 
 
==="man"===
 
 
 
Programm zum Einsehen der Online-Manuals
 
 
 
Die Manuals sind in folgende Sektionen unterteilt:
 
# Ausführbare Programme oder Shellbefehle
 
# Systemaufrufe (Kernelfunktionen)
 
# Bibliotheksaufrufe (Funktionen in System-Bibliotheken)
 
# Spezielle Dateien (gewöhnlich in /dev)
 
# Dateiformate und Konventionen, z. B. /etc/passwd
 
# Spiele
 
# Makropakete und Konventionen, z. B. man(7), groff(7)
 
# Systemadministrationsbefehle (in der Regel nur für root)
 
# Kernelroutinen [Nicht Standard]
 
 
 
Aufruf eines Manuals erfolgt durch ''man kommando''
 
Beendet wird durch Drücken des Buchstabens q
 
Gesucht wird vorwärts durch Eingabe eines /suchausdruck
 
Gesucht wird rückwärts durch Eingabe eines ?suchausdruck
 
 
 
Beispiele:
 
 
 
      man passwd        Anschauen der Manualseite zum Programm passwd
 
      man 5 passwd      Anschauen der Manualseite zur Datei /etc/passwd
 
      man -a passwd    Anschauen aller Manualseiten zu passwd
 
      man -k passwd    Durchsucht die Kurzbeschreibungen der Manualseite
 
                        nach passwd und gibt alle Treffer aus
 
      man -f passwd      Gibt alle gefunden Kurzbescheibungen zu passwd aus
 
      man -L en passwd Gibt englische Manualseiten aus
 
 
 
===Wie ist ein Befehl aufgebaut===
 
 
 
foo -c -a bar  tux 
 
 
 
*foo Kommando
 
*-c  Option(Schalter)
 
*-a  Option(Regler)
 
*bar Optionsargument
 
*tux Kommandoargument
 
 
 
===Was geht vor auf meinem System? (date,who,id)===
 
 
 
Das Kommando date dient zur Abfrage von Datum und Uhrzeit.
 
 
 
xinux@zero:~ > date
 
Fre Mär 16 16:35:03 CET 2001
 
 
 
oder auch Anzeige der Grennwich Zeit:
 
 
 
xinux@zero:~ > date -u
 
Fre Mär 16 15:35:34 UTC 2001
 
 
 
who zeigt alle angemeldeten Benutzer an
 
 
thomas@zero:~$ who
 
thomas  tty7        2009-07-22 08:33 (:0)
 
thomas  pts/0        2009-07-22 10:37 (:0.0)
 
 
 
Wer bin ich?
 
thomas@zero:~$ whoami
 
thomas
 
 
 
Anzeigen der Userid
 
thomas@zero:~$ id -u
 
 
Anzeigen der Gruppenid
 
thomas@zero:~$ id -g
 
 
 
==Linux-Dateisystem==
 
 
*[[Linux-Dateisystem]]
 
*[[Linux-Dateisystem]]
 
+
*[[Einfache Linux Kommandos]]
==Einfache Linux Komandos==
+
*[[Kommandolokalisierung]]
*[[Einfache Linux Komandos]]
+
*[[Bash Dateien]]
 
+
*[[Vim]]
==Der Standard Editor vi==
+
*[[Der Standard Editor vi]]
Der vi ist der Standardeditor in der Unixwelt. Er ist in jedem Unix-Derivat
+
*[[Nano Crash]]
enthalten.
+
*[[Reguläre Ausdrücke]]
Der Editor hat zwar den schlechten Ruf umständlich zu bedienen zu sein, ist
+
*[[Benutzeridentifikation]]
jedoch sehr leistungsfähig und systemübergreifend verfügbar. Beim vi handelt es
+
*[[Programme zur Benutzerverwaltung]]
sich um einen rein textorientierten Editor, der mittels eigener Kommandos
+
*[[Berechtigungen]]
gesteuert wird.
+
*[[Gruppenzugehörigkeit]]
 
+
*[[Umgang mit der Shell]]
Der Editor VIM ist eine weitere Verbesserung von VI und leichter zu bedienen.
+
*[[INodes]]
Und unter Ubuntu/Debian mit "apt-get install vim" zu installieren.
+
*[[Prozesse]]
 
+
*[[Suchen und finden]]
===Starten des Editors:===
+
*[[Linux Admin Tools kurz und knapp]]
 
+
*[[Linux Grundlagen-Aufgaben]]
Der Editorstart erfolgt einfach durch die Eingabe des Kommandos vi mit dem
 
Dateinamen der zu editierenden Datei als Parameter.
 
Beispiel:       
 
vi sux.txt
 
 
 
===Die Betriebsmodi des vi:===
 
 
 
Ein Umstand, der dem vi den Ruf der komplizierten Bedienbarkeit zugetragen hat,
 
sind die unterschiedlichen Betriebsmodi des Editors. Genauer gesagt verfügt der
 
vi über drei Betriebsmodi:
 
 
 
====Kommandomodus:====
 
 
 
Innerhalb dieses Modus werden die eingegebenen Zeichen direkt als Befehle des
 
Editors interpretiert und ausgeführt. Dabei gibt es weder ein Bereitschaftszeichen
 
(Prompt) noch ein Echo (Ausgabe). Der Kommandomodus ist der Modus, in dem
 
sich der vi direkt nach seinem Start befindet.
 
 
 
====Zeilenmodus oder Exmodus:====
 
 
 
Dieser Modus ist der einzige Modus mit einem eigenen Bereitschaftszeichen,
 
nämlich dem Doppelpunkt (:). Das Prompt wird ebenso wie die Befehlsausgaben
 
in der Statuszeile angezeigt.
 
 
 
====Eingabemodus:====
 
 
 
Der Eingabemodus ist derjenige, in welchem der zu bearbeitende Text bearbeitet
 
werden kann. Alle hier eingegebenen Zeichen werden als Text für die aktuelle
 
Datei interpretiert. Zwischen den unterschiedlichen Modi kann jederzeit
 
gewechselt werden. Von Kommandomodus gelangen Sie durch mehere Wege in
 
den Eingabemodus. Man kann durch folgende Aktionen wechslen
 
 
 
{| border=1 cellpadding=2
 
|i
 
|Text vor der aktuellen Cursorposition einfügen
 
|-
 
|I
 
|Text am Zeilenanfang einfügen
 
|-
 
|a
 
|Text hinter der aktuellen Cursorposition einfügen
 
|-
 
|A
 
|Text am Zeilenende einfügen
 
|-
 
|o
 
|Unterhalb der aktuellen Zeile eine neue Zeile einfügen
 
|-
 
|O
 
|Oberhalb der aktuellen Zeile eine neue Zeile einfügen
 
|}
 
 
 
Durch das Drücken der ESC - Taste gelangt man in den Kommandomodus zurück.
 
 
 
Im Kommandomodus können Sie durch den Text navigieren und auch den Text
 
selbst bearbeiten, z.B ausschneiden, kopieren usw. Dazu sind einige Kommandos
 
nötig, von denen die wichtigsten im Folgenden erläutert werden:
 
 
 
xinux@zero:/$ vi iwas.txt
 
 
 
[[Image:vim.jpg]]
 
 
 
===Benutzen des Kommandomodus===
 
====Steuerung des Cursors durch den Text====
 
 
 
Mittels folgender Kommandos bewegt sich der Cursor durch den Text:
 
 
 
{| border=1 cellpadding=2
 
|h
 
|Cursor ein Zeichen nach links
 
|-
 
|l
 
|Cursor ein Zeichen nach rechts
 
|-
 
|k
 
|Cursor eine Zeile nach oben
 
|-
 
|j
 
|Cursor eine Zeile nach unten
 
|-
 
|w
 
|Cursor ein Wort nach rechts
 
|-
 
|b
 
|Cursor ein Wort nach links
 
|}
 
 
 
Alle diese Kommandos können mit einem vorgestellten Wiederholungsfaktor
 
arbeiten. Der Befehl 3w verschiebt demnach den Cursor um 3 Wörter nach rechts.
 
 
 
====Angaben zur Positionierung====
 
 
 
 
 
{| border=1 cellpadding=2
 
|STRG+U
 
|1⁄2 Bildschirmseite nach oben
 
|-
 
|STRG+D
 
|1⁄2 Bildschirmseite nach unten
 
|-
 
|STRG+B
 
|1 Bildschirmseite nach oben
 
|-
 
|STRG+F
 
|1 Bildschirmseite nach unten
 
|-
 
|/Ausdruck
 
|Sucht den Ausdruck (vorwärts) Weitersuchen mit n , N
 
|-
 
|?Ausdruck
 
|Sucht den Ausdurck (rückwärts) Weitersuchen mit n , N
 
|-
 
|0
 
|Zeilenanfang
 
|-
 
|$
 
|Zeilenende
 
|-
 
|w
 
|Nächstes Wort
 
|-
 
|b
 
|Vorheriges Wort
 
|-
 
|fc
 
|Auf das Zeichen c springen. c steht für ein beliebiges Zeichen
 
|-
 
|G
 
|Letzte Zeile der Datei
 
|-
 
|nG
 
|n-te Zeile der Datei
 
|-
 
|H
 
|Anfang der Bildschirmseite
 
|-
 
|L
 
|Ende der Bildschirmseite
 
|}
 
 
 
====Befehle zur Textbearbeitung -> Was soll geschehen====
 
 
 
{| Border=1 Cellpadding=2
 
|x
 
|Löscht Zeichen
 
|-
 
|dd
 
|Zeile löschen und in den Puffer laden
 
|-
 
|c
 
|Ändern
 
|-
 
|y
 
|In den Puffer laden
 
|}
 
 
 
====Weitere wichtige Befehle:====
 
 
 
{| Border=1 Cellpadding=2
 
|p
 
|Aus dem Puffer einfügen
 
|-
 
|u
 
|Undo, macht den letzten Befehl rückgängig
 
|-
 
|STRG+R
 
|Redo, macht den letzten Undo rückgängig
 
|}
 
 
 
===Zeilen- oder Exmodus===
 
 
 
Wie schon erwähnt wird der Zeilen oder Exmodus durch einen : eingeleitet.
 
Es folgen einige Beispiele.
 
 
 
Befehle zum Speichern und Beenden:
 
 
 
:w          Schreibt Datei
 
:w Datei2  Schreibt eine Kopie in Datei2
 
:w !        Schreibt Datei (übergehe Schreibschutz)
 
:w ! Datei2 Schreibt eine Kopie in Datei2 (übergehe Schreibschutz)
 
:q          Schließe Datei
 
:q!        Schließe Datei (verwerfe Änderungen)
 
:wq        Schreibe Datei und beende Editor
 
:wq!        Schreibe Datei und beende Editor (übergehe Schreibschutz)
 
:q!        Schließe Datei (verwerfe Änderungen)
 
:h          Hilfe anzeigen, durch drücken von :q Beenden der Hilfe
 
:e Datei3  Editiere Datei3
 
:e #        Editere vorhergehende Datei
 
:1,3co9    Kopiere von der ersten bis zu dritten Zeile
 
            und füge den Inhalt unterhalb der neunte Zeile ein.
 
 
 
Interaktionen mit Unix:
 
 
 
:r Datei4  Fügt Inhalt der Datei4 nach dem Cursor ein
 
:r ! Befehl Fügt Ausgabe des Befehls nach dem Cursor ein
 
:! Befehl  Führt den Befehl aus
 
:sh        Starte Subshell -> mit exit kehrt man wieder zurück
 
            Eingabemodus zurück
 
 
 
====Ersetzen von Textteilen====
 
 
 
Die grundsätzliche Syntax lautet:
 
 
 
:[Zeilennummer,Zeilennummer]s/Muster/Ersetzung/[gc]
 
 
 
:s/worf/kirn/              der erste worf wird in der aktuellen Zeile durch kirn ersetzt
 
:1,9s/worf/kirn/g          von der 1. bis zur 9. Zeile werden alle worf durch kirn ersetzt
 
:1,$s/worf/kirn/          von der ersten bis zur letzten Zeile ersetze ersten worf durch
 
                            kirn
 
:.,$s/worf/kirn/g          von der aktuellen bis zur letzten Zeile ersetze alle worf durch
 
                            kirn
 
:1,.s/worf/kirn/c          von der 1. bis zur aktuellen Zeile ersetze worf durch kirn, frage
 
                            aber nach
 
:1,$s/^worf/kirn/          von der ersten bis zur letzten Zeile ersetze worf am
 
                            Zeilenanfang durch kirn
 
:4,$s/worf$/kirn/          von der 4. bis zur letzten Zeile ersetze worf am Zeilenende
 
                            durch kirn
 
:1,$s/^#//                lösche alle Kommentarzeichen
 
:1,$s/^.orf/kirn/          ersetze alles was am Zeilenanfang ein beliebiges Zeichen hat
 
                            gefolgt von einem orf durch kirn
 
:1,$s/^[A-Z]orf/kirn/g    suche nach einem Großbuchstaben am Anfang der Zeile
 
                            gefolgt von einem orf und ersetze durch kirn
 
:1,$s/^M[ae][iy]e*r/kirn/  suche alles, was am Anfang der Zeile ein großes M enthält,
 
                            gefolgt von einem a oder e , gefolgt von einem i oder y ,
 
                            gefolgt von einem e , welches 0 oder N mal vorkommen kann,
 
                            gefolgt von einem r und ersetze es durch kirn
 
 
 
==Reguläre Ausdrücke==
 
 
 
{| Border=1 Cellpadding=2
 
|c
 
|Ein einzelner Buchstabe passt auf sich selbst
 
|-
 
|.
 
|Ein Punkt passt auf jedes Zeichen außer auf das Zeilenende
 
|-
 
|*
 
|Das dem Operator * vorangehende Muster kann 0 oder öfter vorkommen
 
|-
 
|^
 
|(Caret) passt auf den Zeilenanfang
 
|-
 
|$
 
|Passt auf das Zeilenende
 
|-
 
|\
 
|Das folgende Sonderzeichen wird entwertet
 
|-
 
|[...]
 
|Passt auf "genau" eins in [...] angebenen Zeichen
 
|-
 
|[^...]
 
|Passt auf "genau" ein Zeichen welches nicht in [...] angebenen ist
 
|-
 
|\<
 
|Passt auf den Wortanfang
 
|-
 
|\>
 
|Passt auf das Wortende
 
|-
 
|\+
 
|Das dem Operator \+ vorangehende Muster kann 1 oder öfter vorkommen
 
|-
 
|&
 
|Setzt das gefunden Suchmuster ein
 
|-
 
|\(...\)
 
|Speichert den Text auf den das Suchmuster passt zur späteren Verwendung
 
|-
 
|\n
 
|Setzt das vorangehende, mit \(...\) Gefundene wieder ein
 
|-
 
|(...)
 
|Gruppiert Auswahlmöglichkeiten
 
|-
 
|<nowiki>|</nowiki>
 
|Trennt Auswahlmöglichkeiten
 
|-
 
|\b
 
|Passt auf den Anfang oder das Ende eines Wortes
 
|-
 
|\B
 
|Symbolisiert den Raum innerhalb eines Wortes
 
|-
 
|\w
 
|Passt auf alle alphanumerischen Zeichen [A-Za-z0-9]
 
|-
 
|\W
 
|Passt auf alle nichtalphanumerischen Zeichen [^A-Za-z0-9]
 
|}
 
 
 
Die Rangfolge der Operatoren(von der höchsten zur niedrigsten)
 
:(, ), ?, *, + | .
 
 
 
Die anderen Operatoren sind mit den anderen Buchstaben gleichrangig.
 
 
 
===Beispiel zum Suchen===
 
 
 
Suchmuster              Passt auf
 
^Tuxer                  Tuxer am Zeilenanfang
 
[tT]uxer                Tuxer oder tuxer
 
80[23]?86                8086, 80286 oder 80386
 
 
 
===grep===
 
 
 
Mit grep ist es möglich, in Dateien nach regulären Ausdrücken zu suchen. Wenn
 
eine Übereinstimmung gefunden wird, wird die komplette Zeile auf die
 
Standardausgabe geschrieben. grep kann auch von STDIN lesen.Es ist
 
empfehlenswert, sich anzugwöhnen ,das Suchmuster in Anführungszeichen zu
 
schreiben. Es gibt 3 Arten fgrep = fastgrep , grep und egrep egrep
 
 
 
Beispiel:
 
 
 
root@zero:~# cat text
 
quatsch
 
quatsch
 
quatsch
 
wichtig
 
quatsch
 
root@zero:~# grep wichtig text
 
wichtig
 
root@zero:~#
 
 
 
-c                  meldet nur die Gesamtzahl der Fundstellen
 
-v                  zeigt nur Zeilen, die »Ausdruck« nicht enthalten
 
-i                  ignoriert Groß- und Kleinschreibung
 
-l                    meldet nur Dateinamen mit Fundstellen
 
-n                  listet Zeilennummern zu jeder Fundstelle
 
-f                  Dateiname »Dateiname« enthält die Such-Ausdrücke
 
-E                  ist ein erweiterter regulärer Ausdruck (egrep)
 
-F                  (Muster, Ausdruck) ist ein Muster (String) (fgrep)
 
-b                  listet auch die Position der Fundstellen
 
-C    Anzahl        Anzahl von Zeilen werden nach der Fundstelle ausgegeben
 
-B    Anzahl        Anzahl von Zeilen werden vor der Fundstelle ausgegeben
 
-r                  Durchsucht Verzeichnisse rekursiv
 
 
 
==Useridendifikation==
 
===/etc/passwd===
 
====Beschreibung====
 
passwd ist eine ASCII-Datei, die eine Liste der Benutzer des Systems und deren
 
Passwörter enthält. Die Passwortdatei sollte für alle Benutzer lesbar sein, was für
 
die Verschlüsselung notwendig ist; aber nur vom Superuser beschreibbar. Wenn
 
Sie eine neue Kennung einrichten, lassen Sie das Passwort-Feld in der Datei frei
 
und benutzen Sie passwd(1), um dem System ein Passwort für die neue Kennung
 
mitzuteilen.
 
 
 
Die Datei /etc/passwd enthält einen Eintrag pro Zeile mit dem Format:
 
login_name:passwd:UID:GID:user_name:directory:shell
 
 
 
====Die Bedeutung der Felder:====
 
# login_name Kennung des Benutzers auf dem System.
 
# password  Hier steht bei Shadowsystemen ein x. Die Passwörter sind in der Datei /etc/shadow
 
# UID        Die numerische Benutzernummer.
 
#  GID        Die numerische Gruppennummer des Benutzers.
 
# user_name Ein optionales Kommentarfeld, oft benutzt für den vollen Namen des Benutzers und weitere Informationen (Telefon, Raum-Nummer etc.).
 
# directory  Das Heimatverzeichnis $HOME des Benutzers.
 
# shell      Das Programm, das beim Einloggen gestartet werden soll (falls nicht nötig, benutzen Sie /bin/bash).
 
 
 
===/etc/group===
 
====Beschreibung====
 
etc/group ist eine ASCII Datei, die Gruppen definiert, zu denen Benutzer
 
gehören. Es gibt nur einen Eintrag pro Zeile; jede Zeile hat folgendes Format:
 
        GruppenName:Passwort:GruppenKennung:BenutzerListe
 
Beschreibung der Felder:
 
#    GruppenName      Die Bezeichnung der Gruppe.
 
#    Passwort        Das (verschlüsselte) Gruppen-Passwort. Wenn dieses Feld leer ist, wird kein Passwort benötigt.
 
#    GruppenKennung Die numerische Identifikation der Gruppe.
 
#    BenutzerListe    Alle Namen der Mitglieder, getrennt durch Kommas.
 
 
 
===/etc/shadow===
 
====Beschreibung====
 
shadow beinhaltet Informationen zu den verschlüsselten Passwörten, zu den
 
Benutzerzugängen und weitere Informationen zur Laufzeit der Passwörter.
 
Name:Passwort:Letzte Änderung:Mintage:Maxtage:Warntage:Inaktiv:Ablauf
 
#    Der Loginname
 
#    verschlüsseltes Passwort
 
##<nowiki>*</nowiki> bedeutet Benutzer kann sich nicht einlogen
 
##! bedeutet Benutzer hat kein Passwort gesetzt
 
#    Tage seit dem 1 Januar 1970 an dem das Passwort letztmals geändert wurde
 
#    Tage, die das Passwort behalten werden muss, bevor es wieder geändert werden kann
 
#    Die Anzahl der Tage, nach denen der Benutzer das Passwort wieder ändern muss
 
#    Anzahl der Tage bevor das Passwort abläuft und der Benutzer gewarnt wird
 
#    Wenn der Zugang diese Anzahl von Tagen nicht benutzt wird, wird der Zugang gesperrt
 
#    Tag seit dem 1 Januar 1970, an dem der Zugang gesperrt wird
 
#    Reserviertes Feld
 
 
 
Die Datei sollte aus Sicherheitgründen nicht für einen normalen Benutzer lesbar
 
sein.
 
 
 
==Programme zur Userverwaltung==
 
===useradd===
 
User anlegen
 
root@zero:~# useradd -m -u 1011 -g users -G admin -d /home/erwin -s /bin/bash -c "Erwin Lehman"  erwin
 
{| border=1 cellpadding=2
 
|"-m"
 
|Lege Homedirectory an
 
|-
 
|"-u 1011"
 
|Userid wird zugeordnet
 
|-
 
|"-g users"
 
|Primäre Gruppe wird zugeordnet
 
|-
 
|"-G admin"
 
|Sekundäre Gruppe wird zugeordnet
 
|-
 
|"-d /home/erwin/"
 
|Name des Homedirectory
 
|-
 
|"-s /bin/bash"
 
|Bash wird zugeordnet
 
|-
 
|"-c Erwin Lehman"
 
|Kommentarfeld
 
|-
 
|"erwin"
 
|Name des Users
 
|}
 
 
 
Defaulteinstellungen anzeigen
 
root@zero:~# useradd -D
 
GROUP=100
 
HOME=/home
 
INACTIVE=-1
 
EXPIRE=
 
SHELL=/bin/sh
 
SKEL=/etc/skel
 
CREATE_MAIL_SPOOL=no
 
 
 
Defaulteinstellungen ändern
 
useradd -D -s /bin/bash
 
 
 
Konfigurationsdatei
 
root@zero:~# cat /etc/default/useradd
 
SHELL=/bin/bash
 
GROUP=100
 
HOME=/home
 
INACTIVE=-1
 
EXPIRE=
 
SKEL=/etc/skel
 
CREATE_MAIL_SPOOL=no
 
 
 
===usermod===
 
User modifizieren
 
root@zero:~# usermod -l fritz -s /bin/sh -G admin,video erwin
 
{| border=1 cellpadding=2
 
|"-l fritz"
 
|Neuer Username
 
|-
 
|"-s /bin/sh"
 
|Neue Shell
 
|-
 
|"-G admin, video"
 
|Sekunbdäre Gruppen werden zugeordnet
 
|-
 
|"erwin"
 
|Name des Users
 
|}
 
 
 
===userdel===
 
User inklusive Homedirectory löschen
 
root@zero:~# userdel -r fritz
 
 
 
===passwd===
 
Rootpasswort ändern
 
root@zero:~# passwd
 
Geben Sie ein neues UNIX Passwort ein:'''sysadm'''
 
Geben Sie das neue UNIX Passwort erneut ein:'''sysadm'''
 
passwd: Passwort erfolgreich geändert
 
 
 
Passwort von tux ändern
 
root@zero:~# passwd tux
 
Geben Sie ein neues UNIX Passwort ein:'''suxer'''
 
Geben Sie das neue UNIX Passwort erneut ein:'''suxer'''
 
passwd: Passwort erfolgreich geändert
 
 
 
Minimale und Maximale Gültigkeit des Passwortes von tux festlegen
 
root@zero:~# passwd -n 5 -x 120 tux
 
 
 
===groupadd===
 
root@zero:~# groupadd -f -g 2001 xinuxer
 
{| border=1 cellpadding=2
 
|"-f"
 
|Überschreibe bestehende Gruppe
 
|-
 
|"-g 2001"
 
|GID der Gruppe
 
|-
 
|"xinuxer"
 
|Name der Gruppe
 
|}
 
 
 
=== adduser ===
 
Um einen neuen Benutzer anzulegen (als root) folgenden Befehl ausführen:
 
adduser
 
Das Programm wird dann nach den benötigten Angaben (Name, Heimatverzeichnis, Passwort usw.) fragen.
 
 
 
=== gpasswd ===
 
Um Benutzern bestimmte Berechtigungen zu geben muss man ihn verschiedenen Gruppen zuweisen. Dazu (als root) folgenden Befehl ausführen:
 
gpasswd -a <benutzername> <gruppe>
 
 
 
==chmod==
 
 
 
===chmod oktale Schreibweise===
 
Specialrights        User          Group        Other
 
usbit gsbit sticky    r    w  x    r  w  x    r  w  x
 
  1    1      1      1    1  1    1  1  1    1  1  1
 
  0    0      0      0    0  0    0  0  0    0  0  0
 
 
 
Oktale Wertigkeit pro Recht
 
  4    2      1    4    2  1    4  2  1    4  2  1
 
 
 
===Beispiele===
 
xinux@zero:~$ chmod 751 test ; ls -l test
 
-rwxr-x--x 1 xinux xinux 0 2009-06-16 12:01 test
 
xinux@zero:~$
 
 
 
xinux@zero:~$ chmod 4770 test ; ls -l test
 
-rwsrwx--- 1 xinux xinux 0 2009-06-16 12:01 test
 
xinux@zero:~$
 
 
 
xinux@zero:~$ chmod 0 test ; ls -l test
 
---------- 1 xinux xinux 0 2009-06-16 12:01 test
 
 
 
 
 
===chmod symbolische Schreibweise===
 
 
 
Die Syntax des Befehls chmod lautet:
 
 
 
'''chmod''' WerWieWas [,WerWieWas,.....] Dateiliste
 
 
 
oder
 
 
 
'''chmod''' Oktalzahl Dateiliste
 
 
 
Durch WerWieWas bzw. Oktalzahl wird die Rechtetabelle definiert. Innerhalb von
 
WerWieWas darf es kein Leerzeichen geben. Wer bezeichnet den Benutzerkreis,
 
dem man Rechte gibt, Wie die Art, in der die Rechte gegeben werden und Was die
 
Rechte als solche. Im einzelnen können folgende Kürzel benutzt werden:
 
 
 
Für Wer kann eines der folgenden Kürzel oder eine Kombination davon stehen:
 
u                  (user) Rechte für den Dateibesitzer
 
g                  (group) Rechte für die Gruppe
 
o                  (others) Rechte für alle anderen Benutzer
 
a                  (all) Rechte für alle Benutzer
 
Für Wie steht eines der folgenden Kürzel:
 
+                  Die Rechte werden zu den vorhandenen zusätzlich vergeben
 
-                  Die im Folgenden genannten Rechte werden entzogen
 
=                  Die im Folgenden genannten Rechte ersetzen die bisherigen
 
Für Was steht eines der folgenden Kürzel:
 
r                  (read) lesen
 
w                  (write) schreiben
 
x                  (execute) ausführen
 
oder diese Sonderformen
 
s                  (usersbit) Programm läuft unter der UID des Besitzers
 
s                  (groupsbit)Programm läuft unter der GID des GRUPPE
 
t                  (stickybit) Dateien im Verzeichnis darf nur Besitzer löschen
 
 
 
===Beispiel===
 
Setze für alle Schreib- und Leserecht
 
xinux@zero:~$ chmod a=rw test
 
xinux@zero:~$ ls -l test
 
-rw-rw-rw- 1 xinux xinux 0 2009-06-16 12:01 test
 
xinux@zero:~$
 
 
 
Erteile Besitzer Ausführungsrecht
 
xinux@zero:~$ chmod u+x test ; ls -l test
 
-rwxrw-rw- 1 xinux xinux 0 2009-06-16 12:01 test
 
xinux@zero:~$
 
 
 
Erteile Besitzer alle Rechte und setze der Gruppe und dem Rest Leserecht
 
xinux@zero:~$ chmod u+rwx,g=r,o=r  test ; ls -l test
 
-rwxr--r-- 1 xinux xinux 0 2009-06-16 12:01 test
 
xinux@zero:~$
 
 
 
===chmod Optionen===
 
-c  (changes) es werden nur die Dateien angezeigt, deren Zugriffsrechte tatsächlich verändert werden
 
-f  (silent, quiet) Fehlermeldungen wegen fehlgeschlagener Änderungsversuche werden unterdrückt
 
-v  (verbose) alle Aktionen werden angezeigt
 
-R  (recursive) die Zugriffsrechte aller Dateien in den Unterverzeichnissen werden ebenfalls geändert
 
 
 
Theoretisch sind alle Kombinationen der Zugriffsrechte denkbar, aber der
 
Eigentümer einer Datei darf diese immer lesen, selbst wenn das Lesebit nicht
 
gesetzt ist. Genauso macht es wenig Sinn, eine gewöhnliche Textdatei als
 
ausführbar zu setzen; die Shell wird damit nichts anfangen können. Ein x für ein
 
Verzeichnis gibt an, dass in dieses gewechselt werden kann.
 
 
 
Rechte sind verbindlich
 
 
 
Interessant ist auch ein Konstrukt folgender Art
 
-rwx---rwx
 
 
 
das angibt, dass mit der Datei alles angestellt werden kann, außer durch Nutzer der
 
Gruppe. Versucht irgend jemand, der nicht der Gruppe des Eigentümers angehört,
 
die Datei zu modifizieren, wird ihm dies gelingen, einem Gruppenmitglied bleibt
 
dies versagt, obwohl er ja gleichzeitig ein "Anderer" ist. D.h. die Rechte der
 
Gruppe sind verbindlicher, als die Rechte der anderen!
 
 
 
===Bedeutungen der Zugriffsarten===
 
====Dateien====
 
* r: Der Inhalt der Datei kann gelesen und damit auch kopiert werden.
 
root@zero:~# cat test
 
Dies ist eine Testdatei
 
 
 
root@zero:~# cp test backup
 
 
 
* w: Der Inhalt der Datei darf verändert werden. Ob die Datei gelöscht werden kann ist
 
keine Eigenschaft der Datei, sondern des Verzeichnisses, indem sich die Datei befindet.
 
root@zero:~# cat > test
 
Hier steht jetzt was anderes
 
^C
 
root@zero:~# cat test
 
Hier steht jetzt was anderes
 
 
 
xinux@zero:~$ ls -ld verzeichnis/
 
dr-xr-xr-x 2 xinux xinux 4096 2009-06-18 11:16 verzeichnis/
 
xinux@zero:~/verzeichnis$ rm text
 
rm: Entfernen von „text“ nicht möglich: Permission denied
 
 
 
* x: Ausführrecht für Programme und Skripte
 
xinux@zero:~$ ./programm
 
-bash: ./programm: Permission denied
 
xinux@zero:~$ chmod +x programm
 
xinux@zero:~$ ./programm
 
Test
 
  test
 
 
 
====Verzeichnisse====
 
* r: Die Einträge in dem Verzeichnis sind lesbar.
 
Leserecht von verzeichnis/ entziehen
 
xinux@zero:~$ chmod a-r verzeichnis/
 
xinux@zero:~$ ls verzeichnis/
 
ls: Öffnen von Verzeichnis verzeichnis/ nicht möglich: Permission denied
 
Leserecht für Benutzer und Gruppe vergeben
 
xinux@zero:~$ chmod a+r verzeichnis/
 
xinux@zero:~$ ls verzeichnis/
 
text
 
 
 
* w: Die Einträge in dem Verzeichnis können geändert werden.
 
Neue Datei erstellen
 
xinux@zero:~$ touch neu
 
xinux@zero:~$ ls neu
 
neu
 
 
 
Datei löschen
 
xinux@zero:~$ rm neu
 
xinux@zero:~$ ls neu
 
ls: Zugriff auf neu nicht möglich: No such file or directory
 
 
 
* x: Der Name des Verzeichnisses kann in einem Pfadnamen erscheinen.
 
Verzeichnis ohne x Recht
 
xinux@zero:~$ chmod a-x verzeichnis/
 
Wechseln in Verzeichnis mangels x-Recht nicht möglich
 
xinux@zero:~$ cd verzeichnis/
 
-bash: cd: verzeichnis/: Permission denied
 
x-Recht vergeben
 
xinux@zero:~$ chmod a+x verzeichnis/
 
damit Wechsel in Verzeichnis möglich
 
xinux@zero:~$ cd verzeichnis/
 
xinux@zero:~/verzeichnis$ pwd
 
/home/xinux/verzeichnis
 
 
 
====umask====
 
Neue Dateien und Verzeichnisse werden mit ein und denselben Zufriffsrechten erzeugt.
 
xinux@zero:~$ mkdir text
 
xinux@zero:~$ touch textdat
 
xinux@zero:~$ ls -ld text*
 
drwxr-xr-x 2 xinux xinux 4096 2009-06-18 11:37 text
 
-rw-r--r-- 1 xinux xinux    0 2009-06-18 11:37 textdat
 
 
 
Zuständig für dieses Verhalten ist die sogenannte umask, die oft in der Datei
 
/etc/profile auf den Wert 022 voreingestellt ist. Zusätzlich wird noch eine
 
Maximalmaske benötigt, die sich für Verzeichnisse und andere Dateien
 
unterscheidet. Die bei der Erzeugung gesetzten Rechte entstehen nun, indem von
 
der Maximalmaske der durch die umask vorgegebene Wert subtrahiert wird:
 
 
 
{| border=1 cellpadding=2
 
!
 
! Dateien
 
! Verzeichnisse
 
|-
 
| Systemvorgabe
 
| 666
 
| 777
 
|-
 
| -umask
 
| 022
 
| 022
 
|-
 
| Ergebnis
 
| 644
 
| 755
 
|}
 
 
 
xinux@zero:~$ grep umask /etc/profile
 
umask 022
 
 
 
Jeder kann seine eigene umask in der Datei ~/.profile einstellen!
 
 
 
==Gruppenzugehörigkeit==
 
===newgrp===
 
Ändert die Gruppenzugehörigkeit eines Benutzers auf die angegebene Gruppe. Wenn keine Gruppe angegeben wird, wird die
 
Anmeldegruppe des Benutzers verwendet. Die neue Gruppe wird anschließend fü Zugriffskontrollen verwendet.
 
 
 
newgrp Gruppenname
 
 
 
root@zero:~# newgrp hacker
 
root@zero:~# id
 
uid=0(root) gid=1006(hacker) Gruppen=0(root),1006(hacker)
 
 
 
===chgrp===
 
Verändert die Besitzugehörigkeit zu der angegebenen Gruppe
 
 
 
chgrp [Optionen] Gruppe Datei(en)
 
 
 
Optionen:
 
-c Zeigt Veränderungen an
 
-f Unterdrückt die meisten Fehlermeldungen
 
-R Verändert Dateien und Verzeichnisse rekursiv
 
-v Gibt geschwätzige Ausgabe aus.
 
 
 
root@zero:~# ls -l
 
...
 
d-wx--x--x  3 root root 4096 2009-06-18 13:34 verzeichnis
 
 
root@zero:~# chgrp -R xinux verzeichnis/
 
root@zero:~# ls -l
 
...
 
d-wx--x--x  3 root xinux 4096 2009-06-18 13:34 verzeichnis
 
 
 
xinux@zero:~$ cd /root/verzeichnis/
 
xinux@zero:/root/verzeichnis$ pwd
 
/root/verzeichnis
 
 
 
===chown===
 
Ändert den Eigentümer von einer oder mehreren Dateien in den angegebenen Benutzer.
 
chown erlaubt ebenfalls das Ändern der Gruppeneigentümreschaft. Nur der aktuelle Eigentümer einer
 
Datei oder der Superuser (root) darf die Eigentumsverhältnisse ändern.
 
 
 
chown [Optionen] Benutzer(:Gruppe) Dateien
 
 
 
Optionen:
 
-c Gibt Informationen über die veränderten Dateien aus
 
--dereference Symbolischen Links folgen
 
-v Gibt Informationen über alle Dateien aus, die chown zu ändern versucht, egal, ob die Änderung erfolgt ist oder nicht
 
-R Geht rekursiv durch alle Unterverzeichnisse und führt die Änderungen durch.
 
 
 
root@zero:~# chown -R xinux.xinux verzeichnis/
 
root@zero:~# ls -l
 
insgesamt 12
 
drwx------ 13 root  root  4096 2009-04-21 15:11 profile
 
--w-------  1 root  root    0 2009-06-18 11:13 test
 
-rw-r--r--  1 root  root    40 2009-06-18 12:04 text
 
drwxrwx--x  3 xinux xinux 4096 2009-06-18 13:39 verzeichnis
 
 
root@zero:~# chown -R -c xinux.xinux verzeichnis/
 
 
root@zero:~# chown -R -v xinux.xinux verzeichnis/
 
Eigentümer von „verzeichnis/01“ als xinux:xinux erhalten
 
Eigentümer von „verzeichnis/test“ als xinux:xinux erhalten
 
Eigentümer von „verzeichnis/“ als xinux:xinux erhalten
 
 
 
=Umgang mit der Shell=
 
 
 
==Einfache Shellsonderzeichen==
 
 
 
{| class="wikitable" border="1" cellpadding="2"
 
|-
 
|;
 
|Trenne Kommandos
 
|-
 
|#
 
|Kommentar
 
|-
 
|&
 
|Programm im Hintergrund starten
 
|-
 
|<nowiki>|</nowiki>
 
|STOUT von links wird zu STDIN von rechts
 
|-
 
|*
 
|steht für beliebig viel Zeichen auch 0
 
|-
 
|?
 
|steht für genau ein Zeichen
 
|-
 
|[abc]
 
|steht für eins der Zeichen in [ ] hier a b oder c
 
|-
 
|~
 
|das Homeverzeichnis
 
|-
 
|>    und    >>
 
|leite in Datei um  >  überschreibe    >> hänge an
 
|-
 
|<
 
|lesen aus Datei
 
|-
 
|2>&1
 
|leite STDERR auf STDOUT
 
|-
 
|<< ende
 
|Lesen aus Datei (Heredokument)
 
|-
 
|{ ,  ,  , }
 
|Zeichenketten zusammensetzen
 
|-
 
|"..."
 
|Entwertung der Sonderzeichen ausser $ ' \
 
|-
 
|'...'
 
|Entwertung sämtlicher Sonderzeichen ausser ' selbst
 
|-
 
|\ 
 
|Entwertung des folgenden Sonderzeichens
 
|-
 
|}
 
 
 
 
 
==Eingabe/Ausgabe==
 
Standardeingabe (0): Laufende Programme erwarten von hier ihre Eingaben (normalerweise handelt es sich um die Tastatur).
 
 
 
Standardausgabe (1): Programme schreiben auf diese ihre Ausgaben (Bildschirm).
 
 
 
Standardfehlerausgabe (2) : Fehlerausgaben landen hier (Bildschirm, aber nur die aktive Konsole).
 
 
 
[[Bild:std.jpg]]
 
 
 
===Umleitungen===
 
===cat===
 
Das Programm cat liest von STDIN und gibt es STDOUT wieder aus, solange bis das EOF Zeichen kommt.
 
root@zero:~# cat
 
bla bla
 
bla bla
 
 
 
Einlesen der Datei dat
 
root@zero:~# cat < dat
 
wichtig
 
 
 
Schreiben in die Datei dat, dies überschreibt den bisherigen Inhalt der Datei
 
root@zero:~# cat > dat
 
sogar noch wichtiger
 
 
Ausgeben der Datei text
 
root@zero:~# cat dat
 
sogar noch wichtiger
 
 
 
Lesen aus der Datei dat und schreiben in die Datei neuedat
 
root@zero:~# cat < dat > neuedat
 
root@zero:~# cat < neuedat
 
sogar noch wichtiger
 
 
 
Anhängen der Ausgabe von date an die Datei neuedat
 
root@zero:~# date >> neuedat
 
root@zero:~# cat neuedat
 
sogar noch wichtiger
 
Do 18. Jun 14:08:58 CEST 2009
 
 
 
Umleiten des Standardfehlerkanals nach error
 
root@zero:~# rm sux 2> error
 
root@zero:~# more error
 
rm: Entfernen von „sux“ nicht möglich: No such file or directory
 
 
 
Zusammenlegen von Standardausgabe und des Standardfehlerkanals
 
root@zero:~# touch tux
 
root@zero:~# rm -v sux tux > aus-err 2>&1
 
root@zero:~# cat < aus-err
 
rm: Entfernen von „sux“ nicht möglich: No such file or directory
 
„tux“ entfernt
 
 
 
===Nacheinander auszuführende Kommandos===
 
root@zero:~# pwd; date
 
/root
 
Do 18. Jun 14:13:05 CEST 2009
 
 
Verknüpfung von cat und wc 
 
root@zero:~# thomas@lydia:~$ cat < aus-err | wc -l
 
2
 
 
 
Übergeben der Ausgabe von tail als Eingabe von grep mit Hilfe der Pipe "|"
 
root@zero:~# tail /var/log/auth.log | grep xinux
 
Jun 18 13:52:33 zero nss_wins[11433]: pam_unix(login:session): session closed for user xinux
 
 
 
Übergeben der letzten 100 Zeilen von syslog als Eingabe von grep
 
root@zero:~# tail /var/log/syslog -n 100 | grep error
 
Jun 18 09:30:54 zero kernel: [154384.692135] end_request: I/O error, dev fd0, sector 0
 
Jun 18 09:30:54 zero kernel: [154384.712137] end_request: I/O error, dev fd0, sector 0
 
 
 
==wc==
 
Zählt die Anzahl von Zeichen, Wörter oder Zeilen
 
 
 
Optionen
 
* -m : Zählt die Anzahl der Zeichen
 
root@zero:~# more name
 
1. karl
 
2. heinz
 
3. hans
 
4. otto
 
root@zero:~# wc '''-m''' tel
 
33 tel
 
 
 
* -w : Zählt die Anzahl der Wörter (einschließlich Zahlen und andere Zeichen)
 
root@zero:~# wc '''-w''' name
 
8 name
 
 
 
* -l : Zählt die Anzahl der Zeilen
 
root@zero:~# wc '''-l''' name
 
4 name
 
 
 
 
 
==tr==
 
tr ist ein Programm um Zeichen zu übersetzen. Dies betrifft nur die Ausgabe, die Datei selbst bleibt unverändert.
 
 
 
Ersetzt Kleinbuchstaben durch Großbuchstaben aus der Datei text
 
root@zero:~# tr "a-z" "A-Z" < text
 
SOGAR NOCH WICHTIGER
 
123
 
34
 
4711
 
TEST
 
 
 
Ersetzt alle Zahlen durch X
 
root@zero:~# tr "0-9" "X" < text
 
sogar noch wichtiger
 
XXX
 
XX
 
XXXX
 
test
 
 
 
 
 
root@zero:~# cat > test
 
+++++
 
###
 
1111
 
 
 
-s löscht mehrfach kommende Zeichen
 
root@zero:~# tr '''-s''' "+" < test
 
+
 
###
 
1111
 
 
 
-d löscht vorkommende Zeichen
 
root@zero:~# tr '''-d''' "#" < test
 
+++++
 
 
1111
 
 
 
==cut==
 
Spalten aus einer Datei schneiden. Dies betrifft nur die Ausgabe, die Datei selbst bleibt unverändert.
 
 
Schneidet die erste Spalte aus, der Delimiter ist :
 
root@zero:~# cut -f 1 -d : < /etc/passwd
 
root
 
daemon
 
bin
 
...
 
xinux
 
 
 
root@zero:~# more test
 
1234#5678#9999
 
 
Schneidet die zweite Spalte aus, der Delimiter ist #
 
root@zero:~# cut -f 2 -d "#" < test
 
5678
 
 
 
Schneidet bis zum 3 Zeichen ab
 
root@zero:~$ echo S01policykit | cut -c 4-
 
policykit
 
 
 
==expand(lpi)==
 
Ersetzt Tabulatorzeichen durch Folgen von Leerzeichen und schreibt das Ergebnis auf die Standardausgabe
 
root@zero:~# expand /etc/samba/smb.conf
 
...
 
 
 
==fmt(lpi)==
 
#Setzt den Text der Dateien im Blocksatz der angegebenen Breite durch Auffüllen von Zeilen und Entfernen von Zeilenwechseln.
 
Standardgemäß werden Leerzeilen, die Position von Leerzeichen und der Einzug am Zeilenanfang erhalten. fmt versucht,
 
Zeilenumbrüche an Satzenden durchzuführen sowie sie nach dem ersten oder vor dem letzten Wort eines Satzes zu vermeiden.
 
 
fmt [Optionen] [Dateien]
 
 
 
Optionen
 
 
 
* -p ''Präfix'': Formatiert nur Zeilen, die mit ''Präfix'' anfangen
 
root@zero:/tmp# fmt -p '#' text
 
#Setzt den Text der Dateien im Blocksatz der angegebenen Breite durch
 
#Auffüllen von Zeilen und Entfernen von Zeilenwechseln.  Standardgemäß
 
#werden Leerzeilen, die Position von Leerzeichen und der Einzug am
 
#Zeilenanfang erhalten. fmt versucht,
 
Zeilenumbrüche an Satzenden durchzuführen sowie sie nach dem ersten oder vor dem letzten Wort eines Satzes zu vermeiden.
 
 
 
* -u : Erzwingt genau ein Leerzeichen zwischen Wörtern und zwei Leerzeichen zwischen Sätzen
 
 
 
* -w ''Breite'': Setzt die Ausgabebreite auf ''Breite''
 
root@zero:/tmp# fmt -w 30 text
 
#Setzt den Text der Dateien
 
im Blocksatz der angegebenen
 
Breite durch Auffüllen
 
von Zeilen und Entfernen
 
von Zeilenwechseln.
 
#Standardgemäß werden
 
Leerzeilen, die Position von
 
Leerzeichen und der Einzug am
 
Zeilenanfang erhalten. fmt
 
versucht, Zeilenumbrüche
 
an Satzenden durchzuführen
 
sowie sie nach dem ersten
 
oder vor dem letzten Wort
 
eines Satzes zu vermeiden.
 
 
 
==join(lpi)==
 
Führt die Zeilen zweier sortierter Dateien anhand von '''Übereinstimmungen''' in einem gemeinsamen Feld zusammen.
 
 
 
root@zero:~# more name
 
1. karl
 
2. heinz
 
3. hans
 
4. otto
 
root@zero:~# more tel
 
1. 1234
 
2. 4321
 
3. 222
 
4. 121212
 
root@zero:~# join name tel > telefonbuch
 
root@zero:~# more telefonbuch
 
1. karl 1234
 
2. heinz 4321
 
3. hans 222
 
4. otto 121212
 
 
 
root@zero:~# join -t : /etc/passwd /etc/shadow
 
....
 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh:*:14181:0:99999:7:::
 
bin:x:2:2:bin:/bin:/bin/sh:*:14181:0:99999:7:::
 
sys:x:3:3:sys:/dev:/bin/sh:*:14181:0:99999:7:::
 
sync:x:4:65534:sync:/bin:/bin/sync:*:14181:0:99999:7:::
 
...
 
 
 
join in dat1 nach Feld 3 und in dat2 nach Feld 2
 
thomas@lydia:~$ cat dat1
 
hugo:ps:1111
 
erwin:zw:2222
 
karl:sb:3333
 
rudi:kl:4444
 
thomas@lydia:~$ cat dat2
 
blau:1111:svn
 
grün:2222:fcs
 
gelb:3333:fch
 
rot:4444:fck
 
thomas@lydia:~$ join -t : -1 3 -2 2 dat1 dat2
 
1111:hugo:ps:blau:svn
 
2222:erwin:zw:grün:fcs
 
3333:karl:sb:gelb:fch
 
4444:rudi:kl:rot:fck
 
 
 
==nl(lpi)==
 
Nummeriert die Zeilen in einer Datei.
 
 
 
root@zero:~# nl /etc/passwd                                                 
 
    1  root:x:0:0:root:/root:/bin/bash                                     
 
    2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh                               
 
    3  bin:x:2:2:bin:/bin:/bin/sh                                           
 
    4  sys:x:3:3:sys:/dev:/bin/sh                                           
 
    5  sync:x:4:65534:sync:/bin:/bin/sync
 
    ...
 
Nummereriet mit führenden Nullen der Separatir ist ein :
 
root@zero:~# nl -s : -n rz dat1
 
 
 
==od==
 
Gibt Dateien im Oktal und anderen Formaten aus.
 
 
 
od [Optionen] Datei
 
 
 
* -j ''Bytes'': Überspringt die Anzahl ''Bytes'' einer Datei
 
* -N ''Bytes'': Gibt nur die Anzahl ''Bytes'' aus
 
* -c : Gebe ASCII Zeichen aus
 
* -f : Gebe Fließkommazahlen aus
 
* -i : Gebe Dezimal Integer aus
 
* -l : Gebe Dezimal Long aus
 
* -o : Gebe Oktal 2 Byte Einheiten aus
 
* -s : Gebe Dezimal 2 Byte Einheiten aus
 
* -x : Gebe Hexadezimale 2 Byte einheiten aus
 
 
 
Beispiele
 
 
 
Gebe Master Boot Record (die ersten 512 Byte der Festplatte /dev/sda) als Hexadezimal aus
 
root@zero:~# od '''-x -N''' 512 /dev/sda
 
0000000 48eb 1090 d08e 00bc b8b0 0000 d88e c08e
 
0000020 befb 7c00 00bf b906 0200 a4f3 21ea 0006
 
0000040 be00 07be 0438 0b75 c683 8110 fefe 7507
 
0000060 ebf3 b416 b002 bb01 7c00 80b2 748a 0203
 
0000100 00ff 2000 0001 0000 0200 90fa f690 80c2
 
...
 
 
 
Schreibe "suxer" in die Datei test
 
root@zero:~# echo "suxer" > test
 
Ausgabe Hexadezimal
 
root@zero:~# od -x test
 
0000000 7573 6578 0a72
 
0000006
 
 
 
Ausgabe ASCII Zeichen
 
root@zero:~# od -c test
 
0000000  s  u  x  e  r  \n
 
0000006
 
 
 
==paste(lpi)==
 
Fügt die Zeilen von zwei oder mehr Dateien horizontal zusammen
 
root@zero:~# paste name tel
 
1. karl 1. 1234
 
2. heinz        2. 4321
 
3. hans 3. 222
 
4. otto 4. 121212
 
 
 
==pr(lpi)==
 
Bereitet Textdateien zum Drucken vor.
 
 
 
root@zero:~# echo "Plan für heute" > dokument
 
root@zero:~# more dokument
 
Plan für heute
 
root@zero:~# pr dokument 
 
 
 
 
2009-06-19 12:44                    dokument                    Seite 1
 
 
 
 
 
 
Plan für heute
 
 
 
Anmerkung Ausmaße der Bildschirmausgabe wie eine Druckseite.
 
 
 
==sed==
 
streaming editor. Mit sed ist es möglich, den Inhalt einer Datei automatisch (nicht interaktiv) zu
 
bearbeiten. Wie unter Linux üblich, wird auch hier der Text nicht wirklich verändert sondern die
 
Änderung erfolgt über die Standardausgabe, die wieder umgeleitet werden kann. Die Syntax ist ähnlich
 
des ex modus von vi. Reguläre Ausdrücke können nach Belieben benutzt werden.
 
 
 
Optionen:
 
-e Zeichenkette  wendet die Editorbefehle aus Zeichenkette auf den Text an.
 
-n gibt nur die Zeilen aus, die explizit (durch "p" ausgedruckt werden sollen
 
 
 
Gibt die dritte Zeile der Datei text aus
 
root@zero:~# sed -n "3p" text
 
34
 
 
 
Gibt die erste bis dritte Zeile von text aus
 
root@zero:~# sed -n "1,3p" text
 
sogar noch wichtiger
 
123
 
34
 
 
 
Löschen der Zeile mit "sogar"
 
root@zero:~# sed -e '/sogar/d' < text
 
123
 
34
 
4711
 
test
 
 
 
und schreiben in text2
 
root@zero:~# sed -e '/sogar/d' < text > text2
 
root@zero:~# more text2
 
123
 
34
 
4711
 
test
 
 
 
Alle 3en durch DREI ersetzen
 
root@zero:~# sed -e 's/3/DREI/g' < text
 
sogar noch wichtiger
 
12DREI
 
DREI4
 
4711
 
test
 
 
 
 
 
==sort==
 
 
 
Zum sortieren von Dateien nach Feldern benutzt man sort. sort liest von STDIN, man kann die Datei aber auch als Argument übergeben.
 
 
 
Sortiert nach dem ersten Feld
 
  root@zero:~# sort /etc/passwd
 
 
 
Es wird geprüft ob die Datei schon sortiert ist
 
root@zero:~# sort -c /etc/passwd
 
 
 
Sortiert nach dem ersten Feld (Richtungsumkehr) 
 
root@zero:~#  sort -r /etc/passwd
 
 
 
Führende Leersortzeichen werden ignoriert
 
root@zero:~# sort -b /etc/passwd
 
 
 
Ausgabe  in die Datei pass
 
root@zero:~# sort  /etc/passwd  -o pass
 
 
 
nimmt : als Trenner -Voreinstellung ist TAB
 
  root@zero:~# sort -t : /etc/passwd
 
 
 
sortiert nach dem  3 Feld,  der Trenner ist : und es wird nummerisch sortiert
 
 
root@zero:~# sort -t: -k 3 -n /etc/passwd
 
 
 
Sortiert nach dem  3  bis zum 5 Feld, der Trenner ist : und es wird nummerisch sortiert
 
 
root@zero:~# sort -t: -k 3,5 -n /etc/passwd
 
 
 
===Jokerzeichen in der Shell===
 
thomas@cardassia:~$ mkdir test
 
thomas@cardassia:~$ cd test/
 
thomas@cardassia:~/test$
 
thomas@cardassia:~/test$ touch a ab abc abcd abcd b cd efg haij
 
Ein * steht für jedes Zeichen beliebig oft
 
thomas@cardassia:~/test$ ls *
 
a  ab  abc  abcd b  cd  efg  haij
 
thomas@cardassia:~/test$ ls ab*
 
ab  abc  abcd
 
Ein ? steht für ein Zeichen
 
thomas@cardassia:~/test$ ls ?
 
a b
 
thomas@cardassia:~/test$ ls ??
 
ab cd
 
thomas@cardassia:~/test$ ls ???*
 
abc  abcd  efg haij
 
Eine [] steht genau für ein Zeichen das in der Klammer ist
 
thomas@cardassia:~/test$ ls [ab]
 
a  b
 
thomas@cardassia:~/test$ ls [abc]?
 
ab  cd
 
Eine [!] steht genau für ein Zeichen das nicht in der Klammer ist
 
thomas@cardassia:~/test$ ls [!abc]*
 
efg  haij
 
Mit der {element1,element2} kann man Dateinamen generieren
 
thomas@cardassia:~/test$ mkdir -v  dir{1,2,3,4,5,6}
 
mkdir: Verzeichnis „dir1“ angelegt
 
mkdir: Verzeichnis „dir2“ angelegt
 
mkdir: Verzeichnis „dir3“ angelegt
 
mkdir: Verzeichnis „dir4“ angelegt
 
mkdir: Verzeichnis „dir5“ angelegt
 
mkdir: Verzeichnis „dir6“ angelegt
 
Wenn kein Treffer erfolgt wird das Sonderzeichen eingesetzt
 
thomas@cardassia:~/test$ rm -r *
 
thomas@cardassia:~/test$ mkdir -v *
 
mkdir: Verzeichnis „*“ angelegt
 
thomas@cardassia:~/test$ cd *
 
thomas@cardassia:~/test/*$
 
Entwerten kann man ein Sonderzeichen mit einem \
 
thomas@cardassia:~/test$ rm -rvi \*
 
rm: Verzeichnis „*“ entfernen? n
 
Entwerten kann man mehrereSonderzeichen mit ""
 
thomas@cardassia:~/test$ rm -rvi "*"
 
rm: Verzeichnis „*“ entfernen? n
 
Entwerten kann man mehrereSonderzeichen mit ''
 
thomas@cardassia:~/test$ rm -rvi '*'
 
rm: Verzeichnis „*“ entfernen? n
 
 
 
=INodes=
 
Inode (oder I-Node) wird im Deutschen am besten als Informationsknoten oder Indexeintrag bezeichnet. Er fasst alle Attribute einer Datei zusammen außer dem Inhalt und dem Namen der Datei.
 
[[Bild:Datsys2.png]]
 
===Daten===
 
{| border=1 cellpadding=2
 
|type
 
|Der Typ der Datei wird als einzelner Buchstabe angezeigt. Der Typ einer Datei wird beim Anlegen der Datei festgelegt
 
|-
 
|Permissions
 
|Die Zugriffsrechte der Datei werden in den 12 Bit sstrwxrwxrwx abgespeichert.Die Zugriffsrechte können mit dem Kommando chmod verändert werden.
 
|-
 
|link count
 
|In UNIX kann eine Datei mehr als einen Namen haben. Der Link Count gibt die Anzahl der Namen einer Datei an. Er kann
 
mit dem Kommando ln erhöht und dem Kommando rm erniedrigt werden.
 
|-
 
|owner
 
|Für den Dateieigentümer gelten die in der ersten rwx-Gruppe festgelegten Zugriffsrechte. Standardmäßig ist der
 
Eigentümer einer Datei derjenige Benutzer, der die Datei angelegt hat.
 
|-
 
|group
 
|Für Benutzer, die in der gleichen Gruppe sind, der die Datei angehört, gelten die in der zweiten rwx-Gruppe festgelegten
 
Zugriffsrechte. In System V gehört eine Datei standardmäßig der Gruppe an, in der der anlegende Benutzer gerade ist.
 
|-
 
|size
 
|Bei normalen Dateien und Verzeichnissen gibt diese Information die Länge der Datei in Byte an.
 
|-
 
|access time
 
|Die Zugriffszeit gibt den Zeitpunkt des letzten Lesezugriffes auf eine Datei an. Aus Effizienzgründen wird die
 
Zugriffszeit an Verzeichnissen nicht gesetzt, wenn ein Verzeichnis durchsucht wird, obwohl man dies erwarten könnte. ''(ls -l --time=atime)'' '''stat''' zeigt alle Zeiten an.
 
|-
 
|modification time
 
|Die Modifikationszeit gibt die Zeit des letzten Schreibzugriffes auf die Daten der Datei an. Intern speichert UNIX
 
die Zeit als Sekunden seit Beginn des Jahres 1970 und in GMT ab. Für die Ausgabe wird dies in ein besser lesbares
 
Format in der lokalen Zeitzone umgewandelt. ''(ls -l)''
 
|-
 
|change time
 
|Die Veränderungszeit gibt das Datum der letzten Statusänderung der Datei an. Sie wird immer dann gesetzt, wenn die
 
Informationen über die Datei sich ändern (Datum der Erzeugung wird nicht gespeichert) ''(ls -lc)''
 
|}
 
 
 
===Dateiarten===
 
{| border=1 cellpadding=2
 
!Zeichen
 
!Typ
 
!Zweck
 
|-
 
|<nowiki>-</nowiki>
 
|file
 
|normale Datei
 
|-
 
|d
 
|directory
 
|Verzeichnis
 
|-
 
|b
 
|block device
 
|Gerätedatei
 
|-
 
|c
 
|character device
 
|Gerätedatei
 
|-
 
|p
 
|named pipe
 
|Benannte Pipeline
 
|-
 
|s
 
|socket
 
|Netzwerkverbindung
 
|-
 
|l
 
|link
 
|Querverweis
 
|}
 
 
 
====Normale Dateien====
 
Unter einer normalen Datei versteht man die Ansammlung von Daten. Dies kann ein Text, Programm, Bild oder sonstiges sein.
 
Beispiel
 
root@zero:~# ls -l text | cut -c 1
 
-
 
 
 
====Verzeichnisse====
 
Dateien werden in Verzeichnissen gespeichert, nur so ist eine Ordnung möglich.
 
root@zero:~# mkdir -v Ordner
 
mkdir: Verzeichnis „Ordner“ angelegt
 
 
root@zero:~# ls -ld Ordner | cut -c 1
 
d
 
 
 
====Gerätedateien (Block und Char)====
 
Gerätedateien ermöglichen Anwendungsprogrammen unter Benutzung des  Kernels den Zugriff auf die Hardwarekomponenten des Systems. Ansprechbar über Major und Minor Nummern
 
 
 
Beispiele
 
 
 
Sicherung des Master Boot Records der ersten Festplatte
 
root@zero:~# dd if=/dev/sda of=/tmp/mbr.img bs=512 count=1
 
 
 
Block Device
 
root@zero:~# ls -l /dev/sda | cut -c 1
 
b
 
 
 
Character Device
 
root@zero:~# ls -l /dev/ttyS0  | cut -c 1
 
c
 
 
 
Erstellen einer Gerätedatei
 
root@zero:/dev# mknod sata1 b 8 0
 
root@zero:/dev# fdisk -l /dev/sata1
 
 
Platte /dev/sata1: 6442 MByte, 6442450944 Byte
 
255 Köpfe, 63 Sektoren/Spuren, 783 Zylinder
 
Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
 
Disk identifier: 0x0005efab
 
 
      Gerät  boot.    Anfang        Ende    Blöcke  Id  System
 
/dev/sata1p1  *          1        743    5968116  83  Linux
 
/dev/sata1p2            744        783      321300    5  Erweiterte
 
/dev/sata1p5            744        783      321268+  82  Linux Swap / Solaris
 
 
 
====Named Pipes====
 
Benannte Pipes (Named Pipes) können dagegen auch zur Kommunikation zwischen Prozessen eingesetzt werden, die nicht miteinander
 
verwandt sind und sich darüber hinaus auf unterschiedlichen Rechnern innerhalb eines Netzwerkes befinden dürfen. Sie sind
 
flexibler als anonyme Pipes und eignen sich für sogenannte Client-Server-Anwendungen (es lassen sich auch RPCs realisieren).
 
Benannte Pipes ermöglichen die gleichzeitige Kommunikation in beide Richtungen, das heißt, Daten können im Vollduplexbetrieb
 
zwischen den Prozessen ausgetauscht werden.
 
 
Erstelle Named Pipe mit Namen /tmp/roehre. Schreibe "hallo welt" in die Pipe und bleibe
 
xinux@zero:~$ mkfifo /tmp/roehre
 
xinux@zero:~$ echo hallo welt > /tmp/roehre
 
 
 
Gebe Inhalt der Pipe mit cat aus
 
root@zero:~# cat < /tmp/roehre
 
hallo welt
 
root@zero:~# ls -l /tmp/roehre | cut -c 1
 
p
 
 
 
====Sockets====
 
Schnittstelle um es lokalen Anwendungen zu ermöglichen, miteinander Netwerkmässig zu kommunizieren.
 
 
 
root@lydia:~# netstat  -lnxp | tail -1
 
  unix  2 [ ACC ] STREAM HÖRT 21951 6646/nm-applet /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede
 
 
 
root@lydia:~# ls -l /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede  | cut -c 1
 
s
 
 
 
====Links====
 
Bei Links handelt es sich um symbolische Verweise auf andere Dateien
 
 
 
'''Softlink'''
 
Ein Softlink ist eine Datei die nur auf den Namen einer anderen Datei verweist. Wenn die Originaldatei gelöscht wird, zeigt
 
der Link ins Leere.
 
 
 
ln -s datei softlink
 
 
 
{| border=1 cellpadding=2
 
| Vorteile
 
| Symbolische Links können auch auf Verzeichnisse angelegt werden<br>Sie sind partitionsübergreifend<br>Man kann sie auf Dateien anlegen, die noch nicht existieren
 
|-
 
| Nachteile
 
| Wenn das Original gelöscht ist, ist kein Zugriff mehr möglich
 
|}
 
 
 
Beispiel
 
Normal
 
root@zero:~# ln -s text verweis
 
Verbose
 
root@zero:~# ln -sv text verweis
 
„verweis“ -> „text“
 
Erzwungenes Überschreiben
 
root@zero:~# ln -sf dat verweis
 
Auswirkungen
 
root@zero:~# ls -l dat verweis
 
-rw-r--r-- 1 root root 4 2009-07-29 13:56 dat
 
lrwxrwxrwx 1 root root 3 2009-07-29 13:57 verweis -> dat
 
Kopieren(Original wird kopiert)
 
root@lydia:~# cp -v verweis /tmp/
 
„verweis“ -> „/tmp/verweis“
 
  root@lydia:~# ls -l /tmp/verweis
 
-rw-r--r-- 1 root root 4 2009-07-29 13:59 /tmp/verweis
 
Kopieren(Link wird kopiert)
 
root@lydia:~# cp -vd verweis /tmp/
 
„verweis“ -> „/tmp/verweis“
 
root@lydia:~# ls -l /tmp/verweis
 
lrwxrwxrwx 1 root root 3 2009-07-29 14:00 /tmp/verweis -> dat
 
 
 
 
 
'''Hardlinks'''
 
ln datei hardlink
 
Eigentlich ist jede Datei ein Hardlink. Ein Hardlink ist ein Verzeichniseintrag,
 
der auf eine Inode verweist. Beim Erzeugen einer Datei verweist ein Eintrag auf
 
eine Inode. Man kann dann weitere Verweise erzeugen. Der Linkcounter wird
 
jeweils um 1 erhöht. Beim Löschen einer Datei wird er jeweils um 1 reduziert.
 
Wird der Wert 0 erreicht, ist die Datei gelöscht.
 
{| border=1 cellpadding=2
 
| Vorteile
 
|Zugriff auf die Daten, selbst wenn das Orginal gelöscht ist.
 
|-
 
|Nachteile
 
|Man kann keine Hardlinks auf Verzeichnisse anlegen.
 
Ist nur innerhalb einer Partion möglich.
 
|}
 
 
 
Beispiel
 
root@zero:~# touch 1
 
root@zero:~# echo "text" > 1
 
root@zero:~# ln 1 2
 
root@zero:~# more 2
 
text
 
root@zero:~# echo "doch kein text" > 1
 
root@zero:~# more 1
 
doch kein text
 
root@zero:~# more 2
 
doch kein text
 
 
 
Weitere Optionen:
 
-b sichert Dateien, statt sie zu überschreiben
 
-f Überschreibt bestehende, gleichnamige Dateien
 
-i fragt vor dem Überschreiben nach Bestätigung
 
-v ausführliche Meldungen
 
Softlink mit dem Namen passwd im Homeverzeichnis angelegt
 
xinux@zero:~$ ln -vs /etc/passwd .
 
„./passwd“ -> „/etc/passwd“
 
Softlink mit dem Namen passwd im Homeverzeichnis angelegt(Original exestiert nicht)
 
xinux@zero:~$ ln -vs /etc/hund .
 
„./hund“ -> „/etc/hund“
 
Hardlink mit dem Namen hosts im Homeverzeichnis angelegt
 
  xinux@zero:~$ ln -v /etc/hosts .
 
„./hosts“ => „/etc/hosts“
 
Auf eine nicht existierende Datei kann kein Hardlink angelegt werden!
 
xinux@zero:~$ ln -v /etc/katze .
 
ln: Zugriff auf „/etc/katze“: No such file or directory
 
 
 
==Prozesse==
 
===Was ist ein Prozess?===
 
Ein Prozess setzt sich aus zwei Teilen zusammen:
 
 
 
1.Programm, das in den Hauptspeicher geladen wurde
 
 
 
2.Prozessumgebung
 
 
 
Unter einem Prozess versteht man ein Programm (binär), das in den Hauptspeicher
 
geladen wurde. Also nicht das Program selbst, das auf der Festplatte liegt ist der
 
Prozess, sondern es wird erst durch das Laden in den Hauptspeicher dazu.
 
Normalerweise liegt ein Programm als ausführbare Datei irgendwo auf der
 
Festplatte oder auf Diskette. Ob es sich bei dem Programm um eine binäre Datei
 
handelt, kann man mit dem Befehl '' file '' feststellen.
 
 
root@zero:~# file /bin/mkdir
 
/bin/mkdir: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
 
 
 
 
 
Die Datei liegt im Maschinencode vor und kann in den Hauptspeicher geladen
 
werden. Sobald dies geschehen ist, kann der Rechner diesen Maschinencode
 
abarbeiten (ausführen).
 
 
 
Da aber ein Programm nicht direkt auf die Hardware zugreifen soll, muss es vom
 
Betriebsystem kontrolliert werden. Das Betriebssystem liegt logisch gesehen
 
zwischen Hardware und Anwendung. Das Betriebssystem ordnet jedem Prozess
 
verschiedene Kenndaten zu, um die Prozesse verwalten zu können. Alle
 
Kenndaten, die einem Prozess zugeordnet sind, nennt man die
 
Prozessumgebung.Wenn man in der Shell ein Kommando eingibt, wird ein Prozess
 
kreiert. Natürlich ist die Shell selbst auch ein Prozess. Ein Prozess kann aber
 
genauso gut ein Serverprozess (Dienst) sein, z.B. Apache.
 
Ein wesentliches Merkmal eines Prozesses ist die Prozesskommunikation. Über im
 
Betriebssystem implementierte Methoden ist es möglich, dass verschiedene
 
Prozesse Signale und Daten untereinander austauschen können.
 
Dadurch wird auch dem Benutzer ermöglicht, einem Prozeß bestimmte Signale zu
 
senden bzw. auf den Status eines Prozesses Einfluss zu nehmen.
 
 
 
===Prozesstabelle (Anzeige mit ps)===
 
Da zu jedem Prozess Kenndaten geführt werden, müssen diese auch irgendwo
 
festgehalten werden. Das geschieht in der sogenannten Prozesstabelle.
 
 
 
Kenndaten der Prozesse (Auswahl):
 
* F Flags (z.B. ausgelagert; Systemprozess; Trace,...)
 
* UID Nutzer, mit dessen Rechten der Prozess ausgeführt wird
 
* PID Prozess - ID. Diese Nummer gibt eine eindeutige Prozess - Nummer
 
an. Sie wird vom System automatisch beim Starten des Prozesses
 
vergeben und ist für die Laufzeit eindeutig.
 
* PPID Prozessnumer der Eltern-Prozesses
 
* PRI Priorität eines Prozesses; je niedriger der Wert ist, desto besser
 
* NI ist der Nicewert des Prozesses; Nice erniedrigt den Grundwert
 
der Priorität des Prozesses und gibt damit Prozessorzeit für andere
 
Prozesse frei.
 
* SIZE Speichergröße des Prozesses inklusive Stack (eine Art Zwischenspeicher)
 
* RSS Verbrauch an physischen Speicher
 
* WCHAN ist der Name der Kernerlfunktion, in der der Prozess schläft
 
* STAT Status des Prozesses
 
R läuft      S schlafend    D nicht störbarer Schlaf
 
T angehalten  Z Zombie        W der Prozess belegt keine Seiten
 
* TIME Bisland benötigte Prozessorzeit
 
* SIZE ist die Größe von Text, Daten und Stack
 
* TTY die Nummer des kontrollierenden Teminal; wenn hier ein ? steht,
 
handelt es sich um einen Dämon oder Serverprozess.
 
* COMMAND Angabe des Prozesses selbst. Dies ist meist der Programmname.
 
 
 
Weiteres
 
* GID Gruppe, unter der der Prozess läuft
 
* Verweis auf das aktuellen Arbeitsverzeichnis
 
* Um mit relativen Pfadangaben arbeiten zu können braucht man diesen Eintrag
 
* Tabelle mit Verweisen auf aktuell geöffnete Dateien
 
* 3 sind automatisch geöffnet Standardeingabe, Standardausgabe und
 
Standardfehlerkanal
 
 
 
Beispiel
 
root@zero:~# ps -l
 
F S  UID  PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
 
4 R    0 18639 18631  0  80  0 -  1080 -      pts/0    00:00:00 bash
 
0 R    0 25904 18639  0  80  0 -  635 -      pts/0    00:00:00 ps
 
 
 
===Eltern und Kinder===
 
Jeder Prozess kann weitere Prozesse erzeugen. Die erzeugten Prozesse bezeichnet
 
man als Kindprozesse. Jeder Kindprozess weiß anhand der PID, woher er stammt.
 
 
 
Alle Prozesse sind von einem anderen Prozess gestartet worden, mit Ausnahme
 
des Pseudoprozesses (noch im Kernel beim Starten erzeugter Prozess). Dieser hat
 
die Prozessnummer 0. Er hat die Aufgabe, den Init Prozess ( /sbin/init die Nummer
 
1) zu starten, der in System V alle anderen Prozesse direkt oder über seine Kind-
 
prozesse startet. (init wird konfiguriert durch die /etc/inittab)
 
 
 
Es gibt zwei Arten wie ein Prozess gestartet werden kann:
 
 
 
# Fork und Exec: Prozessumgebung wird dupliziert, der neue Prozess bekommt eine eigene neue PID
 
# Exec: Alter Prozess wird durch neuen Prozess überladen (geht mit dem shell-buildin exec)
 
 
 
'''Rechte auf Objekte UID GID'''
 
Ob ein Prozess auf eine Datei zugreifen kann, entscheidet der Kernel anhand der
 
Zugriffssrechte, die auf der Datei gesetzt sind. Er checkt anhand der UID und GID
 
des Prozesses, ob es erlaubt ist. Mit dieser Technik wird letztendlich geprüft, was
 
ein User darf, und was nicht.
 
 
 
===Rechenzeit und Priorität===
 
Da auch bei Prozessen eine Gerechtigkeit herschen muss, muss eine Instanz
 
darüber entscheiden wie lange ein Prozess Rechenzeit verbrauchen darf.
 
Folgende Kenndaten werden dazu benötigt
 
* clocktick = Zeiteinheit
 
* n = Faktor über den Kernel einstellbar
 
* slice = n <nowiki>*</nowiki> clocktick
 
* agingtime = weitere Zeiteinheit über den Kernel einstellbar
 
 
 
Es wird davon ausgegangen das der Prozess mit der niedrigsten Priorität gerade
 
rechnet. Pro clocktick erhöht sich die Priorität dieses Prozesses um eins.
 
 
 
Jetzt können 3 Situationen eintreten die alle dazu führen das der Scheduler
 
aufgerufen wird.
 
 
 
# Prozess blockiert wegen einer Ausgabe oder Eingabe.
 
# Gibt Rechenzeit freiwillig ab.
 
# Der Slice endet.
 
 
 
Der Aufruf des Schedulers bewirkt das der Prozess mit der niedrigsten Priorität
 
gescheduled wird, er also nun rechnen darf. Nach Ablauf der agingtime werden
 
nun die Prozesse "gealtert". Das geschieht nach folgender Formel
 
 
 
Neue Priorität = Alte Priorität / 2 + Nicewert
 
 
 
Der User hat die Möglichkeit, über den sogenannten Nicewert den Grundwert für
 
einen Prozess zu senken. Der Prozess braucht dann länger für seine Abarbeitung.
 
Er verhält sich somit netter zu den anderen Prozessen. Normale User können nur
 
netter werden, der Systemverwalter kann auch nicht netter (gemeiner) werden. Der
 
Bereich liegt zwischen 19 (sehr nett) bis 0 (weniger nett) für die User, und 19 bis
 
-20 für root.
 
 
 
[[Image:pri.png]]
 
 
 
'''Signale'''
 
 
 
Mit den Kommando kill und killall kann man Prozessen Signale schicken
 
 
 
kill -Signalnummer PID
 
 
 
Signalnummer
 
{| border=1 cellpadding=2
 
!Signalname
 
!Wert
 
!Aktion
 
|-
 
|SIGHUP
 
|1
 
|Neuinitialisierung eines Prozesses
 
|-
 
|SIGINT
 
|2
 
|Interrupt-Signal von der Tastatur (STRG+c)
 
|-
 
|SIGQUIT
 
|3
 
|Interrupt-Signal von der Tastatur (STRG+c) mit Dump
 
|-
 
|SIGKILL
 
|9
 
|unwiderrufliches Beendigungssignal (Töten)
 
|-
 
|SIGSEGV
 
|11
 
|Ungültige Speicherreferenz (bedeutet oft auf defekten Speicher)
 
|-
 
|SIGTERM
 
|15
 
|Beendigungssignal (geöffnete Dateien werden geschlossen)
 
|-
 
|SIGCONT
 
|18
 
|Weiterfahren, wenn gestoppt
 
|-
 
|SIGSTOP
 
|19
 
|Prozessstop
 
|}
 
 
 
Beispiel
 
root@zero:~# kill -1 7562
 
 
 
===Programme im Zusammenhang mit Prozessen===
 
====ps: Zeigt die Prozesse mit ihrem Status an====
 
 
 
Option Beschreibung (BSD)
 
*l langes Format
 
*U user zeige Prozesse des Users an!
 
*u zeige für jeden Prozess Besitzer und Startzeit an
 
*j Jobs-Format: Zeige PGID und SID an
 
*s Informationen über Signale ausgeben
 
*m Speicher-Informationen anzeigen
 
*f Baumstruktur der Prozesse anzeigen (ähnlich pstree)
 
*a alle Prozesse (jedes Benutzers) anzeigen
 
*x kontrollierendes Terminal nicht anzeigen
 
*e Für den Prozess gültige Umgebungsvariablen mit anzeigen (sinnvollerweise mit mehreren Optionen »w« anwenden, um die Ausgabe nicht am Zeilenende abzuschneiden)
 
*w längere Ausgabe. »w« kann mehrfach verwendet werden, um die maximale Länge um je eine Zeile zu vergrößern
 
*h Header mit Feldbezeichnern unterdrücken
 
*r nur laufende Prozesse ausgeben
 
*n User-ID statt User-Name ausgeben
 
*txx nur Prozesse ausgeben, die vom angegebenen Terminal kontrolliert werden. xx kann entweder einer der Terminal-Gerätenamen unter /dev (z.B. tty1) oder die entsprechende Kurzbezeichnung ohne »tty« (z.B. 1) sein.
 
 
 
thomas@cardassia:~# ps
 
  PID TTY          TIME CMD
 
14134 pts/0    00:00:00 bash
 
14149 pts/0    00:00:00 ps
 
 
root@zero:~# ps alx | grep apache
 
5    33  1427  6710  20  0  13816  3064 skb_re S    ?          0:00 /usr/sbin/apache2 -k start
 
5    33  1428  6710  20  0 235672  3316 pipe_w Sl  ?          0:00 /usr/sbin/apache2 -k start
 
5    33  1429  6710  20  0 235672  3320 pipe_w Sl  ?          0:00 /usr/sbin/apache2 -k start
 
5    0  6710    1  20  0  14192  4460 select Ss  ?          0:01 /usr/sbin/apache2 -k start
 
0    0 13376 13244  20  0  3248  824 pipe_w S+  pts/13    0:00 grep apache
 
 
 
zeige Prozesse des Users an!
 
thomas@cardassia:~$ ps u zeige für jeden Prozess Besitzer und Startzeit an
 
USER      PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 
thomas    8758  0.0  0.0  7744  3068 pts/0    Ss  16:37  0:00 bash
 
thomas  10137  0.0  0.0  7728  2988 pts/1    Ss  16:45  0:00 bash
 
 
 
zeige Prozesse des Users und zeige für jeden Prozess Besitzer und Startzeit an
 
thomas@cardassia:~$ ps uU root
 
USER      PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 
root        1  0.0  0.0  3188  2060 ?        Ss  16:24  0:01 /sbin/init
 
root        2  0.0  0.0      0    0 ?        S<  16:24  0:00 [kthreadd]
 
root        3  0.0  0.0      0    0 ?        S<  16:24  0:00 [migration/0]
 
 
 
====pgrep: Zeigt die PID zu einem Prozess an====
 
*zeigt alle Prozesse an die auf die das Muster
 
root@zero:~# pgrep mc
 
13552
 
13734
 
*zeigt nur die an die einem User gehören
 
root@zero:~# pgrep -u thomas mc
 
13552
 
zeigt denn vollständigen Prozessnamen an
 
root@zero:~# pgrep -l apa
 
1427 apache2
 
1428 apache2
 
1429 apache2
 
6710 apache2
 
zeigt den zuletzt gestarteten Prozess
 
root@zero:~# pgrep -n apa
 
1429
 
zeigt nur Prpzesse an die genau auf den Namen passen
 
root@zero:~# pgrep -x apache2
 
1427
 
1428
 
1429
 
6710
 
 
 
====pkill: schickt einem Prozess anhand des Namens ein Signal====
 
beendet den Prozess
 
root@zero:~# pkill -x apache2
 
beendet den Prozess der als erstes gestartet wurde
 
root@zero:~# pkill -xo mc
 
 
 
====nice: Lässt ein Programm mit verändertem Grundwert der Priorität laufen====
 
root@zero:~# nice
 
0
 
root@zero:~# nice -n 9 bash
 
root@zero:~# nice
 
9
 
root@zero:~#
 
 
 
====renice: Ändert den Grundwert der Priorität eines laufenden Prozesses====
 
root@zero:~# renice 10 5742
 
5742: Alte Priorität: 0, neue Priorität: 10
 
 
 
====top: Zeigt die Prozesse mit ihrem Status an (Abbrechen mit q)====
 
root@zero:~# top
 
top - 08:51:08 up 20 min,  1 user,  load average: 0.00, 0.02, 0.06
 
Tasks:  93 total,  1 running,  92 sleeping,  0 stopped,  0 zombie
 
Cpu(s):  1.6%us,  3.1%sy,  0.1%ni, 84.9%id, 10.2%wa,  0.0%hi,  0.2%si,  0.0%st
 
Mem:    509504k total,  273948k used,  235556k free,    11312k buffers
 
Swap:  321260k total,        0k used,  321260k free,  118380k cached
 
 
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                     
 
2208 mysql    20  0  125m  21m 5552 S  1.7  4.2  0:02.29 mysqld                                                                       
 
3201 root      20  0  2444 1064  828 R  1.7  0.2  0:00.04 top                                                                         
 
    1 root      20  0  1908  780  564 S  0.0  0.2  0:02.19 init                                                                         
 
    2 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kthreadd                                                                     
 
    3 root      RT  -5    0    0    0 S  0.0  0.0  0:00.00 migration/0                                                                 
 
    4 root      15  -5    0    0    0 S  0.0  0.0  0:00.03 ksoftirqd/0                                                                 
 
    5 root      RT  -5    0    0    0 S  0.0  0.0  0:00.00 watchdog/0                                                                   
 
    6 root      15  -5    0    0    0 S  0.0  0.0  0:00.04 events/0                                                                     
 
    7 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 khelper                                                                     
 
    8 root      RT  -5    0    0    0 S  0.0  0.0  0:00.00 kstop/0                                                                     
 
    9 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kintegrityd/0                                                               
 
  10 root      15  -5    0    0    0 S  0.0  0.0  0:00.03 kblockd/0                                                                   
 
  11 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kacpid                                                                       
 
  12 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kacpi_notify                                                                 
 
  13 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 cqueue                                                                       
 
  14 root      15  -5    0    0    0 S  0.0  0.0  0:00.53 ata/0                                                                       
 
  15 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 ata_aux
 
 
 
Kommandos
 
 
 
*h - Hilfe
 
*u - User
 
*k - Kill
 
*r - Renice
 
*d - Delay (Default 3s)
 
*n - Tasks (Default unbegrenzt)
 
*W - Schreibe aktuelle Konfiguration in Datei
 
*q - Quit
 
 
 
====pstree: Zeigt die Prozesse als Baumstruktur====
 
Mit -p werden auch die PID's ausgegeben
 
root@zero:~# pstree
 
init─┬─NetworkManager
 
      ├─acpid
 
      ├─apache2───5*[apache2]
 
      ├─atd
 
      ├─bluetoothd
 
      ├─console-kit-dae───63*[{console-kit-dae}]
 
      ├─cron
 
      ├─cupsd
 
      ├─dbus-daemon
 
      ├─dd
 
      ├─gdm───gdm─┬─Xorg
 
      │          └─gdmgreeter
 
      ├─6*[getty]
 
      ├─hald───hald-runner─┬─hald-addon-acpi
 
      │                    ├─hald-addon-inpu
 
      │                    └─2*[hald-addon-stor]
 
      ├─klogd
 
      ├─nm-system-setti
 
      ├─nmbd
 
      ├─nscd───11*[{nscd}]
 
      ├─portmap
 
      ├─rpc.statd
 
      ├─slapd───2*[{slapd}]
 
      ├─smbd───smbd
 
      ├─sshd───sshd───bash───bash───pstree
 
      ├─syslogd
 
      ├─system-tools-ba
 
      ├─udevd
 
      ├─winbindd─┬─winbindd───winbindd
 
      │          └─3*[winbindd]
 
      └─wpa_supplicant
 
 
 
===Jobs===
 
Unter einem Job versteht man ein Programm, welches man von der Shell gelöst
 
hat. D. h. man kann ganz normal weiter arbeiten und der Job verrichtet seinen
 
Dienst im Hintergrund. Man kann jederzeit zu diesem Job wieder Kontakt
 
aufnehmen.
 
 
 
Ein Job kann auf 2 Arten gestarten werden:
 
 
 
# Durch Anhängen des & Zeichens beim Programmstart
 
root@zero:~# tail -f /var/log/messages &
 
Jun 19 06:59:31 zero -- MARK --
 
Jun 19 07:19:31 zero -- MARK --
 
Jun 19 07:39:32 zero -- MARK --
 
Jun 19 07:44:57 zero syslogd 1.5.0#5ubuntu3: restart.
 
Jun 19 07:59:32 zero -- MARK --
 
Jun 19 08:19:32 zero -- MARK --
 
Jun 19 08:39:32 zero -- MARK --
 
Jun 19 08:59:32 zero -- MARK --
 
Jun 19 09:19:33 zero -- MARK --
 
Jun 19 09:39:33 zero -- MARK --
 
[3] 27421
 
 
 
# Durch Stoppen des Prozesses durch Drücken von Strg-Z und in den Hintergrund schicken mit %n (n ist die Jobnummer)
 
root@zero:~# watch cat /proc/cpuinfo
 
Strg-Z
 
[4]+  Stopped                watch cat /proc/cpuinfo
 
root@zero:~# bg %4
 
[4]+ watch cat /proc/cpuinfo &
 
 
 
Anweisungen im Zusammenhang mit Jobs (n ist die Jobnummer)
 
* bg %n : Einen Job in den Hintergrund stellen (wie oben)
 
* fg %n : Einen Job in den Vordergrund holen
 
root@zero:~# fg %4
 
watch cat /proc/cpuinfo
 
 
 
* jobs : Aktive Jobs ausgeben
 
 
 
root@zero:~# jobs
 
[1]  Running                tail -f /var/log/syslog &
 
[2]  Running                tail -f /var/log/syslog &
 
[3]-  Running                tail -f /var/log/messages &
 
[4]+  Stopped                watch cat /proc/cpuinfo
 
 
 
* Strg-Z : Einen Vordergrund-Job vorübergehend anhalten
 
* kill -STOP %n : Unterbricht Job im Hintergrund
 
root@zero:~# kill -STOP %1
 
root@zero:~# jobs
 
[1]+  '''Stopped'''                tail -f /var/log/syslog
 
[2]   Running                tail -f /var/log/syslog &
 
[3]   Running                tail -f /var/log/messages &
 
[4]-  Stopped                watch cat /proc/cpuinfo
 
* kill -CONT %n : Setzt den unterbrochenen Job im Hintergrund fort
 
root@zero:~# kill -CONT %1
 
root@zero:~# jobs
 
[1]+  '''Running'''                tail -f /var/log/syslog &
 
[2]  Running                tail -f /var/log/syslog &
 
[3]   Running                tail -f /var/log/messages &
 
[4]-  Stopped                watch cat /proc/cpuinfo
 
* kill -KILL %n : Tötet Job im Hintergrund
 
root@zero:~# kill -KILL %1
 
root@zero:~# jobs
 
[1]+  '''Killed'''                  tail -f /var/log/syslog
 
[2]  Running                tail -f /var/log/syslog &
 
[3]  Running                tail -f /var/log/messages &
 
[4]-  Stopped                watch cat /proc/cpuinfo
 
root@zero:~# jobs
 
[2]  Running                tail -f /var/log/syslog &
 
[3]-  Running                tail -f /var/log/messages &
 
[4]+  Stopped                watch cat /proc/cpuinfo
 
 
 
Bedingungen, die zu Jobausführung eingehalten werden sollen:
 
* Der Job soll nicht auf den Bildschirm schreiben (Standardausgabe +Standardfehlerkanal).
 
* Er soll keine Eingaben vom Benutzer erwarten.
 
 
 
==Suchen von Dateien==
 
===find===
 
find ab_wo_wird_gesucht was_wird_gesucht aktion
 
find [Pfad] [Bedingung] [Aktion]
 
 
 
====Nach Namen====
 
find [Pfad] '''-name''' [Name]
 
 
Finde alle Dateien mit Namen test ab dem Verzeichnis /home und gebe diese Zeilenweise aus
 
root@zero:~# find /home -name test -print
 
/home/xinux/test
 
/home/test
 
 
 
Wie oben, jedoch mit Namensanfang test
 
root@zero:/home/xinux# find /home -name 'test*'
 
/home/xinux/testdatei
 
/home/xinux/test
 
/home/test
 
 
 
====Nach Benutzer(Eigentümer)====
 
root@zero:/tmp# find /tmp/ '''-user''' xinux
 
/tmp/datei
 
 
 
====Nach Gruppe====
 
root@zero:/tmp# find /tmp/ '''-group''' hacker
 
/tmp/datei3
 
/tmp/datei2
 
 
 
 
 
 
 
====Nach Typ====
 
Es wird nach Dateien anhand Ihrer Art gesucht:
 
find [Pfad] '''-type''' [Typ]  
 
Typ:
 
* f: Normale Dateien
 
root@zero:~# find /tmp/ -type f
 
/tmp/mbr.img
 
/tmp/datei
 
/tmp/zeugs
 
/tmp/.X0-lock
 
* d: Verzeichnisse
 
root@zero:~# find /var/log -type d
 
/var/log
 
/var/log/apache2
 
/var/log/unattended-upgrades
 
/var/log/apparmor
 
/var/log/ConsoleKit
 
/var/log/dist-upgrade
 
/var/log/dist-upgrade/20090526-1052
 
/var/log/cups
 
/var/log/apt
 
/var/log/fsck
 
/var/log/samba
 
/var/log/samba/cores
 
/var/log/samba/cores/smbd
 
/var/log/samba/cores/nmbd
 
/var/log/samba/cores/winbindd
 
/var/log/installer
 
/var/log/gdm
 
/var/log/news
 
* c: Char Devices (Zeichenorientierte Gerätedatei)
 
root@zero:~# find / -type c
 
/lib/udev/devices/kmem
 
/lib/udev/devices/null
 
/lib/udev/devices/console
 
/lib/udev/devices/ppp
 
/lib/udev/devices/net/tun
 
* b: Block Devices (Blockorientierte Gerätedatei)
 
* p: Benannte Pipe
 
* l: Links
 
* s: Sockets
 
 
 
====Nach Permissions====
 
root@cardassia:~# find /usr/bin/ -perm +4000 -exec ls -l {} \;
 
-rwsr-xr-x 1 root root 115136 2008-09-01 15:17 /usr/bin/sudoedit
 
-rwsr-xr-x 1 root root 32988 2008-06-09 20:10 /usr/bin/passwd
 
 
 
====Nach Modifikation====
 
Listet alle Dateien in /etc auf, die innerhalb von zwei Tagen modifiziert wurden
 
root@zero:/var/log# find /etc/ -mtime 2 -print
 
/etc/apache2
 
/etc/apache2/mods-available
 
/etc/apache2/conf.d
 
/etc/apache2/sites-available
 
/etc/bash_completion.d
 
/etc/blkid.tab.old
 
/etc/firefox-3.0/profile
 
/etc/firefox-3.0/profile/chrome
 
/etc/firefox-3.0/pref
 
/etc/profile.d
 
/etc/ufw/applications.d
 
/etc/logrotate.d
 
/etc/xulrunner-1.9
 
/etc/blkid.tab
 
/etc/cron.daily
 
/etc/alternatives
 
/etc/alternatives/x-www-browser
 
/etc/alternatives/xulrunner
 
/etc/gre.d
 
/etc/hal/fdi/policy
 
/etc/dbus-1/system.d
 
/etc/udev/rules.d
 
 
 
====Nach Größe====
 
Finde Dateien in /tmp, die größer als 100 MByte sind
 
root@zero:/tmp# find /tmp/ -size +100M
 
/tmp/datei
 
 
 
Finde Dateien in /tmp, die kleiner als 100 KByte sind
 
root@zero:/tmp# find /tmp/ -size -100k
 
/tmp/
 
/tmp/datei3
 
/tmp/backup
 
/tmp/datei2
 
/tmp/.winbindd
 
/tmp/.winbindd/pipe
 
/tmp/mbr.img
 
/tmp/zeugs
 
/tmp/.ICE-unix
 
/tmp/.X0-lock
 
/tmp/datei1
 
/tmp/.X11-unix
 
/tmp/.X11-unix/X0
 
/tmp/pulse-PKdhtXMmr18n
 
 
 
====Nach Berechtigungen====
 
Finde Dateien in Home mit der Berechtigung 777 (-rwxrwxrwx)
 
root@zero:/var# find /home/ -perm 777
 
/home/samba
 
/home/xinux/Examples
 
/home/xinux/.pulse/1f0763ee4cf4c7e1d3c07fd149dda37b:runtime
 
/home/test/Examples
 
 
 
====Nach Zeit====
 
Modifiziert in der letzten Minute
 
root@zero:~# find /var    -mmin -1
 
/var/log/debug
 
/var/log/kern.log
 
/var/log/syslog
 
/var/run/klogd/kmsg
 
 
 
Modifiziert vor mehr als 9 Tagen
 
root@zero:~# find /var    -mtime +9
 
 
 
Zugriff vor mehr als 9 Minuten
 
root@zero:~# find /var    -amin +9
 
 
 
Kenndaten geändert in den letzen 2 Tagen
 
root@zero:~# find /var    -ctime -2
 
 
 
 
 
Ausführen eines Befehls
 
root@zero:~# find / -name "xinux?" -exec ls -l {} \;
 
 
 
Ausführen eines Befehls mit Rückfrage
 
root@zero:~# find / -name "xinux?" -ok  rm  {} \;
 
< rm ... /tmp/xinux3 > ? y
 
< rm ... /tmp/xinux2 > ? n
 
< rm ... /tmp/xinux1 > ? y
 
 
 
===locate===
 
Locate arbeitet über einen Index, der erstellt und aktualisiert werden muss. Aus diesem Grund kann locate teilweise nicht
 
akutell sein. Es ist immer schneller als find und es durchsucht immer das ganze Dateisystem.
 
locate [Dateiname]
 
 
Lokalisiere die Datei wvdial.conf. Anmerkung: Der Stern wird beim Suchen automatisch hinzugefügt. Entspricht also
 
wvidal.conf*
 
root@zero:~# locate wvdial.conf
 
/etc/wvdial.conf
 
/usr/share/man/man5/wvdial.conf.5.gz
 
/var/lib/dpkg/info/wvdial.conffiles
 
/var/lib/dpkg/info/wvdial.config
 
 
 
Lokalisiere die Datei wvdial.conf und nur diese
 
root@zero:~# locate -b '\wvdial.conf'
 
/etc/wvdial.conf
 
 
 
Aktualisieren des Indexes
 
root@zero:~# updatedb
 
 
 
==Wie wird ein Kommando lokalisiert==
 
Wenn die Shell alle Ersetzungen in der Kommandozeile vorgenommen und alle Umleitungen vorbereitet hat, ist der Zeitpunkt
 
gekommen, auf den der Anwender die ganze Zeit gewartet hat. Die Shell versucht das Kommando auszuführen. Dazu muss sie
 
es aber erst lokalisieren. Das erste passende Kommando wird ausgeführt.
 
 
 
Als Kommandoname wird immer das erste Wort eines einfachen Kommandos erkannt. Ein Kommandoname kann mit Pfadnamen in
 
einem Verzeichnis (absolut oder relativ) angegeben werden. Die Shell erkennt dies an (mindestens) einem Slash `/'
 
im Kommandonamen. Wenn kein Verzeichnis angegeben ist, versucht die Shell selbst, das Kommando zu finden. Dazu wird
 
der Kommandoname zuerst in der Hashtabelle gesucht, dann wird er mit den Synonymen, mit den Scriptfunktionen und
 
schließlich mit den Shellfunktionen verglichen.
 
 
 
Wird auf diese Weise kein Programm dieses Namens gefunden, werden alle in der PATH-Umgebungsvariablen aufgeführten
 
Verzeichnisse nach einer ausführbaren Datei dieses Namens durchsucht. Wird auch hier kein passendes Kommando gefunden,
 
gibt die Shell eine Fehlermeldung aus.
 
 
 
===which und type===
 
====which====
 
which gibt die vollen Pfadnamen der Dateien aus, die bei Benutzung des angegebenen Befehls ausgeführt werden würden.
 
 
 
which [-a] Dateiname
 
 
 
Optionen:
 
 
 
* -a : Alle Treffer ausgeben, nicht nur den ersten
 
* --skip-dot : Verzeichnisse, die mit einem Punkt beginnen, auslassen
 
 
 
Beispiel
 
root@zero:~# which startx
 
/usr/bin/startx
 
 
 
====type====
 
Anzeigen der absoluten Pfadnamen von Befehlen, und ob sich diese Befehle in der Hash-Tabelle der aktuellen
 
Shell befinden.
 
 
 
type [Optionen] Befehle
 
 
 
Beispiel
 
root@zero:~# type ls
 
ls is aliased to `ls --color=auto'
 
 
 
Optionen:
 
 
 
* -a : Alle vorkommenden Befehle werden ausgegeben, nicht nur das, welches aufgerufen werden würde
 
root@zero:~# type '''-a''' ls
 
ls is aliased to `ls --color=auto'
 
ls is /bin/ls
 
 
 
* -p : Anzeigen des Eintrags von Befehl in der Hash-Tabelle. Dieser Wert kann sich vom ersten Auftreten des Befehls in PATH
 
unterscheiden
 
root@zero:~# type '''-p''' apache2
 
/usr/sbin/apache2
 
 
 
* -t : Anzeigen, ob Befehl ein Aliasname, ein Schlüsselwort, eine Funktion, ein eingebauter Befehl oder eine Datei ist
 
root@zero:~# type '''-t''' apache2
 
file
 

Aktuelle Version vom 18. Juni 2024, 11:54 Uhr