\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{ngerman}
%\usepackage{hyperref}
%\usepackage{graphicx}
\usepackage{geometry}
\geometry{a4paper, left=25mm, top=10mm}
\title{Workstation Linuxkurs}
\author{Paul Hänsch}

\begin{document}
\maketitle

\section{Tag 1}

\subsection{Arbeit mit Dateien}
Legen wir mal eine Datei an:\\
\verb#touch datei1#\\

Der Befehl '\verb#ls -l datei1#' zeigt uns detaillierte Informationen:\\
\verb#-rw-rw---- 1 user user 0 Feb 21 16:49 datei1#\\

Was sagt uns das nun?\\
\begin{tabular}{l|l|l|l|l|l|l}
\textbf{Zugriffsrechte} & \textbf{Linkzahl} & \textbf{Eigentümer} & \textbf{Gruppe} & \textbf{Größe} & \textbf{Schreibzeit} & \textbf{Name} \\
\hline
\verb#-rw-rw----# & \verb#1# & \verb#user# & \verb#user# & \verb#0# & \verb#Feb 21 16:49# & \verb#datei1# \\
\end{tabular}\\

Bevor wir uns das näher anschauen schreiben wir mal etwas in die Datei:\\
\verb#echo "Hallo Welt" > datei1#\\

und nochmal '\verb#ls -l datei1#':\\
\begin{tabular}{l|l|l|l|l|l|l}
\textbf{Zugriffsrechte} & \textbf{Linkzahl} & \textbf{Eigentümer} & \textbf{Gruppe} & \textbf{Größe} & \textbf{Schreibzeit} & \textbf{Name} \\
\hline
\verb#-rw-rw----# & \verb#1# & \verb#user# & \verb#user# & \verb#11# & \verb#Feb 21 17:02# & \verb#datei1# \\
\end{tabular}\\

Wir sehen:
\begin{itemize}
\item Die Größe ist von 0 auf 11 gewachsen (11 stücke Kuchen?...)
\item Die Zugriffszeit hat sich verändert (warum wohl?)
\end{itemize}

Die Größe wird natürlich in Byte angegeben, das kann einem bei größeren Dateien schon ziemlich auf den Senkel gehen. Geben wir z.B. mal ein:\\
\verb#ls -l /boot/initrd.img-2.6.30-2-686# (vielleicht heißt die Datei auch ein bisschen anders)\\
$\Rightarrow$\\
\verb#-rw-r--r-- 1 root root 7277035 Jan 17 13:00 /boot/initrd.img-2.6.30-2-686#\\

Soso... die Datei ist also 7277035 Byte groß (je nach System vielleicht auch etwas mehr oder weniger, machen wir uns darum gerade mal keinen Kopf) Die Einheit ist natürlich etwas unpraktisch. Fügen wir dem 'ls'-Befehl mal den Parameter 'h' für ``human readable'' (menschenlesbar) hinzu:\\
\verb#ls -l -h /boot/initrd.img-2.6.30-2-686#\\
$\Rightarrow$\\
\verb#-rw-r--r-- 1 root root 7.0M Jan 17 13:00 /boot/initrd.img-2.6.30-2-686#\\

Jetzt lautet die Ausgabe 7.0M, also 7 Megabyte, 'ls' wählt automatisch eine sinnvolle Einheit. Je nach Dateigröße könnte also z.B. auch der Buchstabe K (Kilobyte) oder G (Gigabyte) dort stehen.\\

Mit dem Befehl 'cat' können wir übrigens den Inhalt der Datei ausgeben:\\
\verb#cat datei 1#\\
$\Rightarrow$\\
\verb#Hallo Welt#\\

Wenn wir jetzt nochmal '\verb#ls -l datei1#' eingeben sehen wir übrigens \textbf{keinen} Unterschied zu vorher:\\
\verb#-rw-rw---- 1 user user 11 Feb 21 17:02 datei1#\\

Die Zugriffszeit ändert sich also nur beim \textbf{Schreiben}, wir haben aber gerade nur aus der Datei \textbf{gelesen}. Der Zeitstempel ändert sich dabei nicht. Nochwas fällt dem aufmerksamen Beobachter ins Auge: Die Datei ist angeblich 11 Byte groß, dabei hat ``Hallo Welt'' nur 10 Zeichen (mit Leerzeichen).\\
Die Antwort ist einfach: Am Ende der Datei steht noch ein Zeilenumbruch, der belegt ein Byte.\\

