Montag, 11. Januar 2016
[*]

15:35  RT @nixcraft: Be like bill Via imgur.com/KxTtDbr #Linux #unix #OSX #Vim #Emacs #editorwar #humor #sysadmin https://t.co/8q7tD0cyef # CYcYVE1U0AAV3VD


Tags , , , , , , ,   Kommentare  0

Dienstag, 20. August 2013
[*]

MES03: Plattenwegweiser

, 23:19

Dieser Artikel gehört zur Serie Mein eigener Server.

In Teil 2 habe ich eigentlich versprochen, mit der Konfiguration zu beginnen. Aber vorher muss ich noch zwei kleine Ausflüge machen:

Wo die Dinge jetzt liegen

Wie bereits erwähnt haben wir keine Laufwerksbuchstaben sondern nur Verzeichnisse. Dabei verwenden alle UNIX-Betriebssysteme mehr oder weniger die gleichen Verzeichnisstrukturen. Die wichtigsten will ich hier mal aufzählen:

/etc/

Hier liegen die Konfigurationen. Sowohl die des Systems als auch die der meisten Softwarepakete. Beispiele: die Benutzer des Systems sind in /etc/passwd definiert (aber nicht immer), die Konfiguration des Webservers findet sich unter /etc/apache2/ (natürlich nur, wenn Apache 2 als Webserver benutzt wird), die Startskripten für im Hintergrund laufende Dienste sind in /etc/init.d/.

/var/

Hier legen Programme veränderliche Dateien ab. Und Daten, die nur von Serverprogrammen benutzt werden sollen (z.B. die Dateien einer Webseite) liegen auch oft hier.

/usr/

Die ausführbaren Dateien der Software sind größtenteils in diesem Verzeichnis installiert. Einige Grundsystemfunktionen liegen auch in /bin/ und /lib/.

/usr/local/

Programme aus anderen Quellen als der Distribution, zum Beispiel Selbstkompiliertes können hier installiert werden, damit sie sich nicht mit den original ausgelieferten Dateien in die Quere kommen. Manche Distributionen und einige kommerzielle Unixe verwenden zu diesem Zweck auch /opt/.

/home/

Hier haben die Benutzer ihre Homeverzeichnisse. Dort können sie sowohl ihre eigenen Dateien als auch ihre Dotfiles (die persönlichen Konfigurationen für Programme, die so genannt werden, weil ihre Namen meist mit einem Punkt beginnen) ablegen.

/tmp/

Temporäre Dateien. Auf manchen Systemen wird der Inhalt beim Neustart automatisch gelöscht. Es darf deshalb nicht davon ausgegangen werden, dass hier abgelegte Daten über einen längeren Zeitraum erhalten bleiben.

Ein Paketmanager

Einer der größten Vorteile der meisten Linuxdistributionen ist die Softwareinstallation mit einem Paketmanager. Der kennt in der Regel die Abhängigkeit der verschiedenen Softwarepakete voneinander, so dass das System immer in einem funktionierenden Zustand sein sollte. Debian verwendet apt.

Die Konfiguration des Paketmanagers liegt in /etc/apt/. Die wichtigste Datei ist sources.list. Darin stehen die Quellen, aus denen das System Installationspakete beziehen soll. Auf einem von Hetzner installierten Debian Squeeze sieht das im Moment so aus:

###############################################################################
# Hetzner mirror
#

deb http://mirror.hetzner.de/debian/packages squeeze main contrib non-free
deb http://mirror.hetzner.de/debian/security squeeze/updates main contrib non-free

###############################################################################
# backup mirror
#

deb http://cdn.debian.net/debian/ squeeze main non-free contrib
deb-src http://cdn.debian.net/debian/ squeeze main non-free contrib

deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

## backports
deb http://mirror.hetzner.de/debian/backports squeeze-backports main contrib non-free
deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free

Softwareinstallation

Das Werkzeug ermöglicht die folgenden Operationen:

apt-get update

Holt die aktuellen Paketlisten von den in sources.list definierten Quellen.

Beispiel:

root@Debian-60-squeeze-64-minimal ~ # apt-get update
Get:1 http://mirror.hetzner.de squeeze Release.gpg [1,672 B]
Get:2 http://mirror.hetzner.de squeeze/updates Release.gpg [836 B]
Get:3 http://mirror.hetzner.de squeeze-backports Release.gpg [1,571 B]         
[...]
Get:33 http://cdn.debian.net squeeze/main amd64 Packages [8,602 kB]            
Get:34 http://cdn.debian.net squeeze/non-free amd64 Packages [124 kB]          
Get:35 http://cdn.debian.net squeeze/contrib amd64 Packages [64.1 kB]
Fetched 26.1 MB in 6s (4,006 kB/s)                                             
Reading package lists... Done
root@Debian-60-squeeze-64-minimal ~ # 

