Как я могу переключиться от пользовательского пространства имен сети Linux назад к по умолчанию?

bluerain ~ # ls -lrt `grep -l a *.sh `
    -rwxr-xr-x 1 root root 315 2007-01-20 17:43 twopass.sh
    -rwxr-xr-x 1 root root  86 2007-04-21 16:23 hd_down.sh
    -rwxr-xr-x 1 root root 245 2009-09-10 19:47 pspenc.sh
    -rwxr--r-- 1 root root  95 2009-09-10 19:50 psp2.sh 
bluerain ~ # kk=`grep -l a *.sh` 
bluerain ~ # bb=` ls -rt $kk | tail -1` 
bluerain ~ # echo $bb psp2.sh 
bluerain ~ # echo $kk hd_down.sh psp2.sh pspenc.sh twopass.sh

так используйте следующее:

tempvar=`grep -l <pattern> *(for all files in the directory)`
file=`ls -rt $tempvar | tail 1`
14
задан 13 April 2017 в 05:14
5 ответов

Более новые дистрибутивы/ядра поддержка эти nsenter команда, который, должны сделать то, что Вы хотите, если Вы - корень, когда Вы делаете это.

Вот пример (Fedora 20).

[root@home ~]# unshare -n /bin/bash
[root@home ~]# ip a l
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
[root@home ~]# ping google.com
ping: unknown host google.com
[root@home ~]# nsenter -t 1 -n -- ping -c 2 google.com
PING google.com (74.125.230.65) 56(84) bytes of data.
64 bytes from lhr14s23-in-f1.1e100.net (74.125.230.65): icmp_seq=1 ttl=56 time=14.2 ms
64 bytes from lhr14s23-in-f1.1e100.net (74.125.230.65): icmp_seq=2 ttl=56 time=15.0 ms

--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 14.239/14.621/15.003/0.382 ms
[root@home ~]# nsenter -t 1 -n -- ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 10:bf:48:88:50:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global p4p1
       valid_lft forever preferred_lft forever
    inet6 fe80::12bf:48ff:fe88:50ee/64 scope link 
       valid_lft forever preferred_lft forever
[root@home ~]# 

Это полагается setns системный вызов. Вам нужны, по крайней мере, 3,0 ядра и glibc-2.14 для этого для работы.

RHEL 6.5 оказывает поддержку для персистентных пространств имен, но не поддержка перемещения существующих процессов в новые пространства имен.

13
ответ дан 20 November 2019 в 23:03

Я нашел, что можно возвратиться к пространству имен стандартной сети с двумя простыми командами:

ln -s /proc/1/ns/net /var/run/netns/default
ip netns exec default ifconfig -a

Этот метод, очевидно, предполагает, что Вы видите процессы вне своего собственного пространства имен через proc файловая система. Если Вы находитесь в отдельном пространстве имен PID также, возвращение пространству имен по умолчанию не так просто.

вышеупомянутые команды были протестированы на Ubuntu 14.04. Я не знаю, существует ли что-нибудь распределение, конкретное относительно подхода.

15
ответ дан 20 November 2019 в 23:03

"ln-s/proc/1/ns/net/var/run/netns/default" <-----Не рекомендуется вообще.

счетчик для кода, который производит "IP netns шоу"

, если у Вас есть должностное лицо, оболочка удара, простая, существуют из удара, выхода.

, Если Вы имеете ssh к netns, затем ssh к интерфейсу значения по умолчанию не уточнено и делаете то, что необходимо сделать там.

Как последнее прибежище так ln как выше, но я предложил бы удалить его, как только это сделано, и прежде чем любые изменения произойдут с любым нс. Иначе счетчик будет поврежден и проблемы причины.

0
ответ дан 20 November 2019 в 23:03
nsenter -n -t <pid of a process running in the default ns>

можно получить изодромную с предварением форму, делающую 'PS aux' или даже вершину, если Вы хотели.

Лично я всегда ssh к основному пространству имен, затем я могу всегда возвращаться к значению по умолчанию путем ввода выхода и затем повторно введения пространства имен при необходимости.

0
ответ дан 20 November 2019 в 23:03

Как уже упоминалось, пространство имен корневой сети можно ввести с помощью nsenter --net --target=1. Но в случае, если вы планируете использовать сетевые пространства имен, не знающие приложения, необходимо переключиться также на пространство имен корневого монтирования, поэтому лучше использовать nsenter --net --mount --target=1.

0
ответ дан 4 August 2020 в 13:40

Теги

Похожие вопросы