\subsection{Zugriffsberechtigungen}
Damit ist uns erst mal klar, wofür die felder ``Größe'', ``Schreibzeit'' und ``Name'' stehen. Wenn wir uns jetzt den Zugriffsrechten widmen, interessieren uns drei weitere Felder.\\

\begin{tabular}{l|l|l|l|l|l|l}
\textbf{Zugriffsrechte} & Linkzahl & \textbf{Eigentümer} & \textbf{Gruppe} & Größe & Schreibzeit & Name \\
\hline
\verb#-rw-rw----# & \verb#1# & \verb#user# & \verb#user# & \verb#11# & \verb#Feb 21 17:02# & \verb#datei1# \\
\end{tabular}\\

\begin{itemize}
  \item \textbf{Eigentümer:} ist der Benutzer, der die Datei angelegt hat. Der Eigentümer kann nachträglich nicht verändert werden (außer durch root).
  \item \textbf{Gruppe:} ist die Gruppe, der die Datei zugeordnet ist. Nur der Eigentümer (oder root) kann die Gruppenzugehörigkeit der Datei ändern. Der Eigentümer kann die Datei auch nur einer Gruppe zuordnen, in der er selbst Mitglied ist.
  \item \textbf{Zugriffsrechte:} hier wird es komplizierter, wir müssen uns das näher anschauen.
\end{itemize}

\subsubsection*{Das Feld Zugriffsrechte}
Dieses erste Feld beschreibt in extrem kurz gefasster Weise, \textbf{wer} mit der datei \textbf{was} anfangen darf:\\
\begin{tabular}{l|l|l|l}
\textbf{Typ} & \textbf{Eigentümer} & \textbf{Gruppe} & \textbf{Andere} \\
\hline
\verb#-# & \verb#rw-# & \verb#rw-# & \verb#---# \\
\end{tabular}

Ignorieren wir für den Augenblick den Typ. Wir sehen unter Eigentümer die Buchstaben 'r' und 'w'. An dritter Stelle könnte ein 'x' stehen, dies ist hier jedoch \textbf{nicht} der Fall. Das 'r' steht für ``read'' (lesen) und das 'w' für ``write'' (schreiben). Das heißt der Eigentumer der Datei (in unserem Beispiel ``user'') darf die Datei lesen und darin schreiben. Die Datei ist in diesem Beispiel der Gruppe ``user'' zugeordnet. Die Gruppe ``user'' ist nicht zu verwechseln mit dem Benutzer ``user''! (Das ist wirklich wichtig!) Mitglieder der Gruppe ``user'' haben, wie wir sehen ebenfalls die Berechtigungen 'lesen' (r) und 'schreiben' (w). Auch hier ist der dritte mogliche Buchstabe (x) nicht gesetzt. Unter ``Andere'' ist keiner der drei Buchstaben 'rwx' gesetzt. Andere Benutzer als der Benutzer ``user'' bzw. Benutzer, die nicht wenigstens in der Gruppe ``user'' sind dürfen mir der Datei folglich gar nichts anfangen.\\

Achja, wir reden die ganze Zeit von so einem 'x'. Das 'x' verleiht jemandem die Rechte eine Datei auszuführen ('execute'). Bei einer Datei in der nur ``Hallo Welt'' drin steht gibt es nun wohl kaum was auszuführen. Nur bei Programmen macht das Sinn (und bei Verzeichnissen, aber hier greife ich vor). Wenn wir uns also mal die Rechte von '/bin/cat' anschauen (ja, das ist das Programm 'cat', mit dem wir vorhin die Datei ausgegeben haben). Dann sehen wir:\\
\verb#-rwxr-xr-x 1 root root 46848 Jun  5  2009 /bin/cat#\\

\begin{itemize}
  \item Der Eigentümer, nämlich der Benutzer ``root'', ist der Einzige, der in die Datei schreiben darf.
  \item Die Datei gehort auch der Gruppe ``root'', da in dieser Gruppe niemand Mitglied ist außer der Benutzer ``root'' ist das uninteressant. Es ist übrigens sehr interessant, dass das uninteressant ist, dadurch wird der Gruppenzugehörigkeit nämlich bewusst die Bedeutung genommen. Die Datei ist quasi keiner besonderen Gruppe zugeordnet. Aus diesem Grund ist es üblich jedem Benutzer eine persönliche Gruppe zu verpassen.
  \item Jeder beliebige Benutzer darf das Programm lesen bzw. ausführen (dafür sorgt das 'r' und das 'x'). unter ``Andere''.
