Làm thế nào để liệt kê các không gian tên trong Linux?


24

Có phương pháp nào trong Linux để liệt kê tất cả các không gian tên trên máy chủ đang chạy không? Tôi cần kiểm tra các không gian tên cho các quy trình cụ thể (ví dụ: các quy trình đang chạy trong LXC-container và tất cả các quy trình khác trên máy chủ) và sau đó tìm ra các nhóm của chúng.


Câu trả lời:


12

Các tiện ích để làm việc với các không gian tên đã được cải thiện kể từ khi câu hỏi này được hỏi vào năm 2013.

lsnstừ gói linux-linux có thể liệt kê tất cả các loại không gian tên khác nhau, ở các định dạng hữu ích khác nhau.

# 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).

lsnschỉ liệt kê PID thấp nhất cho mỗi quy trình - nhưng bạn có thể sử dụng PID đó pgrepnếu bạn muốn liệt kê tất cả các quy trình thuộc về một không gian tên.

ví dụ: nếu tôi đang chạy gitlab trong docker và muốn tìm tất cả các tiến trình đang chạy trong không gian tên đó, tôi có thể:

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

và, sau đó sử dụng pid đó (459) với 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

Tôi cũng có thể sử dụng id không gian tên (4026532661) với ps, vd:

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

3

Từ trang ip man cho không gian tên mạng

ip netns - quản lý không gian tên mạng Một không gian tên mạng là một bản sao khác của ngăn xếp mạng, với các tuyến, quy tắc tường lửa và thiết bị mạng riêng của nó.

   By  convention  a   named   network   namespace   is   an   object   at
   /var/run/netns/NAME  that can be opened.  The file descriptor resulting
   from opening /var/run/netns/NAME refers to the specified network names-
   pace.   Holding  that  file descriptor open keeps the network namespace
   alive.  The file descriptor can be used with the setns(2)  system  call
   to change the network namespace associated with a task.

   The  convention for network namespace aware applications is to look for
   global network configuration files first in  /etc/netns/NAME/  then  in
   /etc/.    For   example,   if   you   want   a   different  version  of
   /etc/resolv.conf for a network namespace used to isolate your  vpn  you
   would name it /etc/netns/myvpn/resolv.conf.

Đối với không gian tên của các loại khác, có thể có những cách khác


1

Nsutils

Nsutils có thể liệt kê không gian tên được sử dụng với nslist, nó cũng không yêu cầu root để xem không gian tên người dùng

Không gian tên mạng :

Đối với không gian tên mạng được tạo bằng ip netns, chúng có thể được liệt kê vớiip netns list


1

Không gian tên-Lister:

Bạn có thể sử dụng listns.py

Cách sử dụng: ./listns.pyhoặcpython2 listns.py

Khám phá hệ thống

Trong thiết lập cơ bản / mặc định, Ubuntu 12.04 trở lên cung cấp các không gian tên cho (Các không gian tên này được hiển thị cho mọi quy trình trong hệ thống. Nếu bạn thực thi với quyền root)

  • ipc cho các đối tượng IPC và hàng đợi tin nhắn POSIX
  • mnt cho các điểm gắn kết hệ thống tập tin
  • mạng cho trừu tượng mạng (VRF)
  • pid để cung cấp một không gian số ID quá trình riêng biệt
  • uts để cô lập hai định danh hệ thống - tên nút và tên miền - được sử dụng bởi uname

Mã trăn

Mã python bên dưới đang liệt kê tất cả các không gian tên mặc định trong một hệ thống. Luồng chương trình là

  • Lấy các không gian tên tham chiếu từ quá trình init (PID = 1). Giả định: PID = 1 được gán cho các không gian tên mặc định được hệ thống hỗ trợ
  • Lặp qua / var / run / netns / và thêm các mục vào danh sách
  • Lặp lại thông qua / Proc / trên tất cả các PID và tìm kiếm các mục trong / Proc // ns / không giống với PID = 1 và sau đó thêm vào danh sách
  • In kết quả

Thí dụ:

Ví dụ về python2 listns.pyđầu ra ... bạn có thể sắp xếp nó với sắp xếp hoặc chỉnh sửa tập lệnh để phù hợp với nhu cầu của bạn

       PID  Namespace             Thread/Command
        --  net:[4026533172]      created by ip netns add qrouter-c33ffc14-dbc2-4730-b787-4747
        --  net:[4026533112]      created by ip netns add qrouter-5a691ed3-f6d3-4346-891a-3b59
       297  mnt:[4026531856]      kdevtmpfs 
      3429  net:[4026533050]**    dnsmasq --no-hosts --no-resolv --strict-order --bind-interfa
      3429  mnt:[4026533108]      dnsmasq --no-hosts --no-resolv --strict-order --bind-interfa
      3486  net:[4026533050]**    /usr/bin/python /usr/bin/neutron-ns-metadata-proxy --pid_fil
      3486  mnt:[4026533107]      /usr/bin/python /usr/bin/neutron-ns-metadata-proxy --pid_fil

Nguồn: github-gươngbài báo ; tất cả tín dụng cho Ralf Trezeciak


Nếu đây là kịch bản của bạn, bạn nên nói rõ điều đó. (Và trong các câu trả lời khác của bạn cũng spam tập lệnh này).
muru

Tôi đã liên kết nguồn, bây giờ tôi đã thêm tên của nhà phát triển, tôi cũng cập nhật 2 câu trả lời khác, tôi đã đăng câu trả lời khác nhau cho các câu hỏi khác nhau ngay cả khi nó đang liên kết cùng một công cụ, vui lòng cho tôi biết nếu tôi phải cập nhật một cái gì đó hoặc xóa một câu trả lời.
intika
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.