apt-get dist-upgrade

Bringt alle installierten Pakete auf die neueste Version.

apt-get install

Installiert die angegebenen Pakete und versucht dabei, alle Abhängigkeiten aufzulösen (also alle von den Paketen benötigten Pakete ebenfalls zu installieren und alle in Konflikt stehenden Pakete zu deinstallieren). Stellt dann eventuell in einem textbasierten Menüsystem Fragen zur Konfiguration.

Beispiel:

root@Debian-60-squeeze-64-minimal ~ # apt-get install screen
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  screen
0 upgraded, 1 newly installed, 0 to remove and 16 not upgraded.
Need to get 624 kB of archives.
After this operation, 975 kB of additional disk space will be used.
Get:1 http://mirror.hetzner.de/debian/packages/ squeeze/main screen amd64 4.0.3-14 [624 kB]
Fetched 624 kB in 0s (9,321 kB/s)
Selecting previously deselected package screen.
(Reading database ... 17705 files and directories currently installed.)
Unpacking screen (from .../screen_4.0.3-14_amd64.deb) ...
Processing triggers for man-db ...
Processing triggers for install-info ...
Setting up screen (4.0.3-14) ...
root@Debian-60-squeeze-64-minimal ~ #

So, dass musstet Ihr unbedingt noch wissen. Aber in der nächsten Folge konfigurieren wir wirklich was.

Donnerstag, 18. April 2013
[*]

MES02: Willkommen bei Linux

, 23:47

Dieser Artikel gehört zur Serie Mein eigener Server.

Linux ist ein Unix

Jetzt habt Ihr Euren Server und sitzt vielleicht zum ersten mal vor Linux. Sehen wir uns also mal gemeinsam an, womit wir es hier zu tun haben. Dies ist ein Unix, eins aus einem langen Stammbaum miteinander verwandter Systeme, zu dem auch der erste Webserver und das iPhone gehören.

Linux selbst ist eigentlich „nur“ eine Neuimplementation des Kernels (also der Gerätetreiber, Netzwerktreiber, Prozessverwaltung und ähnlichem), die Linus Torvalds 1991 begonnen hat, und die seitdem von einer unvorstellbaren Anzahl an Entwicklern ständig weiterentwickelt wurde. Den Rest zum Unix-Erlebnis ergänzen die GNU-Tools, die eigentlich in einem ehrgeizigen Projekt entstanden, das Unix durch ein neues Betriebssystem ersetzen wollte (GNU ist eine rekursive Abkürzung und steht für GNU is not Unix). Während dieses Projekt also seine Tools (Befehle, die wir später noch sehen werden, einen C-Compiler,…) ziemlich weit fertiggestellt hatte, wurde der Betriebssystemkern „Hurd“ nicht fertig. Diese Lücke füllte Linux so gut aus, dass ich bezweifle, dass der Hurd-Kern jemals richtig fertig wird. Aufgrund dieser Geschichte bestehen auch einige Leute darauf, das komplette System für Arbeitsplatzrechner und Server „GNU/Linux“ zu nennen — schließlich besteht es ja nicht nur aus dem Kern (und es gibt tatsächlich jede Menge andere Einsatzmöglichkeiten für Linux ohne die komplette GNU-Umgebung).

Da Linux also nicht von einem einzelnen Hersteller stammt, müssen alle Teile des Systems aus verschiedenen Quellen zusammengestellt und erstmal kompiliert werden. Diese Arbeit übernehmen sogenannte Distributoren, von denen es auch eine unüberschaubare Anzahl für die verschiedensten Einsatzzwecke gibt. Für Server ist Debian GNU/Linux (da! da ist es wieder) gut geeignet, weil die Betreuer dieser Distribution großen Wert auf stabile Programmversionen legen.

Das Unix-Gefühl

Die Unix-Philosophie basiert auf nur wenigen Objekttypen. Der wichtigste davon ist die Datei. In Unix ist praktisch alles eine Datei (sogar die Interaktion mit Geräten wird darüber abgebildet). Dateien sind in einer Baumstruktur hierarchisch in Verzeichnissen angeordnet. Laufwerksbuchstaben wie unter Windows gibt es nicht, alle Dateisysteme hängen in einem gemeinsamen Baum, der Wurzelknoten heißt / und / ist auch der Trenner zwischen den Hierarchieebenen des Baums.
Der zweite wichtige Objekttyp ist der Prozess — also das laufende Programm. Prozesse können weitere Prozesse starten. Sowohl Dateien als auch Prozesse haben einen Besitzer. Die daraus entstehende Rechtestruktur sehen wir uns später noch an.