\end{itemize}

Jetzt wollen wir mal mit den Rechten unserer Experimentierdatei rumspielen. Zum Ändern der Rechte dient das Programm 'chmod' (``Change Mode'' - Ändern des Zugriffsmodus). Wir können zum Beispiel uns, dem Besitzer der Datei die Leserechte entziehen:\\
\verb#chmod u-r datei1#\\
Das 'u' zeigt an, dass wir die Rechte des Eigentümers (user, der Benutzer der Datei) ändern wollen. Der Besitzer hat hier nur zufällig den Namen ``user'', das Kürzel 'u' wird immer verwendet um den Besitzer anzusprechen. Wir benutzen das Minus-Zeichen (\verb#-#) um Rechte zu entziehen. Das Recht, das wir entziehen ist das Leserecht (r).\\
\verb#ls -l datei1#\\
$\Rightarrow$\\
\verb#--w-rw---- 1 user user 11 Feb 21 17:02 datei1#\\

\pagebreak
Wir sehen, der Besitzer der Datei hat kein Leserecht mehr. Probieren wir aus der Datei zu lesen:\\
\verb#cat datei 1#\\
$\Rightarrow$\\
\verb#cat: datei1: Permission denied#\\

Die Meldung ist ``Permission denied'' - Zugriff verweigert. Wir dürfen die Datei einfach nicht mehr lesen.\\
\verb#chmod u+r datei1#\\
\verb#cat datei 1#\\
$\Rightarrow$\\
\verb#Hallo Welt#\\

Durch die Verwendung des Plus-Zeichens haben wir das Leserecht (r) für den Besitzer (u) wieder hinzugefügt.\\

Durch Eingabe des Kommandos '\verb#groups#' finden wir heraus, in welchen Gruppen unser Benutzer Mitglied ist, z.B.:\\
\verb#groups#\\
\verb#user fuse share#\\

An erster Stelle wird die primäre Gruppe unseres Benutzers aufgeführt (im Beispiel ist das die Gruppe ``user''). Die primäre Gruppe ist die Gruppe, der jede neu angelegte Datei standardmäßig zugeordnet wird. Mit dem Kommando 'chgrp' (Change Group - Gruppe Ändern) können wir die Datei einer anderen Gruppe zuordnen \textbf{in der wir Mitglied sind}.\\
\verb#chgrp share datei1#\\
\verb#ls -l datei1#\\
$\Rightarrow$\\
\verb#-rw-rw---- 1 user share 11 Feb 21 17:02 datei1#\\

Alle Benutzer in der Gruppe ``share'' haben jetzt Lese- und Schreibzugriff (rw-) auf die Datei.\\
Mit '\verb#chmod g-rw datei1#' entziehen wir Benutzern der Gruppe (g) ``share'' den Lese- (r) und Schreibzugriff (w):\\
\verb#ls -l datei1#\\
$\Rightarrow$\\
\verb#-rw------- 1 user share 11 Feb 21 17:02 datei1#\\

Mit '\verb#chmod o+r datei1#' geben wir ``anderen'' ('o' wie others) Benutzern den Lesezugriff. ``Andere'' sind Benutzer, die weder Besitzer der Datei sind noch in der Gruppe der Datei Mitglied sind.\\
\verb#-rw----r-- 1 user share 11 Feb 21 17:02 datei1#\\

\subsubsection{Berechtigungen auf Verzeichnissen}
Nehmen wir an unser Benutzer hat das Heimverzeichnis '/home/user', ein '\verb#ls -l -d /home/user#' zeigt uns die Daten des Verzeichnisses an. Der Parameter 'd' sorgt dafür, dass wir das Verzeichnis selbst sehen, nicht dessen Inhalt.\\
\verb#drwx------ 120 user user 7160 Feb 22 13:28 /home/user#\\

Wir sehen zunächst, dass das erste Zeichen in der Modusanzeige mit einem 'd' Belegt ist. Dies zeigt an, dass es sich nicht um eine normale Datei handelt, sondern um ein Verzeichnis (directory).\\
Wir sehen außerdem, dass der Besitzer von dem Verrzeichnis (user) dass Verzeichnis lesen (r), schreiben (w) und ausführen (x) kann.
\begin{itemize}
  \item Ein verzeichnis \textbf{lesen} zu können bedeutet, sehen zu können welche Dateien darin enthalten sind (Mit den Leserechten auf den dateien selbst hat das nichts zu tun).
  \item In ein Verzeichnis \textbf{schreiben} zu können bedeutet Dateien darin anlegen oder löschen zu können, dies ist nämlich eine Änderung am Verzeichnis. Man braucht keine Schreibrechte auf einer Datei, um diese zu löschen.
  \item Ein Verzeichnis \textbf{ausführen} zu können bedeutet, das Verzeichnis betreten zu können und sich die Dateien darin näher anschauen zu können.
\end{itemize}

\subsection{Zusammenfassung}
Wir haben gelernt, wie man Dateien Anlegt, und wie man mit den Berechtigungen auf Dateien und Verzeichnissen umgeht. Die Folgenden Kommandos haben wir verwendet:\\
\begin{itemize}
  \item \textbf{touch} - zum Anlegen einer Datei
    \subitem \verb#touch foobar# legt eine Datei mit dem Namen 'foobar' an
  \item \textbf{ls} - zum Anzeigen von Dateien und Verzeichnissen
    \subitem \verb#ls# zeigt Dateien im aktuellen Verzeichnis an
    \subitem \verb#ls -l# zeigt Dateien im aktuellen Verzeichnis in detaillierter Form an
    \subitem \verb#ls -l -h# oder \verb#ls -lh# zeigt Dateien im aktuellen Verzeichnis in detaillierter Form mit menschenlesbaren Größenangaben an
    \subitem \verb#ls -l foobar# zeigt detaillierte Informationen nur über die Datei 'foobar' (die sich im aktuellen Verzeichnis befindet) an
    \subitem \verb#ls /home/# zeigt den Inhalt des Verzeichnisses '/home/' an
    \subitem \verb#ls -d /home/# zeigt das verzeichnis '/home/' selbst an
    \subitem \verb#ls -l /home/# zeigt den Inhalt des Verzeichnisses '/home' in detaillierter Form an
    \subitem \verb#ls -l -d /home/# zeigt detaillierte Informationen über das Verzeichnis '/home/' selbst an
    \subitem Die Parameter 'l', 'h' und 'd' sind beliebig kombinierbar und können auch ``zusammngezogen'' werden (z.B. \verb#ls -lh#)
  \item \textbf{echo} - zum Ausgeben von Text (den wir auch in eine Datei leiten können)
    \subitem \verb#echo Hallo Welt# gibt ``Hallo Welt'' aus
    \subitem \verb#echo "Hallo Welt"# gibt genau so ``Hallo Welt'' aus
    \subitem \verb#echo -n Hallo Welt# gibt ``Hallo Welt'' ohne abschließenden Zeilenumbruch aus
    \subitem \verb#echo Hallo Welt > quaquuz# leitet den Text ``Hallo Welt'' in die Datei 'quaquuz'
  \item \textbf{cat} - zum Ausgeben des Inhalts einer Datei
    \subitem \verb#cat foo# gibt den Inhalt der Datei 'foo' aus
    \subitem \verb#cat foo qua# gibt den Inhalt der Datei 'foo' und nahtlos anschließend den Inhalt der Datei 'qua' aus
  \item \textbf{chmod} - zum Ändern des Zugriffsmodus (Zugriffsrechte) einer Datei
    \subitem \verb#chmod u-w bar# entzieht dem Besitzer der Datei 'bar' den Schreibzugriff auf die Datei
    \subitem \verb#chmod o+rx /home/user/# gewährt ``anderen'' Benutzern, also in diesem Sinne Benutzern die weder Besitzer des Verzeichnisses '/home/user/' sind, noch der Gruppe des Verzeichnisses '/home/user/' angehören das Recht Dateien in diesem Verzeichnis zu sehen (r), Details über diese Dateien anzuzeigen (x) und das Verzeichnis zu betreten (x)
  \item \textbf{groups} - um anzuzeigen in welchen Gruppen ein Benutzer Mitglied ist
    \subitem \verb#groups# zeigt die Gruppen des aktuellen Benutzers an
    \subitem \verb#groups user# zeigt die Gruppen des Benutzers 'user' an
  \item \textbf{chgrp} - zum Ändern der Gruppenzuweisung einer Datei
    \subitem \verb#chgrp share foobar# ordnet der Datei 'foobar' die Gruppe 'share' zu. Der Benutzer der den Befehl ausführt muss Mitglied von 'share' sein.
\end{itemize}

\end{document}
