INodes: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Inode (oder I-Node) wird im Deutschen am besten als Informationsknoten oder Indexeintrag bezeichnet. Er fasst alle Attribute einer Datei zusammen außer dem In…“)
 
 
(37 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
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.
+
=Prinzip=
[[Bild:Datsys2.png]]
+
*Inode (oder I-Node) wird im Deutschen am besten als Informationsknoten oder Indexeintrag bezeichnet.  
===Daten===
+
*Er fasst alle Attribute einer Datei zusammen außer dem Inhalt und dem Namen der Datei.
 +
{{#drawio:inodes-1}}
 +
=Daten=
 
{| border=1 cellpadding=2
 
{| border=1 cellpadding=2
 
|type
 
|type
Zeile 38: Zeile 40:
 
|}
 
|}
  
===Dateiarten===
+
=Dateiarten=
 
{| border=1 cellpadding=2
 
{| border=1 cellpadding=2
 
!Zeichen
 
!Zeichen
Zeile 73: Zeile 75:
 
|}
 
|}
  
====Normale Dateien====
+
==Normale Dateien==
Unter einer normalen Datei versteht man die Ansammlung von Daten. Dies kann ein Text, Programm, Bild oder sonstiges sein.  
+
;Unter einer normalen Datei versteht man die Ansammlung von Daten.
Beispiel
+
;Dies kann ein Text, Programm, Bild oder sonstiges sein.  
root@zero:~# ls -l text | cut -c 1
+
Zu erkennen an einem '''-''' in ls -l
-
+
<pre>
 +
xinux@debi:~$ ls -l text | cut -c 1
 +
-
 +
</pre>
  
====Verzeichnisse====
+
==Verzeichnisse==
Dateien werden in Verzeichnissen gespeichert, nur so ist eine Ordnung möglich.  
+
;Dateien werden in Verzeichnissen gespeichert, nur so ist eine Ordnung möglich.  
root@zero:~# mkdir -v Ordner
+
<pre>
mkdir: Verzeichnis „Ordner“ angelegt
+
xinux@debi:~$ mkdir -v Ordner
+
mkdir: Verzeichnis „Ordner“ angelegt
root@zero:~# ls -ld Ordner | cut -c 1
+
</pre>
d
 
  
====Gerätedateien (Block und Char)====
+
Zu erkennen an einem d in ls -l
Gerätedateien ermöglichen Anwendungsprogrammen unter Benutzung des  Kernels den Zugriff auf die Hardwarekomponenten des Systems. Ansprechbar über Major und Minor Nummern
+
<pre>
 +
xinux@debi:~$ ls -ld Ordner | cut -c 1
 +
d
 +
</pre>
  
Beispiele
+
==Gerätedateien (Block und Char)==
 
+
*Gerätedateien ermöglichen Anwendungsprogrammen unter Benutzung des  Kernels den Zugriff auf die Hardwarekomponenten des Systems.
Sicherung des Master Boot Records der ersten Festplatte
+
*Ansprechbar über Major und Minor Nummern
root@zero:~# dd if=/dev/sda of=/tmp/mbr.img bs=512 count=1
+
*Es gibt zweit Arten von Gerätedateien
 +
*Block und Character Devices
 +
*Block Devices werden gepuffert geschrieben.
 +
*Character Devices Zeichen für Zeichen.
 +
;Schaubild
 +
{{#drawio:block-char-1}}
 +
{| class="wikitable"
 +
! Block Devices !! Character Devices
 +
|-
 +
| Festplatte, SSD, RAID, USB-Stick || Tastatur, Maus, Serielle Schnittstellen, Soundkarte, Drucker
 +
|}
  
Block Device  
+
==Block Device==
root@zero:~# ls -l /dev/sda | cut -c 1  
+
*ls -l /dev/sda | cut -c 1  
 
  b
 
  b
  
Character Device  
+
==Character Device==
root@zero:~# ls -l /dev/ttyS0  | cut -c 1  
+
*ls -l /dev/ttyS0  | cut -c 1  
 
  c
 
  c
 
+
;Erstellen einer Gerätedatei
Erstellen einer Gerätedatei
+
*mknod sata1 b 8 0  
root@zero:/dev# mknod sata1 b 8 0  
+
*fdisk -l /dev/sata1  
root@zero:/dev# fdisk -l /dev/sata1  
 
 
   
 
   
 
  Platte /dev/sata1: 6442 MByte, 6442450944 Byte
 
  Platte /dev/sata1: 6442 MByte, 6442450944 Byte
Zeile 117: Zeile 133:
 
  /dev/sata1p5            744        783      321268+  82  Linux Swap / Solaris
 
  /dev/sata1p5            744        783      321268+  82  Linux Swap / Solaris
  
====Named Pipes====
+
==Named Pipes==
Benannte Pipes (Named Pipes) können dagegen auch zur Kommunikation zwischen Prozessen eingesetzt werden, die nicht miteinander
+
*Benannte Pipes (Named Pipes) können dagegen auch zur Kommunikation zwischen Prozessen eingesetzt werden  
verwandt sind und sich darüber hinaus auf unterschiedlichen Rechnern innerhalb eines Netzwerkes befinden dürfen. Sie sind  
+
*Sie sind flexibler als anonyme Pipes und eignen sich für sogenannte Client-Server-Anwendungen.
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
Benannte Pipes ermöglichen die gleichzeitige Kommunikation in beide Richtungen, das heißt, Daten können im Vollduplexbetrieb  
+
*Es können Daten im Vollduplexbetrieb zwischen den Prozessen ausgetauscht werden.
zwischen den Prozessen ausgetauscht werden.
+
===Erstelle Named Pipe mit Namen /tmp/roehre===
+
;Schreibe "hallo welt" in die Pipe und bleibe
Erstelle Named Pipe mit Namen /tmp/roehre. Schreibe "hallo welt" in die Pipe und bleibe
+
*mkfifo /tmp/roehre
xinux@zero:~$ mkfifo /tmp/roehre
+
*echo hallo welt > /tmp/roehre  
xinux@zero:~$ echo hallo welt > /tmp/roehre  
+
===Gebe Inhalt der Pipe mit cat aus===
 
+
*cat < /tmp/roehre  
Gebe Inhalt der Pipe mit cat aus
 
root@zero:~# cat < /tmp/roehre  
 
 
  hallo welt
 
  hallo welt
root@zero:~# ls -l /tmp/roehre | cut -c 1
+
*ls -l /tmp/roehre | cut -c 1
 
  p
 
  p
  
====Sockets====
+
==Sockets (Geht über Grundlagen hinaus)==
Schnittstelle um es lokalen Anwendungen zu ermöglichen, miteinander Netwerkmässig zu kommunizieren.
+
*Schnittstelle um es lokalen Anwendungen zu ermöglichen, miteinander Netwerkmässig zu kommunizieren.
 
+
*netstat  -lnxp | tail -1
root@lydia:~# netstat  -lnxp | tail -1
 
 
   unix  2 [ ACC ] STREAM HÖRT 21951 6646/nm-applet /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede
 
   unix  2 [ ACC ] STREAM HÖRT 21951 6646/nm-applet /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede
 
+
*ls -l /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede  | cut -c 1  
root@lydia:~# ls -l /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede  | cut -c 1  
 
 
  s
 
  s
 +
===Socket erstellen===
 +
*nc  -lkU a.sock
  
====Links====
+
==Links==
Bei Links handelt es sich um symbolische Verweise auf andere Dateien
+
*Bei Links handelt es sich um symbolische Verweise auf andere Dateien
 
+
===Softlink===
'''Softlink'''
+
;Ein Softlink ist eine Datei die nur auf den Namen einer anderen Datei verweist.  
Ein Softlink ist eine Datei die nur auf den Namen einer anderen Datei verweist. Wenn die Originaldatei gelöscht wird, zeigt  
+
;Wenn der originale Hardlink gelöscht wird, zeigt der Link ins Leere.  
der Link ins Leere.  
+
;Erstellen eines Softlinks
 
 
ln -s datei softlink
 
  
 
{| border=1 cellpadding=2
 
{| border=1 cellpadding=2
Zeile 157: Zeile 169:
 
|-
 
|-
 
| Nachteile
 
| Nachteile
| Wenn das Original gelöscht ist, ist kein Zugriff mehr möglich
+
| Wenn der Hardlink gelöscht ist, ist kein Zugriff mehr möglich
 
|}
 
|}
  
Beispiel
+
;Beispiele
 
Normal
 
Normal
root@zero:~# ln -s text verweis
+
*ln -s text verweis
Verbose
+
;Verbose
root@zero:~# ln -sv text verweis
+
*ln -sv text verweis
 
  „verweis“ -> „text“
 
  „verweis“ -> „text“
Erzwungenes Überschreiben
+
;Erzwungenes Überschreiben
root@zero:~# ln -sf dat verweis
+
*n -sf dat verweis
Auswirkungen
+
;Auswirkungen
root@zero:~# ls -l dat verweis  
+
*ls -l dat verweis  
 
  -rw-r--r-- 1 root root 4 2009-07-29 13:56 dat
 
  -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
 
  lrwxrwxrwx 1 root root 3 2009-07-29 13:57 verweis -> dat
Kopieren(Original wird kopiert)
+
;Kopieren(Original wird kopiert)
root@lydia:~# cp -v verweis /tmp/
+
*cp -v verweis /tmp/
 
  „verweis“ -> „/tmp/verweis“
 
  „verweis“ -> „/tmp/verweis“
  root@lydia:~# ls -l /tmp/verweis  
+
*ls -l /tmp/verweis  
 
  -rw-r--r-- 1 root root 4 2009-07-29 13:59 /tmp/verweis
 
  -rw-r--r-- 1 root root 4 2009-07-29 13:59 /tmp/verweis
Kopieren(Link wird kopiert)
+
;Kopieren(Link wird kopiert)
root@lydia:~# cp -vd verweis /tmp/
+
*cp -vd verweis /tmp/
 
  „verweis“ -> „/tmp/verweis“
 
  „verweis“ -> „/tmp/verweis“
root@lydia:~# ls -l /tmp/verweis  
+
*ls -l /tmp/verweis  
 
  lrwxrwxrwx 1 root root 3 2009-07-29 14:00 /tmp/verweis -> dat
 
  lrwxrwxrwx 1 root root 3 2009-07-29 14:00 /tmp/verweis -> dat
  
 
+
===Hardlinks===
'''Hardlinks'''
+
*Eigentlich ist jede Datei ein Hardlink.
ln datei hardlink
+
*Ein Hardlink ist ein Verzeichniseintrag, der auf eine Inode verweist.
Eigentlich ist jede Datei ein Hardlink. Ein Hardlink ist ein Verzeichniseintrag,
+
*Beim Erzeugen einer Datei verweist ein Eintrag auf eine Inode.
der auf eine Inode verweist. Beim Erzeugen einer Datei verweist ein Eintrag auf
+
*Man kann dann weitere Verweise erzeugen.
eine Inode. Man kann dann weitere Verweise erzeugen. Der Linkcounter wird
+
*Der Linkcounter wird jeweils um 1 erhöht.  
jeweils um 1 erhöht. Beim Löschen einer Datei wird er jeweils um 1 reduziert.
+
*Beim Löschen einer Datei wird er jeweils um 1 reduziert.
Wird der Wert 0 erreicht, ist die Datei gelöscht.
+
*Wird der Wert 0 erreicht, ist die Datei gelöscht.
 
{| border=1 cellpadding=2
 
{| border=1 cellpadding=2
 
| Vorteile
 
| Vorteile
|Zugriff auf die Daten, selbst wenn das Orginal gelöscht ist.
+
|Zugriff auf die Daten, selbst wenn der erste Link gelöscht ist.
 
|-
 
|-
 
|Nachteile
 
|Nachteile
Zeile 199: Zeile 211:
 
Ist nur innerhalb einer Partion möglich.
 
Ist nur innerhalb einer Partion möglich.
 
|}
 
|}
 
+
;Beispiele
Beispiel
+
*touch 1
root@zero:~# touch 1
+
*echo "text" > 1
root@zero:~# echo "text" > 1
+
*ln 1 2
root@zero:~# ln 1 2
+
*more 2
root@zero:~# more 2
 
 
  text
 
  text
root@zero:~# echo "doch kein text" > 1
+
*echo "doch kein text" > 1
root@zero:~# more 1
+
*more 1
 
  doch kein text
 
  doch kein text
root@zero:~# more 2
+
*more 2
 
  doch kein text
 
  doch kein text
  
Weitere Optionen:
+
;Weitere Optionen:
 
  -b sichert Dateien, statt sie zu überschreiben  
 
  -b sichert Dateien, statt sie zu überschreiben  
 
  -f Überschreibt bestehende, gleichnamige Dateien
 
  -f Überschreibt bestehende, gleichnamige Dateien
 
  -i fragt vor dem Überschreiben nach Bestätigung
 
  -i fragt vor dem Überschreiben nach Bestätigung
 
  -v ausführliche Meldungen
 
  -v ausführliche Meldungen
Softlink mit dem Namen passwd im Homeverzeichnis angelegt
+
;Softlink mit dem Namen passwd im Homeverzeichnis angelegt
xinux@zero:~$ ln -vs /etc/passwd .
+
*ln -vs /etc/passwd .
 
  „./passwd“ -> „/etc/passwd“
 
  „./passwd“ -> „/etc/passwd“
Softlink mit dem Namen passwd im Homeverzeichnis angelegt(Original exestiert nicht)  
+
;Softlink mit dem Namen passwd im Homeverzeichnis angelegt(Original exestiert nicht)  
xinux@zero:~$ ln -vs /etc/hund .
+
*ln -vs /etc/hund .
 
  „./hund“ -> „/etc/hund“
 
  „./hund“ -> „/etc/hund“
Hardlink mit dem Namen hosts im Homeverzeichnis angelegt
+
;Hardlink mit dem Namen hosts im Homeverzeichnis angelegt
  xinux@zero:~$ ln -v /etc/hosts .
+
*ln -v /etc/hosts .
 
  „./hosts“ => „/etc/hosts“
 
  „./hosts“ => „/etc/hosts“
Auf eine nicht existierende Datei kann kein Hardlink angelegt werden!
+
;Auf eine nicht existierende Datei kann kein Hardlink angelegt werden!
xinux@zero:~$ ln -v /etc/katze .
+
*ln -v /etc/katze .
 
  ln: Zugriff auf „/etc/katze“: No such file or directory
 
  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 28. November 2024, 11:44 Uhr

Prinzip

  • 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.

Daten

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

Zeichen Typ Zweck
- 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.

Zu erkennen an einem - in ls -l

xinux@debi:~$ ls -l text | cut -c 1
-

Verzeichnisse

Dateien werden in Verzeichnissen gespeichert, nur so ist eine Ordnung möglich.
xinux@debi:~$ mkdir -v Ordner
mkdir: Verzeichnis „Ordner“ angelegt

Zu erkennen an einem d in ls -l

xinux@debi:~$ 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
  • Es gibt zweit Arten von Gerätedateien
  • Block und Character Devices
  • Block Devices werden gepuffert geschrieben.
  • Character Devices Zeichen für Zeichen.
Schaubild
Block Devices Character Devices
Festplatte, SSD, RAID, USB-Stick Tastatur, Maus, Serielle Schnittstellen, Soundkarte, Drucker

Block Device

  • ls -l /dev/sda | cut -c 1
b

Character Device

  • ls -l /dev/ttyS0 | cut -c 1
c
Erstellen einer Gerätedatei
  • mknod sata1 b 8 0
  • 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
  • Sie sind flexibler als anonyme Pipes und eignen sich für sogenannte Client-Server-Anwendungen.
  • Benannte Pipes ermöglichen die gleichzeitige Kommunikation in beide Richtungen
  • Es können Daten im Vollduplexbetrieb zwischen den Prozessen ausgetauscht werden.

Erstelle Named Pipe mit Namen /tmp/roehre

Schreibe "hallo welt" in die Pipe und bleibe
  • mkfifo /tmp/roehre
  • echo hallo welt > /tmp/roehre

Gebe Inhalt der Pipe mit cat aus

  • cat < /tmp/roehre
hallo welt
  • ls -l /tmp/roehre | cut -c 1
p

Sockets (Geht über Grundlagen hinaus)

  • Schnittstelle um es lokalen Anwendungen zu ermöglichen, miteinander Netwerkmässig zu kommunizieren.
  • netstat -lnxp | tail -1
 unix  2 [ ACC ] STREAM HÖRT 21951 6646/nm-applet /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede
  • ls -l /tmp/orbit-thomas/linc-19f6-0-2b9b81095cede | cut -c 1
s

Socket erstellen

  • nc -lkU a.sock

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 der originale Hardlink gelöscht wird, zeigt der Link ins Leere.
Erstellen eines Softlinks
Vorteile Symbolische Links können auch auf Verzeichnisse angelegt werden
Sie sind partitionsübergreifend
Man kann sie auf Dateien anlegen, die noch nicht existieren
Nachteile Wenn der Hardlink gelöscht ist, ist kein Zugriff mehr möglich
Beispiele

Normal

  • ln -s text verweis
Verbose
  • ln -sv text verweis
„verweis“ -> „text“
Erzwungenes Überschreiben
  • n -sf dat verweis
Auswirkungen
  • 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)
  • cp -v verweis /tmp/
„verweis“ -> „/tmp/verweis“
  • ls -l /tmp/verweis
-rw-r--r-- 1 root root 4 2009-07-29 13:59 /tmp/verweis
Kopieren(Link wird kopiert)
  • cp -vd verweis /tmp/
„verweis“ -> „/tmp/verweis“
  • ls -l /tmp/verweis
lrwxrwxrwx 1 root root 3 2009-07-29 14:00 /tmp/verweis -> dat

Hardlinks

  • 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.
Vorteile Zugriff auf die Daten, selbst wenn der erste Link gelöscht ist.
Nachteile Man kann keine Hardlinks auf Verzeichnisse anlegen.

Ist nur innerhalb einer Partion möglich.

Beispiele
  • touch 1
  • echo "text" > 1
  • ln 1 2
  • more 2
text
  • echo "doch kein text" > 1
  • more 1
doch kein text
  • 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
  • ln -vs /etc/passwd .
„./passwd“ -> „/etc/passwd“
Softlink mit dem Namen passwd im Homeverzeichnis angelegt(Original exestiert nicht)
  • ln -vs /etc/hund .
„./hund“ -> „/etc/hund“
Hardlink mit dem Namen hosts im Homeverzeichnis angelegt
  • ln -v /etc/hosts .
„./hosts“ => „/etc/hosts“
Auf eine nicht existierende Datei kann kein Hardlink angelegt werden!
  • ln -v /etc/katze .
ln: Zugriff auf „/etc/katze“: No such file or directory