Ein weiterer wichtiger Teil der Unix-Philosophie lautet „Nur ein Zweck für ein Werkzeug“. Auch das wird erst später Sinn ergeben.

Als Beispiel dafür, wie sich das auf die Architektur auswirkt: auch Ihr redet mit Linux über einen Prozess, die sogenannte Shell. Wie von so vielen anderen Dingen gibt es auch davon mehrere zur Auswahl (niemand hat gesagt, dass es nicht mehrere Werkzeuge für den gleichen Zweck geben soll), aber für uns reicht erstmal die Betrachtung der üblichen Linux-Standardshell bash.

Die Shell liest Eure Eingaben aus einer Pseudodatei („Standard Input“), interpretiert sie als Programmtext und startet weitere Prozesse für Euch. Das klingt jetzt auch erstmal abgehoben, aber auch darauf werden wir später wieder zurückkommen. Die Kommandos, die in der Shell zur Verfügung stehen, sind (praktisch) alle einzelne Programme, die als Dateien an bestimmten Stellen des Dateisystems liegen.

Wichtige Kommandos

Jetzt sehen wir uns mal die wichtigsten Unix-Kommandos an:

Das allerwichtigste Kommando ist man. Es zeigt die Manual Pages des Systems an. Darin sind die Befehle, Dateiformate und sogar Programmierschnittstellen dokumentiert. Der Stil ist für Anfänger nicht leicht zu verstehen, aber nach einiger Eingewöhnung bieten sie eine wichtige Referenz. Seht Euch zur Einstimmung mal man man an.

Bevor wir uns an die Liste machen noch eine Anmerkung zu Programmoptionen: durch die bereits erwähnte Verzweigung des Unix-Stammbaums haben sich für einige grundlegende Kommandos zwei Sätze von gängigen Optionen herausgebildet. Die meisten Linux-Distributionen sind  im Laufe ihrer Entwicklung zwischen den beiden größten Lagern („BSD“ und „System V“) gependelt, und so beherrschen die mit Linux gelieferten Varianten oft beide Sätze. Die aus der BSD-Ecke stammenden werden dabei häufig ohne, die aus der System-V-Ecke stammenden mit vorangestelltem – angegeben. Weil das noch nicht verwirrend genug war, hat das GNU-Projekt  dann noch einen dritten Satz Optionen mit langen Namen und — (also zwei Strichen) eingeführt.

Navigieren durch den Verzeichnisbaum

Da wie gesagt alles im Verzeichnisbaum liegt, müssen wir uns durch den bewegen können. Jeder Prozess hat immer ein Arbeitsverzeichnis. Das gerade aktuelle Arbeitsverzeichnis gibt pwd (print working directory) aus. Mit cd [Verzeichnisname] (change directory) können wir in ein tieferes, mit cd .. wieder eine Ebene nach oben gehen. cd ohne Argumente wechselt in Deine digitale Heimat, das sogenannte Homeverzeichnis.
Übung:

root@Debian-60-squeeze-64-minimal ~ # pwd
/root
root@Debian-60-squeeze-64-minimal ~ # cd ..
root@Debian-60-squeeze-64-minimal / # cd root
root@Debian-60-squeeze-64-minimal ~ #

Ansehen der Inhalte der aktuellen Ebene

Um zu erfahren, was denn im aktuellen Verzeichnis so rumliegt (und wohin wir überhaupt wechseln könnten) gibt es das Kommando ls, mit der Option -l generiert es seine Liste mit ausführlichen Zusatzinformationen.
Übung:

root@Debian-60-squeeze-64-minimal /tmp # ls
a.txt  b  c
root@Debian-60-squeeze-64-minimal /tmp # ls -l
total 4.0K
-rw-r--r-- 1 root root    0 Apr 18 22:11 a.txt
-rw-r--r-- 1 root root    0 Apr 18 22:11 b
drwxr-xr-x 2 root root 4.0K Apr 18 22:11 c
root@Debian-60-squeeze-64-minimal /tmp #

Die Spalten des langen Listings müssen wir uns jetzt mal ansehen. Von Links nach rechts: Berechtigungen, Linkzahl, Benutzer, Gruppe, Größe, Datum, Name. Die erklärungsbedürftigen Felder im Einzelnen:

