Springe zum Hauptinhalt

Archiv
cygwin-icon.gif

Cygwin, Unixtools für Windows


Kursinhalt:

Stand: April 2006


Übersicht

Was ist Cygwin?

  • UNIX-Umgebung für Windows
  • Sammlung freier Unixwerkzeuge
    • bash + Kommandozeilenwerkzeuge
    • Entwicklerumgebung: gcc, perl, python, ...
    • grafische Benutzeroberfläche: xorg

Highlights

  • läuft unter Win9x- und NT-Plattform
  • unterstützt File-ACL auf NT-Plattform
  • UNIX- und DOS-Filenotationen möglich /cygdrive/c/windows, c:\windows
  • automatische Konvertierung der Zeilenendezeichen \n, \r\n
  • Signalbehandlung

Installation

  • grafisches Installationswerkzeug: http://www.cygwin.com/setup.exe
  • Install for: All Users empfohlen, alternative Installation im Homeverzeichnis falls keine Administratorrechte vorhanden sind
  • Default Text File Type: Unix empfohlen (Zeilenende: \n)
  • Auswahl des Paketumfanges
    • Standardeinstellungen installieren minimalistische Cygwin-Umgebung
    • existierende Installation wird erkannt /etc/setup/
    • Abhängigkeiten werden automatisch aufgelöst
      cygwin_setup.png
  • automatisches Update für installierte Paket
  • Installationslog: /var/log/setup.log.full


Konfiguration

Umgebungsvariablen

  • Erweitern der PATH -Variable um <CYGWIN-Installationspfad>\bin

Beispiel
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]

  • Konfiguration über die CYGWIN -Variable

Parameter Bedeutung
(no) binmode keine automatische \r\n Übersetzung
check_case: relaxed Steuerung der Gross/Kleinschreibung
relaxed ignoriere Gross/Kleinschreibung
adjust resultierender Pfadname entspricht der exakten Darstellung
strict strenge Prüfung auf Gross/Kleinschreibung
(no) envcache Variablencache zwischen Win32 und POSIX
(no) ntsec Anwenden des NT-Sicherheitsmodells auf Unixfiles und Prozesse
(no)smbntsec Anwenden des NT-Sicherheitsmodells auf Files in SMB-Freigaben
(no)traverse Nur in den Versionen 1.5.13-14 aktiviert. Prüfen von Filerechten an Rechten des übergeordneten Verzeichnisses
(no)tty Terminalbehandlung, kompatible mit Windowsanwendungen, ^Z funktioniert dann nicht
(no) winsymlinks symbolische Links werden als Windows-Links (.lnk) abgebildet

NT-Sicherheitsmodell

  • NT-Plattformfamilie unterstützt Sicherheitsmodell auf Basis von Security Objects (SD) und Security Identifiers (SID)
  • SID sind mit UNIX User Identifier (UID) und Group Identifier (GID) vergleichbar
  • Abbildung von User- und Groupname auf SID erfolgt in /etc/passwd und /etc/group

Beispiel
$ mkpasswd -l > /etc/passwd
$ cat /etc/passwd
SYSTEM:*:18:544:,S-1-5-18::
Administratoren:*:544:544:,S-1-5-32-544::
Administrator:unused_by_nt/2000/xp:500:513:U-BALLING\Administrator,S-1-5-21-602162358-1547161642-725345543-500:/cygdrive/h:/bin/bash
Gast:unused_by_nt/2000/xp:501:513:U-BALLING\Gast,S-1-5-21-602162358-1547161642-725345543-501:/home/Gast:/bin/bash
otto:unused_by_nt/2000/xp:57501:513:Otto Normalverbraucher,,,U-BALLING\otto,S-1-5-21-602162358-1547161642-725345543-57501:/cygdrive/h:/bin/bash

