NSENTER(1)
๐ NSENTER ๐
okay so bestie, gather round, because nsenter is literally the main character of namespace-land and you're about to become obsessed. this is the nsenter(1) page from the util-linux girlies, and yes it's a User Command, and yes it eats. ๐ฆ
โจ NAME โจ
nsenter โ run program in different namespaces ๐
๐ธ SYNOPSIS ๐ธ
nsenter [options] [program [arguments]]
๐ DESCRIPTION ๐
The nsenter command executes program in the namespace(s) that are specified in the command-line options (described below, and yes I will be describing all of them, every single one, no skipping). If program is not given, then "${SHELL}" is run (default: /bin/sh). ๐
Enterable namespaces are, and honestly the range?? iconic:
- mount namespace โ Mounting and unmounting filesystems will not affect the rest of the system, except for filesystems which are explicitly marked as shared (with
mount --make-shared; see/proc/self/mountinfofor the shared flag). For further details, seemount_namespaces(7)and the discussion of theCLONE_NEWNSflag inclone(2). - UTS namespace โ Setting hostname or domainname will not affect the rest of the system. For further details, see
uts_namespaces(7). - IPC namespace โ The process will have an independent namespace for POSIX message queues as well as System V message queues, semaphore sets and shared memory segments. For further details, see
ipc_namespaces(7). - network namespace โ The process will have independent IPv4 and IPv6 stacks, IP routing tables, firewall rules, the
/proc/netand/sys/class/netdirectory trees, sockets, etc. For further details, seenetwork_namespaces(7). - PID namespace โ Children will have a set of PID to process mappings separate from the
nsenterprocess.nsenterwill fork by default if changing the PID namespace, so that the new program and its children share the same PID namespace and are visible to each other. If--no-forkis used, the new program will be exec'ed without forking. For further details, seepid_namespaces(7). - user namespace โ The process will have a distinct set of UIDs, GIDs and capabilities. For further details, see
user_namespaces(7). - cgroup namespace โ The process will have a virtualized view of
/proc/self/cgroup, and new cgroup mounts will be rooted at the namespace cgroup root. For further details, seecgroup_namespaces(7). - time namespace โ The process can have a distinct view of
CLOCK_MONOTONICand/orCLOCK_BOOTTIMEwhich can be changed using/proc/self/timens_offsets. For further details, seetime_namespaces(7).
If you want to create a new namespace, use unshare(1). Once created, you can run a program in it using nsenter. it's giving dream team, fr fr. ๐ซถ
โจ OPTIONS โจ
Various of the options below that relate to namespaces take an optional file argument. This should be one of the /proc/[pid]/ns/* files described in namespaces(7), or the pathname of a bind mount that was created on one of those files. lowkey important, don't skip this part bestie ๐
-a,--allโ Enter all namespaces of the target process by the default/proc/<pid>/ns/*namespace paths. The default paths to the target process namespaces may be overridden by namespace-specific options (e.g.,--all --mount=path).
The user namespace will be ignored if it is the same as the caller's current user namespace. It prevents a caller that has dropped capabilities from regaining those capabilities via a call to setns(2). See the man page for more details. (safety girl behavior, we love her ๐
)
-t,--target PID[:inode]โ Specify a target process to get contexts from. The paths to the contexts specified by PID are:/proc/pid/ns/mntโ the mount namespace/proc/pid/ns/utsโ the UTS namespace/proc/pid/ns/ipcโ the IPC namespace/proc/pid/ns/netโ the network namespace/proc/pid/ns/pidโ the PID namespace/proc/pid/ns/userโ the user namespace/proc/pid/ns/cgroupโ the cgroup namespace/proc/pid/ns/timeโ the time namespace/proc/pid/rootโ the root directory/proc/pid/cwdโ the working directory respectively
Optionally, a process can be addressed with the format PID:inode. The inode identifies the unique process's file descriptor. To retrieve a process's inode number you can use the getino(1) utility. ๐
-m,--mount[=file|=:nsid]โ Enter the mount namespace. If no argument is specified, enter the mount namespace of the target process. If file or:nsidis specified, enter the mount namespace specified by file or nsid.-u,--uts[=file|=:nsid]โ Enter the UTS namespace. If no argument is specified, enter the UTS namespace of the target process. If file or:nsidis specified, enter the UTS namespace specified by file or nsid.-i,--ipc[=file|=:nsid]โ Enter the IPC namespace. If no argument is specified, enter the IPC namespace of the target process. If file or:nsidis specified, enter the IPC namespace specified by file or nsid.-n,--net[=file|=:nsid]โ Enter the network namespace. If no argument is specified, enter the network namespace of the target process. If file or:nsidis specified, enter the network namespace specified by file or nsid.-N,--net-socket fdโ Enter the network namespace of the target process's socket. It requires--targetprocess specified. Supported since Linux 5.6. ๐-p,--pid[=file|=:nsid]โ Enter the PID namespace. If no argument is specified, enter the PID namespace of the target process. If file or:nsidis specified, enter the PID namespace specified by file or nsid.-U,--user[=file|=:nsid]โ Enter the user namespace. If no argument is specified, enter the user namespace of the target process. If file or:nsidis specified, enter the user namespace specified by file or nsid. See also the--setuidand--setgidoptions.--user-parentโ Enter the parent user namespace. Parent user namespace will be acquired from any other enabled namespace. If combined with--useroption the parent user namespace will be fetched from the user namespace and replace it. ๐ง-C,--cgroup[=file|=:nsid]โ Enter the cgroup namespace. If no argument is specified, enter the cgroup namespace of the target process. If file or:nsidis specified, enter the cgroup namespace specified by file or nsid.-T,--time[=file|=:nsid]โ Enter the time namespace. If no argument is specified, enter the time namespace of the target process. If file or:nsidis specified, enter the time namespace specified by file or nsid. โฐ-G,--setgid gidโ Set the group ID which will be used in the entered namespace and drop supplementary groups.nsenteralways sets GID for user namespaces, the default is0. If the argument"follow"is specified the GID of the target process is used.-S,--setuid uidโ Set the user ID which will be used in the entered namespace.nsenteralways sets UID for user namespaces, the default is0. If the argument"follow"is specified the UID of the target process is used.--keep-capsโ When the--useroption is given, ensure that capabilities granted in the user namespace are preserved in the child process. ๐--preserve-credentialsโ Don't modify UID and GID when entering the user namespace. The default is to drop supplementary groups and set GID and UID to0.-r,--root[=directory]โ Set the root directory. If no directory is specified, set the root directory to the root directory of the target process. If directory is specified, set the root directory to the specified directory. The specified directory is opened before switching to the requested namespaces. ๐ณ-w,--wd[=directory]โ Set the working directory. If no directory is specified, set the working directory to the working directory of the target process. If directory is specified, set the working directory to the specified directory. The specified directory is opened before switching to the requested namespaces, which means the specified directory works as a"tunnel"to the current namespace. See also--wdns. ๐-W,--wdns[=directory]โ Set the working directory. The directory is opened after switching to the requested namespaces and after callingchroot(2). The options--wdand--wdnsare mutually exclusive. (pick a lane bestie, you literally cannot have both ๐ญ)-e,--envโ Pass environment variables from the target process to the new process being created. If this option is not provided, the environment variables will remain the same as in the current namespace. ๐-F,--no-forkโ Do not fork before exec'ing the specified program. By default, when entering a PID namespace,nsentercallsforkbefore callingexecso that any children will also be in the newly entered PID namespace.-Z,--follow-contextโ Set the SELinux security context used for executing a new process according to the already running process specified by--target PID. (The util-linux has to be compiled with SELinux support otherwise the option is unavailable.)-c,--join-cgroupโ Add the initiated process to the cgroup of the target process.-h,--helpโ Display help text and exit. ๐ซถ-V,--versionโ Display version and exit. โจ
๐ธ NOTES ๐ธ
- The
--user-parentoption requires Linux 4.9 or higher, older kernels will raiseinappropriate ioctl for deviceerror. ๐ - Specifying namespaces by nsid requires Linux 6.19 or higher. If a namespace file name starts with a colon, prepend
./for disambiguation. (iykyk, that colon will absolutely trip you up otherwise ๐)
๐ AUTHORS ๐
Eric Biederman <biederm@xmission.com>, Karel Zak <kzak@redhat.com> โ literal legends, no cap ๐
๐ SEE ALSO ๐
unshare(1), lsns(8), clone(2), setns(2), namespaces(7) getino(1)
๐ REPORTING BUGS ๐
For bug reports, use the issue tracker <https://github.com/util-linux/util-linux/issues>.
๐ AVAILABILITY ๐
The nsenter command is part of the util-linux package which can be downloaded from Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>. ๐ฆ
okay bestie that's the whole page, every last flag and path and caveat, and you ate it. this was util-linux version 2.42.4, dated 2026-09-21, and NSENTER(1) is out here being the moment, the icon, the legend. go enter some namespaces, you've got this. mwah. ๐โจ๐ฆ
๐ฆ where this page comes from
- arch rolling: util-linux 2.42.4-1 ยท BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause-UC AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-or-later AND ISC AND LGPL-2.1-or-later AND LicenseRef-PublicDomain
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms