Vergleich Windows versus Linux
1.4 Links
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Linux | Windows |
|---|---|
| Open Source | Closed Source |
| Lizenzkostenfrei | Lizenzkostenpflichtig |
| Hersteller-unabhängig | Hersteller-abhängig |
| Orientiert an öffentlichen Standards | Orientiert an proprietären Standards |
| Anwender-getrieben | Marketing-getrieben |
| Auf Anwendungsfall genau "zuschneiderbar" | Fix- und Fertig-Produkt |
| Funktionsweise vollständig offengelegt (und gut dokumentiert) |
Funktionsweise nicht vollständig offengelegt (und schlecht dokumentiert) |
| Test- und Produktions-Versionen verfügbar | Nur Produktionsversionen verfügbar |
| Alte Versionen werden weiter gepflegt | Alte Versionen werden abgekündigt |
| Linux | Windows |
|---|---|
| Sehr stabil | Stabil |
| Ressourcen-sparend (sofern wie auf Servern üblich keine GUI) | Ressourcen-aufwendig (wegen unvermeidlicher GUI) |
| Portabel | Nicht Portabel |
| Multi-User | Single-User |
| 64-Bit fähig | 64-Bit fähig (kaum Anwendungen dafür) |
| Multi-Prozessorfähig (max. 16-64) | Multi-Prozessorfähig (max. 16-64) |
| Multitasking präemptiv | Multitasking kooperativ (Win95/98/98SE/ME), präemptiv (WinNT/2000/2003/XP) |
| Linux | Windows |
|---|---|
| Gute Usability | Sehr gute Usability |
| Geht vom "erfahrenen Anwender" aus | Geht vom "dummen Anwender" aus |
| Wenig Rückkopplung durch Erfolgsmeldungen | Viele Messageboxen mit Erfolgsmeldungen |
| Auf dem Client wenig verbreitet | Auf dem Client stark verbreitet |
| Auf dem Server stark verbreitet | Auf dem Server stark verbreitet |
| Viele Anwendungen kostenlos erhältlich | Sehr viele Anwendungen erhältlich |
| Wenig Spiele erhältlich | Sehr viele Spiele erhältlich |
| Sehr viel Anwendungs-Software mitgeliefert | Wenig Anwendungs-Software mitgeliefert |
| Gute Hardware-Treiber-Ausstattung | Sehr gute Hardware-Treiber-Ausstattung |
| Linux | Windows |
|---|---|
| Betriebssystem und grafische Oberfläche getrennt | Betriebssystem und grafische Oberfläche eng verzahnt |
| Grafische Oberfläche verzichtbar | Grafische Oberfläche notwendig |
| Verschiedene Grafische Oberflächen möglich | Eine Grafische Oberfläche fest integriert |
| Remote-Einsatz grafischer Anwendungen einfach | Remote-Einsatz grafischer Anwendungen schwierig (Terminal-Server notwendig) |
| Linux | Windows |
|---|---|
| Swap-Partition | Auslagerungsdatei |
| Groß/Kleinschreibung unterschieden | Groß/Kleinschreibung nicht unterschieden |
| Keine Laufwerksbuchstaben | Laufwerksbuchstaben |
| Symbolischer Link | Verknüpfung/Shortcut |
| Hard Link | (nur bei NTFS und nur in Kommandozeile möglich) |
| Temporäres Verzeichnis /tmp | Temporäres Verzeichnis C:\TEMP |
| Linux | Windows |
|---|---|
| Remote-Administration eingebaut und einfach (Terminal + Shell) | Remote-Administration nicht eingebaut (nur mit Zusatzprodukten wie VNC oder PC-Anywhere) |
| Text-Terminal-orientiert | Grafische Oberfläche |
| Kommandozeilen-orientiert | Grafische Oberfläche |
| Leicht programmierbar und automatisierbar | Grafische Oberfläche schlecht programmierbar und automatisierbar |
| Viele ASCII-Konfigurations-Dateien | Eine Registry für alle Konfigurations-Daten |
| Linux | Windows |
|---|---|
| Selten sicherheitsrelevante Fehler | Häufig sicherheitsrelevante Fehler |
| Jeder kann Software-Fehler suchen | Software-Fehler-Suche nur durch Hersteller möglich |
| Jeder kann Software-Fehler beheben | Software-Fehler nur durch Hersteller behebbar |
| Sicherheitsrelevante Fehler schnell behoben | Sicherheitsrelevante Fehler langsam behoben |
| Wenig anfällig gegen Viren/Würmer/Trojaner | Anfällig gegen Viren/Würmer/Trojaner |
| Betriebssystem und Anwendungen getrennt | Betriebssystem und Anwendungen eng verzahnt |
Unter Windows heißt der Administrator "Administrator". Er kann noch durch Zugriffsrechte eingeschränkt sein. Es kann noch weiteren Benutzern der Kontotyp "Computer-Administrator" zugewiesen werden. Zwischen allen diesen Administratoren besteht kein Unterschied.
Unter Linux gilt: An der grafischen Oberfläche grundsätzlich nicht als Administrator anmelden, sondern bei Bedarf mit "su" oder "sudo" oder ähnlichen Mechanismen nur für ein Programm oder Fenster auf den Administrator umschalten. Es ist absolut unüblich (und auch nicht notwendig), dass normale Anwender mit Administrator-Rechten arbeiten.
Anwender-Programme mit Administrator-Rechten laufen lassen, ist nicht notwendig (bzw. durch "sudo" und das Set-UID/GID-Recht für einzelne Programme einstellbar doch möglich, ohne das Administrator-Passwort kennen zu müssen).
Unter Windows bleibt einem gar nichts anderes übrig, als sich an der grafischen Oberfläche als Administrator anzumelden, wenn man den Rechner verwalten will.
Dass man auf seinem Rechner als einziger Anwender arbeitet und sich daher der Einfachheit halber auf vielen Windows-Rechnern als Administrator anmeldet oder seinem Account den Kontotyp "Computer-Administrator" gibt, ist eine sehr schlechte Angewohnheit. Behält man diese Angewohnheit unter Linux bei (obwohl sie dort nicht üblich und auch nicht notwendig ist), dann ist das Linux-System wieder genauso offen für Angriffe wie ein Windows-System, es besteht kein prinzipieller Unterschied mehr.
Bei Windows NT/2000/2003/2008/XP/Vista/7 wird inzwischen streng getrennt zwischen dem Administrator und den einzelnen Benutzern. Allerdings gibt es keinen Zwang, sich auf einem Rechner anzumelden, er kann z.B. mit einem Standard-Benutzer ohne Passwort eingerichtet sein. Viele private Anwender machen dies auch so oder arbeiten gleich als Administrator, da sie in der Regel der einzige Benutzer des Windows-Rechners sind.
Unter Linux muss man sich stets mit einem Benutzernamen + Passwort anmelden. Somit weiß das System immer, wer man ist. Dem Anwender wurden beim Einrichten vom System-Administrator gewisse Rechte oder Verbote erteilt. Er kann auf dem System genau diejenigen Dateien einsehen, ändern oder löschen, wie es ihm vom Administrator erlaubt wurde. Die eigentlichen Systemdateien darf er beispielsweise nicht ändern. So kann man nicht aus Versehen das System beschädigen, Konfigurations-Dateien löschen oder gar die Festplatte formatieren. Von ihm neu angelegte Dateien und Verzeichnisse werden automatisch diesem Benutzer zugeordnet.
Bei der grafischen Oberfläche KDE kann sogar eingestellt werden, dass beim Start ein Benutzer automatisch angemeldet wird (war bei SuSE-Linux mal die Standard-Einstellung). Dies ist aber sicherheitstechnisch überhaupt nicht sinnvoll.
Man kann unter Linux auch nicht auf die Dateien von anderen Anwendern zugreifen oder diese einsehen (ob lokal oder über das Netz), außer es wurde explizit von diesen erlaubt. Grundsätzlich gilt folgende Regel: "Es ist alles verboten, das nicht ausdrücklich erlaubt ist". Daher bitte nicht wundern, wenn ab und zu die Meldung "Permission denied" angezeigt wird.
Linux bietet ebenfalls viele Anwendungs-Programme, die aber nicht immer die Funktionalität und Usability von Windows-Programmen erreichen. Allerdings ist hier die Frage, ob normale Anwender z.B. wirklich alle Features des Microsoft Office-Pakets benötigen oder ob nicht "weniger mehr wäre".
Weiterhin gibt es unter Linux bei einigen Spezialanwendungen wie CAD-Programmen, Programmier-IDEs, Home-Banking, Branchenlösungen, Konfigurations-Management, CRM, ERP,… eine deutlich geringere Auswahl an Software-Produkten. Dies hat seine Ursache auch in der Weigerung einiger Software-Hersteller (z.B. Microsoft: Office, Adobe: Acrobat-Writer, AutoDesk: AutoCAD, …), ihre Software auf Linux zu portieren.
Diese Situation wird sich mit zunehmender Verbreitung von Linux verbessern.
C: angelegt wird. Auf jedem weiteren Laufwerk
(z.B. D:) kann ebenfalls eine Auslagerungsdatei angelegt
werden. Die Größe der Auslagerungsdatei ist dynamisch (meist 1-
bis 4-fache Hauptspeichergröße).
Unter Linux wird eine Swap-Partition mit fixer Größe (meist 1- bis 2-fache Hauptspeichergröße) verwendet, die beim Installieren des Systems (oder auch später) angelegt wird. Es sind weitere Swap-Partitionen fester Größe auf beliebigen Laufwerken möglich. Bei kurzzeitigem Bedarf sind zusätzlich Swap-Dateien fester Größe einsetzbar (dies ist aber kein Standard unter Linux).
Bei Windows ist eine Änderung der Größe einer Auslagerungsdatei oder das Hinzufügen zusätzlicher Auslagerungsdateien nur dann wirksam, wenn der Rechner danach neu gebootet wird. Bei Linux können Swap-Partitionen und Swap-Dateien während dem Betrieb "on-the-fly" (de)aktiviert werden.
Bei Linux kann die Swap-Partition ohne Probleme weggelassen werden, wenn der Hauptspeicher genügend groß ist. Bei Windows sollte die Auslagerungsdatei nicht deaktiviert werden (auch wenn dies prinzipiell möglich ist), sonst kann es zu seltsamen Effekten kommen (welchen?).
Bei Linux wird die Swap-Partition erst dann genutzt, wenn der Hauptspeicher nicht mehr ausreicht, dies sorgt für maximale Performanz Bei Windows wird die Auslagerungsdatei bereits vom Booten an benutzt, dies kostet Performanz.
Die Vorgehensweise von Windows mit einer in der Größe dynamisch änderbaren Auslagerungs-Datei statt ainer statischen Swap-Partition ist zwar flexibler, hat aber auch Nachteile:
Es ist zu vermuten, dass Windows eine Auslagerungsdatei verwendet, weil normale Windows-Anwender mit einer nicht formatieren Swap-Partition ohne Laufwerksbuchstaben nicht zurechtkämen. Unter Windows werden letztlich die Begriffe Dateisystem (logische Struktur) und Partition (Hardware) nicht sauber getrennt.
.EXE, .COM, .BAT,
.CMD und .MSI erkannt. Werden Dateien mit
anderen Endungen "angeklickt" (z.B..DOC oder .XLS),
dann startet meist eine damit "verknüpfte" Anwendung, die diese Datei
öffnet und ihren Inhalt geeignet anzeigt.
Unter Linux werden beliebige Dateien durch ein Ausführungs-Recht
(x=executable) zu einem ausführbaren Programm gemacht. Anhand eines Präfix
bei Binärdateien oder einer sogenannten "Shee-Bang-Zeile" der Form
#!/PFAD/ZU/PGM im Dateikopf bei Skripten kann Linux erkennen,
wie diese Programm-Datei beim Ausführen genau zu starten ist. Der Inhalt einer solchen Datei muss
natürlich ein sinnvolles Programm sein, sonst "hagelt" es Fehlermeldungen.
D.h. Programme in Skript-Sprachen wie Shell, Awk, Perl, PHP, Tcl/Tk, Python, Ruby, Lua können unter Linux wie jedes andere Programm oder Kommando aufgerufen werden.
Häufig wird unter Windows bereits beim Download einer Datei im Web-Browser die Extension interpretiert und das Programm im Falle einer EXE-Datei z.B. sofort zur Ausführung angeboten. Dies ist zwar sehr bequem, aber auch sehr unsicher.
Bei Linux wird das Ausführungsrecht nicht mit übertragen, d.h. Downloads sind nicht sofort ausführbar, sondern müssen erst gespeichert und dann mit dem Ausführungs-Recht versehen werden.
Micros~1) generiert. Diese
"Kurznamen" sind bei einigen (veralteten) Anwendungen immer noch in
Dialogboxen zu sehen bzw. bei ihrem Aufruf anzugeben.
Linux kennt aufgrund der verwendeten Dateisysteme schon immer lange Dateinamen (bis 1024 Zeichen) und erlaubt eine maximale Pfadnamenlänge von 4095 (UNIX-Systeme hatten anfangs eine maximale Dateinamenlänge von 14 Zeichen, Pfadnamen waren auf 255 Zeichen beschränkt).
In Dateinamen sind folgende Zeichen nicht erlaubt (siehe MSDN: Naming Files, Paths, and Namespaces)
/ (Verzeichnistrenner)
: (Laufwerktrenner)
\ (Verzeichnistrenner)
? * (Dateisuchmuster)
< > | (Umlenkungen und Pipe)
" / (Quotierung und ???)
Windows unterscheidet Groß- und Kleinschreibung beim Zugriff
nicht. Beim Anlegen wird die Datei/das Verzeichnis in genau der
Schreibweise angelegt, die angegeben wurde. Diese Schreibweise wird
auch zur Anzeige im Windows Explorer bzw. beim Kommando DIR benutzt. Die
8+3-Kurznamen werden immer mit Großbuchstaben dargestellt und sind nur beim
Kommando DIR /X (extended) oder in alten Windows-Anwendungen sichtbar.
Linux unterscheidet immer zwischen Groß- und
Kleinschreibung, auch bei Dateinamen. In einem Linux-Verzeichnis könnten z.B. die Dateien
"TEXT", "Text", "tExT" und "text" liegen. Es handelt sich dabei um
unterschiedliche Dateien, die natürlich auch einen unterschiedlichen Inhalt
haben können (ob diese Namen gleichzeitig verwendet werden sollten,
sei dahingestellt ;-).
Unter Linux werden (im Gegensatz zu Windows) Leerzeichen und
Sonderzeichen wie äöüÄÖÜß in Verzeichnis- und Dateinamen kaum
verwendet. Sie sind aber prinzipiell möglich, allerdings nur im Zusammenhang
mit geeigneter Quotierung ("…" '…' \C). Unter
Windows ist das Leerzeichen ein sehr häufiges Zeichen in Dateinamen
(leider), besser wäre es, dafür einen Unterstrich zu verwenden.
Unter Linux stellt der Punkt "." in Dateinamen keine Trennung zwischen Name und Extension dar (wie unter Windows), sondern er ist ein ganz normales Zeichen. Unter Windows ist z.B. die Verwendung von zwei Punkten in Dateinamen "gefährlich", weil nicht genau definiert ist, welche der beiden Endung dargestellt wird und welche der zwei Endungen wirklich interpretiert wird (siehe ILOVEYOU-Virus).
Unter Linux werden Dateien "versteckt", indem als Dateinamenanfang ein Punkt "." verwendet wird. Unter Windows wird dies durch das Dateiattribut HID(DEN) erreicht.
Unter Linux hat die Endung/Extension einer Datei eher informativen Charakter und wird von den Anwendungen nicht benötigt, unter Windows muss man dagegen auf die korrekte Dateiendung achten. So sollte dort z.B. bei einem Textdokument die Endung ".txt" lauten, da mit dieser Anklicken Unter Linux kann man die Endung beliebig wählen (z.B. ".txt", ".dokument", ".privat") aber auch ein Dateiname ohne Endung ist möglich. Linux erkennt über den Datei-Inhalt, um welchen Dateityp es sich handelt.
Allerdings kennen unter Linux Desktop-Systeme wie KDE, Gnome oder auch Web-Browser die Möglichkeit, Dateien mit einer bestimmten Endung einer Anwendung zuzuordnen. Diese Zuordnungen sind (wie bei Windows) vom Anwender konfigurierbar.
Linux kann auf jeden Fall immer auf alle Windows-Dateisysteme lesend und schreibend zugreifen während umgekehrt Windows leider nicht auf alle Linux-Dateisysteme zugreifen kann (es gibt aber Zusatz-Software für diesen Zweck).
Unter Windows gibt es pro Partition bzw. pro verbundener Netzwerk-Freigabe
einen Laufwerksbuchstaben A:, B:,
C:, D:,… mit jeweils einem eigenen
Dateibaum. Zumindest Laufwerk C: existiert immer.
Unter Linux gibt es nur einen einzigen Dateibaum, in dem
die Dateisysteme der einzelnen Partitionen in bestimmten (leeren)
Verzeichnissen "eingehängt" (montiert) werden. Startpunkt ist die
"root"-Partition, die beim Booten vom Kernel montiert wird. In
den Dateibaum dieser Partition werden gemäß den Angaben in der Datei
/etc/fstab gegebenenfalls weitere Partitionen eingehängt.
Bevor unter Linux ein Datenträger (Platte, CD, Diskette, USB-Stick,
…) benutzt werden kann, muss er "eingehängt" (montiert)
werden. Analog muss er "ausgehängt" (demontiert) werden, bevor er
wieder entfernt werden darf. Das Dateisystem auf dem Datenträger
erscheint an einer (meist wählbaren Stelle) des Gesamt-Dateisystems, z.B. unter
/media/dvd, /media/usb, …). Inzwischen ist
auch unter Linux ein "Hotplugging" möglich, bei dem das Montieren
durch das Einstecken/Anschließen des Datenträgers automatisch ausgelöst wird.
Windows macht das "Einhängen" automatisch und blendet das Dateisystem
unter einem Laufwerkbuchstaben (z.B. E:, F:, …)
ein. Das "Herausziehen" des Datenträgers unter Windows sollte wie bei Linux
vorher durch die Funktion "Hardware sicher entfernen" angekündigt werden,
sonst sind Datenverluste vorprogrammiert.
Da Windows jederzeit mit dem unangekündigten "Herausziehen" des Datenträgers
rechnen muss, kann es meist nicht so ausgeklügelte
Chaching/Pufferungs-Mechanismen wie Linux einsetzen.
Microsoft sagt bis heute nicht eindeutig, welche Daten dabei genau übertragen werden. Dieses Wissen liegt vielleicht sogar nirgendwo vollständig vor, sondern ist aufgeteilt auf Hunderte von Programmierteams.
Zitat Wilhem Hoegner (Projekt LiMux in München): "Einen Einsatz solcher Programme in einer öffentlichen Verwaltung, wo strengster Datenschutz herrschen muss, kann eigentlich niemand verantworten."
Die eigentlichen "Innereien" von Windows, Teile seines API (Application Programming Interface) und viele der von Windows(-Anwendungen) verwendeten Datenformate (NTFS, Registry, Office-Dokumente, …) sind hingegen weniger gut dokumentiert. Vieles was hier bekannt ist, wurde von Freiwilligen durch "Reverse Engineering" ermittelt. Allerdings wird diese Fleißarbeit aufgrund der regelmäßigen Erweiterungen und Änderungen des Herstellers Microsoft immer wieder notwendig.
Die Hersteller von Windows-Anwendungen und Windows selbst sind der Meinung, dass dies ihre Geschäftsgrundlage sichert und das Windows-System sicherer macht. Darauf gibt es eine ganz einfache Antwort: "Security by obscurity doesn't work" [Bruce Schneier].
Linux und seine Anwendungen sind ebenfalls gut dokumentiert, meist in Form von englisch-sprachigen man- oder info-Pages oder Textdateien. Übersetzungen für viele dieser Informationen sind vorhanden, wenn auch nicht immer auf dem aktuellen Stand oder völlig fehlerfrei. Für viele Anwendungen gibt es eine eingebaute elektronische Hilfe und nicht zuletzt sind inzwischen auch in diesem Bereich sehr viele (englische und deutsche) Bücher von ausgewiesenen Experten erhältlich.
Folgende entscheidenden Unterschiede zu Windows gibt es allerdings:
Drucken unter Linux ist ein Kapitel für sich, denn es geht grundsätzlich von einem PostScript-Drucker als Druckmodell aus. Schließt man also einen PostScript-Drucker an, so kann man ihn auf jeden Fall vernünftig ansteuern. Alle anderen Drucker werden über sogenannte Filter angesteuert, die die PostScript-Kommandos in die jeweilige Druckersprache umwandeln. Im Extremfall wird dann die komplette Druckaufbereitung unter Linux durchgeführt und nur noch Pixel an den Drucker geschickt (ähnlich wie dies unter Windows für GDI-Drucker stattfindet). Dieser ganze Konvertierungsvorgang wird von GhostScript (einem freien PostScript-Interpreter) und anderen Hilfsprogrammen durchgeführt.
Konnten früher nur wenige Drucker angesteuert werden, hat sich die Situation inzwischen entscheidend verbessert. Bereits bei der Installation werden von dem mittlerweile standardmäßig eingesetzten modernen Drucksystem CUPS (Common UNIX Printing System) sehr viele Drucker erkannt und korrekt eingebunden.
Bei sehr neuen Drucker-Modellen kann es natürlich immer noch Probleme geben, wenn der Hersteller z.B. keine Linux-Treiber mitliefert. Findet man zu diesem Drucker allerdings eine sogenannte PPD-Datei (PostScript Printer Description), dann kann man ihn auf jeden Fall mit allen seinen Eigenschaften (Schächte, Duplex, Schwarzweiß/Farbe) unter CUPS in Betrieb nehmen.
Es gibt inzwischen für Linux auch kommerzielle Druckertreiber-Sammlungen (z.B. Turboprint, ESP Print Pro), die für relativ wenig Geld sehr viele Drucker mit sehr hoher Qualität ansteuern können.
Spätestens dann erkennt man, dass man einige Jahre (oder sogar Jahrzehnte) langsam und stetig in die Windows-Welt "hineingewachsen" ist und dabei einen nicht zu unterschätzenden Lernaufwand hatte (der sich aber auf einen sehr langen Zeitraum verteilt hat).
Lässt man Leute mit Systemen unter Linux (oder Apple) arbeiten, die bisher kaum Computer bedient haben, so kommen diese in der Regel sehr gut zurecht. Sie sind noch nicht an eine bestimmte "Bedienphilosophie" gewohnt und daher oft flexibler als jemand, der schon immer unter Windows arbeitet.
Nicht zuletzt zeigt die Vielzahl der zu Windows angebotenen Kurse, dass sich das System (und die darauf laufenden Anwendungen) mitnichten von selbst erklärt, sondern die Anwender und System-Administratoren auch hier erst mal lernen müssen.
Die gute Botschaft lautet allerdings: "Linux lässt sich ausgehend von Windows erlernen", weil vieles aus der Windows-Welt schon bekannt ist und unter Linux genauso aussieht und funktioniert. Die Frage ist dann nur noch, ob man das fehlende Delta noch "draufpacken" will, oder lieber bei dem mit Windows erreichten Stand bleibt.
Linux und unter der GPL veröffentlichte Software schließen eine Haftung generell aus. D.h. die Software wird auf eigenes Risiko eingesetzt, es gibt niemanden, den man bei Fehlfunktionen oder fehlender Funktionalität verantwortlich machen kann. Eine Garantie wie bei Windows für Datenträger-Ersatz oder Rückzahlung der Lizenzkosten bei nicht erfüllter Funktionalität gibt es nicht (es sei denn, ein Distributor bietet sie für sein Linux-Paket an). Allerdings ist dies aufgrund der geringen bis gar nicht vorhandenen Lizenzkosten sowieso nicht notwendig.
Zwischen den beiden Betriebssystemen besteht hier also kein wesentlicher Unterschied.
Jegliche Hardware (bis auf Netzwerkkarten ;-) wird unter Linux als
Gerätedatei angesprochen. Handelt es sich um Hardware mit wechselbaren
Datenträgern, so muss man die darin eingelegten/angesteckten Datenträger
klar vom Gerät selbst unterscheiden. Damit auf einen solchen Datenträger
zugegriffen werden kann, muss er vorher unter einem (leeren) Verzeichnis
montiert (eingehängt) werden. Der Inhalt des Datenträgers wird dann
unterhalb dieses Verzeichnisses in den Dateibaum eingeblendet. Soll der
Datenträger wieder entfernt werden, muss er vorher demontiert
(ausgehängt) werden. Bei diesem Vorgang werden evtl. noch verzögerte
Schreibvorgänge abgeschlossen (sync). Solange ein Datenträger also montiert
ist, kann er in der Regel nicht aus dem Gerät entfernt werden. Alle
Gerätedateien sind im Verzeichnis /dev (devices) zu finden,
typische Gerätedateien sind z.B.:
| Name | Bedeutung |
|---|---|
/dev/fd0 |
1. Diskette (Floppy Disk) |
/dev/hda |
1. (E)IDE-Festplatte (Hard Disk) |
/dev/hdb |
2. (E)IDE-Festplatte |
/dev/hda1 |
1. Partition der 1. IDE-Festplatte |
/dev/hda2 |
2. Partition der 1. IDE-Festplatte |
/dev/sda |
1. SCSI/SATA-Festplatte (SCSI disk) |
/dev/sdb |
2. SCSI/SATA-Festplatte |
/dev/sdb5 |
5. Partition der 2. SCSI/SATA-Festplatte |
/dev/scd0 |
1. (SCSI/SATA-)CDROM/DVD/Brenner (SCSI CD) |
/dev/ttyS0 |
1. serielle Schnittstelle (Teletype) |
/dev/tty1 |
1. Textterminal |
/dev/pts/1 |
1. grafisches Pseudoterminal (Pseudo Terminal Screen) |
/dev/psaux |
PS-Maus |
/dev/rtc |
Hardwareuhr (Real Time Clock) |
/dev/input/mouse0 |
1. Maus |
/dev/input/mice |
Alle Zeigegeräte gleichzeitig |
/dev/mixer |
Alle Audiogeräte gleichzeitig |
Einige Pseudogeräte zu Spezialzwecken sind z.B.:
/dev/null |
Zum Wegwerfen von Daten (z.B. Fehlermeldungen umleiten in "schwarzes Loch") |
/dev/zero |
Beliebig viele Null-Bytes lesen (z.B. um eine Festplatte/Partition vollständig zu löschen) |
/dev/urandom |
Beliebig viele Zufallsbytes lesen (schnell, aber von geringer Qualität) |
/dev/random |
Beliebig viele Zufallsbytes lesen (langsam, aber von hoher Qualität) |
/dev/kmem |
Kernelspeicher lesen/schreiben |
Es werden 2 prinzipielle Arten von Gerätedateien unterschieden:
| Typ | Bedeutung |
|---|---|
| Character | Zeichenorientierte (serielle, stromorientierte) Geräte
wie Tastatur, Maus, Modem: • Erlauben zeichenweises Lesen und/oder Schreiben • Wahlfreies Positionieren ("random access") ist nicht möglich • Der Datentransfer erfolgt ungepuffert |
| Block | Blockorientierte (random access) Geräte wie Festplatte,
Diskette, CDROM: • Erlauben nur sektorweises Lesen und/oder Schreiben • Wahlfreies Positionieren ("random access") ist möglich • Der Datentransfer erfolgt gepuffert |
Hier eine von ls -l /dev produzierte Liste von Gerätedateien
(c=character, b=block):
brw------- 1 root disk 27, 16 2004-12-31 19:08 zqft0
crw-rw-rw- 1 root root 27, 16 2005-01-09 15:16 zero
crw-rw-rw- 1 root root 1, 3 2005-01-09 15:16 null
crw-rw-rw- 1 root root 1, 8 2005-01-09 15:16 random
crw-r--r-- 1 root root 1, 9 2005-01-09 15:16 urandom
brw-rw---- 1 root disk 3, 0 2005-01-09 17:19 hda
brw-rw---- 1 root disk 3, 1 2005-01-09 17:19 hda1
crw------- 1 user audio 14, 4 2005-01-09 17:19 audio
Hinter jeder Gerätedatei steckt ein Treiber (device driver), der
beim Lesen von/Schreiben auf diese(r) Datei automatisch vom Kern angesprochen
wird. Listet man die Gerätedateien in /dev auf, dann sieht
man anstelle der Dateilänge (die sinnlos wäre, da es sich ja um
keine echten Dateien handelt) 2 Zahlen: die Major und die Minor
Device Number. Erstere adressiert den Treiber über eine Sprungtabelle,
die zweite wählt bei Verwendung des gleichen Treibers (z.B. für Festplatten)
die Untereinheit eines Gerätes aus (z.B. Partition).
Damit auf ein Gerät lesend/schreibend zugegriffen werden kann,
müssen die Zugriffsrechte entsprechend gesetzt sein. Viele Geräte
gehören dem Benutzer root und der Gruppe root
(das ist ein Unterschied!) und für "Alle anderen" sind keine Zugriffsrechte
gesetzt. Diese Geräte können dann von normalen Benutzern nicht verwendet
werden. Dazu gehören z.B. Festplatten oder CD/DVD-Brenner.
Für einige spezielle Geräteklassen gibt es besondere
Gruppen, in die man Benutzer eintragen muss, wenn sie auf diese Geräte
Zugriff haben sollen. Dazu ist in der Gruppenbeschreibungs-Datei
/dev/group hinter dem Gruppennamen die Liste der Mitglieder
zu erweitern.
| Gruppe | Bedeutung |
|---|---|
audio |
Soundkarte |
dialout |
Modemeinwahl |
disk |
Platten-Zugriff |
kmem |
RAM-Speicher |
lp |
Drucker |
tty |
Terminals |
uucp |
Unix-to-Unix-copy |
video |
Videoplayer |
Eine andere Alternative sind sogenannte Set-UserID/GroupID-Programme, um auf
Geräte zuzugreifen. Sie schalten beim Aufruf den Prozessbesitzer bzw.
die Prozess-Besitzergruppe vom Aufrufer auf den Besitzer des Programms
(häufig root) um. Der Prozess hat dann aufgrund der Besitzverhältnisse
und der Zugriffsrechte der Gerätedatei in /dev das Recht,
mit ihr zu arbeiten.
Dazu können z.B. die CD/DVD-Brennprogramme k3b oder
xcdroast gehören. Weitere Programme dieser Art findet man durch
find / -type f \( -perm -4000 -o -perm -2000 \) -ls. Auf einem
sicheren System sollten nur sehr wenige Programme mit diesen Rechten
ausgestattet werden, da dies eine Sicherheitslücke darstellen kann.
COM1,
COM2,
COM3,
COM4,
CON,
LPT,
LPT1,
LPT2,
LPT3,
AUX,
NUL)
um die Serielle Schnittstelle (communication), die Konsole (console), die
Drucker (line printer) und die serielle Schnittstelle (auxiliary) anzusprechen
oder beliebige Daten wegzuwerfen (null).
Der Zugriff auf Geräte wird nicht über Dateirechte geregelt, sondern über den HAL (Hardware Abstraction Layer).
Die Windows GUI hat sich über die verschiedenen Windows-Versionen stark verändert (was grafisches Aussehen und Zugriff auf die einzelnen Komponenten betrifft) und wird sich auch in der nächsten Version wieder ändern. In einer bestimmten Windows-Version besteht aber keine Wahlmöglichkeit der GUI, außer dass alle Windows-Versionen ab Windows XP auf eine GUI im Windows 2000 Design umgeschalten werden können.
Das Verstecken des Betriebssystems und seiner Komplexität hinter einer grafischen Oberfläche hat seine Vorteile, aber auch Schattenseiten:
Bei Linux wird eindeutig zwischen dem Betriebssystem-Kern an sich und der grafischen Oberfläche unterschieden. Linux lässt sich jederzeit auch ohne grafische Oberfläche betreiben, gerade im Server-Bereich ist dies häufig der Normalfall. Hierdurch spart man Speicherplatz und gewinnt Performanz, Sicherheit und Stabilität, denn grafische Oberflächen sind aufgrund ihres Umfanges und ihrer Komplexität eine notorisch fehlerbehaftete Software (der KDE-Desktop umfasst z.B. inzwischen mehr Programmzeilen als der Linux-Kernel). Trotzdem lassen sich in einem "Terminal" über eine Shell alle notwendigen Aufgaben effizient und komfortabel erledigen.
Ein Nachteil der kommando-orientierten Bedienung ist die längere "Anlaufzeit", bis man damit gut umgehen kann. Mit einer Grafischen Oberfläche kann man dagegen in der Regel sofort "loslegen".
Grafische Oberflächen sind natürlich auch unter Linux verfügbar. Der wesentliche Unterschied liegt aber darin, dass diese Oberfläche (meist das X Window-System) kein fester Bestandteil des Betriebssystems ist, sondern wie jedes andere Anwender-Programm auch gestartet wird (ohne Administrator-Rechte). D.h. Fehler darin oder ein Absturz der grafischen Oberfläche haben keine Auswirkung auf das eigentliche Betriebssystem (wie bei Windows).
Die Entkopplung von Betriebssystem und GUI ist auch der Grund für die einfache Remote-Anwendung und -Administration von Linux.
Unter Linux gibt es keine einheitliche grafische Oberfläche, sondern sehr viele Varianten, die zwei bekanntesten sind KDE und Gnome. Diese Vielfalt ist zwar etwas verwirrend und kann als Nachteil gewertet werden, aber man kann so auch eine genau für den beabsichtigten Einsatzzweck passende grafische Oberfläche auswählen. Z.B. kann man Linux im Prinzip wie Windows aussehen lassen, was manchem Anwender vielleicht die Migration erleichtert. Der Grund für diese Flexibilität ist natürlich, dass die GUI optional ist, d.h. für den eigentlichen Betrieb gar nicht notwendig ist.
Der wesentliche Vorteil von grafischen Oberflächen ist die "Führung", die sie einem unerfahrenen Anwender geben. Er kann keine groben Fehler mehr begehen. Allerdings kann er immer noch viele kleine Fehler begehen, indem er z.B. vergisst, ein Kästchen anzukreuzen. Oder er "verläuft" sich in den vielen Dialogboxen, die ständig "aufpoppen". Oder er "irrt" sich in der Bedeutung von Dialogbox-Elementen.
Den erfahrenen Anwender "nerven" grafische Oberflächen eher, da sie ihn am schnellen und effizienten Arbeiten hindern und nicht "programmierbar" sind. Vorteil von grafischen Oberflächen ist aber, dass Aufgaben, die nur 1x im Jahr durchzuführen sind, damit leichter zu handhaben sind.
Ein weiterer Vorteil der hohen "Integration" der grafischen Oberfläche, dem eigentlichem Betriebssystem und den Anwendungen unter Windows ist die höhere Performanz bei grafischen Anwendungen (z.B. Spielen).
Anwender können unter Windows zu Gruppen zusammengefasst werden. Es wird unterschieden zwischen lokalen Gruppen und Domain-Gruppen. Dateien und Verzeichnisse können für diese Gruppen Zugriffsrechte zugeteilt bekommen.
Unter Linux gibt es ebenfalls Benutzer-Gruppen. Darin kann man mehrere Anwender zusammenfassen und anschließend Dateien für diese Gruppen mit Rechten versehen. Somit spart man sich die Arbeit, für jeden einzelnen Anwender eine Datei mit Zugriffsrechten zu versehen. In großen Netzwerken mit vielen Anwendern erleichtert das die Verwaltung erheblich.
Allerdings ist in einer Gruppe keine Zusammenfassung von anderen Gruppen möglich (wie bei Windows).
In mindestens einer Gruppe, der sogenannten "Primären Gruppe" (heißt meist "staff", "users" oder "wheel") ist man immer Mitglied. Neu angelegte Dateien und Verzeichnisse werden automatisch dieser Gruppe zugeordnet.
Für jede gängige Hardware gibt es heutzutage Linux-Treiber. Sie sind aber eventuell nicht so schnell verfügbar wie unter Windows oder können nicht sämtliche Feinheiten der Hardware ansprechen. Probleme gibt es hier vor allem mit (künstlich) "abgespeckter", brandneuer oder Highend-Hardware, z.B.:
Die fehlenden Hardware-Treiber unter Linux beruhen vor allem darauf, dass die Treiber-Erstellung für Windows von den Hardware-Herstellern umsonst für Microsoft übernommen wird. Und für Linux fehlen diesen Herstellern dann Motivation, Zeit, Geld und Verkaufszahlen, um den Treiber zu schreiben bzw. zu portieren.
Dies wird sich aber mit der zunehmenden Verbreitung von Linux verbessern. Es gibt bereits einige Hersteller, die hier umgedacht haben (z.B. ATI, Nvidia, Dell, FSC-Computer)
Will ein Freiwilliger die Erstellung des Hardware-Treibers übernehmen, dann hat er meist folgendes Problem: Der Erwerb der Hardware-Dokumentation vom Hersteller (die zum Schreiben des Treibers notwendig ist) erzwingt die Unterzeichnung eines "Non-Disclosure-Agreements" (Vertraulichkeits-Erklärung) durch den Treiber-Entwickler. D.h. dieser muss unterschreiben, dass er die erhaltenen Informationen Dritten nicht zugänglich macht.
Und das beißt sich dann mit der GPL/Linux-Philosophie, die verlangt, dass der Software-Quellcode immer mitgeliefert wird. Dieser Quellcode stellt im Falle eines Hardware-Treibers aber gerade eine exakte Dokumentation der Hardware-Details dar.
Bleibt also als einzige (mühsame) Möglichkeit zur Ermittlung der Hardware-Eigenschaften das "Reverse Engineering" übrig (d.h. das Beobachten der Kommunikation zwischen Windows-Treiber und Hardware und dem Ableiten der Hardware-Ansteuerung daraus). Diese Art der Informations-Gewinnung dauert lange und führt nicht immer zur vollständigen Kenntnis über die Hardware, man kann also eventuell nicht alle Features ausnutzen.
Hier einige Stellen im Internet, wo man Informationen zur Lauffähigkeit von Hardware unter Linux findet (noch weitere Links):
Im Prinzip könnten PCs auch zusammen mit einem fertig installierten Linux verkauft werden, wie das bei Windows der Fall ist. Einige Hersteller haben dies auch schon getan oder beabsichtigen dies. Allerdings enthalten Verträge mit den PC-Herstellern wohl Vereinbarungen, die diesen den Verkauf anderer Betriebssysteme zusammen mit der Hardware verbieten, wenn sie die günstigen Windows-OEM-Konditionen von Microsoft nutzen wollen.
Unter Windows NT/2000/2003/2008/XP/Vista/7 existiert pro Anwender ein Verzeichnis "Eigene Dateien", in dem er standardmäßig seine Dateien ablegt. Allerdings hat man als Anwender an vielen anderen Stellen im Windows-Dateisystem ebenfalls Schreibrecht und muss daher seine Dateien nicht unbedingt darin ablegen. Eine besonders beliebte, aber auch unschöne Art der Dateiablage ist der "Desktop", wo die Dateien dann als "Icons" herumliegen und das Benutzer-Profil anwachsen lassen.
Unter Windows gibt also es viele mögliche Ablageorte für die Dateien eines Anwenders, dies verwirrt gelegentlich den Benutzer:
Unter Linux existiert für jeden Anwender ein sogenanntes Heimatverzeichnis für seine persönlichen Daten. Nach der Anmeldung springt er sich automatisch dorthin. Dieses Verzeichnis gehört ihm, und er kann darin (fast) alles tun und lassen, was er will: Er seine Daten speichern, seine E-Mails archivieren und eigene Programme installieren. Auch die individuellen Einstellungen für seinen Desktop und der von ihm eingesetzten Programme werden dort gespeichert. Auf alle anderen Stellen des Dateisystems hat man als Anwender keinen schreibenden Zugriff (außer im temporären Verzeichnis "/tmp").
Dieses Heimatverzeichnis ist ein privater Bereich, und alle Konfigurationen, die die persönliche Arbeitsumgebung betreffen, werden hier gesammelt und gespeichert. Diese Daten werden weder vom Betriebssystem noch von anderen Anwendern verwendet oder geändert.
*.MSI) und ein paar Mausklicks dafür
ausreichen. Hierdurch werden eine Fülle Dateien in unterschiedliche
Verzeichnisse kopiert (gleichnamige bereits vorhandene dabei meist
überschrieben!) und Einträge in der Registry gemacht. Meist erfolgen
auch Einträge im Start-Menü und auf dem Desktop erscheinen Icons
zum Aufruf der Software.
Die Konfiguration der Software erfolgt fast immer über eine Grafische Oberfläche, in der man alle Einstellungen vornehmen kann. Diese Einstellungen werden dann an unbekannter Stelle in der Registry und/oder in Konfigurations-Dateien abgelegt.
Vom Standpunkt der Usability aus gesehen ist das das Optimum, vom Standpunkt der Security eher nicht. Gründe dafür sind:
Die Deinstallation von Software ist unter Windows im Prinzip ebenso einfach, indem man im "Start-Menü" den Punkt "System-Administration" und dann die Dialogbox "Software" auswählt. Hier werden alle installierten Programme aufgelistet, man wählt die zu deinstallierende Software per Maus aus und beantwortet im automatisch gestarteten Deinstaller ein paar Fragen.
Aus mehreren Gründen kann es dabei aber Schwierigkeiten geben (die DLL-Probleme sind auch als "DLL-Nightmare" bekannt):
Unter Linux ist die Installation und auch die Deinstallation von Software nicht einheitlich gelöst. Das liegt vor allem daran, dass es so viele Hersteller von Linux-Distributionen gibt und dass es nicht nur eine Hardware-Plattform (Intel386) gibt.
Im einfachen Fall erhält man die Software mit allen notwendigen Dateien und Informationen vom Distributor seiner Linux-Version (oder einer anderen Quelle) in einem (RPM/APT-)Paket vorübersetzt, das wie unter Windows per Mausklick installiert und auch wieder deinstalliert werden kann.
Im komplexen Fall muss man sich ein Archiv mit dem Quellcode
der Software herunterladen, das Archiv auspacken, den Quellcode an
die eigene Plattform anpassen (dieser Vorgang ist automatisiert), ihn
dann mit Make und einem C/C++-Compiler übersetzen und das entstehende
Produkt dann installieren ("Linux-Dreisatz": configure;
make; make install. In der Regel ist mit Make auch eine saubere
Deinstallation möglich.
Die Konfiguration der Software erfolgt fast immer über ASCII-Konfigurations-Dateien, in denen man alle Einstellungen vornehmen kann. Die Namen und die Lage dieser Dateien ist fix und der Installations-Anleitung zu entnehmen.
Beim Aufruf der Software wird meist im Heimatverzeichnis des Anwenders eine "versteckte ASCII-Konfigurations-Datei" oder "-Verzeichnis" angelegt, in dem der Anwender eigene Einstellungen durchführen kann.
Meist müssen der "Suchpfad" ($PATH) ergänzt und
Umgebungs-Variablen in der Benutzerumgebung gesetzt und exportiert
werden.
Vom Standpunkt der Usability ist das keineswegs das Optimum (eher das Gegenteil!), vom Standpunkt der Security schon eher:
Aus diesen Gründen ist eine vollständige und saubere Deinstallation einer Software meist ohne Schwierigkeiten möglich.
Unter Linux stellt die Kommandozeile unter der Shell in einem Terminal nach wie vor ein sehr wichtiges Arbeitsmittel dar. Alle Programme können von dort aus gestartet werden (wobei grafische Anwendungen natürlich eine X Window-Umgebung für den Start benötigen) und die komplette System-Administration kann darüber durchgeführt werden.
Die unter Linux verfügbaren Shells sind deutlich mächtiger als die Shell des Kommandozeilenfensters unter Windows. Sie eignen sich auch zur Programierung und automatisierten Ausführung von Tätigkeiten.
Leider gibt es verschiedene Shells (z.B. sh,
csh, tcsh, ksh, bash,
zsh), die sich in Syntax und Funktionalität
unterscheiden. Unter Linux hat sich aber inzwischen mit der sehr
leistungsfähigen bash eine Standard-Shell herauskristallisiert.
Linux wird daher inzwischen sehr häufig in sogenannten "Appliances" eingesetzt, die als Fix-und-Fertig-Produkt für bestimmte Anwendungsfälle dienen (DSL-Router, Firewall, WLAN-Access-Point, Druckserver, Fileserver, Paketfilter, Applikations-Gateway, Webserver, TV-Festplatten-Recorder, Handy, Palmtop, NAS/SAN). Das Linux-System wird dabei von allen nicht notwendigen Komponenten befreit, es hat daher eine sehr geringe Größe und benötigt wenig Ressourcen (Speicher, CPU, Strom). Diese Geräte benötigen meist keinen Lüfter und sind somit lautlos (sofern sie "diskless" sind).
Die Lizenzmodelle vieler Windows-Software-Produkte sind inzwischen so komplex geworden, dass bereits das Berechnen der Lizenzkosten für bestimmte Einsatz-Szenarien sehr aufwendig sein kann. Diese Zeit könnte man besser in ganz andere Dinge investieren, z.B. in die Ausbildung der Administratoren und Mitarbeiter.
Linux kennt nur ein prinzipielles Lizenz-Modell, die GPL (GNU General Public License). Diese besagt im Wesentlichen, dass es keine Lizenzgebühren geben darf (aber sehr wohl ein Copyright). Die reinen Lizenzkosten für Linux sind daher gleich Null.
Das Installieren und Administrieren von Windows und Linux-Systemen kostet natürlich immer Arbeitszeit und damit Geld. Hier gibt es derzeit keine klaren Aussagen, welches der beiden Betriebssysteme für welche Einsatz-Szenarien höhere/niedrigere Kosten verursacht. Für beide Betriebssysteme gibt es viele TCO- (Total Cost of Ownership) und ROI-Berechnungen (Return of Investment), die je nach Randbedingungen und Zielen bzw. Affinität des Erstellers Vorteile für Linux oder für Windows ermitteln.
Linux wurde von Beginn an als Mehrbenutzer-System konzipiert. Daher benötigt man immer einen Benutzernamen und das zugehörige Passwort und ein Heimatverzeichnis (für die persönlichen Daten), um sich anmelden zu können. Benutzername und Passwort werden auch als Benutzerkonto bezeichnet.
Unter Linux ist es daher möglich und auch absolut üblich, dass mehrere Anwender "gleichzeitig" auf einem Rechner arbeiten, indem sie sich z.B. über Netzwerk dort anmelden. Diese Anwender arbeiten voneinander völlig unabhängig, außer dass sie sich natürlich die Ressourcen des Rechners teilen (Speicher, CPU, I/O-Kanäle, Festplatte, Drucker, …). Nicht nur Terminals, sondern auch grafische Anwendungen lassen sich auf diese Weise netzwerkweit benutzen.
Windows war und ist primär ein Einzelbenutzer-System, auch wenn Windows NT/2000/2003/2008/XP/Vista/7 inzwischen echte Mehrbenutzerfähigkeit auf Prozessebene anbietet. Es gibt aber kaum Mechanismen, um auf einer entfernten Windows-Maschine komfortabel arbeiten zu können.
Diese Lücke wird zwar von den "Windows Terminal-Servern" (z.B. Citrix) geschlossen, für die jedoch die Verwendung spezieller Clients notwendig ist und die zusätzliche hohe Lizenzgebühren kosten. Alle Windows-Server-Versionen enthalten bereits einen Windows Terminal-Server mit 2 Client-Lizenzen.
Unter Windows wird grundsätzlich zuerst das aktuelle Verzeichnis
nach einem Programmnamen durchsucht (mit einer der automatisch angehängten
Endungen .EXE/COM/BAT/CMD/MSI). Wenn es dort nicht gefunden wird,
dann werden die Verzeichnisse in der Umgebungsvariablen PATH
in der dort aufgeführten Reihenfolge nach dem Programmnamen durchsucht
(Trennung der Verzeichnisse durch ";", die Variable ist mit
echo %PATH% anzeigbar).
Die Suchpfadvariable ist unter Windows normalerweise relativ kurz und
enthält z.B. den Wert C:\;C:\windows\system32. Wird
neue Software installiert, dann wird die Variable meist nicht
verlängert. Zum Aufruf eines Programms ist also auf der Kommandozeile meist
der volle Pfad anzugeben (oder ein Menüpunkt im Startmenü, ein Icon
auf dem Desktop oder das Programmname im Windows Exporer "anzuklicken"). Kann der
Programmname (mit der angehängten Endung .EXE/COM/BAT/CMD/MSI) nicht
gefunden werden, erhält man die Meldung "Kommando XXX nicht gefunden".
Unter Windows ist der Suchpfad eine systemweite Einstellung und für alle Benutzer gleich.
Unter Linux werden Programme ausschließlich in den im Suchpfad
aufgelisteten Verzeichnissen gesucht. Diese Verzeichnisse (durch
":" in der "bash" oder " " in der
tcsh getrennt) werden in der aufgeführten Reihenfolge nach dem
vollständigen Programmnamen durchsucht. Das aktuelle Verzeichnis
wird nur dann nach dem Programm durchsucht, wenn die Suchpfadvariable
PATH (oder path in der tcsh) den
Verzeichnisnamen "." (für "aktuelles Verzeichnis")
enthält. Über seine Position im Suchpfad kann gesteuert werden,
ob es zuerst, mittendrin oder zuletzt nach dem Programmnamen durchsucht wird.
Die Suchpfadvariable ist unter Linux normalerweise
relativ lang und enthält für einen normalen Benutzer user z.B. den Wert
/bin:/usr/bin:/usr/local/bin:/opt/kde3/bin:/usr/X11/bin:/usr/lib/java/bin:/home/user/bin.
Wird neue Software installiert, dann wird die Variable meist
verlängert. Zum Aufruf eines Programms ist also auf der Kommandozeile
meist nur der Programmname anzugeben. Kann der Programmname nicht
gefunden werden, erhält man die Meldung "Kommando XXX nicht gefunden".
Zum Aufruf eines Programms PGM im aktuellen Verzeichnis muss
daher meist ./PGM angegeben werden. Dies ist insbesondere für den
Benutzer root notwendig, da in dessem Suchpfad aus Sicherheitsgründen
nie das aktuelle Verzeichnis . steht.
Unter Linux ist der Suchpfad eine benutzerabhängige Einstellung
und wird für jeden Benutzer getrennt bei seiner Anmeldung
eingestellt. Insbesondere hat der Systemadministrator "root" eine
völlig andere Suchpfadeinstellung als die normalen Benutzer (z.B.
/usr/sbin:/bin:/sbin:/usr/sbin). Er
kann also normalerweise Systemadministrations-Programme direkt aufrufen, dafür
aber nicht alle Benutzerprogramme (wie z.B. die der grafischen Oberfläche).
Die Windows-Variante ist bequemer, hat aber folgende Nachteile:
cd in das entsprechende Verzeichnis
gewechselt (oder der absolute Pfad angegeben), das ist umständlich.
Die Linux-Variante ist unbequemer, hat aber folgende Vorteile:
./ davorstellt (das ist anfangs eine der größten
Hürden für an Windows gewöhnte Benutzer!).
TAB TAB (bash) oder TAB
Strg-D (tcsh) aufgelistet werden (automatische
Kommando-Vervollständigung).
Linux ist für etwa 30 Prozessorplattformen verfügbar (Intel386, PowerPC, Sparc, MIPS, PA-RISC, 68000, ARM, Alpha, …) und sehr gut portabel, da der Quellcode hauptsächlich in C und C++ geschrieben ist und nur wenig Assembler-Code enthält.
Windows ist nicht im Quellcode verfügbar und somit eine "Black-Box". Es kann daher auch nicht in Einzelteile zerlegt und dann am Bedarf orientiert installiert werden. Für einzelne große Kunden werden hier sehr wohl Ausnahmen gemacht, jedoch nicht generell.
Linux ist im Quellcode verfügbar und dementsprechend sehr leicht auf bestimmte Einsatz-Szenarien zuschneidbar. Z.B. ist es durchaus möglich, in 1-2 MByte ein voll funktionsfähiges Linux-System unterzubringen (allerdings ohne grafische Oberfläche).
Sie (bzw. das Codierungschema True Type 1) sind aber mit Lizenzen von Microsoft behaftet und dürfen daher z.B. nicht in Linux-Distributionen mitgeliefert werden. Aufgrund einer Lizenzlücke sind sie aber ohne Kosten über das Internet nachinstallierbar (die sogenannten Corefonts).
Fonts sehen unter Windows vor allem auf dem Bildschirm schöner aus als unter Linux. Auch dies liegt daran, dass Microsoft und Adobe bestimmte Verfahren der Fontcodierung (das "Hinting") mit Lizenzen versehen haben. Der Einsatz dieser Verfahren ist aber für eine ordentliche Darstellung vieler gängiger Fonts auf dem Bildschirm notwendig. Auch hier kann man über das Internet Fonts mit Hinting nachinstallieren bzw. es sind inzwischen rechtefreie Ersatzfonts verfügbar
Unter Linux ist sämtliche verfügbare Software schon immer an diese saubere Trennung angepasst. D.h. man kann grundsätzlich mit jeder Anwender-Software als normaler Anwender arbeiten und wird nur bei Bedarf kurzzeitig für ein einzelnes Programm (z.B. YaST) oder in einem einzelnen Fenster (z.B. Terminal) der Administrator. Und als normaler Anwender kann man maximal seine eigenen Daten infizieren/zerstören, aber nicht die anderer Anwender und schon gar nicht die des Systems.
Aufgrund seiner geringeren Verbreitung gibt es für Linux (derzeit) deutlich weniger Viren/Würmer/Trojaner als für Windows. Prinzipiell sind aber auch unter Linux derartige Programme möglich und werden mit höherem Einsatzgrad auch vermehrt auftreten (z.B. RootKits). Trotzdem sind aufgrund der internen Architektur und der sauberen Trennung von System-Administrator und Anwendern sowie Betriebssystem, Grafischer Oberfläche und Anwendungen hier deutlich weniger Probleme zu erwarten.
Unter Linux laufen standardmäßig nur die unbedingt notwendigen Dienste. Alles was nicht unbedingt notwendig ist, ist standardmäßig abgeschalten. Unter vielen Windows-Versionen (bei Windows 2003/2008/XP/Vista/7 inzwischen nicht mehr) sind nach einer Standard-Installation mehr als 30 Dienste automatisch aktiviert. Man kann sie auch nicht abschalten, da sie von Windows intern benötigt werden.
Soweit möglich, laufen Dienste unter Linux statt mit Administrator-Rechten mit den Rechten eines speziell für jeden Dienst eingerichteten Verwaltungs-Benutzers, der wie alle normalen Anwender fast nichts darf (meist kann er sich nicht mal anmelden, da für ihn kein Passwort existiert).
Linux trennt im Gegensatz zu Windows folgendes sehr streng voneinander:
Im Open Source Bereich gibt es kein Marketing und damit auch keinen Veröffentlichungs-Druck. Es kann im Gegenteil sogar sehr lange dauern, bis eine Software wirklich für Produktionszwecke freigegeben wird, obwohl sie als Testversion schon monatelang stabil läuft, weil die Entwickler lieber noch Tests durchführen und nach Fehlern suchen. D.h. eine Versionsnummer 1.0 bedeutet (fast) immer eine hohe Software-Qualität. Es gibt sogar Programme, die seit Jahren höchst stabil laufen und immer noch eine Versionsnummer "0.x" haben.
Es gibt immer eine klare Trennung zwischen Test- und Produktions-Versionen. Wer unbedingt mit der neuesten Version arbeiten will, kann sich auch die Test-Versionen herunterladen und installieren. Meist kann man mehrere Versionen der gleichen Software sogar parallel einsetzen (z.B. Apache 1.3 und 2.0).
Linux bietet ebenfalls viele Spiele, aber bei weitem nicht die Vielfalt wie sie auf der Windows-Seite gegeben ist. Die neuesten Windows-Spiele sind ganz selten auch unter Linux verfügbar.
Mit Hilfe der Projekte Wine, WineX/Cedega und PlayOnLinux wird versucht, Windows-Spiele unter Linux in einer Emulation laufen zu lassen. Diese Vorgehensweise ist durchaus erfolgreich, aber nicht das eigentliche Ziel.
Diese Situation wird sich mit zunehmender Verbreitung von Linux verbessern. Insbesondere existieren für Linux eine Reihe von Spiele-Engines (Löve, OGRE) oder Spiele-Bibliotheken (Genesis3D, Allegro, ClanLib) die die Entwicklung neuer Spiele stark vereinfachen. Ebenso sind Multi-Platform Engines verfügbar (Unigine), mit deren Hilfe Spiele einheitlich für Windows, Linux, Apple und z.B. Spielekonsolen entwickelt werden können.
Für die Fans von Spielen auf älteren Computer-Systemen (C64, Spektrum, Atari) oder von Spiele-Konsolen (Gameboy, PS/2) ist sicher interessant, dass sowohl Windows als auch Linux Emulatoren für viele dieser Plattformen bietet, sodass diese Spiele auch auf einem Windows- oder Linux-PC ausgeführt werden können.
Selbst wenn die grafische Oberfläche nicht mehr bedienbar ist und an der Grafischen Oberfläche nichts mehr eingegeben werden kann, ist ein Linux-System über Netzwerk (SSH-Anmeldung) praktisch immer noch erreichbar und kann darüber dann auch gesteuert werden (z.B. um die grafische Oberfläche neu zu starten).
Linux-Systeme laufen monate- und jahrelang stabil und ohne Probleme.
Unter Windows sind die grafische Oberfläche und das eigentliche Betriebssystem eng verzahnt und entsprechend anfällig. Sie können auch prinzipiell nicht getrennt werden. Bleibt der Windows- oder Internet-Explorer "hängen" oder tritt ein "Bluescreen" auf, ist das System nicht mehr bedienbar und muss neu gebootet werden.
Diese Meinung wird zementiert durch die fast ausschließliche Verwendung von Windows und Windows-Produkten in Firmen, Ämtern, an Schulen, Volkshochschulen, Universitäten und nicht zuletzt bei Schulungsanbietern. Linux entspricht nicht diesem "Standard" und wird daher oft als "fremd" empfunden.
Dabei ist genau das Gegenteil der Fall: Windows und die typischen Windows-Anwendungen sind kein echter Standard, sondern "Pseudo"-Standards. Versionsabhängig ändern sich ihre Eigenschaften, ihr Aussehen und sie verhalten sich evtl. völlig anders.
Probleme eines "Pseudo"-Standards sind:
Ein echter Standard (z.B. XML, C, C++, Java) wird nicht durch ein Produkt (z.B. JavaScript, HTML, Webbrowser) definiert, sondern durch formale Dokumente, die exakt festlegen, welche Fähigkeiten und Eigenschaften er hat (und welche nicht). Ihm geht ein Einigungsprozeß mehrerer Parteien voraus, dessen Ablauf und Ergebnisse dokumentiert werden (z.B. in Form eines RFC = Request for Comment).
Linux hält viele Standards ein (POSIX, X/Open, RFCs, …) bzw. legt alle Standards, die in seinem Zusammenhang geschaffen werden, in Form von öffentlich zugänglichen Dokumenten offen. Diese Vorgehensweise hat mehrere Vorteile:
Allerdings hat die "Schnelligkeit" in der Vergangenheit schon viele Probleme bereitet. Z.B. ist das ursprüngliche HTML-Format nach seiner Vorstellung von Herstellern wie Netscape und Microsoft unüberlegt und adhoc weiterentwickelt worden. Dabei wurden viele Inkompatibilitäten geschaffen und unterschiedliche Vorgehensweisen für die gleichen Zwecke implementiert. Der HTML-Standard wurde sozusagen "aufgeweicht und verwässert". Die eigentlich mit HTML beabsichtigte Trennung von Inhalt und Aussehen wurde dadurch aufgegeben.
Heute rächt sich dies, indem die verschiedenen Browser die gleiche HTML-Seite unterschiedlich interpretieren und darstellen. Es ist schwierig geworden, eine für alle Browser gleichermaßen geeignete HTML-Seite zu erstellen.
Für Linux ist Support aus genau den gleichen Quellen erhältlich, allerdings aufgrund der deutlich geringeren Verbreitung nicht im gleichen Umfang. Andererseits gibt es hier eine sehr aktive "Community", die bei Problemen gerne und vor allem schnell Hilfe leistet.
Wieder gibt es aber den entscheidenden Unterschied, dass der Quellcode verfügbar ist. Daher können Fehler "von jedem" behoben werden, der genügend Knowhow hat. Meist wird diese Korrektur anschließend sofort wieder den anderen Anwendern als Patch zur Verfügung gestellt. Dieses Modell vermeidet "Featuritis" und sorgt vor allem dafür, dass Fehler, die viele Anwender betreffen, auch schnell behoben werden.
Analoges gilt für Erweiterungen: Auch hier kann beim Linux-Modell im Prinzip jeder tätig werden und von seinen Erweiterungen können auch auch alle anderen Anwender profitieren.
Weiterhin gibt es zur Unterstützung der Usability viele Windows-Funktionalitäten und -Automatismen wie:
Da die meisten Windows-Programme grafisch orientiert sind und eine umfassende interaktive Hilfe mit sich bringen, kann man häufig ohne große Lernphase durch "Herumklicken" und "Ausprobieren" damit zurechtkommen. Sehr schnell hat man damit Erfolge und löst auch schon mal kleinere Probleme.
Viele "Chefs" sind inzwischen sogar der Auffassung, dass Mitarbeiter keine Kurse mehr für Windows-Programme benötigen, sondern sich eigenständig per "Learning by doing" darin einarbeiten können. Ob dies bei aller Usability der Windows-Programme eine sinnvolle Vorgehensweise ist, darf bezweifelt werden.
Häufig werden so nur die trivialen 20% Funktionalität eines Programms erlernt, die restlichen (meist sehr mächtigen) 80% Funktionalität liegen brach. Oder es werden langwierige und umständliche Vorgehensweisen gewählt, statt elegant und effizient zu arbeiten.
Typische Beispiele für derartiges "Halbwissen" sind das visuelle Formatieren von Texten statt Formatvorlagen zu verwenden und das Erzeugen von mehrspaltigem Text durch Leerzeichen / Tabulatoren statt durch Tabellen.
Überhaupt wird durch grafische Oberflächen das visuelle, interaktive und iterative Arbeiten gefördert, auf gründliche Vorüberlegung und Planung wird dabei gerne verzichtet, sondern man "legt gleich los".
Fazit: Auch grafisch orientierte Windows-Programme muss man gründlich erlernen, um sie sinnvoll und effizient einsetzen zu können. Gerade dieses "Erlernen" wird aber den unter Linux gerne verwendeten kommandozeilen-orientierten Programmen häufig vorgeworfen, ist also ein Schein-Argument gegen Linux.
Noch einen weiteren Gesichtspunkt gilt es hier zu berücksichtigen: "Usability und Security stehen sich diametral gegenüber". Daher muss ein Teil der Windows-Usability dann aufgegeben werden, wenn man mehr Sicherheit als bisher erreichen will. In diesem Fall ist der Abstand zu der bei Linux z.B. mit KDE oder Gnome inzwischen erreichten Usability nur noch gering.
Ein dritter Punkt ist die Weiterverarbeitung von Daten. Unter Windows ist ein Programm häufig ein "Closed Shop", die Weitergabe von Daten an andere Programme ist nicht vorgesehen. Dies führt häufig zu "Eierlegenden Wollmilchsäuen", die fast alles können, aber auch softwaretechnisch sehr schwierig zu realisieren sind und viele Fehler enthalten.
Linux wählt einen anderen Ansatz, nämlich den "werkzeug-basierten". Viele Programme können "nur eine Sache", diese dafür aber fehlerfrei, performant und mit allen Schikanen. Sie sind im Ausgleich dazu in der Lage, die Daten anderer Programme zu empfangen bzw. sie an diese weiterzugeben. D.h. man kann aufwendige "Verarbeitungsketten" durch Aneinanderhängen vieler kleiner Werkzeuge per Pipe realisieren.
Dieser Ansatz ist sehr flexibel und performant. Allerdings ist er wenig visuell, sondern mehr abstrakt und er verlangt einen gewissen Einarbeitungsaufwand. Weiterhin sind derartige Abläufe auch programmierbar und automatisierbar. Kurzfristig gesehen hat diese Vorgehensweise Nachteile, mittel- und langfristig gesehen bietet sie aber Vorteile.
set (Windows und Linux)
bzw. (print)env (nur Linux)).
Jeder Prozess hat eine Umgebung (ein ihm exklusiv
zugeordneter Speicherbereich), in dem seine Variablen abgelegt sind. Die
bekannteste Variable ist die Pfadvariable ($PATH,
$path oder %PATH%), die unter Windows und Linux
steuert, in welchen Verzeichnissen automatisch nach ausführbaren Dateien
gesucht wird.
Fenster in Grafischen Oberflächen sind übrigens auch nur "Prozesse", die mit Hilfe von Grafikfunktionen ein "Abbild" auf dem Desktop erzeugen. Daher werden auch grafische Programme durch Variablen beeinflusst.
Unter Linux gibt es sehr viele Variablen, z.B.:
| Variable | Bedeutung |
|---|---|
$HOME | Heimatverzeichnis des angemeldeten Benutzers |
$HOST | Rechnername |
$LANG | Spracheinstellung für Ausgaben und (Fehler)Meldungen (z.B. de_DE@euro) |
$LESS | Optionen für das Programm less |
$LOGNAME | Name des angemeldeten Benutzers |
$MANPATH | Suchpfad für man-Pages |
$PS1 | Aussehen des Kommando-Prompts |
$TERM | Terminaltyp (legt Steuercodes zur Ansteuerung fest) |
$USER | Name des angemeldeten Benutzers |
Fast jedes Kommando kennt eine oder mehrere speziell für sich festgelegte Variablen, die in seiner man-Page ausführlich beschrieben werden. Damit lässt sich häufig das Standard-Verhalten von Kommandos weitgehend an die Benutzerbedürfnisse anpassen.
Unter Linux sind die Variablen je nach Aufgabe in 2 Gruppen aufgeteilt:
Unter Linux hat jeder Prozess und insbesondere jede Shell einen eigenen Variablenbereich, der bei ihrem Start vom Elternprozess gefüllt wird und der ihm exklusiv gehört. Sie können darin beliebige Änderungen vornehmen, der Bereich ist lokal zu diesem Prozess. Wird ein Kindprozess gestartet, so erhält dieser eine Kopie des Variablenbereichs seines Elternprozesses, danach sind die beiden Bereiche wieder voneinander unabhängig.
Für die Skript-Programmierung ist dieses lokale Verhalten sehr wichtig, da sich Skripte deswegen nicht darum kümmern müssen, ob sie andere Prozesse mit ihren Variablen beeinflussen. Dies ist schlichtweg prinzipiell nicht möglich (bis auf Vererbung an Kindprozesse beim Start von diesen).
Variablen können unter Linux bereits beim Booten des Kernels
festgelegt werden. Viele Prozesse (insbesondere Shells) lesen beim
Start bestimmte festgelegte Konfigurations-Dateien, (z.B. die
bash liest /etc/profile, ~/.profile,
~/.bashrc,…), in denen dann häufig Variablen definiert werden.
Unter Windows-Anwendern sind Variablen wenig bekannt, was auch am geringen Einsatz der Kommandozeile und an der geringen Anzahl der Variablen liegen mag. Dabei sind Variablen auch dort für alle Prozesse, insbesondere auch für Prozesse, die in der grafischen Oberfläche gestartet werden, sehr wichtig. Bekannte Variablen von Windows sind:
| Variable | Bedeutung |
|---|---|
%PATH% | Suchpfad von Anwendungen |
%PROMPT% | Aussehen des Kommando-Prompts |
%TEMP% | Pfad zum Verzeichnis für temporäre Dateien |
%TMP% | Pfad zum Verzeichnis für temporäre Dateien |
Unter Windows sind die Variablen in 2 Gruppen aufgeteilt:
Dieses globale Verhalten ist leider im Rahmen der Batch/Skript-Programmierung schlecht, da sich Skripte und Prozesse dadurch gegenseitig unbemerkt und unerwünscht beeinflussen können.
Ein herausstechendes Unterscheidungs-Merkmal von Linux gegenüber Windows ist seine Zuschneid(er)barkeit auf bestimmte Einsatzzwecke hin. Dies beruht auf der modularen Struktur von Linux und der Verfügbarkeit des Quellcodes und ist auch die Ursache für die vielen verschiedenen Distributionen.
Um derartige Probleme zu beheben, gibt es Programme zur Konvertierung der Zeilenenden (z.B. unix2dos, dos2unix, recode). Dieser Vorgang ist unkompliziert, wird aber beim Transfer von Text-Dateien gerne vergessen.
Die Anmeldung dient nur zur Auswahl des passenden Anmelde-Profils (speichert pro Anwender lediglich seine persönlichen Einstellungen und den eingerichteten Desktop), das Passwort ist hingegen beliebig wählbar (wird aber bei Anbindung an Netzwerk-Freigaben verwendet).
Pro Datei gibt es immerhin folgende 5 "Datei-Attribute", die schon in MS-DOS vorhanden waren:
| Attribut | Bedeutung | |
|---|---|---|
ARCH |
Archive | Datei seit der letzten Sicherung geändert |
HID |
Hidden | Versteckte Datei (wird nicht aufgelistet) |
RO |
Readonly | Nur lesbar |
SYS |
System | Systemdatei |
VOL |
Volume | Datenträger-Bezeichnung (1x pro Partition) |
Die Versionen Windows NT/2000/2003/2008/XP/Vista/7 kennen darüber hinaus aufgrund des meist verwendeten NTFS-Dateisystems Besitzverhältnisse und folgende 6 Zugriffsrechte:
| Recht | Bedeutung | |
|---|---|---|
R |
read | Lesen |
W |
write | Schreiben |
X |
execute | Ausführen |
D |
delete | Löschen |
P |
change permission | Berechtigung ändern |
O |
take ownership | Besitz übernehmen |
Diese Basisrechte werden zur einfacheren Rechtevergabe und Rechteanzeige zu folgenden 7 Gruppen zusammengefaßt (für Verzeichnisse gibt es alle 7 Gruppen, für Dateien nur 4 Gruppen):
| Recht | Bedeutung | Datei | Verz. | |
|---|---|---|---|---|
------ |
no access | Kein Zugriff | — | ja |
R----- |
list | Anzeigen | ja | ja |
R-X--- |
read | Lesen | ja | ja |
-WX--- |
add | Hinzufügen | — | ja |
RWX--- |
read + add | Lesen + Hinzufügen | — | ja |
RWXD-- |
change | Ändern | ja | ja |
RWXDPO |
all | Vollzugriff | ja | ja |
Jede Datei und jedes Verzeichnis hat einen Besitzer (Owner), der
normalerweise als einziger berechtigt ist, die Zugriffsrechte einer Datei
zu ändern. Durch das Recht P = "Berechtigung übernehmen" kann
er dieses Recht auch an andere Benutzer/Gruppen weitergeben.
Verzeichnisse haben unter Windows NT/2000/2003/2008/XP/Vista/7 2 Rechtesätze. Der 1. gilt für das Verzeichnis selbst, der 2. gilt für alle darin neu erzeugten Objekte (Dateien und Verzeichnisse), d.h. darüber wird eine "Vererbung" der Dateirechte realisiert. Zwischen WinNT und Win2000 hat sich die Semantik dieser Vererbung geändert. Bei WinNT wurde statisch vererbt, ab Win2000 wird dynamisch vererbt. D.h. Änderungen an Zugriffsrechten eines Verzeichnisses wirken sich ab Win2000 dynamisch auf alle seine Unterdateien und Unterverzeichnisse aus.
Die Rechtesätze können in den zu jeder Datei/jedem Verzeichnis vorhandenen ACLs (Access Control Lists) für beliebige Benutzer und Benutzer-Gruppen getrennt vergeben werden. Es ist also eine sehr "feingranulare" Rechtevergabe möglich, deren Feinheiten aber erst einmal verstanden werden müssen.
Die obigen 6/7 Rechte können in jeder ACL gesetzt oder gelöscht werden. Ist ein Benutzer Mitglied in mehreren Gruppen, für die zu einer Datei oder einem Verzeichnis eine ACL vorhanden ist, so werden die gesetzten Rechte dieser ACLs verodert (die Obermenge gilt) und mit den gelöschten Rechten dieser ACLs verundet (die Untermenge gilt). D.h. durch Hinzufügen von ACLs zu einem Dateisystemobjekt können Zugriffsrechte auch wieder weggenommen werden.
Linux kennt an Zugriffsrechten für jede Datei die 3 Rechte
| Recht | Bedeutung | |
|---|---|---|
r |
read | Lesen |
w |
write | Schreiben |
x |
execute | Ausführen |
Die 3 Rechte regeln, was mit dem Datei-Inhalt erlaubt ist:
| Recht | Bedeutung | |
|---|---|---|
r |
read | Lesen des Datei-Inhalts |
w |
write | Schreiben des Datei-Inhalts |
x |
execute | Ausführen des Datei-Inhalts als Programm |
Diese 3 Rechte gibt es jeweils für die 3 Benutzertypen (also insgesamt 3 × 3 = 9 Rechte):
| Typ | Bedeutung | |
|---|---|---|
u |
user | Besitzer |
g |
group | Besitzer-Gruppe |
o |
other | Alle Anderen (nicht "owner" |
Will man alle 3 Benutzertypen zusammen ansprechen, ist statt
ugo das Kürzel a (all) verwendbar. Diese 9 Rechte
werden mit dem Kommando ls -l (long) immer in der gleichen
Reihenfolge in der 1. Spalte aufgelistet (fehlt ein Recht, so wird
stattdessen ein "-" angezeigt):
| User | Group | Other |
|---|---|---|
r
w
x
|
r
w
x
|
r
w
x
|
Beispiel für eine Ausgabe von ls -l (Verzeichnisinhalt
auflisten):
| Zugriffs- Rechte |
Hard- links |
Besitzer | Besitzer- gruppe |
Größe (Byte) |
Letzte Änderung | Name |
|---|---|---|---|---|---|---|
-rw-rw-r-- |
1 | tom | staff | 1724 | 2004-12-31 19:08 | apache.pg |
-rwxr-x--x |
1 | tom | staff | 10001 | 2005-01-09 15:16 | book2html.pl |
drwxrwxr-x |
2 | tom | staff | 8192 | 2005-01-09 17:19 | gen |
-rw-r--r-- |
1 | tom | staff | 7597 | 2004-12-31 12:45 | home.pg |
In der ersten Zeichenspalte wird beim Kommando ls -l
der Datei-Typ gemäß folgender Tabelle angezeigt:
| Dateityp | |
|---|---|
- |
Datei |
d |
Verzeichnis |
l |
Symbolischer Link |
b |
Block-Gerät |
c |
Character-Gerät |
s |
Socket |
p |
Named Pipe |
Die gleichen 3 Rechte sind auch für Verzeichnisse vorhanden und regeln dort, was mit den Dateinamen im Verzeichnis erlaubt ist:
| Recht | Bedeutung | |
|---|---|---|
r |
read | Auflisten des Verzeichnisinhalts ( ls) |
w |
write | Anlegen, Umbenennen, Verschieben, Löschen von Dateien/Verz. darin ( touch mkdir mv rm rmdir) |
x |
execute | Betreten des Verzeichnisses ( cd) |
Das x-Recht eines Verzeichnisses entscheidet nicht
nur über den Zugang zu diesem Verzeichnis, sondern auch über den Zugang
zu allen seinen Unterverzeichnissen und ihren Dateien (sofern keine
Hard Links auf Dateien eingesetzt werden).
Die Definition der Zugriffsrechte scheint zunächst eine sogenannte Rechteanomalie zu bedingen: eine Datei kann gelöscht werden (Schreibrecht in ihrem Verzeichnis), obwohl sie nicht schreibbar ist (Schreibrecht für die Datei selbst). Dabei handelt es sich aber nur um eine streng logische Definition und Anwendung dieser Rechte. Mit dem Sticky-Recht kann diese Rechteanomalie bei Bedarf "behoben" werden.
Prozesse haben ebenfalls einen Besitzer und eine Besitzer-Gruppe (meist derjenige, der den Prozess startet und seine Primäre Gruppe). Durch Vergleich der Besitzverhältnisse des Prozesses und der Dateien/Verzeichnisse, auf die er zugreifen will, wird ermittelt, welche Zugriffs-Rechte er konkret hat:
| Besitzer | Besitzer-Gruppe | Welche Zugriffsrechte gelten? |
|---|---|---|
| gleich | egal | des Besitzers |
| verschieden | gleich | der Besitzer-Gruppe |
| verschieden | verschieden | der "Anderen" |
Besitzer einer Datei/eines Verzeichnisses ist anfangs derjenige, der das Objekt anlegt, Besitzer-Gruppe ist anfangs seine Primäre Gruppe (meist "users" oder "staff"). "Alle Anderen" umfasst die restlichen Anwender und Gruppen.
Die Besitzer-Gruppe kann jederzeit vom Besitzer geändert werden. Der Besitzer kann nur vom Administrator geändert werden! Die Zugriffsrechte kann nur der Besitzer (oder der Administrator) ändern. Im Unterschied zu Windows gibt es also kein Recht, das einem die Besitzübernahme einer Datei oder die Änderung von Zugriffsrechten gestattet!
Da (nur) der Besitzer einer Datei immer ihre Zugriffsrechte ändern kann, kann er sich bei Bedarf immer die von ihm benötigten Zugriffsrechte daran verschaffen.
Neben diesen Standardrechten kennt Linux noch 3 Sonderrechte, die für ausführbare Dateien (Programme) bzw. Verzeichnisse mit speziellen Aufgaben gedacht sind:
| Recht | Bedeutung | ||
|---|---|---|---|
| (Programm)Datei | Verzeichnis | ||
s |
Set-User-ID | Legt als Besitzer eines Prozesses den Programm-Benutzer fest (egal wer das Programm startet) | — |
s |
Set-Group-ID | Legt als Besitzergruppe eines Prozesses die aktuelle Gruppe des Programm-Benutzers fest (egal wer das Programm startet) | Legt ein Projektverzeichnis fest, das seine Besitzer-Gruppe und das Set-Group-ID-Recht weitervererbt |
t |
Sticky | — | Legt zu einem für alle schreibbaren Verzeichnis fest, dass nur der Besitzer einer Datei sie auch löschen darf |
Sie überlagern beim Auflisten eines Verzeichnisinhalts mit ls
-l (long) die 3 x-Zugriffsrechte (da sie sowieso nur
zusammen mit diesen sinnvoll eingesetzt werden können).
| Dateityp- kennung |
Zugriffsrechte | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| User | Group | Other | |||||||
-
d
l
b
c
s
p
|
r
w
s r
w
S
|
r
w
s r
w
S
|
r
w
t r
w
T
|
||||||
Beispiel für eine Ausgabe von ls -l (Verzeichnisinhalt
auflisten):
-rwsrw-r-- 1 tom staff 1724 2004-12-31 19:08 pgm1
-rwxr-xs-x 1 tom staff 10001 2005-01-09 15:16 pgm2
drwxrwxr-t 2 tom staff 8192 2005-01-09 17:19 tmpdir
Werden diese Sonderrechte groß dargestellt (d.h. als S oder
T), so fehlt das jeweils "darunterliegende" x-Recht
(eine an sich unsinnige Kombination).
Beispiel für eine Ausgabe von ls -l (Verzeichnisinhalt
auflisten):
-rwSrw-r-- 1 tom staff 1724 2004-12-31 19:08 pgm1
-rwxr-xS-x 1 tom staff 10001 2005-01-09 15:16 pgm2
drwxrwxr-T 2 tom staff 8192 2005-01-09 17:19 tmpdir
Für alle 12 Zugriffsrechte kennt Linux neben der Textform mit den
Kürzeln r w x s t auch eine numerische Form (Oktalzahl),
die beim Kommando chmod zum Ändern der Rechte verwendbar ist (und
auch bei anderen Kommandos wie z.B. umask, find).
Den 3 prinzipiellen Rechten "rwx" ist dabei eine feste
Nummer zugeordnet (r=4, w=2, x=1),
die an 3 verschiedenen Stellen stehen kann (je nachdem, ob die Rechte
für den Besitzer, die Besitzer-Gruppe oder die "Anderen" gelten). An der
4. Stelle stehen die 3 Sonderrechte (Set-UID, Set-GID und Sticky):
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||
Durch Aufsummieren der Zahlenwerte der Einzelrechte erhält man die dieser Rechtekombination entsprechende Oktalzahl, Beispiel:
| Textform | Oktal | Rechnung |
|---|---|---|
rwxrwxrwx |
777 | 400 + 200 + 100 + 40 + 20 + 10 + 4 + 2 + 1 |
rw-rw-rw- |
666 | 400 + 200 + 40 + 20 + 4 + 2 |
r-xr-x--- |
550 | 400 + 100 + 40 + 10 |
rwxrw-r-- |
764 | 400 + 100 + 100 + 40 + 20 + 4 |
--------- |
000 | 0 + 0 + 0 |
---rw---- |
060 | 0 + 40 + 20 + 0 |
------rwx |
007 | 4 + 2 + 1 |
Wird eine Datei/ein Verzeichnis neu angelegt, so gehört sie/es
automatisch dem angemeldeten Benutzer und seiner aktuellen Gruppe
(meist users oder staff). Als Standard-Zugriffsrechte
werden die maximal sinnvollen eingestellt, d.h.
| Typ | Rechte | |
|---|---|---|
| Datei | 666 |
rw-rw-rw- |
| Verzeichnis | 777 |
rwxrwxrwx |
Begründung: Dateien sollen nur ganz selten ausführbar
sein. Wird dies gewünscht, dann ist es mit dem Befehl chmod
a+x DATEI explizit einzustellen. Verzeichnisse sollen immer
ausführbar sein, sonst kann man nicht mit cd in sie
hineinwecheln und nicht mit ls ihren Inhalt auflisten.
Mit dem Befehl umask können von diesen maximalen Rechten einige
entfernt werden, während eine Datei oder ein Verzeichnis angelegt
wird (für bereits angelegte Dateien/Verzeichnisse hat dieser Befehl
keine Wirkung!). Normalerweise wird diese sogenannte Usage-Mask
der zu entfernenden Rechte in Oktalform angegeben (genau deshalb muss man
sich mit dieser Oktalform überhaupt auseinandersetzen). Hier einige
umask-Werte und die daraus resultierenden Standardrechte:
| Usage-Mask | Resultierende Rechte | |
|---|---|---|
| Datei | Verzeichnis | |
000 |
rw-rw-rw- |
rwxrwxrwx |
002 |
rw-rw-r-- |
rwxrwxr-x |
022 |
rw-r--r-- |
rwxr-xr-x |
007 |
rw-rw---- |
rwxrwx--- |
027 |
rw-r----- |
rwxr-x--- |
077 |
rw------- |
rwx------ |
277 |
r-------- |
r-x------ |
777 |
--------- |
--------- |
Die Usage-Mask wird beim Login durch entsprechende
umask-Befehle in den zentralen oder benutzerspezifischen
Shell-Konfigurationsdateien (z.B. /etc/profile,
~/.profile oder ~/.bashrc) gesetzt. Sie hat pro
Prozess (d.h. auch pro Anmeldung) einen eigenen Wert, der unabhängig von
allen anderen ist. Mit dem Ende eines Prozesses geht auch sein Usage-Mask-Wert
verloren.
Typische Standard-Werte der Usage-Mask sind
002 (z.B. OpenSUSE),
022 (z.B. Debian, RedHat),
007,
027 oder
077.
Einige Dateisysteme kennen noch weitere Rechte pro Datei bzw. Verzeichnis, z.B. kennt Ext2/Ext3/ReiserFS folgende Rechte:
| Recht | Name | Bedeutung | Wer |
|---|---|---|---|
A |
No access time update | Beim Besuch von Verzeichnissen und beim Ansehen von Dateien den Access-Time-Zeitstempel nicht aktualisieren. | Alle |
a |
Append only | An Datei kann nur angehängt werden (nicht überschreibbar). | Nur root |
c |
Compress | Datei komprimieren. | Alle |
D |
Write directory content synchronously | Verzeichnis bei Änderungen sofort auf Platte schreiben (nicht puffern). | Alle |
i |
Immutable | Datei ist nicht umbenennbar, verschiebbar, änderbar; ebenso sind ihre Besitzverhältnisse und Rechte nicht änderbar. | Nur root |
j |
Journaling | Änderungen an Datei/Verzeichnis vor/nach Durchführung in Journal aufzeichnen. | Nur root |
s |
Secure delete | Alle Datenblöcke der Datei beim Löschen mit NUL-Bytes überschreiben. | Alle |
S |
Synchronous write | Änderungen an Datei sofort auf Platte schreiben (nicht puffern). | Alle |
u |
Allow undelete | Datei/Verzeichnis kann nach dem Löschen wieder hergestellt werden (aus dem "Papierkorb"). | Alle |
ACLs (Access Control Lists) wie unter Windows NT/2000/2003/2008/XP/Vista/7 gab es unter Linux sehr lange nicht. Inzwischen werden sie aber von vielen Dateisystemen (z.B. Ext3, XFS, JFS, ReiserFS), aber eventuell noch nicht von allen Anwendungen unterstützt. Pro ACL-Benutzer und -Gruppe sind allerdings (wieder nur) die UNIX/Linux-Zugriffsrechte read, write und execute vergebbar.
Die üblichen Zugriffsrechte von UNIX/Linux kann man als 3-elementige ACL interpretieren (für einen Benutzer, für eine Gruppe und für alle anderen), die für einen Zugriff in dieser Reihenfolge von oben nach unten abgeprüft wird:
| Bereich | Name | Rechte |
|---|---|---|
| Benutzer | user |
rwx |
| Gruppen | group |
rwx |
| Alle anderen | other |
rwx |
Dies ist definitiv ein Nachteil, allerdings kann die extensive Verwendung von ACLs und ACL-Vererbung zu einer unübersichtlichen Verrechtung führen, die normale Anwender nicht mehr verstehen.
Bezüglich ACLs haben Verzeichnisse unter Linux 2 Rechtesätze. Der 1. namens "Standard-ACL" gilt für das Verzeichnis selbst, der 2. namens "Default-ACL" gilt für alle darin neu erzeugten Objekte (Dateien und Verzeichnisse) zum Zeitpunkt des Anlegens. D.h. darüber wird eine "statische Vererbung" der Zugriffsrechte realisiert. Änderungen an Zugriffsrechten eines Verzeichnisses wirken sich daher nicht auf die Zugriffsrechte anderer Verzeichnisse oder Dateien aus ("Keep it Simple").
Die ACLs werden grundsätzlich verodert, d.h. es genügt, wenn ein Benutzer durch eine ACL ein Zugriffsrecht bekommt. Für alle ACLs gemeinsam gibt es allerdings eine Maske, über die die maximal erlaubten Zugriffsrechte festgelegt werden können. Diese Maske wird anstelle der Gruppenrechte angezeigt, sobald mindestens eine ACL zu einer Datei definiert wurde. Sie beeinflusst nicht die Zugriffsrechte des Besitzers und die "aller Anderen".
Unter Linux findet (bis auf eine Ausnahme: Set-GroupID-Recht) keine Vererbung der 12 Standard-Rechte statt. Jedes Verzeichnis und jede Datei hat ihren eigenen Standard-Rechte-Satz. Das Set-GroupID-Recht bei einem Verzeichnis sorgt dafür, dass dieses Recht selbst und die Besitzer-Gruppe beim Anlegen eines neuen Verzeichnisses darin an dieses vererbt wird.
Der 2. ACL-Rechtesatz von Verzeichnissen wird beim neu Anlegen von Dateien und Verzeichnissen darin an diese als Standard-Rechtesatz und als Default-Rechtesatz vererbt.
Durch Änderung der Zugriffsrechte eines Verzeichnisses kann der Zugang auf den kompletten Dateibaum darunter beeinflusst (erlaubt/gesperrt) werden (sofern keine Hard Links von außen auf Dateien in diesem Dateibaum zeigen).
Für den gleichen einfachen Fall ergeben sich bei Windows 36 × 36 = 729 × 729 = 531441 prinzipielle Rechtekombinationen (alle Kombinationen von 6 Verzeichnisrechten (egal, setzen, wegnehmen), alle Kombinationen von 6 Dateirechten (egal, setzen, wegnehmen)). Viele davon sind unsinnig (welche???), das Erzeugen und Ausprobieren aller dieser Kombinationen ist praktisch unmöglich.
Durch die bei Windows üblichen ACLs auf Gruppen und Benutzer wird die Anzahl der Rechtekombinationen sehr hoch, mit entsprechenden Folgen für die Übersicht und Verständlichkeit.
Bei Verzicht auf ACLs bleibt das Linux-Rechtemodell sehr einfach. Aber auch wenn ACLs verwendet werden, ist die Verständlichkeit der möglichen Rechtekombinationen einfacher als bei Windows.
Die unter Windows NT/2000/2003/2008/XP/Vista/7 vorhandenen feingranularen Möglichkeiten zur Zugriffsrechte-Steuerung werden aufgrund der Windows-Historie von den Windows-Anwendungen zu wenig berücksichtigt. Daher gibt es auch heute noch Windows-Anwendungen, die Zugriffsrechte nicht beachten und nur mit Administrator-Rechten laufen (z.B. Spiele). Das Windows-Zugriffsrechte-System ist komplex.
Zugriffsrechte-Systeme sollten einfach sein, damit Anwender sie auch verstehen können, nur dann werden sie (vernünftig) eingesetzt. Sie sollten aber auch leistungsfähig genug sein, um die wichtigen Anwendungsfälle abzudecken. Das Linux-Standard-Rechtesystem (ohne ACLs) erfüllt diese beiden Kriterien. Bei ACLs sind die Meinungen geteilt, auch wenn Windows-Kenner es für das Non-plus-ultra halten und vom Standard-Linux-Rechtesystem erst einmal enttäuscht sind.
Anmerkung zu ACLs: Aufgrund der nicht-transparenten Handhabung bei entsprechend umfangreicher Benutzer-/Gruppen-/Verzeichnisanzahl und Berechtigungsschemata entstehen gerade dadurch ungewollte Sicherheitslöcher (welcher Windows-Administrator hat noch nicht die Klage eines Anwenders erlebt: "Ich kann auf (m)eine Datei nicht zugreifen" und sich dann auf eine längere Suche gemacht, warum das so ist).
| Linux | Windows | |
|---|---|---|
| Wurzelverzeichnis | / | C:\ D:\ E:\ … |
| Aktuelles Verzeichnis | . | . |
| Eltern-Verzeichnis | .. | .. |
| Heimatverzeichnis | ~ | (nicht möglich) |
| Linux | Windows | |
|---|---|---|
| Auf Datei umlenken | KMDO > DATEI | KMDO > DATEI |
| An Datei anhängen | KMDO >> DATEI | KMDO >> DATEI |
| Von Datei umlenken | KMDO < DATEI | KMDO < DATEI |
| Fehlermeldungen auf Datei umlenken | KMDO 2> DATEI | KMDO 2> DATEI (erst ab Windows NT) |
| Fehlermeldungen an Datei anhängen | KMDO 2>> DATEI | KMDO 2>> DATEI (erst ab Windows NT) |
| Daten an Prozess übergeben | KMDO1 | KMDO2 | KMDO1 | KMDO2 |
| Linux | Windows | |
|---|---|---|
| Verzeichnis-Trenner | / | \ |
| Options-Präfix | - oder -- | / |
| Options-Angabestelle | Direkt nach dem Kommando-Namen | Am Ende der Kommando-Zeile |
| Suchpfadtrenner | : oder Leerzeichen | ; |
| Zeilenende | Strg-J = NL | Strg-M + Strg-J = CR + NL |
| Dateiende | Strg-D | Strg-Z |
| In Dateinamen nicht erlaubt | /, NUL-Byte |
? " / \ > < * | : |
| Linux | Windows | |
|---|---|---|
| Ein Zeichen | \x | (nicht möglich) |
| Mehrere Zeichen (mit Ausnahmen) | "..." | "..." |
| Mehrere Zeichen (ohne Ausnahme) | '...' | (nicht möglich) |
| Kommando-Substitution | `...` oder $(...) | (nicht möglich) |
| Linux | Windows | |
|---|---|---|
| Zugriffsrechte | read, write, execute setuid, setgid, sticky | HIDDEN, SYSTEM, READONLY, VOLUME, ARCHIVE + Read, Write, Execute, Delete, Change Permission, Take Ownership |
| Access Control Lists | Unüblich (aber möglich) | Üblich |
| Linux | Windows | |
|---|---|---|
| Definition (sh, ksh, bash) | VAR="TEXT" | set VAR=TEXT |
| Definition (csh, tcsh) | set VAR "TEXT" | |
| Zugriff | $VAR | %VAR% |
| Eigenschaften | Prozesslokal, vererbt | Systemglobal (Environment-Variablen) |
| Linux | Windows | |
|---|---|---|
| Promptdefinition | $PS1 (bash), $prompt (tcsh) | %PROMPT% |
| Standard-Prompt | USER@HOST:PATH (bash) | C:PFAD> |
| Linux | Windows | |
|---|---|---|
| Allgemeine Syntax | KMDO [-OPT…] [PARAM…] | KMDO [PARAM…] [/OPT…] |
| Ausführbare Programme | Haben Recht x="executable" | Haben Extension ".com", ".exe", ".bat", ".cmd" |
| Suchpfad | $PATH, $path | %PATH% |
| Programme im aktuellen Verzeichnis ausführen | Nur falls Suchpfad den Namen "." des akt. Verz. enthält | Immer zuerst |
| Programmstart/Datei öffnen mit der Maus | Einfach-Klick | Doppel-Klick |
| Default-Installation | Wenige Dienste aktiv | Viele Dienste aktiv |
| Linux | Windows | |
|---|---|---|
| Definition | alias NAME="ERSATZ" (bash) alias NAME "Ersatz" (tcsh) | doskey NAME=ERSATZ |
| Linux | Windows | |
|---|---|---|
| Netzwerk-Daten anzeigen | ifconfig bzw. ifconfig -a | ipconfig /all |
| Routen anzeigen | route bzw. netstat -r | route /print |
| Rechner anpingen (Standardverhalten) | ping (endet nicht) ping -c 3 (endet nach 3 Vers.) | ping (endet nach 4 Vers.) ping -t (endet nicht) |
| Weg zu Rechner ermitteln | traceroute | tracert |
| Linux | Windows | |
|---|---|---|
| Dateien vergleichen | diff | fc |
| Datei nach Text durchsuchen | grep | find |
| Datei kopieren | cp | copy |
| Datei verschieben | mv | move |
| Datei umbenennen | mv | ren(ame) |
| Dateiattribute ändern | chmod | attrib |
| Besitzer ändern | chown | (???) |
| Besitzer-Gruppe ändern | chgrp | (???) |
| Datei löschen | rm | del, erase |
| Datei-Inhalt anzeigen | cat | type |
| Datei seitenweise anzeigen | more, less | more |
| Datei sortieren | sort | sort |
| Datei editieren | pico, joe, vi, emacs | edit, notepad, wordpad |
| Datei suchen | find, locate, Konqueror->Suche | dir /s, Explorer->Suche |
| Linux | Windows | |
|---|---|---|
| Aktuelles Verz. anzeigen | pwd | cd |
| Verz.inhalt ausgeben (nur Dateinamen) | ls | dir /w |
| Verz.inhalt ausgeben (Dateiname + Attribute) | ls -l | dir |
| Neues Verz. erstellen | mkdir | md, mkdir |
| (Leeres) Verz. löschen | rmdir | rd, rmdir |
| Verzeichnis wechseln | cd PATH | cd PATH |
| In Home-Verz. wechseln | cd | (nicht möglich) |
| Verz.baum löschen | rm -r | deltree, rd /s |
| Verz.baum kopieren | cp -r | xcopy |
| Linux | Windows | |
|---|---|---|
| Belegungsgrad ausgeben | df | dir |
| Festplatte partitionieren | fdisk | fdisk |
| Datenträger formatieren | mkfs | format |
| Datenträger überprüfen | fsck | chkdsk, scandisk |
| Diskette kopieren | dd | diskcopy |
| Dateisystem ein/aushängen | mount/mount | append |
| Linux | Windows | |
|---|---|---|
| Copy | Rechte Maustaste + ziehen | Strg-C |
| Cut | (nicht möglich) | Strg-X |
| Paste | Mittlere Maustaste klicken (oder rechte + linke gleichzeitig) | Strg-V |
| Linux | Windows | |
|---|---|---|
| Hilfe | man, info, help | help |
| Bildschirm löschen | clear | cls |
| Text ausgeben | echo "TEXT" | echo TEXT |
| Datum/Uhrzeit anzeigen | date | date, time |
| Speicherbelegung anzeigen | free | mem |
| Fenster schließen | exit | exit |
Einerseits sind wir dankbar, dass es Samba gibt und setzen es (von uns aus und auf Kundenwunsch) auch gerne ein. Uns gefällt vor allem die Möglichkeit, auf UNIX/Linux-Ebene einzugreifen (per Scripting oder ähnlichem), um etwas elegant "unter dem Dateisystem" zu realisieren, was auf der Windows-Seite nur schwer möglich wäre.
Andererseits erschliesst sich der Sinn dieser Vorgehensweise (das Nachprogrammieren großer Teile der Funktionalität von Windows-Servern und -Clients in Form von Samba und CIFS) von Jahr zu Jahr immer weniger aus folgenden Gesichtspunkten:
rwx kennen.
Inzwischen gibt es Mechanismen, die das komplette Windows-Rechtesystem für
Samba auch unter UNIX/Linux nachbilden. Allerdings ergibt sich daraus wieder
das Problem, dass auf dem UNIX/Linux-Basissystem eine andere
Rechtesystematik herrscht als auf den von Samba verwalteten Freigaben. Gibt
es Zugriffe auf die gleichen Dateien unter beiden Systemen, dann entstehen
regelmäßig Probleme mit zuwenig oder zuviel vergebenen Zugriffsrechten
Das ist alles sehr schön und angenehm. Das Resultat ist aber letztendlich die Zementierung einer (über viele Jahre gewachsenen und damit teilweise inkonsistenten und kaputten) Protokollfamilie, deren undokumentierte Entwicklung aufgrund von Marketingzwecken technischen Prinzipien nicht so gehorcht, wie man das gerne hätte.
Nichts für ungut, das soll weder eine Kritik an Samba noch an Windows sein. Wir sind nur gelegentlich am (ver)zweifeln, ob das wirklich alles so sein muss oder ob nicht eine komplett andere Alternative besser wäre:
Anstelle dem Nachprogrammieren des im Wesentlichen für lokale Netzwerke gedachten SMB-Protokolls unter UNIX/Linux ein WAN-Protokoll sauber konzipieren und dann implementieren, mit dem die gleichen Dinge möglich sind, das aber auch für Netzwerke mit langsamen und gestörten Verbindungen gut funktioniert und das auf allen Rechnerplattformen (Windows, UNIX/Linux, Apple OS X) einheitlich implementiert und weiterentwickelt wird.
C:\…\system32 ist für alle Anwender schreibbar
(Sicherheitsproblem).
'…' und \
funktioniert unter Windows nicht.
`…` oder $(…)
funktioniert unter Windows nicht.
net) auch unter Windows.
Warum dann nicht gleich Linux nehmen?
fsutil hardlink create HARDLINK ORIGINALFILE oder
mklink /h LINK ORIGmöglich
fsutil hardlink create HARDLINK ORIGINALFILE oder
mklink /H LINKFILE ORIGFILE oder
mklink /D LINKFILE ORIGDIRmöglich.
linkd oder
mklink /J LINK ORIG oder
junction -d LINK ORIG möglich.
fsutil hardlink create HARDLINK ORIGINALFILE möglich
\\SERVER\FREIGABE\PFAD_ZU_DATEI
umgangen werden (wer macht sowas schon?, Freigaben werden meist über
Laufwerk-Buchstaben eingebunden!).
A...Z a...z 0...9 - . _
Weiterhin sollte das Zeichen - nicht am Anfang eines Dateinamens stehen.