Eigentum

Dateien gehören immer einem Benutzer und einer Gruppe. Es ist nicht erforderlich, dass der Benutzer, dem eine Datei gehört, Mitglied der Gruppe ist, der die Datei gehört.

Berechtigungen

Benutzer und Gruppe bilden die Basis für ein einfaches aber effektives Berechtigungskonzept. Jeweils für den Eigentümer, die Gruppe und den Rest der Welt lassen sich die drei Operationen „lesen“ (r), „schreiben“ (w) und „ausführen“ (x, diese Dateien können als „Programme“ benutzt werden) bzw. „betreten“ (auch x, für Verzeichnisse) erlauben oder verbieten:

-rwxrwxrwx
^^^^^^^^^^
||||||||||  Rechte für alle Benutzer ("Welt"):
|||||||||+--- ausführen / betreten
||||||||+---- schreiben
|||||||+----- lesen
|||||||     Rechte für die Gruppe:
||||||+------ ausführen / betreten
|||||+------- schreiben
||||+-------- lesen
||||        Rechte für den Eigentümer:
|||+--------- ausführen / betreten
||+---------- schreiben
|+----------- lesen
+---------- Typmarkierung:
              - = normale Datei, d = Verzeichnis, l = Link

Das werden wir später noch öfter in der praktischen Anwendung sehen.

Linkzahl

Eine Datei kann in Unix an mehreren Stellen im Verzeichnisbaum eingehängt sein (bitte versucht nicht, Euch das bildlich vorzustellen). Die werden hier gezählt. Erst, wenn die Datei nirgendwo mehr referenziert wird (der Linkcounter also 0 ist), verschwindet sie von der Festplatte. In der täglichen Benutzung könnt Ihr das fast immer ignorieren.

Dateien ansehen und editieren

Um den Inhalt einer Textdatei anzuzeigen können wir less benutzen (scrollen mit den Cursortasten, verlassen mit q), zur Bearbeitung gibt es einen bunten Strauß an Editoren (Vorsicht! Die dazugehörigen Religionskriege sind schlimmer als jede Windows-oder-Mac-Diskussion.), von denen ich zum Einstieg nano empfehle, weil der die gerade möglichen Befehle immer anzeigt. Mit rm werden wir unliebsame Dateien wieder los.
Übung:

root@Debian-60-squeeze-64-minimal ~ # less test.txt 
Hallo Wult!
root@Debian-60-squeeze-64-minimal ~ # nano test.txt

nano

root@Debian-60-squeeze-64-minimal ~ # less test.txt 
Hallo Welt!
root@Debian-60-squeeze-64-minimal ~ # rm test.txt
root@Debian-60-squeeze-64-minimal ~ #

Prozesse

ps zeigt die gerade laufenden Prozesse an, ps x nimmt in die Liste auch die Prozesse auf, die gerade nicht mit einem Terminal verbunden sind (hier haben wir jetzt ein Programm, das aus historischen Gründen mit BSD-Style-Optionen gestartet wird). Die erste Spalte dieser Liste ist die Prozess-Id. Wenn wir später mit kill Prozesse abschießen werden, dann brauchen wir die.
Übung:

root@Debian-60-squeeze-64-minimal ~ # ps
  PID TTY          TIME CMD
 3067 pts/0    00:00:00 bash
 3102 pts/0    00:00:00 ps
root@Debian-60-squeeze-64-minimal ~ #

So, das war jetzt eine grobe Übersicht über das Wichtigste — aber alles noch sehr theoretisch. Auf vieles müssen wir deshalb später noch einmal vertiefend in der praktischen Anwendung zurückkommen. In der nächsten Folge reden wir über Netzwerke und fangen tatsächlich mal mit der Serverkonfiguration an.

Donnerstag, 17. November 2011
[*]
[*]
Mittwoch, 4. Februar 2009
[*]

Echte Helden
(Die wunderbare Welt von Isotopp)
[…] Cornelius hat damals jedenfalls die ersten Unix-Kisten eingeschleppt. Natürlich gab es so etwas damals nicht fertig, sonst hätte ihn das wohl auch nicht interessiert. In seinem Fall waren das stattdessen Commodore 900 mit Coherent 0.7.1 Special Binary Prerelease, Prototypen von Rechnern, die Commodore nie gebaut hat, weil sie selbst für Commo zu Scheiße waren. Das war mein erstes Unix. […]
aus Delicious/steinhobelgruen

Tags , ,   Kommentare  0