# dscl — Verzeichnisdienste und Benutzer verwalten

> Praxis-Guide zu dscl — lokale Nutzer und Gruppen unter macOS über die Directory-Service-Kommandozeile abfragen, anlegen, ändern und löschen.

Source: https://www.jpkc.com/db/cheatsheets/macos/dscl/

<!-- PROSE:intro -->
`dscl` ist das Kommandozeilenwerkzeug für den Directory Service unter macOS – damit fragst du lokale Nutzer, Gruppen und deren Attribute ab und verwaltest sie direkt im Terminal. Der erste Parameter benennt den Verzeichnisknoten; der Punkt `.` steht dabei für den lokalen Knoten deines Macs. Anders als `useradd`/`usermod` unter Linux arbeitet `dscl` auf der Verzeichnisdatenbank von macOS und ist das richtige Werkzeug, um Konten skriptgesteuert anzulegen oder zu reparieren. Dieser Guide zeigt dir die wichtigsten Befehle vom reinen Abfragen bis zum vollständigen Anlegen eines neuen Benutzers.
<!-- PROSE:intro:end -->

## Auflisten & Auslesen

`dscl . -list /Users` — Listet alle lokalen Nutzer auf.

```bash
dscl . -list /Users
```

`dscl . -list /Users UniqueID` — Listet alle Nutzer mit ihren UIDs auf.

```bash
dscl . -list /Users UniqueID
```

`dscl . -list /Groups` — Listet alle lokalen Gruppen auf.

```bash
dscl . -list /Groups
```

`dscl . -read /Users/<user>` — Zeigt alle Attribute eines Nutzers an.

```bash
dscl . -read /Users/admin
```

`dscl . -read /Users/<user> UserShell` — Zeigt ein einzelnes Nutzer-Attribut an.

```bash
dscl . -read /Users/admin UserShell
```

`dscl . -read /Groups/<group> GroupMembership` — Zeigt die Mitglieder einer Gruppe an.

```bash
dscl . -read /Groups/admin GroupMembership
```

## Nutzer anlegen

`dscl . -create /Users/<user>` — Legt einen neuen Nutzer-Datensatz an.

```bash
sudo dscl . -create /Users/newuser
```

`dscl . -create /Users/<user> UserShell /bin/zsh` — Setzt die Login-Shell des Nutzers.

```bash
sudo dscl . -create /Users/newuser UserShell /bin/zsh
```

`dscl . -create /Users/<user> RealName '<name>'` — Setzt den vollständigen Namen des Nutzers.

```bash
sudo dscl . -create /Users/newuser RealName 'John Doe'
```

`dscl . -create /Users/<user> UniqueID <uid>` — Setzt die UID des Nutzers.

```bash
sudo dscl . -create /Users/newuser UniqueID 550
```

`dscl . -create /Users/<user> PrimaryGroupID <gid>` — Setzt die primäre Gruppen-ID des Nutzers.

```bash
sudo dscl . -create /Users/newuser PrimaryGroupID 20
```

`dscl . -create /Users/<user> NFSHomeDirectory /Users/<user>` — Setzt den Pfad zum Home-Verzeichnis.

```bash
sudo dscl . -create /Users/newuser NFSHomeDirectory /Users/newuser
```

`dscl . -passwd /Users/<user> '<password>'` — Setzt das Passwort des Nutzers.

```bash
sudo dscl . -passwd /Users/newuser 'secretpass'
```

## Ändern & Löschen

`dscl . -change /Users/<user> UserShell <old> <new>` — Ändert ein Nutzer-Attribut.

```bash
sudo dscl . -change /Users/admin UserShell /bin/bash /bin/zsh
```

`dscl . -append /Groups/<group> GroupMembership <user>` — Fügt einen Nutzer zu einer Gruppe hinzu.

```bash
sudo dscl . -append /Groups/admin GroupMembership newuser
```

`dscl . -delete /Groups/<group> GroupMembership <user>` — Entfernt einen Nutzer aus einer Gruppe.

```bash
sudo dscl . -delete /Groups/admin GroupMembership newuser
```

`dscl . -delete /Users/<user>` — Löscht ein Nutzerkonto.

```bash
sudo dscl . -delete /Users/olduser
```

## Gruppen

`dscl . -create /Groups/<group>` — Legt eine neue Gruppe an.

```bash
sudo dscl . -create /Groups/developers
```

`dscl . -create /Groups/<group> PrimaryGroupID <gid>` — Setzt die GID der Gruppe.

```bash
sudo dscl . -create /Groups/developers PrimaryGroupID 600
```

`dscl . -delete /Groups/<group>` — Löscht eine Gruppe.

```bash
sudo dscl . -delete /Groups/developers
```

## Häufige Muster

`dscl . -list /Users | grep -v '^_'` — Listet nur echte Nutzer auf (System-Nutzer mit `_` am Anfang ausgeschlossen).

```bash
dscl . -list /Users | grep -v '^_'
```

`dscl . -list /Users UniqueID | sort -nk2` — Listet Nutzer nach UID sortiert auf.

```bash
dscl . -list /Users UniqueID | sort -nk2
```

`id <user>` — Schneller Weg, UID, GID und Gruppen eines Nutzers zu prüfen.

```bash
id admin
```

`dscacheutil -flushcache` — Leert den Cache des Directory Service.

```bash
sudo dscacheutil -flushcache
```

<!-- PROSE:outro -->
## Fazit

`dscl` ist unter macOS das direkteste Werkzeug, um lokale Konten skriptgesteuert zu inspizieren und zu pflegen – vom schnellen `-read` bis zum vollständigen Anlegen eines Nutzers mit UID, Shell, Gruppe und Home-Verzeichnis. Sei dir bewusst, dass jeder schreibende Aufruf (`-create`, `-change`, `-append`, `-delete`, `-passwd`) `sudo` benötigt und die Verzeichnisdatenbank unmittelbar verändert. Gerade `-delete` und `-passwd` solltest du mit Bedacht einsetzen: Ein falscher Pfad oder eine vergessene Pflicht-Eigenschaft (etwa eine UID) kann Logins sperren oder ein Konto unbrauchbar machen. Teste neue Befehle nach Möglichkeit zuerst an einem Wegwerf-Konto, bevor du sie auf produktive Nutzer loslässt.

## Weiterführende Links

- [dscl(1) — macOS Manual Page](https://ss64.com/mac/dscl.html) — vollständige Optionsreferenz (englisch)
- [Apple Developer Documentation](https://developer.apple.com/documentation/) — offizielle Dokumentation zu macOS und seinen Diensten (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [caffeinate](https://www.jpkc.com/db/cheatsheets/macos/caffeinate/) – verhindert, dass der Mac in den Ruhezustand wechselt
- [defaults](https://www.jpkc.com/db/cheatsheets/macos/defaults/) – liest und schreibt Einstellungen in macOS-Property-Lists
- [diskutil](https://www.jpkc.com/db/cheatsheets/macos/diskutil/) – verwaltet Festplatten, Volumes und Partitionen

