Rheinwerk Computing < openbook >
Rheinwerk Computing - Bücher zur Programmierung und Softwareentwicklung


Wie werde ich Unix-Guru
A. Willemer
Wie werde ich UNIX-Guru
I  ANWENDUNG
Know-How für Unix/Linux-User: Einführung, Shell, Befehle, Hilfe, Arbeit mit Dateien, Editoren, Reguläre Ausdrücke, nützliche Tools, Hardware.

II  ADMINISTRATION
Tools, Systemstart, Benutzer verwalten, Hardware konfigurieren, Software installieren, Datensicherung, Tuning, Kernel

III  NETZWERK
Client/Server Systeme, TCP/IP, Routing, IPv6, Internet-Dienste, DHCP, Webserver, Firewalls

IV  DAS X-WINDOW SYSTEM
Die grafische Oberfläche von UNIX einrichten und nutzen

V  PROGRAMMIERUNG VON SHELLSKRIPTEN
Automatisieren von Tasks durch Shell-Skripte.

VI  PERL
Interpreter, Syntax, Variablen, Steuerung, Funktionen, UNIX-Aufrufe, GUIs mit Tk

VII  PROGRAMMIERWERKZEUGE
C-Compiler, Analyse-Tools, CVS, yacc, diff

VIII  UNIX-SYSTEMAUFRUFE
UNIX-Befehle in eigenen Programmen nutzen

IX  LITERATUR
Weiterführende Literatur zu UNIX und LINUX

 
Rheinwerk Computing / Openbook / "Wie werde ich UNIX-Guru ?"
« Auslesen der Passwortdatei Benutzer und Gruppen Grundlagen der Dämonisierung »

Gruppen

Analog funktioniert das Auslesen der Gruppendatei. Auch hier gibt es eine Struktur, die nach der Datei benannt ist.

struct group {
    char    *gr_name;   /* Gruppenname */
    char    *gr_passwd; /* Gruppenpasswort */
    gid_t   gr_gid;     /* Gruppen-id */
    char    **gr_mem;   /* Gruppenmitglieder */
};

Die Gruppenmitglieder befinden sich im Strukturelement gr_mem. Das ist ein Array von Strings. Das letzte Element des Arrays hat den Wert NULL. Auch hier gibt es Funktionen um anhand der ID oder des Namens den entsprechenden Eintrag zu finden. Sie heißen getgrnam() und getgrgid().

#include <grp.h>
#include <sys/types.h>
struct group *getgrnam(const char *name);
struct group *getgrgid(gid_t gid);

Auch das Auslesen der group-Datei läuft auf diese Weise:

#include <grp.h>
#include <sys/types.h>
struct group *getgrent(void);
void setgrent(void);
void endgrent(void);

Das folgende Beispiel liest die /etc/group aus und listet für jede Gruppe die Mitglieder auf.

[Auslesen der Gruppen und ihrer Mitglieder]
#include <grp.h>

int main()
{
struct group *grp;
char *member;
int i;

setgrent();
   while ( grp = getgrent()) {
      puts(grp->gr_name);
      i = 0;
      member = grp->gr_mem[i++];
      while (member) {
          puts(member);
          member = grp->gr_mem[i++];
      }
      puts("--------");

}
   endgrent();
}

Ein Prozess kann mit der Funktion getgroups() ermitteln, in welchen Gruppen er angemeldet ist. Dazu bekommt er als Antwort ein Array mit den Group-IDs. Im Beispiel sollen mit Hilfe der Funktion getgrgid() die Nummern der Gruppen, zu denen der Aufrufer gehört und dann der zugehörige Name der Gruppe festgestellt werden und so eine Liste auf dem Bildschirm ausgegeben werden.

[mygroups]
#include <grp.h>
#include <limits.h>
#include <sys/types.h>

int main()
{
gid_t grplist[NGROUPS_MAX];
struct group *grp;
char *member;
int i, anzGruppen;

anzGruppen = getgroups(NGROUPS_MAX, grplist);
   for (i=0; i<anzGruppen; i++) {
      grp = getgrgid(grplist[i]);
      puts(grp->gr_name);
   }
}



« Auslesen der Passwortdatei | Benutzer und Gruppen | Grundlagen der Dämonisierung »
 
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 UNIX/Linux

Ubuntu 14.04 LTS

Linux Handbuch

Linux-Server

Raspberry Pi

Ubuntu Server
 Shopping
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
Info



Copyright © Rheinwerk Verlag GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern