GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Wie listet man Namespaces in Linux auf?

Gibt es in Linux eine Methode, um alle Namespaces auf dem laufenden Host aufzulisten? Ich muss Namespaces für bestimmte Prozesse überprüfen (z. B. Prozesse, die im LXC-Container und alle anderen Prozesse auf dem Host ausgeführt werden) und dann Cgroups von ihnen herausfinden.

Akzeptierte Antwort:

Die Dienstprogramme für die Arbeit mit Namespaces haben sich verbessert, seit diese Frage 2013 gestellt wurde.

lsns aus dem Paket util-linux kann alle verschiedenen Namensraumtypen in verschiedenen nützlichen Formaten auflisten.

# lsns --help

Usage:
 lsns [options] [<namespace>]

List system namespaces.

Options:
 -J, --json             use JSON output format
 -l, --list             use list format output
 -n, --noheadings       don't print headings
 -o, --output <list>    define which output columns to use
 -p, --task <pid>       print process namespaces
 -r, --raw              use the raw output format
 -u, --notruncate       don't truncate text in columns
 -t, --type <name>      namespace type (mnt, net, ipc, user, pid, uts, cgroup)

 -h, --help     display this help and exit
 -V, --version  output version information and exit

Available columns (for --output):
          NS  namespace identifier (inode number)
        TYPE  kind of namespace
        PATH  path to the namespace
      NPROCS  number of processes in the namespace
         PID  lowest PID in the namespace
        PPID  PPID of the PID
     COMMAND  command line of the PID
         UID  UID of the PID
        USER  username of the PID

For more details see lsns(8).

lsns listet nur die niedrigste PID für jeden Prozess auf – aber Sie können diese PID mit pgrep verwenden wenn Sie alle Prozesse auflisten möchten, die zu einem Namensraum gehören.

z.B. Wenn ich gitlab im Docker ausführe und alle Prozesse finden möchte, die in diesem Namespace laufen, kann ich:

# lsns  -t pid -o ns,pid,command  | grep gitlab
  4026532661   459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0

und verwenden Sie dann diese PID (459) mit pgrep :

# pgrep --ns 459 -a
459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
623 postgres: gitlab gitlabhq_production [local] idle
[...around 50 lines deleted...]
30172 nginx: worker process

Ich könnte auch die Namespace-ID (4026532661) mit ps verwenden , z. B.:

ps -o pidns,pid,cmd | awk '$1==4026532661'
[...output deleted...]

Linux
  1. Entmystifizierung von Namespaces und Containern in Linux

  2. So verwenden Sie den Linux-SS-Befehl

  3. So verwalten und listen Sie Dienste in Linux auf

  4. Die 7 am häufigsten verwendeten Linux-Namespaces

  5. So listen Sie alle installierten Pakete in Linux auf

So listen Sie die Mitglieder einer Gruppe in Linux auf

So listen Sie Benutzer unter Linux auf

So listen Sie Festplatten unter Linux auf

So listen Sie Dienste unter Linux auf

So listen Sie nur Verzeichnisse in Linux auf

Wie listet man alle Gruppen in Linux auf?