$ mkgroup -l > /etc/group
$ cat /etc/group
SYSTEM:S-1-5-18:18:
Kein:S-1-5-21-602162358-1547161642-725345543-513:513:
Administratoren:S-1-5-32-544:544:
Benutzer:S-1-5-32-545:545:
Gäste:S-1-5-32-546:546:
Hauptbenutzer:S-1-5-32-547:547:

  • Beispiel:

Beispiel
$ id
uid=500(Administrator) gid=544(Administratoren)

$ cd /tmp
$ touch foo
$ ls -l foo
-rwxrw-r--  1 Administrator Administratoren 0 Apr 10 13:56 foo

cygwin_acls.png

Warnung!
  • Nach Anlegen neuer Nutzer oder Gruppen muss /etc/passwd und /etc/group neu generiert werden
  • Vererbung von NTFS-ACLs funktioniert nicht mehr
  • Nicht alle Möglichkeiten von NT-ACLs und POSIX-Rechten abbildbar

su-Mechanismus

  • Voraussetzungen für Umschaltung des Nutzerkontext sind folgende Privilegien:
    • Erstellen eines Tokenobjekts
    • Ersetzen eines Tokens auf Prozessebene
    • Anpassen von Speicherkontigenten für einen Prozess

Beispiel
$ id
uid=500(Administrator) gid=544(Administratoren)

$ su - otto
$ id
uid=57501(otto) gid=513(Kein)

Warnung! Anpassen der Privilegien kann die Sicherheit des Systems beeinträchtigen.


Nutzung

Mapping von Pfadnamen

  • cygwin unterstützt die Win32- und die POSIX-Notation für Pfadnamen
  • UNC-Pfade beginnen mit doppelte Slashes oder Backslashes

Beispiel
$ ls -l /cygdrive/c/tmp/setup.exe
-rwx------+ 1 Administrator Kein 305664 Apr 10 10:48 /cygdrive/c/tmp/setup.exe
$ ls -l 'c:\tmp\setup.exe'
-rwx------+ 1 Administrator Kein 305664 Apr 10 10:48 c:\tmp\setup.exe

$ ls //afs/tu-chemnitz.de/project/streaming/
dss  fms
$ ls '\\afs\tu-chemnitz.de\project\streaming'
dss  fms

Tipp! Konvertieren von Win32- und POSIX-Notation mit dem Werkzeug: cygpath

Mount-Tabelle

  • globale Mounttabelle

Beispiel
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2]

  • nutzerspezifische Mounttabelle

Beispiel
[HKEY_CURRENT_USER\Software\Cygnus Solutions\Cygwin\mounts v2]

  • Abbildung von Laufwerksbuchstaben über Prefix/Laufwerk /cygdrive/c
  • UNC-Pfade werden standardmässig --no-executable montiert

Beispiel
$ mount -u 'C:\Dokumente und Einstellungen\Administrator\Eigene Dateien' /home/Administrator

$ mount
C:\Dokumente und Einstellungen\Administrator\Eigene Dateien on /home/Administrator type user (binmode)
C:\Programme\cygwin\bin on /usr/bin type system (binmode)
C:\Programme\cygwin\lib on /usr/lib type system (binmode)
C:\Programme\cygwin on / type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)

Text und Binärmodus

  • DOS/Windows Textfiles enthalten am Zeilenende meist die Kombination \r\n (CR,NL)
  • cygwin organisiert die automatische Übersetzung von \n -> \r\n für Files im Textmode

File-Rechte

  • Abbildung von POSIX-Rechte auf NT-ACLs
    • Filesystem innerhalb NTFS-Partition
    • ntsec aktiviert
  • siehe NT-Sicherheitsmodell

Special Files

Reservierte Bezeichner

  • DOS und Win32 enthalten reservierte Bezeichner, welche als Filenamen nicht verwendet werden können
  • AUX, COM1, LPT1, PRN, NUL, ...

Geräte

  • Files im /dev -Verzeichnis werden intern behandelt
  • nicht mit ls -l /dev/* listbar

Bezeichnung POSIX, cygwin NT-intern
Diskettenlaufwerk /dev/fd0 \device\floppy0
CDROM /dev/scd0 \device\cdrom0
Festplatten /dev/sda \device\harddisk0\partition0
Festplatte, 1. Partition /dev/sda1 \device\harddisk0\partition1
Zwischenablage /dev/clipboard  
Windows Message Queue /dev/windows  
Zufallszahlen /dev/random
/dev/urandom
 

/proc -Filesystem

/proc/cpuinfo
/proc/meminfo
/proc/loadavg
/proc/uptime
/proc/registry (read only)

Beispiel
$ ls -l '/proc/registry/HKEY_CURRENT_USER/Software/Cygnus Solutions/Cygwin/mounts v2'
total 0
drwx------+ 3 Administrator Kein  0 Mar 19  2003 /home/Administrator
-r--r--r--  1 Administrator Kein  4 Apr 11 08:39 cygdrive flags
-r--r--r--  1 Administrator Kein 10 Apr 11 08:39 cygdrive prefix

Cygserver

  • cygwin-Anwendungen als Win32-Dienste betreiben

Beispiel
$ cygserver-config
Generating /etc/cygserver.conf file


Warning: The following function requires administrator privileges!

Do you want to install cygserver as service?
(Say "no" if it's already installed as service) (yes/no) yes

The service has been installed under LocalSystem account.
To start it, call `net start cygserver' or `cygrunsrv -S cygserver'.

Further configuration options are available by editing the configuration
file /etc/cygserver.conf.  Please read the inline information in that
file carefully. The best option for the start is to just leave it alone.

Please keep in mind, that a client application which wants to use
the services provided by cygserver *must* have the environment variable
CYGWIN set so that it contains the word "server".  So, if you don't
need any other special CYGWIN setting, just set it to "server".

It is advisable to add this setting to the Windows system environment.

Basic Cygserver configuration finished. Have fun!

$ cygrunsrv -I crond -p /usr/sbin/cron -e "CYGWIN=server"
$ cygrunsrv -L
cygserver
crond

Werkzeuge

cygcheck

  • Paketverwaltungswerkzeug für cygwin-Pakete

Beispiel
$ cygcheck -f /usr/sbin/alternatives
alternatives-1.3.20a-2

$ cygcheck -l alternatives
/usr/sbin/alternatives.exe
/usr/sbin/update-alternatives
/usr/share/doc/alternatives-1.3.20a/ABOUT-NLS
/usr/share/doc/alternatives-1.3.20a/AUTHORS
/usr/share/doc/alternatives-1.3.20a/ChangeLog
/usr/share/doc/alternatives-1.3.20a/COPYING
/usr/share/doc/alternatives-1.3.20a/INSTALL
/usr/share/doc/alternatives-1.3.20a/NEWS
/usr/share/doc/alternatives-1.3.20a/README

cygpath

  • Konvertierung von Win32- und POSIX-Pfaden
  • Ausgabe von Systempfaden

Beispiel
$ cygpath -W -u
/cygdrive/c/WINDOWS

$ cygpath -W -w
C:\WINDOWS

getfacl, setfacl

ps, kill

mkpasswd, mkgroup

  • Generieren von passwd und group -File aus Systeminformationen

Beispiel
$ mkpasswd -l > /etc/passwd
$ mkgroup -l > /etc/group

mount, umount

  • montierieren und demontieren von Filesystemen
  • globale und nutzerspezifische Mounts

Beispiel
$ mount -u 'C:\Dokumente und Einstellungen\Administrator\Eigene Dateien' /home/Administrator
$ umount -u /home/Administrator

regtool

  • Kommandozeilenwerkzeug zum Bearbeiten der Registry

Beispiel
$ regtool.exe add '/user/Software/Demo'
$ regtool.exe set '/user/Software/Demo/Datum' $(date)
$ regtool.exe list '/user/Software/Demo'
Datum
$ regtool.exe get '/user/Software/Demo/Datum'
Tue
Apr
11
12:06:43
2006

dumper, ssp, gprof, objdump, strace