summaryrefslogtreecommitdiffstats
path: root/man5
diff options
context:
space:
mode:
Diffstat (limited to 'man5')
-rw-r--r--man5/acct.5161
-rw-r--r--man5/charmap.5105
-rw-r--r--man5/core.5684
-rw-r--r--man5/dir_colors.5406
-rw-r--r--man5/elf.52196
-rw-r--r--man5/erofs.597
-rw-r--r--man5/filesystems.5227
-rw-r--r--man5/fs.51
-rw-r--r--man5/ftpusers.542
-rw-r--r--man5/gai.conf.589
-rw-r--r--man5/group.555
-rw-r--r--man5/host.conf.5204
-rw-r--r--man5/hosts.5122
-rw-r--r--man5/hosts.equiv.5212
-rw-r--r--man5/intro.523
-rw-r--r--man5/issue.524
-rw-r--r--man5/locale.51316
-rw-r--r--man5/motd.525
-rw-r--r--man5/networks.560
-rw-r--r--man5/nologin.522
-rw-r--r--man5/nscd.conf.5342
-rw-r--r--man5/nss.5101
-rw-r--r--man5/nsswitch.conf.5427
-rw-r--r--man5/passwd.5160
-rw-r--r--man5/proc.56965
-rw-r--r--man5/procfs.51
-rw-r--r--man5/protocols.566
-rw-r--r--man5/repertoiremap.558
-rw-r--r--man5/resolv.conf.5406
-rw-r--r--man5/resolver.51
-rw-r--r--man5/rpc.583
-rw-r--r--man5/securetty.535
-rw-r--r--man5/services.5199
-rw-r--r--man5/shells.540
-rw-r--r--man5/slabinfo.5220
-rw-r--r--man5/sysfs.5275
-rw-r--r--man5/termcap.5466
-rw-r--r--man5/tmpfs.5271
-rw-r--r--man5/ttytype.556
-rw-r--r--man5/tzfile.5496
-rw-r--r--man5/utmp.5348
-rw-r--r--man5/utmpx.51
-rw-r--r--man5/wtmp.51
43 files changed, 17089 insertions, 0 deletions
diff --git a/man5/acct.5 b/man5/acct.5
new file mode 100644
index 0000000..e1d88d4
--- /dev/null
+++ b/man5/acct.5
@@ -0,0 +1,161 @@
+.\" Copyright (C) 2008, Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH acct 5 2023-05-03 "Linux man-pages 6.05.01"
+.SH NAME
+acct \- process accounting file
+.SH SYNOPSIS
+.nf
+.B #include <sys/acct.h>
+.fi
+.SH DESCRIPTION
+If the kernel is built with the process accounting option enabled
+.RB ( CONFIG_BSD_PROCESS_ACCT ),
+then calling
+.BR acct (2)
+starts process accounting, for example:
+.PP
+.in +4n
+acct("/var/log/pacct");
+.in
+.PP
+When process accounting is enabled, the kernel writes a record
+to the accounting file as each process on the system terminates.
+This record contains information about the terminated process,
+and is defined in
+.I <sys/acct.h>
+as follows:
+.PP
+.in +4n
+.EX
+#define ACCT_COMM 16
+\&
+typedef u_int16_t comp_t;
+\&
+struct acct {
+ char ac_flag; /* Accounting flags */
+ u_int16_t ac_uid; /* Accounting user ID */
+ u_int16_t ac_gid; /* Accounting group ID */
+ u_int16_t ac_tty; /* Controlling terminal */
+ u_int32_t ac_btime; /* Process creation time
+ (seconds since the Epoch) */
+ comp_t ac_utime; /* User CPU time */
+ comp_t ac_stime; /* System CPU time */
+ comp_t ac_etime; /* Elapsed time */
+ comp_t ac_mem; /* Average memory usage (kB) */
+ comp_t ac_io; /* Characters transferred (unused) */
+ comp_t ac_rw; /* Blocks read or written (unused) */
+ comp_t ac_minflt; /* Minor page faults */
+ comp_t ac_majflt; /* Major page faults */
+ comp_t ac_swaps; /* Number of swaps (unused) */
+ u_int32_t ac_exitcode; /* Process termination status
+ (see wait(2)) */
+ char ac_comm[ACCT_COMM+1];
+ /* Command name (basename of last
+ executed command; null\-terminated) */
+ char ac_pad[\fIX\fP]; /* padding bytes */
+};
+\&
+enum { /* Bits that may be set in ac_flag field */
+ AFORK = 0x01, /* Has executed fork, but no exec */
+ ASU = 0x02, /* Used superuser privileges */
+ ACORE = 0x08, /* Dumped core */
+ AXSIG = 0x10 /* Killed by a signal */
+};
+.EE
+.in
+.PP
+The
+.I comp_t
+data type is a floating-point value consisting of a 3-bit, base-8 exponent,
+and a 13-bit mantissa.
+A value,
+.IR c ,
+of this type can be converted to a (long) integer as follows:
+.PP
+.nf
+ v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3);
+.fi
+.PP
+The
+.IR ac_utime ,
+.IR ac_stime ,
+and
+.I ac_etime
+fields measure time in "clock ticks"; divide these values by
+.I sysconf(_SC_CLK_TCK)
+to convert them to seconds.
+.SS Version 3 accounting file format
+Since Linux 2.6.8,
+an optional alternative version of the accounting file can be produced
+if the
+.B CONFIG_BSD_PROCESS_ACCT_V3
+option is set when building the kernel.
+With this option is set,
+the records written to the accounting file contain additional fields,
+and the width of
+.I c_uid
+and
+.I ac_gid
+fields is widened from 16 to 32 bits
+(in line with the increased size of UID and GIDs in Linux 2.4 and later).
+The records are defined as follows:
+.PP
+.in +4n
+.EX
+struct acct_v3 {
+ char ac_flag; /* Flags */
+ char ac_version; /* Always set to ACCT_VERSION (3) */
+ u_int16_t ac_tty; /* Controlling terminal */
+ u_int32_t ac_exitcode; /* Process termination status */
+ u_int32_t ac_uid; /* Real user ID */
+ u_int32_t ac_gid; /* Real group ID */
+ u_int32_t ac_pid; /* Process ID */
+ u_int32_t ac_ppid; /* Parent process ID */
+ u_int32_t ac_btime; /* Process creation time */
+ float ac_etime; /* Elapsed time */
+ comp_t ac_utime; /* User CPU time */
+ comp_t ac_stime; /* System time */
+ comp_t ac_mem; /* Average memory usage (kB) */
+ comp_t ac_io; /* Characters transferred (unused) */
+ comp_t ac_rw; /* Blocks read or written
+ (unused) */
+ comp_t ac_minflt; /* Minor page faults */
+ comp_t ac_majflt; /* Major page faults */
+ comp_t ac_swaps; /* Number of swaps (unused) */
+ char ac_comm[ACCT_COMM]; /* Command name */
+};
+.EE
+.in
+.SH VERSIONS
+Although it is present on most systems, it is not standardized,
+and the details vary somewhat between systems.
+.SH STANDARDS
+None.
+.SH HISTORY
+glibc 2.6.
+.PP
+Process accounting originated on BSD.
+.SH NOTES
+Records in the accounting file are ordered by termination time of
+the process.
+.PP
+Up to and including Linux 2.6.9,
+a separate accounting record is written for each thread created using
+the NPTL threading library;
+since Linux 2.6.10,
+a single accounting record is written for the entire process
+on termination of the last thread in the process.
+.PP
+The
+.I /proc/sys/kernel/acct
+file, described in
+.BR proc (5),
+defines settings that control the behavior of process accounting
+when disk space runs low.
+.SH SEE ALSO
+.BR lastcomm (1),
+.BR acct (2),
+.BR accton (8),
+.BR sa (8)
diff --git a/man5/charmap.5 b/man5/charmap.5
new file mode 100644
index 0000000..280ba4e
--- /dev/null
+++ b/man5/charmap.5
@@ -0,0 +1,105 @@
+.\" Copyright (C) 1994 Jochen Hein (Hein@Student.TU-Clausthal.de)
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.TH charmap 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+charmap \- character set description file
+.SH DESCRIPTION
+A character set description (charmap) defines all available characters
+and their encodings in a character set.
+.BR localedef (1)
+can use charmaps to create locale variants for different character sets.
+.SS Syntax
+The charmap file starts with a header that may consist of the
+following keywords:
+.TP
+.RI < code_set_name >
+is followed by the name of the character map.
+.TP
+.RI < comment_char >
+is followed by a character that will be used as the comment character
+for the rest of the file.
+It defaults to the number sign (#).
+.TP
+.RI < escape_char >
+is followed by a character that should be used as the escape character
+for the rest of the file to mark characters that should be interpreted
+in a special way.
+It defaults to the backslash (\e).
+.TP
+.RI < mb_cur_max >
+is followed by the maximum number of bytes for a character.
+The default value is 1.
+.TP
+.RI < mb_cur_min >
+is followed by the minimum number of bytes for a character.
+This value must be less than or equal than
+.RI < mb_cur_max >.
+If not specified, it defaults to
+.RI < mb_cur_max >.
+.PP
+The character set definition section starts with the keyword
+.I CHARMAP
+in the first column.
+.PP
+The following lines may have one of the two following forms to
+define the character set:
+.TP
+.RI < character >\ byte-sequence\ comment
+This form defines exactly one character and its byte sequence,
+.I comment
+being optional.
+.TP
+.RI < character >..< character >\ byte-sequence\ comment
+This form defines a character range and its byte sequence,
+.I comment
+being optional.
+.PP
+The character set definition section ends with the string
+.IR "END CHARMAP" .
+.PP
+The character set definition section may optionally be followed by a
+section to define widths of characters.
+.PP
+The
+.I WIDTH_DEFAULT
+keyword can be used to define the default width for all characters
+not explicitly listed.
+The default character width is 1.
+.PP
+The width section for individual characters starts with the keyword
+.I WIDTH
+in the first column.
+.PP
+The following lines may have one of the two following forms to
+define the widths of the characters:
+.TP
+.RI < character >\ width
+This form defines the width of exactly one character.
+.TP
+.RI < character >...< character >\ width
+This form defines the width for all the characters in the range.
+.PP
+The width definition section ends with the string
+.IR "END WIDTH" .
+.SH FILES
+.TP
+.I /usr/share/i18n/charmaps
+Usual default character map path.
+.SH STANDARDS
+POSIX.2.
+.SH EXAMPLES
+The Euro sign is defined as follows in the
+.I UTF\-8
+charmap:
+.PP
+.nf
+<U20AC> /xe2/x82/xac EURO SIGN
+.fi
+.SH SEE ALSO
+.BR iconv (1),
+.BR locale (1),
+.BR localedef (1),
+.BR locale (5),
+.BR charsets (7)
diff --git a/man5/core.5 b/man5/core.5
new file mode 100644
index 0000000..c19846e
--- /dev/null
+++ b/man5/core.5
@@ -0,0 +1,684 @@
+.\" Copyright (c) 2006, 2008 by Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH core 5 2023-05-03 "Linux man-pages 6.05.01"
+.SH NAME
+core \- core dump file
+.SH DESCRIPTION
+The default action of certain signals is to cause a process to terminate
+and produce a
+.IR "core dump file" ,
+a file containing an image of the process's memory at
+the time of termination.
+This image can be used in a debugger (e.g.,
+.BR gdb (1))
+to inspect the state of the program at the time that it terminated.
+A list of the signals which cause a process to dump core can be found in
+.BR signal (7).
+.PP
+A process can set its soft
+.B RLIMIT_CORE
+resource limit to place an upper limit on the size of the core dump file
+that will be produced if it receives a "core dump" signal; see
+.BR getrlimit (2)
+for details.
+.PP
+There are various circumstances in which a core dump file is
+not produced:
+.IP \[bu] 3
+The process does not have permission to write the core file.
+(By default, the core file is called
+.I core
+or
+.IR core.pid ,
+where
+.I pid
+is the ID of the process that dumped core,
+and is created in the current working directory.
+See below for details on naming.)
+Writing the core file fails if the directory in which
+it is to be created is not writable,
+or if a file with the same name exists and
+is not writable
+or is not a regular file
+(e.g., it is a directory or a symbolic link).
+.IP \[bu]
+A (writable, regular) file with the same name as would be used for the
+core dump already exists, but there is more than one hard link to that
+file.
+.IP \[bu]
+The filesystem where the core dump file would be created is full;
+or has run out of inodes; or is mounted read-only;
+or the user has reached their quota for the filesystem.
+.IP \[bu]
+The directory in which the core dump file is to be created does
+not exist.
+.IP \[bu]
+The
+.B RLIMIT_CORE
+(core file size) or
+.B RLIMIT_FSIZE
+(file size) resource limits for the process are set to zero; see
+.BR getrlimit (2)
+and the documentation of the shell's
+.I ulimit
+command
+.RI ( limit
+in
+.BR csh (1)).
+However,
+.B RLIMIT_CORE
+will be ignored if the system is configured to pipe core dumps to a program.
+.IP \[bu]
+The binary being executed by the process does not have read
+permission enabled.
+(This is a security measure to
+ensure that an executable whose contents are not readable
+does not produce a\[em]possibly readable\[em]core dump containing
+an image of the executable.)
+.IP \[bu]
+The process is executing a set-user-ID (set-group-ID) program
+that is owned by a user (group) other than the real user (group)
+ID of the process,
+or the process is executing a program that has file capabilities (see
+.BR capabilities (7)).
+(However, see the description of the
+.BR prctl (2)
+.B PR_SET_DUMPABLE
+operation, and the description of the
+.I /proc/sys/fs/suid_dumpable
+.\" FIXME . Perhaps relocate discussion of /proc/sys/fs/suid_dumpable
+.\" and PR_SET_DUMPABLE to this page?
+file in
+.BR proc (5).)
+.IP \[bu]
+.I /proc/sys/kernel/core_pattern
+is empty and
+.I /proc/sys/kernel/core_uses_pid
+contains the value 0.
+(These files are described below.)
+Note that if
+.I /proc/sys/kernel/core_pattern
+is empty and
+.I /proc/sys/kernel/core_uses_pid
+contains the value 1,
+core dump files will have names of the form
+.IR .pid ,
+and such files are hidden unless one uses the
+.BR ls (1)
+.I \-a
+option.
+.IP \[bu]
+(Since Linux 3.7)
+.\" commit 046d662f481830e652ac34cd112249adde16452a
+The kernel was configured without the
+.B CONFIG_COREDUMP
+option.
+.PP
+In addition,
+a core dump may exclude part of the address space of the process if the
+.BR madvise (2)
+.B MADV_DONTDUMP
+flag was employed.
+.PP
+On systems that employ
+.BR systemd (1)
+as the
+.I init
+framework, core dumps may instead be placed in a location determined by
+.BR systemd (1).
+See below for further details.
+.\"
+.SS Naming of core dump files
+By default, a core dump file is named
+.IR core ,
+but the
+.I /proc/sys/kernel/core_pattern
+file (since Linux 2.6 and 2.4.21)
+can be set to define a template that is used to name core dump files.
+The template can contain % specifiers which are substituted
+by the following values when a core file is created:
+.PP
+.RS 4
+.PD 0
+.TP 4
+%%
+A single % character.
+.TP
+%c
+Core file size soft resource limit of crashing process (since Linux 2.6.24).
+.TP
+%d
+.\" Added in git commit 12a2b4b2241e318b4f6df31228e4272d2c2968a1
+Dump mode\[em]same as value returned by
+.BR prctl (2)
+.B PR_GET_DUMPABLE
+(since Linux 3.7).
+.TP
+%e
+The process or thread's
+.I comm
+value, which typically is the same as the executable filename
+(without path prefix, and truncated to a maximum of 15 characters),
+but may have been modified to be something different;
+see the discussion of
+.IR /proc/ pid /comm
+and
+.IR /proc/ pid /task/ tid /comm
+in
+.BR proc (5).
+.TP
+%E
+Pathname of executable,
+with slashes (\[aq]/\[aq]) replaced by exclamation marks (\[aq]!\[aq])
+(since Linux 3.0).
+.TP
+%g
+Numeric real GID of dumped process.
+.TP
+%h
+Hostname (same as \fInodename\fP returned by \fBuname\fP(2)).
+.TP
+%i
+TID of thread that triggered core dump,
+as seen in the PID namespace in which the thread resides
+.\" commit b03023ecbdb76c1dec86b41ed80b123c22783220
+(since Linux 3.18).
+.TP
+%I
+TID of thread that triggered core dump, as seen in the initial PID namespace
+.\" commit b03023ecbdb76c1dec86b41ed80b123c22783220
+(since Linux 3.18).
+.TP
+%p
+PID of dumped process,
+as seen in the PID namespace in which the process resides.
+.TP
+%P
+.\" Added in git commit 65aafb1e7484b7434a0c1d4c593191ebe5776a2f
+PID of dumped process, as seen in the initial PID namespace
+(since Linux 3.12).
+.TP
+%s
+Number of signal causing dump.
+.TP
+%t
+Time of dump, expressed as seconds since the
+Epoch, 1970-01-01 00:00:00 +0000 (UTC).
+.TP
+%u
+Numeric real UID of dumped process.
+.PD
+.RE
+.PP
+A single % at the end of the template is dropped from the
+core filename, as is the combination of a % followed by any
+character other than those listed above.
+All other characters in the template become a literal
+part of the core filename.
+The template may include \[aq]/\[aq] characters, which are interpreted
+as delimiters for directory names.
+The maximum size of the resulting core filename is 128 bytes (64 bytes
+before Linux 2.6.19).
+The default value in this file is "core".
+For backward compatibility, if
+.I /proc/sys/kernel/core_pattern
+does not include
+.I %p
+and
+.I /proc/sys/kernel/core_uses_pid
+(see below)
+is nonzero, then .PID will be appended to the core filename.
+.PP
+Paths are interpreted according to the settings that are active for the
+crashing process.
+That means the crashing process's mount namespace (see
+.BR mount_namespaces (7)),
+its current working directory (found via
+.BR getcwd (2)),
+and its root directory (see
+.BR chroot (2)).
+.PP
+Since Linux 2.4, Linux has also provided
+a more primitive method of controlling
+the name of the core dump file.
+If the
+.I /proc/sys/kernel/core_uses_pid
+file contains the value 0, then a core dump file is simply named
+.IR core .
+If this file contains a nonzero value, then the core dump file includes
+the process ID in a name of the form
+.IR core.PID .
+.PP
+Since Linux 3.6,
+.\" 9520628e8ceb69fa9a4aee6b57f22675d9e1b709
+if
+.I /proc/sys/fs/suid_dumpable
+is set to 2 ("suidsafe"), the pattern must be either an absolute pathname
+(starting with a leading \[aq]/\[aq] character) or a pipe, as defined below.
+.SS Piping core dumps to a program
+Since Linux 2.6.19, Linux supports an alternate syntax for the
+.I /proc/sys/kernel/core_pattern
+file.
+If the first character of this file is a pipe symbol (\fB|\fP),
+then the remainder of the line is interpreted as the command-line for
+a user-space program (or script) that is to be executed.
+.PP
+Since Linux 5.3.0,
+.\" commit 315c69261dd3fa12dbc830d4fa00d1fad98d3b03
+the pipe template is split on spaces into an argument list
+.I before
+the template parameters are expanded.
+In earlier kernels, the template parameters are expanded first and
+the resulting string is split on spaces into an argument list.
+This means that in earlier kernels executable names added by the
+.I %e
+and
+.I %E
+template parameters could get split into multiple arguments.
+So the core dump handler needs to put the executable names as the last
+argument and ensure it joins all parts of the executable name using spaces.
+Executable names with multiple spaces in them are not correctly represented
+in earlier kernels,
+meaning that the core dump handler needs to use mechanisms to find
+the executable name.
+.PP
+Instead of being written to a file, the core dump is given as
+standard input to the program.
+Note the following points:
+.IP \[bu] 3
+The program must be specified using an absolute pathname (or a
+pathname relative to the root directory, \fI/\fP),
+and must immediately follow the '|' character.
+.IP \[bu]
+The command-line arguments can include any of
+the % specifiers listed above.
+For example, to pass the PID of the process that is being dumped, specify
+.I %p
+in an argument.
+.IP \[bu]
+The process created to run the program runs as user and group
+.IR root .
+.IP \[bu]
+Running as
+.I root
+does not confer any exceptional security bypasses.
+Namely, LSMs (e.g., SELinux) are still active and may prevent the handler
+from accessing details about the crashed process via
+.IR /proc/ pid.
+.IP \[bu]
+The program pathname is interpreted with respect to the initial mount namespace
+as it is always executed there.
+It is not affected by the settings
+(e.g., root directory, mount namespace, current working directory)
+of the crashing process.
+.IP \[bu]
+The process runs in the initial namespaces
+(PID, mount, user, and so on)
+and not in the namespaces of the crashing process.
+One can utilize specifiers such as
+.I %P
+to find the right
+.IR /proc/ pid
+directory and probe/enter the crashing process's namespaces if needed.
+.IP \[bu]
+The process starts with its current working directory
+as the root directory.
+If desired, it is possible change to the working directory of
+the dumping process by employing the value provided by the
+.I %P
+specifier to change to the location of the dumping process via
+.IR /proc/ pid /cwd .
+.IP \[bu]
+Command-line arguments can be supplied to the
+program (since Linux 2.6.24),
+delimited by white space (up to a total line length of 128 bytes).
+.IP \[bu]
+The
+.B RLIMIT_CORE
+limit is not enforced for core dumps that are piped to a program
+via this mechanism.
+.\"
+.SS /proc/sys/kernel/core_pipe_limit
+When collecting core dumps via a pipe to a user-space program,
+it can be useful for the collecting program to gather data about
+the crashing process from that process's
+.IR /proc/ pid
+directory.
+In order to do this safely,
+the kernel must wait for the program collecting the core dump to exit,
+so as not to remove the crashing process's
+.IR /proc/ pid
+files prematurely.
+This in turn creates the
+possibility that a misbehaving collecting program can block
+the reaping of a crashed process by simply never exiting.
+.PP
+Since Linux 2.6.32,
+.\" commit a293980c2e261bd5b0d2a77340dd04f684caff58
+the
+.I /proc/sys/kernel/core_pipe_limit
+can be used to defend against this possibility.
+The value in this file defines how many concurrent crashing
+processes may be piped to user-space programs in parallel.
+If this value is exceeded, then those crashing processes above this value
+are noted in the kernel log and their core dumps are skipped.
+.PP
+A value of 0 in this file is special.
+It indicates that unlimited processes may be captured in parallel,
+but that no waiting will take place (i.e., the collecting
+program is not guaranteed access to
+.IR /proc/<crashing\-PID> ).
+The default value for this file is 0.
+.\"
+.SS Controlling which mappings are written to the core dump
+Since Linux 2.6.23, the Linux-specific
+.IR /proc/ pid /coredump_filter
+file can be used to control which memory segments are written to the
+core dump file in the event that a core dump is performed for the
+process with the corresponding process ID.
+.PP
+The value in the file is a bit mask of memory mapping types (see
+.BR mmap (2)).
+If a bit is set in the mask, then memory mappings of the
+corresponding type are dumped; otherwise they are not dumped.
+The bits in this file have the following meanings:
+.PP
+.PD 0
+.RS 4
+.TP
+bit 0
+Dump anonymous private mappings.
+.TP
+bit 1
+Dump anonymous shared mappings.
+.TP
+bit 2
+Dump file-backed private mappings.
+.TP
+bit 3
+Dump file-backed shared mappings.
+.\" file-backed shared mappings of course also update the underlying
+.\" mapped file.
+.TP
+bit 4 (since Linux 2.6.24)
+Dump ELF headers.
+.TP
+bit 5 (since Linux 2.6.28)
+Dump private huge pages.
+.TP
+bit 6 (since Linux 2.6.28)
+Dump shared huge pages.
+.TP
+bit 7 (since Linux 4.4)
+.\" commit ab27a8d04b32b6ee8c30c14c4afd1058e8addc82
+Dump private DAX pages.
+.TP
+bit 8 (since Linux 4.4)
+.\" commit ab27a8d04b32b6ee8c30c14c4afd1058e8addc82
+Dump shared DAX pages.
+.RE
+.PD
+.PP
+By default, the following bits are set: 0, 1, 4 (if the
+.B CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS
+kernel configuration option is enabled), and 5.
+This default can be modified at boot time using the
+.I coredump_filter
+boot option.
+.PP
+The value of this file is displayed in hexadecimal.
+(The default value is thus displayed as 33.)
+.PP
+Memory-mapped I/O pages such as frame buffer are never dumped, and
+virtual DSO
+.RB ( vdso (7))
+pages are always dumped, regardless of the
+.I coredump_filter
+value.
+.PP
+A child process created via
+.BR fork (2)
+inherits its parent's
+.I coredump_filter
+value;
+the
+.I coredump_filter
+value is preserved across an
+.BR execve (2).
+.PP
+It can be useful to set
+.I coredump_filter
+in the parent shell before running a program, for example:
+.PP
+.in +4n
+.EX
+.RB "$" " echo 0x7 > /proc/self/coredump_filter"
+.RB "$" " ./some_program"
+.EE
+.in
+.PP
+This file is provided only if the kernel was built with the
+.B CONFIG_ELF_CORE
+configuration option.
+.\"
+.SS Core dumps and systemd
+On systems using the
+.BR systemd (1)
+.I init
+framework, core dumps may be placed in a location determined by
+.BR systemd (1).
+To do this,
+.BR systemd (1)
+employs the
+.I core_pattern
+feature that allows piping core dumps to a program.
+One can verify this by checking whether core dumps are being piped to the
+.BR systemd\-coredump (8)
+program:
+.PP
+.in +4n
+.EX
+$ \fBcat /proc/sys/kernel/core_pattern\fP
+|/usr/lib/systemd/systemd\-coredump %P %u %g %s %t %c %e
+.EE
+.in
+.PP
+In this case, core dumps will be placed in the location configured for
+.BR systemd\-coredump (8),
+typically as
+.BR lz4 (1)
+compressed files in the directory
+.IR /var/lib/systemd/coredump/ .
+One can list the core dumps that have been recorded by
+.BR systemd\-coredump (8)
+using
+.BR coredumpctl (1):
+.PP
+.EX
+$ \fBcoredumpctl list | tail \-5\fP
+Wed 2017\-10\-11 22:25:30 CEST 2748 1000 1000 3 present /usr/bin/sleep
+Thu 2017\-10\-12 06:29:10 CEST 2716 1000 1000 3 present /usr/bin/sleep
+Thu 2017\-10\-12 06:30:50 CEST 2767 1000 1000 3 present /usr/bin/sleep
+Thu 2017\-10\-12 06:37:40 CEST 2918 1000 1000 3 present /usr/bin/cat
+Thu 2017\-10\-12 08:13:07 CEST 2955 1000 1000 3 present /usr/bin/cat
+.EE
+.PP
+The information shown for each core dump includes the date and time
+of the dump, the PID, UID, and GID of the dumping process,
+the signal number that caused the core dump,
+and the pathname of the executable that was being run by the dumped process.
+Various options to
+.BR coredumpctl (1)
+allow a specified coredump file to be pulled from the
+.BR systemd (1)
+location into a specified file.
+For example, to extract the core dump for PID 2955 shown above to a file named
+.I core
+in the current directory, one could use:
+.PP
+.in +4n
+.EX
+$ \fBcoredumpctl dump 2955 \-o core\fP
+.EE
+.in
+.PP
+For more extensive details, see the
+.BR coredumpctl (1)
+manual page.
+.PP
+To (persistently) disable the
+.BR systemd (1)
+mechanism that archives core dumps, restoring to something more like
+traditional Linux behavior, one can set an override for the
+.BR systemd (1)
+mechanism, using something like:
+.PP
+.in +4n
+.EX
+# \fBecho "kernel.core_pattern=core.%p" > \e\fP
+\fB /etc/sysctl.d/50\-coredump.conf\fP
+# \fB/lib/systemd/systemd\-sysctl\fP
+.EE
+.in
+.PP
+It is also possible to temporarily (i.e., until the next reboot) change the
+.I core_pattern
+setting using a command such as the following
+(which causes the names of core dump files to include the executable name
+as well as the number of the signal which triggered the core dump):
+.PP
+.in +4n
+.EX
+# \fBsysctl \-w kernel.core_pattern="%e\-%s.core"\fP
+.EE
+.in
+.\"
+.SH NOTES
+The
+.BR gdb (1)
+.I gcore
+command can be used to obtain a core dump of a running process.
+.PP
+In Linux versions up to and including 2.6.27,
+.\" Changed with commit 6409324b385f3f63a03645b4422e3be67348d922
+if a multithreaded process (or, more precisely, a process that
+shares its memory with another process by being created with the
+.B CLONE_VM
+flag of
+.BR clone (2))
+dumps core, then the process ID is always appended to the core filename,
+unless the process ID was already included elsewhere in the
+filename via a
+.I %p
+specification in
+.IR /proc/sys/kernel/core_pattern .
+(This is primarily useful when employing the obsolete
+LinuxThreads implementation,
+where each thread of a process has a different PID.)
+.\" Always including the PID in the name of the core file made
+.\" sense for LinuxThreads, where each thread had a unique PID,
+.\" but doesn't seem to serve any purpose with NPTL, where all the
+.\" threads in a process share the same PID (as POSIX.1 requires).
+.\" Probably the behavior is maintained so that applications using
+.\" LinuxThreads continue appending the PID (the kernel has no easy
+.\" way of telling which threading implementation the user-space
+.\" application is using). -- mtk, April 2006
+.SH EXAMPLES
+The program below can be used to demonstrate the use of the
+pipe syntax in the
+.I /proc/sys/kernel/core_pattern
+file.
+The following shell session demonstrates the use of this program
+(compiled to create an executable named
+.IR core_pattern_pipe_test ):
+.PP
+.in +4n
+.EX
+.RB "$" " cc \-o core_pattern_pipe_test core_pattern_pipe_test.c"
+.RB "$" " su"
+Password:
+.RB "#" " echo \[dq]|$PWD/core_pattern_pipe_test %p \
+UID=%u GID=%g sig=%s\[dq] > \e"
+.B " /proc/sys/kernel/core_pattern"
+.RB "#" " exit"
+.RB "$" " sleep 100"
+.BR "\[ha]\e" " # type control\-backslash"
+Quit (core dumped)
+.RB "$" " cat core.info"
+argc=5
+argc[0]=</home/mtk/core_pattern_pipe_test>
+argc[1]=<20575>
+argc[2]=<UID=1000>
+argc[3]=<GID=100>
+argc[4]=<sig=3>
+Total bytes in core dump: 282624
+.EE
+.in
+.SS Program source
+\&
+.EX
+/* core_pattern_pipe_test.c */
+\&
+#define _GNU_SOURCE
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+\&
+#define BUF_SIZE 1024
+\&
+int
+main(int argc, char *argv[])
+{
+ ssize_t nread, tot;
+ char buf[BUF_SIZE];
+ FILE *fp;
+ char cwd[PATH_MAX];
+\&
+ /* Change our current working directory to that of the
+ crashing process. */
+\&
+ snprintf(cwd, PATH_MAX, "/proc/%s/cwd", argv[1]);
+ chdir(cwd);
+\&
+ /* Write output to file "core.info" in that directory. */
+\&
+ fp = fopen("core.info", "w+");
+ if (fp == NULL)
+ exit(EXIT_FAILURE);
+\&
+ /* Display command\-line arguments given to core_pattern
+ pipe program. */
+\&
+ fprintf(fp, "argc=%d\en", argc);
+ for (size_t j = 0; j < argc; j++)
+ fprintf(fp, "argc[%zu]=<%s>\en", j, argv[j]);
+\&
+ /* Count bytes in standard input (the core dump). */
+\&
+ tot = 0;
+ while ((nread = read(STDIN_FILENO, buf, BUF_SIZE)) > 0)
+ tot += nread;
+ fprintf(fp, "Total bytes in core dump: %zd\en", tot);
+\&
+ fclose(fp);
+ exit(EXIT_SUCCESS);
+}
+.EE
+.SH SEE ALSO
+.BR bash (1),
+.BR coredumpctl (1),
+.BR gdb (1),
+.BR getrlimit (2),
+.BR mmap (2),
+.BR prctl (2),
+.BR sigaction (2),
+.BR elf (5),
+.BR proc (5),
+.BR pthreads (7),
+.BR signal (7),
+.BR systemd\-coredump (8)
diff --git a/man5/dir_colors.5 b/man5/dir_colors.5
new file mode 100644
index 0000000..ccee252
--- /dev/null
+++ b/man5/dir_colors.5
@@ -0,0 +1,406 @@
+'\" t
+.\" Copyright (c) 2001 Martin Schulze <joey@infodrom.org>
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.TH dir_colors 5 2023-07-15 "Linux man-pages 6.05.01"
+.SH NAME
+dir_colors \- configuration file for dircolors(1)
+.SH DESCRIPTION
+The program
+.BR ls (1)
+uses the environment variable
+.B LS_COLORS
+to determine the colors in which the filenames are to be displayed.
+This environment variable is usually set by a command like
+.PP
+.RS
+eval \`dircolors some_path/dir_colors\`
+.RE
+.PP
+found in a system default shell initialization file, like
+.I /etc/profile
+or
+.IR /etc/csh.cshrc .
+(See also
+.BR dircolors (1).)
+Usually, the file used here is
+.I /etc/DIR_COLORS
+and can be overridden by a
+.I .dir_colors
+file in one's home directory.
+.PP
+This configuration file consists of several statements, one per line.
+Anything right of a hash mark (#) is treated as a comment, if the
+hash mark is at the beginning of a line or is preceded by at least one
+whitespace.
+Blank lines are ignored.
+.PP
+The
+.I global
+section of the file consists of any statement before the first
+.B TERM
+statement.
+Any statement in the global section of the file is
+considered valid for all terminal types.
+Following the global section
+is one or more
+.I terminal-specific
+sections, preceded by one or more
+.B TERM
+statements which specify the terminal types (as given by the
+.B TERM
+environment variable) the following declarations apply to.
+It is always possible to override a global declaration by a subsequent
+terminal-specific one.
+.PP
+The following statements are recognized; case is insignificant:
+.TP
+.B TERM \fIterminal-type\fR
+Starts a terminal-specific section and specifies which terminal it
+applies to.
+Multiple
+.B TERM
+statements can be used to create a section which applies for several
+terminal types.
+.TP
+.B COLOR yes|all|no|none|tty
+(Slackware only; ignored by GNU
+.BR dircolors (1).)
+Specifies that colorization should always be enabled (\fIyes\fR or
+\fIall\fR), never enabled (\fIno\fR or \fInone\fR), or enabled only if
+the output is a terminal (\fItty\fR).
+The default is \fIno\fR.
+.TP
+.B EIGHTBIT yes|no
+(Slackware only; ignored by GNU
+.BR dircolors (1).)
+Specifies that eight-bit ISO 8859 characters should be enabled by
+default.
+For compatibility reasons, this can also be specified as 1 for
+\fIyes\fR or 0 for \fIno\fR.
+The default is \fIno\fR.
+.TP
+.B OPTIONS \fIoptions\fR
+(Slackware only; ignored by GNU
+.BR dircolors (1).)
+Adds command-line options to the default
+.B ls
+command line.
+The options can be any valid
+.B ls
+command-line options, and should include the leading minus sign.
+Note that
+.B dircolors
+does not verify the validity of these options.
+.TP
+.B NORMAL \fIcolor-sequence\fR
+Specifies the color used for normal (nonfilename) text.
+.IP
+Synonym:
+.BR NORM .
+.TP
+.B FILE \fIcolor-sequence\fR
+Specifies the color used for a regular file.
+.TP
+.B DIR \fIcolor-sequence\fR
+Specifies the color used for directories.
+.TP
+.B LINK \fIcolor-sequence\fR
+Specifies the color used for a symbolic link.
+.IP
+Synonyms:
+.BR LNK ,
+.BR SYMLINK .
+.TP
+.B ORPHAN \fIcolor-sequence\fR
+Specifies the color used for an orphaned symbolic link (one which
+points to a nonexistent file).
+If this is unspecified,
+.B ls
+will use the
+.B LINK
+color instead.
+.TP
+.B MISSING \fIcolor-sequence\fR
+Specifies the color used for a missing file (a nonexistent file which
+nevertheless has a symbolic link pointing to it).
+If this is unspecified,
+.B ls
+will use the
+.B FILE
+color instead.
+.TP
+.B FIFO \fIcolor-sequence\fR
+Specifies the color used for a FIFO (named pipe).
+.IP
+Synonym:
+.BR PIPE .
+.TP
+.B SOCK \fIcolor-sequence\fR
+Specifies the color used for a socket.
+.TP
+.B DOOR \fIcolor-sequence\fR
+(Supported since fileutils 4.1)
+Specifies the color used for a door (Solaris 2.5 and later).
+.TP
+.B BLK \fIcolor-sequence\fR
+Specifies the color used for a block device special file.
+.IP
+Synonym:
+.BR BLOCK .
+.TP
+.B CHR \fIcolor-sequence\fR
+Specifies the color used for a character device special file.
+.IP
+Synonym:
+.BR CHAR .
+.TP
+.B EXEC \fIcolor-sequence\fR
+Specifies the color used for a file with the executable attribute set.
+.TP
+.B SUID \fIcolor-sequence\fR
+Specifies the color used for a file with the set-user-ID attribute set.
+.IP
+Synonym:
+.BR SETUID .
+.TP
+.B SGID \fIcolor-sequence\fR
+Specifies the color used for a file with the set-group-ID attribute set.
+.IP
+Synonym:
+.BR SETGID .
+.TP
+.B STICKY \fIcolor-sequence\fR
+Specifies the color used for a directory with the sticky attribute set.
+.TP
+.B STICKY_OTHER_WRITABLE \fIcolor-sequence\fR
+Specifies the color used for
+an other-writable directory with the executable attribute set.
+.IP
+Synonym:
+.BR OWT .
+.TP
+.B OTHER_WRITABLE \fIcolor-sequence\fR
+Specifies the color used for
+an other-writable directory without the executable attribute set.
+.IP
+Synonym:
+.BR OWR .
+.TP
+.B LEFTCODE \fIcolor-sequence\fR
+Specifies the
+.I "left code"
+for non-ISO\ 6429 terminals (see below).
+.IP
+Synonym:
+.BR LEFT .
+.TP
+.B RIGHTCODE \fIcolor-sequence\fR
+Specifies the
+.I "right code"
+for non-ISO\ 6429 terminals (see below).
+.IP
+Synonym:
+.BR RIGHT .
+.TP
+.B ENDCODE \fIcolor-sequence\fR
+Specifies the
+.I "end code"
+for non-ISO\ 6429 terminals (see below).
+.IP
+Synonym:
+.BR END .
+.TP
+.BI * "extension color-sequence"
+Specifies the color used for any file that ends in \fIextension\fR.
+.TP
+.BI . "extension color-sequence"
+Same as \fB*\fR.\fIextension\fR.
+Specifies the color used for any file that
+ends in .\fIextension\fR.
+Note that the period is included in the
+extension, which makes it impossible to specify an extension not
+starting with a period, such as
+.B \[ti]
+for
+.B emacs
+backup files.
+This form should be considered obsolete.
+.SS ISO 6429 (ANSI) color sequences
+Most color-capable ASCII terminals today use ISO 6429 (ANSI) color sequences,
+and many common terminals without color capability, including
+.B xterm
+and the widely used and cloned DEC VT100, will recognize ISO 6429 color
+codes and harmlessly eliminate them from the output or emulate them.
+.B ls
+uses ISO 6429 codes by default, assuming colorization is enabled.
+.PP
+ISO 6429 color sequences are composed of sequences of numbers
+separated by semicolons.
+The most common codes are:
+.RS
+.TS
+l l.
+ 0 to restore default color
+ 1 for brighter colors
+ 4 for underlined text
+ 5 for flashing text
+30 for black foreground
+31 for red foreground
+32 for green foreground
+33 for yellow (or brown) foreground
+34 for blue foreground
+35 for purple foreground
+36 for cyan foreground
+37 for white (or gray) foreground
+40 for black background
+41 for red background
+42 for green background
+43 for yellow (or brown) background
+44 for blue background
+45 for purple background
+46 for cyan background
+47 for white (or gray) background
+.TE
+.RE
+.PP
+Not all commands will work on all systems or display devices.
+.PP
+.B ls
+uses the following defaults:
+.TS
+lb l l.
+NORMAL 0 Normal (nonfilename) text
+FILE 0 Regular file
+DIR 32 Directory
+LINK 36 Symbolic link
+ORPHAN undefined Orphaned symbolic link
+MISSING undefined Missing file
+FIFO 31 Named pipe (FIFO)
+SOCK 33 Socket
+BLK 44;37 Block device
+CHR 44;37 Character device
+EXEC 35 Executable file
+.TE
+.PP
+A few terminal programs do not recognize the default
+properly.
+If all text gets colorized after you do a directory
+listing, change the
+.B NORMAL
+and
+.B FILE
+codes to the numerical codes for your normal foreground and background
+colors.
+.SS Other terminal types (advanced configuration)
+If you have a color-capable (or otherwise highlighting) terminal (or
+printer!) which uses a different set of codes, you can still generate
+a suitable setup.
+To do so, you will have to use the
+.BR LEFTCODE ,
+.BR RIGHTCODE ,
+and
+.B ENDCODE
+definitions.
+.PP
+When writing out a filename,
+.B ls
+generates the following output sequence:
+.B LEFTCODE
+.I typecode
+.B RIGHTCODE
+.I filename
+.BR ENDCODE ,
+where the
+.I typecode
+is the color sequence that depends on the type or name of file.
+If the
+.B ENDCODE
+is undefined, the sequence
+.B "LEFTCODE NORMAL RIGHTCODE"
+will be used instead.
+The purpose of the left- and rightcodes is
+merely to reduce the amount of typing necessary (and to hide ugly
+escape codes away from the user).
+If they are not appropriate for
+your terminal, you can eliminate them by specifying the respective
+keyword on a line by itself.
+.PP
+.B NOTE:
+If the
+.B ENDCODE
+is defined in the global section of the setup file, it
+.I cannot
+be undefined in a terminal-specific section of the file.
+This means any
+.B NORMAL
+definition will have no effect.
+A different
+.B ENDCODE
+can, however, be specified, which would have the same effect.
+.SS Escape sequences
+To specify control- or blank characters in the color sequences or
+filename extensions, either C-style \e-escaped notation or
+.BR stty \-style
+\[ha]-notation can be used.
+The C-style notation
+includes the following characters:
+.RS
+.TS
+lb l.
+\ea Bell (ASCII 7)
+\eb Backspace (ASCII 8)
+\ee Escape (ASCII 27)
+\ef Form feed (ASCII 12)
+\en Newline (ASCII 10)
+\er Carriage Return (ASCII 13)
+\et Tab (ASCII 9)
+\ev Vertical Tab (ASCII 11)
+\e? Delete (ASCII 127)
+\e\fInnn Any character (octal notation)
+\ex\fInnn Any character (hexadecimal notation)
+\e_ Space
+\e\e Backslash (\e)
+\e\[ha] Caret (\[ha])
+\e# Hash mark (#)
+.TE
+.RE
+.PP
+Note that escapes are necessary to enter a space, backslash,
+caret, or any control character anywhere in the string, as well as a
+hash mark as the first character.
+.SH FILES
+.TP
+.I /etc/DIR_COLORS
+System-wide configuration file.
+.TP
+.I \[ti]/.dir_colors
+Per-user configuration file.
+.PP
+This page describes the
+.B dir_colors
+file format as used in the fileutils-4.1 package;
+other versions may differ slightly.
+.SH NOTES
+The default
+.B LEFTCODE
+and
+.B RIGHTCODE
+definitions, which are used by ISO 6429 terminals are:
+.RS
+.TS
+lb l.
+LEFTCODE \ee[
+RIGHTCODE m
+.TE
+.RE
+.PP
+The default
+.B ENDCODE
+is undefined.
+.SH SEE ALSO
+.BR dircolors (1),
+.BR ls (1),
+.BR stty (1),
+.BR xterm (1)
diff --git a/man5/elf.5 b/man5/elf.5
new file mode 100644
index 0000000..6fa4ddf
--- /dev/null
+++ b/man5/elf.5
@@ -0,0 +1,2196 @@
+.\" $OpenBSD: elf.5,v 1.12 2003/10/27 20:23:58 jmc Exp $
+.\"Copyright (c) 1999 Jeroen Ruigrok van der Werven
+.\"All rights reserved.
+.\"
+.\" %%%LICENSE_START(PERMISSIVE_MISC)
+.\"Redistribution and use in source and binary forms, with or without
+.\"modification, are permitted provided that the following conditions
+.\"are met:
+.\"1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\"2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\"THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\"ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\"IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\"ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\"FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\"DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\"OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\"HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\"LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\"OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\"SUCH DAMAGE.
+.\" %%%LICENSE_END
+.\"
+.\" $FreeBSD: src/share/man/man5/elf.5,v 1.21 2001/10/01 16:09:23 ru Exp $
+.\"
+.\" Slightly adapted - aeb, 2004-01-01
+.\" 2005-07-15, Mike Frysinger <vapier@gentoo.org>, various fixes
+.\" 2007-10-11, Mike Frysinger <vapier@gentoo.org>, various fixes
+.\" 2007-12-08, mtk, Converted from mdoc to man macros
+.\"
+.TH ELF 5 2023-05-03 "Linux man-pages 6.05.01"
+.SH NAME
+elf \- format of Executable and Linking Format (ELF) files
+.SH SYNOPSIS
+.nf
+.\" .B #include <elf_abi.h>
+.B #include <elf.h>
+.fi
+.SH DESCRIPTION
+The header file
+.I <elf.h>
+defines the format of ELF executable binary files.
+Amongst these files are
+normal executable files, relocatable object files, core files, and shared
+objects.
+.PP
+An executable file using the ELF file format consists of an ELF header,
+followed by a program header table or a section header table, or both.
+The ELF header is always at offset zero of the file.
+The program header
+table and the section header table's offset in the file are defined in the
+ELF header.
+The two tables describe the rest of the particularities of
+the file.
+.PP
+.\" Applications which wish to process ELF binary files for their native
+.\" architecture only should include
+.\" .I <elf_abi.h>
+.\" in their source code.
+.\" These applications should need to refer to
+.\" all the types and structures by their generic names
+.\" "Elf_xxx"
+.\" and to the macros by
+.\" ELF_xxx".
+.\" Applications written this way can be compiled on any architecture,
+.\" regardless of whether the host is 32-bit or 64-bit.
+.\" .PP
+.\" Should an application need to process ELF files of an unknown
+.\" architecture, then the application needs to explicitly use either
+.\" "Elf32_xxx"
+.\" or
+.\" "Elf64_xxx"
+.\" type and structure names.
+.\" Likewise, the macros need to be identified by
+.\" "ELF32_xxx"
+.\" or
+.\" "ELF64_xxx".
+.\" .PP
+This header file describes the above mentioned headers as C structures
+and also includes structures for dynamic sections, relocation sections and
+symbol tables.
+.\"
+.SS Basic types
+The following types are used for N-bit architectures (N=32,64,
+.I ElfN
+stands for
+.I Elf32
+or
+.IR Elf64 ,
+.I uintN_t
+stands for
+.I uint32_t
+or
+.IR uint64_t ):
+.PP
+.in +4n
+.EX
+ElfN_Addr Unsigned program address, uintN_t
+ElfN_Off Unsigned file offset, uintN_t
+ElfN_Section Unsigned section index, uint16_t
+ElfN_Versym Unsigned version symbol information, uint16_t
+Elf_Byte unsigned char
+ElfN_Half uint16_t
+ElfN_Sword int32_t
+ElfN_Word uint32_t
+ElfN_Sxword int64_t
+ElfN_Xword uint64_t
+.\" Elf32_Size Unsigned object size
+.EE
+.in
+.PP
+(Note: the *BSD terminology is a bit different.
+There,
+.I Elf64_Half
+is
+twice as large as
+.IR Elf32_Half ,
+and
+.I Elf64Quarter
+is used for
+.IR uint16_t .
+In order to avoid confusion these types are replaced by explicit ones
+in the below.)
+.PP
+All data structures that the file format defines follow the
+"natural"
+size and alignment guidelines for the relevant class.
+If necessary,
+data structures contain explicit padding to ensure 4-byte alignment
+for 4-byte objects, to force structure sizes to a multiple of 4, and so on.
+.\"
+.SS ELF header (Ehdr)
+The ELF header is described by the type
+.I Elf32_Ehdr
+or
+.IR Elf64_Ehdr :
+.PP
+.in +4n
+.EX
+#define EI_NIDENT 16
+\&
+typedef struct {
+ unsigned char e_ident[EI_NIDENT];
+ uint16_t e_type;
+ uint16_t e_machine;
+ uint32_t e_version;
+ ElfN_Addr e_entry;
+ ElfN_Off e_phoff;
+ ElfN_Off e_shoff;
+ uint32_t e_flags;
+ uint16_t e_ehsize;
+ uint16_t e_phentsize;
+ uint16_t e_phnum;
+ uint16_t e_shentsize;
+ uint16_t e_shnum;
+ uint16_t e_shstrndx;
+} ElfN_Ehdr;
+.EE
+.in
+.PP
+The fields have the following meanings:
+.\"
+.\"
+.TP
+.I e_ident
+This array of bytes specifies how to interpret the file,
+independent of the processor or the file's remaining contents.
+Within this array everything is named by macros, which start with
+the prefix
+.B EI_
+and may contain values which start with the prefix
+.BR ELF .
+The following macros are defined:
+.RS
+.TP
+.B EI_MAG0
+The first byte of the magic number.
+It must be filled with
+.BR ELFMAG0 .
+(0: 0x7f)
+.TP
+.B EI_MAG1
+The second byte of the magic number.
+It must be filled with
+.BR ELFMAG1 .
+(1: \[aq]E\[aq])
+.TP
+.B EI_MAG2
+The third byte of the magic number.
+It must be filled with
+.BR ELFMAG2 .
+(2: \[aq]L\[aq])
+.TP
+.B EI_MAG3
+The fourth byte of the magic number.
+It must be filled with
+.BR ELFMAG3 .
+(3: \[aq]F\[aq])
+.TP
+.B EI_CLASS
+The fifth byte identifies the architecture for this binary:
+.RS
+.TP 14
+.PD 0
+.B ELFCLASSNONE
+This class is invalid.
+.TP
+.B ELFCLASS32
+This defines the 32-bit architecture.
+It supports machines with files
+and virtual address spaces up to 4 Gigabytes.
+.TP
+.B ELFCLASS64
+This defines the 64-bit architecture.
+.PD
+.RE
+.TP
+.B EI_DATA
+The sixth byte specifies the data encoding of the processor-specific
+data in the file.
+Currently, these encodings are supported:
+.RS 9
+.TP 14
+.PD 0
+.B ELFDATANONE
+Unknown data format.
+.TP
+.B ELFDATA2LSB
+Two's complement, little-endian.
+.TP
+.B ELFDATA2MSB
+Two's complement, big-endian.
+.PD
+.RE
+.TP
+.B EI_VERSION
+The seventh byte is the version number of the ELF specification:
+.IP
+.PD 0
+.RS
+.TP 14
+.B EV_NONE
+Invalid version.
+.TP
+.B EV_CURRENT
+Current version.
+.PD
+.RE
+.\".El
+.TP
+.B EI_OSABI
+The eighth byte identifies the operating system
+and ABI to which the object is targeted.
+Some fields in other ELF structures have flags
+and values that have platform-specific meanings;
+the interpretation of those fields is determined by the value of this byte.
+For example:
+.RS
+.TP 21
+.PD 0
+.B ELFOSABI_NONE
+Same as ELFOSABI_SYSV
+.\" 0
+.TP
+.B ELFOSABI_SYSV
+UNIX System V ABI
+.\" 0
+.\" synonym: ELFOSABI_NONE
+.TP
+.B ELFOSABI_HPUX
+HP-UX ABI
+.\" 1
+.TP
+.B ELFOSABI_NETBSD
+NetBSD ABI
+.\" 2
+.TP
+.B ELFOSABI_LINUX
+Linux ABI
+.\" 3
+.\" .TP
+.\" .BR ELFOSABI_HURD
+.\" Hurd ABI
+.\" 4
+.\" .TP
+.\" .BR ELFOSABI_86OPEN
+.\" 86Open Common IA32 ABI
+.\" 5
+.TP
+.B ELFOSABI_SOLARIS
+Solaris ABI
+.\" 6
+.\" .TP
+.\" .BR ELFOSABI_MONTEREY
+.\" Monterey project ABI
+.\" Now replaced by
+.\" ELFOSABI_AIX
+.\" 7
+.TP
+.B ELFOSABI_IRIX
+IRIX ABI
+.\" 8
+.TP
+.B ELFOSABI_FREEBSD
+FreeBSD ABI
+.\" 9
+.TP
+.B ELFOSABI_TRU64
+TRU64 UNIX ABI
+.\" 10
+.\" ELFOSABI_MODESTO
+.\" 11
+.\" ELFOSABI_OPENBSD
+.\" 12
+.TP
+.B ELFOSABI_ARM
+ARM architecture ABI
+.\" 97
+.TP
+.B ELFOSABI_STANDALONE
+Stand-alone (embedded) ABI
+.\" 255
+.PD
+.RE
+.TP
+.B EI_ABIVERSION
+The ninth byte identifies the version of the ABI
+to which the object is targeted.
+This field is used to distinguish among incompatible versions of an ABI.
+The interpretation of this version number
+is dependent on the ABI identified by the
+.B EI_OSABI
+field.
+Applications conforming to this specification use the value 0.
+.TP
+.B EI_PAD
+Start of padding.
+These bytes are reserved and set to zero.
+Programs
+which read them should ignore them.
+The value for
+.B EI_PAD
+will change in
+the future if currently unused bytes are given meanings.
+.\" As reported by Yuri Kozlov and confirmed by Mike Frysinger, EI_BRAND is
+.\" not in GABI (http://www.sco.com/developers/gabi/latest/ch4.eheader.html)
+.\" It looks to be a BSDism
+.\" .TP
+.\" .BR EI_BRAND
+.\" Start of architecture identification.
+.TP
+.B EI_NIDENT
+The size of the
+.I e_ident
+array.
+.RE
+.TP
+.I e_type
+This member of the structure identifies the object file type:
+.RS
+.TP 16
+.PD 0
+.B ET_NONE
+An unknown type.
+.TP
+.B ET_REL
+A relocatable file.
+.TP
+.B ET_EXEC
+An executable file.
+.TP
+.B ET_DYN
+A shared object.
+.TP
+.B ET_CORE
+A core file.
+.PD
+.RE
+.TP
+.I e_machine
+This member specifies the required architecture for an individual file.
+For example:
+.RS
+.TP 16
+.PD 0
+.B EM_NONE
+An unknown machine
+.\" 0
+.TP
+.B EM_M32
+AT&T WE 32100
+.\" 1
+.TP
+.B EM_SPARC
+Sun Microsystems SPARC
+.\" 2
+.TP
+.B EM_386
+Intel 80386
+.\" 3
+.TP
+.B EM_68K
+Motorola 68000
+.\" 4
+.TP
+.B EM_88K
+Motorola 88000
+.\" 5
+.\" .TP
+.\" .BR EM_486
+.\" Intel 80486
+.\" 6
+.TP
+.B EM_860
+Intel 80860
+.\" 7
+.TP
+.B EM_MIPS
+MIPS RS3000 (big-endian only)
+.\" 8
+.\" EM_S370
+.\" 9
+.\" .TP
+.\" .BR EM_MIPS_RS4_BE
+.\" MIPS RS4000 (big-endian only). Deprecated
+.\" 10
+.\" EM_MIPS_RS3_LE (MIPS R3000 little-endian)
+.\" 10
+.TP
+.B EM_PARISC
+HP/PA
+.\" 15
+.TP
+.B EM_SPARC32PLUS
+SPARC with enhanced instruction set
+.\" 18
+.TP
+.B EM_PPC
+PowerPC
+.\" 20
+.TP
+.B EM_PPC64
+PowerPC 64-bit
+.\" 21
+.TP
+.B EM_S390
+IBM S/390
+.\" 22
+.TP
+.B EM_ARM
+Advanced RISC Machines
+.\" 40
+.TP
+.B EM_SH
+Renesas SuperH
+.\" 42
+.TP
+.B EM_SPARCV9
+SPARC v9 64-bit
+.\" 43
+.TP
+.B EM_IA_64
+Intel Itanium
+.\" 50
+.TP
+.B EM_X86_64
+AMD x86-64
+.\" 62
+.TP
+.B EM_VAX
+DEC Vax
+.\" 75
+.\" EM_CRIS
+.\" 76
+.\" .TP
+.\" .BR EM_ALPHA
+.\" Compaq [DEC] Alpha
+.\" .TP
+.\" .BR EM_ALPHA_EXP
+.\" Compaq [DEC] Alpha with enhanced instruction set
+.PD
+.RE
+.TP
+.I e_version
+This member identifies the file version:
+.RS
+.TP 16
+.PD 0
+.B EV_NONE
+Invalid version
+.TP
+.B EV_CURRENT
+Current version
+.PD
+.RE
+.TP
+.I e_entry
+This member gives the virtual address to which the system first transfers
+control, thus starting the process.
+If the file has no associated entry
+point, this member holds zero.
+.TP
+.I e_phoff
+This member holds the program header table's file offset in bytes.
+If
+the file has no program header table, this member holds zero.
+.TP
+.I e_shoff
+This member holds the section header table's file offset in bytes.
+If the
+file has no section header table, this member holds zero.
+.TP
+.I e_flags
+This member holds processor-specific flags associated with the file.
+Flag names take the form EF_`machine_flag'.
+Currently, no flags have been defined.
+.TP
+.I e_ehsize
+This member holds the ELF header's size in bytes.
+.TP
+.I e_phentsize
+This member holds the size in bytes of one entry in the file's
+program header table; all entries are the same size.
+.TP
+.I e_phnum
+This member holds the number of entries in the program header
+table.
+Thus the product of
+.I e_phentsize
+and
+.I e_phnum
+gives the table's size
+in bytes.
+If a file has no program header,
+.I e_phnum
+holds the value zero.
+.IP
+If the number of entries in the program header table is
+larger than or equal to
+.\" This is a Linux extension, added in Linux 2.6.34.
+.B PN_XNUM
+(0xffff), this member holds
+.B PN_XNUM
+(0xffff) and the real number of entries in the program header table is held
+in the
+.I sh_info
+member of the initial entry in section header table.
+Otherwise, the
+.I sh_info
+member of the initial entry contains the value zero.
+.RS
+.TP
+.B PN_XNUM
+This is defined as 0xffff, the largest number
+.I e_phnum
+can have, specifying where the actual number of program headers is assigned.
+.PD
+.RE
+.TP
+.I e_shentsize
+This member holds a sections header's size in bytes.
+A section header is one
+entry in the section header table; all entries are the same size.
+.TP
+.I e_shnum
+This member holds the number of entries in the section header table.
+Thus
+the product of
+.I e_shentsize
+and
+.I e_shnum
+gives the section header table's size in bytes.
+If a file has no section
+header table,
+.I e_shnum
+holds the value of zero.
+.IP
+If the number of entries in the section header table is
+larger than or equal to
+.B SHN_LORESERVE
+(0xff00),
+.I e_shnum
+holds the value zero and the real number of entries in the section header
+table is held in the
+.I sh_size
+member of the initial entry in section header table.
+Otherwise, the
+.I sh_size
+member of the initial entry in the section header table holds
+the value zero.
+.TP
+.I e_shstrndx
+This member holds the section header table index of the entry associated
+with the section name string table.
+If the file has no section name string
+table, this member holds the value
+.BR SHN_UNDEF .
+.IP
+If the index of section name string table section is
+larger than or equal to
+.B SHN_LORESERVE
+(0xff00), this member holds
+.B SHN_XINDEX
+(0xffff) and the real index of the section name string table section
+is held in the
+.I sh_link
+member of the initial entry in section header table.
+Otherwise, the
+.I sh_link
+member of the initial entry in section header table contains the value zero.
+.\"
+.SS Program header (Phdr)
+An executable or shared object file's program header table is an array of
+structures, each describing a segment or other information the system needs
+to prepare the program for execution.
+An object file
+.I segment
+contains one or more
+.IR sections .
+Program headers are meaningful only for executable and shared object files.
+A file specifies its own program header size with the ELF header's
+.I e_phentsize
+and
+.I e_phnum
+members.
+The ELF program header is described by the type
+.I Elf32_Phdr
+or
+.I Elf64_Phdr
+depending on the architecture:
+.PP
+.in +4n
+.EX
+typedef struct {
+ uint32_t p_type;
+ Elf32_Off p_offset;
+ Elf32_Addr p_vaddr;
+ Elf32_Addr p_paddr;
+ uint32_t p_filesz;
+ uint32_t p_memsz;
+ uint32_t p_flags;
+ uint32_t p_align;
+} Elf32_Phdr;
+.EE
+.in
+.PP
+.in +4n
+.EX
+typedef struct {
+ uint32_t p_type;
+ uint32_t p_flags;
+ Elf64_Off p_offset;
+ Elf64_Addr p_vaddr;
+ Elf64_Addr p_paddr;
+ uint64_t p_filesz;
+ uint64_t p_memsz;
+ uint64_t p_align;
+} Elf64_Phdr;
+.EE
+.in
+.PP
+The main difference between the 32-bit and the 64-bit program header lies
+in the location of the
+.I p_flags
+member in the total struct.
+.TP
+.I p_type
+This member of the structure indicates what kind of segment this array
+element describes or how to interpret the array element's information.
+.RS 10
+.TP
+.B PT_NULL
+The array element is unused and the other members' values are undefined.
+This lets the program header have ignored entries.
+.TP
+.B PT_LOAD
+The array element specifies a loadable segment, described by
+.I p_filesz
+and
+.IR p_memsz .
+The bytes from the file are mapped to the beginning of the memory
+segment.
+If the segment's memory size
+.I p_memsz
+is larger than the file size
+.IR p_filesz ,
+the
+"extra"
+bytes are defined to hold the value 0 and to follow the segment's
+initialized area.
+The file size may not be larger than the memory size.
+Loadable segment entries in the program header table appear in ascending
+order, sorted on the
+.I p_vaddr
+member.
+.TP
+.B PT_DYNAMIC
+The array element specifies dynamic linking information.
+.TP
+.B PT_INTERP
+The array element specifies the location and size of a null-terminated
+pathname to invoke as an interpreter.
+This segment type is meaningful
+only for executable files (though it may occur for shared objects).
+However it may not occur more than once in a file.
+If it is present, it must precede any loadable segment entry.
+.TP
+.B PT_NOTE
+The array element specifies the location of notes (ElfN_Nhdr).
+.TP
+.B PT_SHLIB
+This segment type is reserved but has unspecified semantics.
+Programs that
+contain an array element of this type do not conform to the ABI.
+.TP
+.B PT_PHDR
+The array element, if present,
+specifies the location and size of the program header table itself,
+both in the file and in the memory image of the program.
+This segment type may not occur more than once in a file.
+Moreover, it may
+occur only if the program header table is part of the memory image of the
+program.
+If it is present, it must precede any loadable segment entry.
+.TP
+.BR PT_LOPROC ", " PT_HIPROC
+Values in the inclusive range
+.RB [ PT_LOPROC ,
+.BR PT_HIPROC ]
+are reserved for processor-specific semantics.
+.TP
+.B PT_GNU_STACK
+GNU extension which is used by the Linux kernel to control the state of the
+stack via the flags set in the
+.I p_flags
+member.
+.RE
+.TP
+.I p_offset
+This member holds the offset from the beginning of the file at which
+the first byte of the segment resides.
+.TP
+.I p_vaddr
+This member holds the virtual address at which the first byte of the
+segment resides in memory.
+.TP
+.I p_paddr
+On systems for which physical addressing is relevant, this member is
+reserved for the segment's physical address.
+Under
+BSD
+this member is
+not used and must be zero.
+.TP
+.I p_filesz
+This member holds the number of bytes in the file image of the segment.
+It may be zero.
+.TP
+.I p_memsz
+This member holds the number of bytes in the memory image of the segment.
+It may be zero.
+.TP
+.I p_flags
+This member holds a bit mask of flags relevant to the segment:
+.RS
+.TP
+.PD 0
+.B PF_X
+An executable segment.
+.TP
+.B PF_W
+A writable segment.
+.TP
+.B PF_R
+A readable segment.
+.PD
+.RE
+.IP
+A text segment commonly has the flags
+.B PF_X
+and
+.B PF_R .
+A data segment commonly has
+.B PF_W
+and
+.BR PF_R .
+.TP
+.I p_align
+This member holds the value to which the segments are aligned in memory
+and in the file.
+Loadable process segments must have congruent values for
+.I p_vaddr
+and
+.IR p_offset ,
+modulo the page size.
+Values of zero and one mean no alignment is required.
+Otherwise,
+.I p_align
+should be a positive, integral power of two, and
+.I p_vaddr
+should equal
+.IR p_offset ,
+modulo
+.IR p_align .
+.\"
+.SS Section header (Shdr)
+A file's section header table lets one locate all the file's sections.
+The
+section header table is an array of
+.I Elf32_Shdr
+or
+.I Elf64_Shdr
+structures.
+The
+ELF header's
+.I e_shoff
+member gives the byte offset from the beginning of the file to the section
+header table.
+.I e_shnum
+holds the number of entries the section header table contains.
+.I e_shentsize
+holds the size in bytes of each entry.
+.PP
+A section header table index is a subscript into this array.
+Some section
+header table indices are reserved:
+the initial entry and the indices between
+.B SHN_LORESERVE
+and
+.BR SHN_HIRESERVE .
+The initial entry is used in ELF extensions for
+.IR e_phnum ,
+.IR e_shnum ,
+and
+.IR e_shstrndx ;
+in other cases, each field in the initial entry is set to zero.
+An object file does not have sections for
+these special indices:
+.TP
+.B SHN_UNDEF
+This value marks an undefined, missing, irrelevant,
+or otherwise meaningless section reference.
+.TP
+.B SHN_LORESERVE
+This value specifies the lower bound of the range of reserved indices.
+.TP
+.BR SHN_LOPROC ", " SHN_HIPROC
+Values greater in the inclusive range
+.RB [ SHN_LOPROC ,
+.BR SHN_HIPROC ]
+are reserved for processor-specific semantics.
+.TP
+.B SHN_ABS
+This value specifies the absolute value for the corresponding reference.
+For
+example, a symbol defined relative to section number
+.B SHN_ABS
+has an absolute value and is not affected by relocation.
+.TP
+.B SHN_COMMON
+Symbols defined relative to this section are common symbols,
+such as FORTRAN COMMON or unallocated C external variables.
+.TP
+.B SHN_HIRESERVE
+This value specifies the upper bound of the range of reserved indices.
+The
+system reserves indices between
+.B SHN_LORESERVE
+and
+.BR SHN_HIRESERVE ,
+inclusive.
+The section header table does not contain entries for the
+reserved indices.
+.PP
+The section header has the following structure:
+.PP
+.in +4n
+.EX
+typedef struct {
+ uint32_t sh_name;
+ uint32_t sh_type;
+ uint32_t sh_flags;
+ Elf32_Addr sh_addr;
+ Elf32_Off sh_offset;
+ uint32_t sh_size;
+ uint32_t sh_link;
+ uint32_t sh_info;
+ uint32_t sh_addralign;
+ uint32_t sh_entsize;
+} Elf32_Shdr;
+.EE
+.in
+.PP
+.in +4n
+.EX
+typedef struct {
+ uint32_t sh_name;
+ uint32_t sh_type;
+ uint64_t sh_flags;
+ Elf64_Addr sh_addr;
+ Elf64_Off sh_offset;
+ uint64_t sh_size;
+ uint32_t sh_link;
+ uint32_t sh_info;
+ uint64_t sh_addralign;
+ uint64_t sh_entsize;
+} Elf64_Shdr;
+.EE
+.in
+.PP
+No real differences exist between the 32-bit and 64-bit section headers.
+.TP
+.I sh_name
+This member specifies the name of the section.
+Its value is an index
+into the section header string table section, giving the location of
+a null-terminated string.
+.TP
+.I sh_type
+This member categorizes the section's contents and semantics.
+.RS
+.TP
+.B SHT_NULL
+This value marks the section header as inactive.
+It does not
+have an associated section.
+Other members of the section header
+have undefined values.
+.TP
+.B SHT_PROGBITS
+This section holds information defined by the program, whose
+format and meaning are determined solely by the program.
+.TP
+.B SHT_SYMTAB
+This section holds a symbol table.
+Typically,
+.B SHT_SYMTAB
+provides symbols for link editing, though it may also be used
+for dynamic linking.
+As a complete symbol table, it may contain
+many symbols unnecessary for dynamic linking.
+An object file can
+also contain a
+.B SHT_DYNSYM
+section.
+.TP
+.B SHT_STRTAB
+This section holds a string table.
+An object file may have multiple
+string table sections.
+.TP
+.B SHT_RELA
+This section holds relocation entries with explicit addends, such
+as type
+.I Elf32_Rela
+for the 32-bit class of object files.
+An object may have multiple
+relocation sections.
+.TP
+.B SHT_HASH
+This section holds a symbol hash table.
+An object participating in
+dynamic linking must contain a symbol hash table.
+An object file may
+have only one hash table.
+.TP
+.B SHT_DYNAMIC
+This section holds information for dynamic linking.
+An object file may
+have only one dynamic section.
+.TP
+.B SHT_NOTE
+This section holds notes (ElfN_Nhdr).
+.TP
+.B SHT_NOBITS
+A section of this type occupies no space in the file but otherwise
+resembles
+.BR SHT_PROGBITS .
+Although this section contains no bytes, the
+.I sh_offset
+member contains the conceptual file offset.
+.TP
+.B SHT_REL
+This section holds relocation offsets without explicit addends, such
+as type
+.I Elf32_Rel
+for the 32-bit class of object files.
+An object file may have multiple
+relocation sections.
+.TP
+.B SHT_SHLIB
+This section is reserved but has unspecified semantics.
+.TP
+.B SHT_DYNSYM
+This section holds a minimal set of dynamic linking symbols.
+An
+object file can also contain a
+.B SHT_SYMTAB
+section.
+.TP
+.BR SHT_LOPROC ", " SHT_HIPROC
+Values in the inclusive range
+.RB [ SHT_LOPROC ,
+.BR SHT_HIPROC ]
+are reserved for processor-specific semantics.
+.TP
+.B SHT_LOUSER
+This value specifies the lower bound of the range of indices reserved for
+application programs.
+.TP
+.B SHT_HIUSER
+This value specifies the upper bound of the range of indices reserved for
+application programs.
+Section types between
+.B SHT_LOUSER
+and
+.B SHT_HIUSER
+may be used by the application, without conflicting with current or future
+system-defined section types.
+.RE
+.TP
+.I sh_flags
+Sections support one-bit flags that describe miscellaneous attributes.
+If a flag bit is set in
+.IR sh_flags ,
+the attribute is
+"on"
+for the section.
+Otherwise, the attribute is
+"off"
+or does not apply.
+Undefined attributes are set to zero.
+.RS
+.TP
+.B SHF_WRITE
+This section contains data that should be writable during process
+execution.
+.TP
+.B SHF_ALLOC
+This section occupies memory during process execution.
+Some control
+sections do not reside in the memory image of an object file.
+This
+attribute is off for those sections.
+.TP
+.B SHF_EXECINSTR
+This section contains executable machine instructions.
+.TP
+.B SHF_MASKPROC
+All bits included in this mask are reserved for processor-specific
+semantics.
+.RE
+.TP
+.I sh_addr
+If this section appears in the memory image of a process, this member
+holds the address at which the section's first byte should reside.
+Otherwise, the member contains zero.
+.TP
+.I sh_offset
+This member's value holds the byte offset from the beginning of the file
+to the first byte in the section.
+One section type,
+.BR SHT_NOBITS ,
+occupies no space in the file, and its
+.I sh_offset
+member locates the conceptual placement in the file.
+.TP
+.I sh_size
+This member holds the section's size in bytes.
+Unless the section type
+is
+.BR SHT_NOBITS ,
+the section occupies
+.I sh_size
+bytes in the file.
+A section of type
+.B SHT_NOBITS
+may have a nonzero size, but it occupies no space in the file.
+.TP
+.I sh_link
+This member holds a section header table index link, whose interpretation
+depends on the section type.
+.TP
+.I sh_info
+This member holds extra information, whose interpretation depends on the
+section type.
+.TP
+.I sh_addralign
+Some sections have address alignment constraints.
+If a section holds a
+doubleword, the system must ensure doubleword alignment for the entire
+section.
+That is, the value of
+.I sh_addr
+must be congruent to zero, modulo the value of
+.IR sh_addralign .
+Only zero and positive integral powers of two are allowed.
+The value 0 or 1 means that the section has no alignment constraints.
+.TP
+.I sh_entsize
+Some sections hold a table of fixed-sized entries, such as a symbol table.
+For such a section, this member gives the size in bytes for each entry.
+This member contains zero if the section does not hold a table of
+fixed-size entries.
+.PP
+Various sections hold program and control information:
+.TP
+.I .bss
+This section holds uninitialized data that contributes to the program's
+memory image.
+By definition, the system initializes the data with zeros
+when the program begins to run.
+This section is of type
+.BR SHT_NOBITS .
+The attribute types are
+.B SHF_ALLOC
+and
+.BR SHF_WRITE .
+.TP
+.I .comment
+This section holds version control information.
+This section is of type
+.BR SHT_PROGBITS .
+No attribute types are used.
+.TP
+.I .ctors
+This section holds initialized pointers to the C++ constructor functions.
+This section is of type
+.BR SHT_PROGBITS .
+The attribute types are
+.B SHF_ALLOC
+and
+.BR SHF_WRITE .
+.TP
+.I .data
+This section holds initialized data that contribute to the program's
+memory image.
+This section is of type
+.BR SHT_PROGBITS .
+The attribute types are
+.B SHF_ALLOC
+and
+.BR SHF_WRITE .
+.TP
+.I .data1
+This section holds initialized data that contribute to the program's
+memory image.
+This section is of type
+.BR SHT_PROGBITS .
+The attribute types are
+.B SHF_ALLOC
+and
+.BR SHF_WRITE .
+.TP
+.I .debug
+This section holds information for symbolic debugging.
+The contents
+are unspecified.
+This section is of type
+.BR SHT_PROGBITS .
+No attribute types are used.
+.TP
+.I .dtors
+This section holds initialized pointers to the C++ destructor functions.
+This section is of type
+.BR SHT_PROGBITS .
+The attribute types are
+.B SHF_ALLOC
+and
+.BR SHF_WRITE .
+.TP
+.I .dynamic
+This section holds dynamic linking information.
+The section's attributes
+will include the
+.B SHF_ALLOC
+bit.
+Whether the
+.B SHF_WRITE
+bit is set is processor-specific.
+This section is of type
+.BR SHT_DYNAMIC .
+See the attributes above.
+.TP
+.I .dynstr
+This section holds strings needed for dynamic linking, most commonly
+the strings that represent the names associated with symbol table entries.
+This section is of type
+.BR SHT_STRTAB .
+The attribute type used is
+.BR SHF_ALLOC .
+.TP
+.I .dynsym
+This section holds the dynamic linking symbol table.
+This section is of type
+.BR SHT_DYNSYM .
+The attribute used is
+.BR SHF_ALLOC .
+.TP
+.I .fini
+This section holds executable instructions that contribute to the process
+termination code.
+When a program exits normally the system arranges to
+execute the code in this section.
+This section is of type
+.BR SHT_PROGBITS .
+The attributes used are
+.B SHF_ALLOC
+and
+.BR SHF_EXECINSTR .
+.TP
+.I .gnu.version
+This section holds the version symbol table, an array of
+.I ElfN_Half
+elements.
+This section is of type
+.BR SHT_GNU_versym .
+The attribute type used is
+.BR SHF_ALLOC .
+.TP
+.I .gnu.version_d
+This section holds the version symbol definitions, a table of
+.I ElfN_Verdef
+structures.
+This section is of type
+.BR SHT_GNU_verdef .
+The attribute type used is
+.BR SHF_ALLOC .
+.TP
+.I .gnu.version_r
+This section holds the version symbol needed elements, a table of
+.I ElfN_Verneed
+structures.
+This section is of
+type
+.BR SHT_GNU_versym .
+The attribute type used is
+.BR SHF_ALLOC .
+.TP
+.I .got
+This section holds the global offset table.
+This section is of type
+.BR SHT_PROGBITS .
+The attributes are processor-specific.
+.TP
+.I .hash
+This section holds a symbol hash table.
+This section is of type
+.BR SHT_HASH .
+The attribute used is
+.BR SHF_ALLOC .
+.TP
+.I .init
+This section holds executable instructions that contribute to the process
+initialization code.
+When a program starts to run the system arranges to execute
+the code in this section before calling the main program entry point.
+This section is of type
+.BR SHT_PROGBITS .
+The attributes used are
+.B SHF_ALLOC
+and
+.BR SHF_EXECINSTR .
+.TP
+.I .interp
+This section holds the pathname of a program interpreter.
+If the file has
+a loadable segment that includes the section, the section's attributes will
+include the
+.B SHF_ALLOC
+bit.
+Otherwise, that bit will be off.
+This section is of type
+.BR SHT_PROGBITS .
+.TP
+.I .line
+This section holds line number information for symbolic debugging,
+which describes the correspondence between the program source and
+the machine code.
+The contents are unspecified.
+This section is of type
+.BR SHT_PROGBITS .
+No attribute types are used.
+.TP
+.I .note
+This section holds various notes.
+This section is of type
+.BR SHT_NOTE .
+No attribute types are used.
+.TP
+.I .note.ABI\-tag
+This section is used to declare the expected run-time ABI of the ELF image.
+It may include the operating system name and its run-time versions.
+This section is of type
+.BR SHT_NOTE .
+The only attribute used is
+.BR SHF_ALLOC .
+.TP
+.I .note.gnu.build\-id
+This section is used to hold an ID that uniquely identifies
+the contents of the ELF image.
+Different files with the same build ID should contain the same executable
+content.
+See the
+.B \-\-build\-id
+option to the GNU linker (\fBld\fR (1)) for more details.
+This section is of type
+.BR SHT_NOTE .
+The only attribute used is
+.BR SHF_ALLOC .
+.TP
+.I .note.GNU\-stack
+This section is used in Linux object files for declaring stack attributes.
+This section is of type
+.BR SHT_PROGBITS .
+The only attribute used is
+.BR SHF_EXECINSTR .
+This indicates to the GNU linker that the object file requires an
+executable stack.
+.TP
+.I .note.openbsd.ident
+OpenBSD native executables usually contain this section
+to identify themselves so the kernel can bypass any compatibility
+ELF binary emulation tests when loading the file.
+.TP
+.I .plt
+This section holds the procedure linkage table.
+This section is of type
+.BR SHT_PROGBITS .
+The attributes are processor-specific.
+.TP
+.I .relNAME
+This section holds relocation information as described below.
+If the file
+has a loadable segment that includes relocation, the section's attributes
+will include the
+.B SHF_ALLOC
+bit.
+Otherwise, the bit will be off.
+By convention,
+"NAME"
+is supplied by the section to which the relocations apply.
+Thus a relocation
+section for
+.B .text
+normally would have the name
+.BR .rel.text .
+This section is of type
+.BR SHT_REL .
+.TP
+.I .relaNAME
+This section holds relocation information as described below.
+If the file
+has a loadable segment that includes relocation, the section's attributes
+will include the
+.B SHF_ALLOC
+bit.
+Otherwise, the bit will be off.
+By convention,
+"NAME"
+is supplied by the section to which the relocations apply.
+Thus a relocation
+section for
+.B .text
+normally would have the name
+.BR .rela.text .
+This section is of type
+.BR SHT_RELA .
+.TP
+.I .rodata
+This section holds read-only data that typically contributes to a
+nonwritable segment in the process image.
+This section is of type
+.BR SHT_PROGBITS .
+The attribute used is
+.BR SHF_ALLOC .
+.TP
+.I .rodata1
+This section holds read-only data that typically contributes to a
+nonwritable segment in the process image.
+This section is of type
+.BR SHT_PROGBITS .
+The attribute used is
+.BR SHF_ALLOC .
+.TP
+.I .shstrtab
+This section holds section names.
+This section is of type
+.BR SHT_STRTAB .
+No attribute types are used.
+.TP
+.I .strtab
+This section holds strings, most commonly the strings that represent the
+names associated with symbol table entries.
+If the file has a loadable
+segment that includes the symbol string table, the section's attributes
+will include the
+.B SHF_ALLOC
+bit.
+Otherwise, the bit will be off.
+This section is of type
+.BR SHT_STRTAB .
+.TP
+.I .symtab
+This section holds a symbol table.
+If the file has a loadable segment
+that includes the symbol table, the section's attributes will include
+the
+.B SHF_ALLOC
+bit.
+Otherwise, the bit will be off.
+This section is of type
+.BR SHT_SYMTAB .
+.TP
+.I .text
+This section holds the
+"text",
+or executable instructions, of a program.
+This section is of type
+.BR SHT_PROGBITS .
+The attributes used are
+.B SHF_ALLOC
+and
+.BR SHF_EXECINSTR .
+.\"
+.SS String and symbol tables
+String table sections hold null-terminated character sequences, commonly
+called strings.
+The object file uses these strings to represent symbol
+and section names.
+One references a string as an index into the string
+table section.
+The first byte, which is index zero, is defined to hold
+a null byte (\[aq]\e0\[aq]).
+Similarly, a string table's last byte is defined to
+hold a null byte, ensuring null termination for all strings.
+.PP
+An object file's symbol table holds information needed to locate and
+relocate a program's symbolic definitions and references.
+A symbol table
+index is a subscript into this array.
+.PP
+.in +4n
+.EX
+typedef struct {
+ uint32_t st_name;
+ Elf32_Addr st_value;
+ uint32_t st_size;
+ unsigned char st_info;
+ unsigned char st_other;
+ uint16_t st_shndx;
+} Elf32_Sym;
+.EE
+.in
+.PP
+.in +4n
+.EX
+typedef struct {
+ uint32_t st_name;
+ unsigned char st_info;
+ unsigned char st_other;
+ uint16_t st_shndx;
+ Elf64_Addr st_value;
+ uint64_t st_size;
+} Elf64_Sym;
+.EE
+.in
+.PP
+The 32-bit and 64-bit versions have the same members, just in a different
+order.
+.TP
+.I st_name
+This member holds an index into the object file's symbol string table,
+which holds character representations of the symbol names.
+If the value
+is nonzero, it represents a string table index that gives the symbol
+name.
+Otherwise, the symbol has no name.
+.TP
+.I st_value
+This member gives the value of the associated symbol.
+.TP
+.I st_size
+Many symbols have associated sizes.
+This member holds zero if the symbol
+has no size or an unknown size.
+.TP
+.I st_info
+This member specifies the symbol's type and binding attributes:
+.RS
+.TP
+.B STT_NOTYPE
+The symbol's type is not defined.
+.TP
+.B STT_OBJECT
+The symbol is associated with a data object.
+.TP
+.B STT_FUNC
+The symbol is associated with a function or other executable code.
+.TP
+.B STT_SECTION
+The symbol is associated with a section.
+Symbol table entries of
+this type exist primarily for relocation and normally have
+.B STB_LOCAL
+bindings.
+.TP
+.B STT_FILE
+By convention, the symbol's name gives the name of the source file
+associated with the object file.
+A file symbol has
+.B STB_LOCAL
+bindings, its section index is
+.BR SHN_ABS ,
+and it precedes the other
+.B STB_LOCAL
+symbols of the file, if it is present.
+.TP
+.BR STT_LOPROC ", " STT_HIPROC
+Values in the inclusive range
+.RB [ STT_LOPROC ,
+.BR STT_HIPROC ]
+are reserved for processor-specific semantics.
+.TP
+.B STB_LOCAL
+Local symbols are not visible outside the object file containing their
+definition.
+Local symbols of the same name may exist in multiple files
+without interfering with each other.
+.TP
+.B STB_GLOBAL
+Global symbols are visible to all object files being combined.
+One file's
+definition of a global symbol will satisfy another file's undefined
+reference to the same symbol.
+.TP
+.B STB_WEAK
+Weak symbols resemble global symbols, but their definitions have lower
+precedence.
+.TP
+.BR STB_LOPROC ", " STB_HIPROC
+Values in the inclusive range
+.RB [ STB_LOPROC ,
+.BR STB_HIPROC ]
+are reserved for processor-specific semantics.
+.RE
+.IP
+There are macros for packing and unpacking the binding and type fields:
+.RS
+.TP
+.BR ELF32_ST_BIND( \fIinfo\fP ) ", " ELF64_ST_BIND( \fIinfo\fP )
+Extract a binding from an
+.I st_info
+value.
+.TP
+.BR ELF32_ST_TYPE( \fIinfo ) ", " ELF64_ST_TYPE( \fIinfo\fP )
+Extract a type from an
+.I st_info
+value.
+.TP
+.BR ELF32_ST_INFO( \fIbind\fP ", " \fItype\fP ) ", " \
+ELF64_ST_INFO( \fIbind\fP ", " \fItype\fP )
+Convert a binding and a type into an
+.I st_info
+value.
+.RE
+.TP
+.I st_other
+This member defines the symbol visibility.
+.RS
+.TP
+.PD 0
+.B STV_DEFAULT
+Default symbol visibility rules.
+Global and weak symbols are available to other modules;
+references in the local module can be interposed
+by definitions in other modules.
+.TP
+.B STV_INTERNAL
+Processor-specific hidden class.
+.TP
+.B STV_HIDDEN
+Symbol is unavailable to other modules;
+references in the local module always resolve to the local symbol
+(i.e., the symbol can't be interposed by definitions in other modules).
+.TP
+.B STV_PROTECTED
+Symbol is available to other modules,
+but references in the local module always resolve to the local symbol.
+.PD
+.PP
+There are macros for extracting the visibility type:
+.PP
+.BR ELF32_ST_VISIBILITY (other)
+or
+.BR ELF64_ST_VISIBILITY (other)
+.RE
+.TP
+.I st_shndx
+Every symbol table entry is
+"defined"
+in relation to some section.
+This member holds the relevant section
+header table index.
+.\"
+.SS Relocation entries (Rel & Rela)
+Relocation is the process of connecting symbolic references with
+symbolic definitions.
+Relocatable files must have information that
+describes how to modify their section contents, thus allowing executable
+and shared object files to hold the right information for a process's
+program image.
+Relocation entries are these data.
+.PP
+Relocation structures that do not need an addend:
+.PP
+.in +4n
+.EX
+typedef struct {
+ Elf32_Addr r_offset;
+ uint32_t r_info;
+} Elf32_Rel;
+.EE
+.in
+.PP
+.in +4n
+.EX
+typedef struct {
+ Elf64_Addr r_offset;
+ uint64_t r_info;
+} Elf64_Rel;
+.EE
+.in
+.PP
+Relocation structures that need an addend:
+.PP
+.in +4n
+.EX
+typedef struct {
+ Elf32_Addr r_offset;
+ uint32_t r_info;
+ int32_t r_addend;
+} Elf32_Rela;
+.EE
+.in
+.PP
+.in +4n
+.EX
+typedef struct {
+ Elf64_Addr r_offset;
+ uint64_t r_info;
+ int64_t r_addend;
+} Elf64_Rela;
+.EE
+.in
+.TP
+.I r_offset
+This member gives the location at which to apply the relocation action.
+For a relocatable file, the value is the byte offset from the beginning
+of the section to the storage unit affected by the relocation.
+For an
+executable file or shared object, the value is the virtual address of
+the storage unit affected by the relocation.
+.TP
+.I r_info
+This member gives both the symbol table index with respect to which the
+relocation must be made and the type of relocation to apply.
+Relocation
+types are processor-specific.
+When the text refers to a relocation
+entry's relocation type or symbol table index, it means the result of
+applying
+.B ELF[32|64]_R_TYPE
+or
+.BR ELF[32|64]_R_SYM ,
+respectively, to the entry's
+.I r_info
+member.
+.TP
+.I r_addend
+This member specifies a constant addend used to compute the value to be
+stored into the relocatable field.
+.\"
+.SS Dynamic tags (Dyn)
+The
+.I .dynamic
+section contains a series of structures that hold relevant
+dynamic linking information.
+The
+.I d_tag
+member controls the interpretation
+of
+.IR d_un .
+.PP
+.in +4n
+.EX
+typedef struct {
+ Elf32_Sword d_tag;
+ union {
+ Elf32_Word d_val;
+ Elf32_Addr d_ptr;
+ } d_un;
+} Elf32_Dyn;
+extern Elf32_Dyn _DYNAMIC[];
+.EE
+.in
+.PP
+.in +4n
+.EX
+typedef struct {
+ Elf64_Sxword d_tag;
+ union {
+ Elf64_Xword d_val;
+ Elf64_Addr d_ptr;
+ } d_un;
+} Elf64_Dyn;
+extern Elf64_Dyn _DYNAMIC[];
+.EE
+.in
+.TP
+.I d_tag
+This member may have any of the following values:
+.RS
+.TP 12
+.B DT_NULL
+Marks end of dynamic section
+.TP
+.B DT_NEEDED
+String table offset to name of a needed library
+.TP
+.B DT_PLTRELSZ
+Size in bytes of PLT relocation entries
+.TP
+.B DT_PLTGOT
+Address of PLT and/or GOT
+.TP
+.B DT_HASH
+Address of symbol hash table
+.TP
+.B DT_STRTAB
+Address of string table
+.TP
+.B DT_SYMTAB
+Address of symbol table
+.TP
+.B DT_RELA
+Address of Rela relocation table
+.TP
+.B DT_RELASZ
+Size in bytes of the Rela relocation table
+.TP
+.B DT_RELAENT
+Size in bytes of a Rela relocation table entry
+.TP
+.B DT_STRSZ
+Size in bytes of string table
+.TP
+.B DT_SYMENT
+Size in bytes of a symbol table entry
+.TP
+.B DT_INIT
+Address of the initialization function
+.TP
+.B DT_FINI
+Address of the termination function
+.TP
+.B DT_SONAME
+String table offset to name of shared object
+.TP
+.B DT_RPATH
+String table offset to library search path (deprecated)
+.TP
+.B DT_SYMBOLIC
+Alert linker to search this shared object before the executable for symbols
+.TP
+.B DT_REL
+Address of Rel relocation table
+.TP
+.B DT_RELSZ
+Size in bytes of Rel relocation table
+.TP
+.B DT_RELENT
+Size in bytes of a Rel table entry
+.TP
+.B DT_PLTREL
+Type of relocation entry to which the PLT refers (Rela or Rel)
+.TP
+.B DT_DEBUG
+Undefined use for debugging
+.TP
+.B DT_TEXTREL
+Absence of this entry indicates that no relocation entries should
+apply to a nonwritable segment
+.TP
+.B DT_JMPREL
+Address of relocation entries associated solely with the PLT
+.TP
+.B DT_BIND_NOW
+Instruct dynamic linker to process all relocations before
+transferring control to the executable
+.TP
+.B DT_RUNPATH
+String table offset to library search path
+.TP
+.BR DT_LOPROC ", " DT_HIPROC
+Values in the inclusive range
+.RB [ DT_LOPROC ,
+.BR DT_HIPROC ]
+are reserved for processor-specific semantics
+.RE
+.TP
+.I d_val
+This member represents integer values with various interpretations.
+.TP
+.I d_ptr
+This member represents program virtual addresses.
+When interpreting
+these addresses, the actual address should be computed based on the
+original file value and memory base address.
+Files do not contain
+relocation entries to fixup these addresses.
+.TP
+.I _DYNAMIC
+Array containing all the dynamic structures in the
+.I .dynamic
+section.
+This is automatically populated by the linker.
+.\" GABI ELF Reference for Note Sections:
+.\" http://www.sco.com/developers/gabi/latest/ch5.pheader.html#note_section
+.\"
+.\" Note that it implies the sizes and alignments of notes depend on the ELF
+.\" size (e.g. 32-bit ELFs have three 4-byte words and use 4-byte alignment
+.\" while 64-bit ELFs use 8-byte words & alignment), but that is not the case
+.\" in the real world. Notes always have three 4-byte words as can be seen
+.\" in the source links below (remember that Elf64_Word is a 32-bit quantity).
+.\" glibc: https://sourceware.org/git/?p=glibc.git;a=blob;f=elf/elf.h;h=9e59b3275917549af0cebe1f2de9ded3b7b10bf2#l1173
+.\" binutils: https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=binutils/readelf.c;h=274ddd17266aef6e4ad1f67af8a13a21500ff2af#l15943
+.\" Linux: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/elf.h?h=v4.8#n422
+.\" Solaris: https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-18048.html
+.\" FreeBSD: https://svnweb.freebsd.org/base/head/sys/sys/elf_common.h?revision=303677&view=markup#l33
+.\" NetBSD: https://www.netbsd.org/docs/kernel/elf-notes.html
+.\" OpenBSD: https://github.com/openbsd/src/blob/master/sys/sys/exec_elf.h#L533
+.\"
+.SS Notes (Nhdr)
+ELF notes allow for appending arbitrary information for the system to use.
+They are largely used by core files
+.RI ( e_type
+of
+.BR ET_CORE ),
+but many projects define their own set of extensions.
+For example,
+the GNU tool chain uses ELF notes to pass information from
+the linker to the C library.
+.PP
+Note sections contain a series of notes (see the
+.I struct
+definitions below).
+Each note is followed by the name field (whose length is defined in
+\fIn_namesz\fR) and then by the descriptor field (whose length is defined in
+\fIn_descsz\fR) and whose starting address has a 4 byte alignment.
+Neither field is defined in the note struct due to their arbitrary lengths.
+.PP
+An example for parsing out two consecutive notes should clarify their layout
+in memory:
+.PP
+.in +4n
+.EX
+void *memory, *name, *desc;
+Elf64_Nhdr *note, *next_note;
+\&
+/* The buffer is pointing to the start of the section/segment. */
+note = memory;
+\&
+/* If the name is defined, it follows the note. */
+name = note\->n_namesz == 0 ? NULL : memory + sizeof(*note);
+\&
+/* If the descriptor is defined, it follows the name
+ (with alignment). */
+\&
+desc = note\->n_descsz == 0 ? NULL :
+ memory + sizeof(*note) + ALIGN_UP(note\->n_namesz, 4);
+\&
+/* The next note follows both (with alignment). */
+next_note = memory + sizeof(*note) +
+ ALIGN_UP(note\->n_namesz, 4) +
+ ALIGN_UP(note\->n_descsz, 4);
+.EE
+.in
+.PP
+Keep in mind that the interpretation of
+.I n_type
+depends on the namespace defined by the
+.I n_namesz
+field.
+If the
+.I n_namesz
+field is not set (e.g., is 0), then there are two sets of notes:
+one for core files and one for all other ELF types.
+If the namespace is unknown, then tools will usually fallback to these sets
+of notes as well.
+.PP
+.in +4n
+.EX
+typedef struct {
+ Elf32_Word n_namesz;
+ Elf32_Word n_descsz;
+ Elf32_Word n_type;
+} Elf32_Nhdr;
+.EE
+.in
+.PP
+.in +4n
+.EX
+typedef struct {
+ Elf64_Word n_namesz;
+ Elf64_Word n_descsz;
+ Elf64_Word n_type;
+} Elf64_Nhdr;
+.EE
+.in
+.TP
+.I n_namesz
+The length of the name field in bytes.
+The contents will immediately follow this note in memory.
+The name is null terminated.
+For example, if the name is "GNU", then
+.I n_namesz
+will be set to 4.
+.TP
+.I n_descsz
+The length of the descriptor field in bytes.
+The contents will immediately follow the name field in memory.
+.TP
+.I n_type
+Depending on the value of the name field, this member may have any of the
+following values:
+.RS
+.TP 5
+.B Core files (e_type = ET_CORE)
+Notes used by all core files.
+These are highly operating system or architecture specific and often require
+close coordination with kernels, C libraries, and debuggers.
+These are used when the namespace is the default (i.e.,
+.I n_namesz
+will be set to 0), or a fallback when the namespace is unknown.
+.RS
+.TP 21
+.PD 0
+.B NT_PRSTATUS
+prstatus struct
+.TP
+.B NT_FPREGSET
+fpregset struct
+.TP
+.B NT_PRPSINFO
+prpsinfo struct
+.TP
+.B NT_PRXREG
+prxregset struct
+.TP
+.B NT_TASKSTRUCT
+task structure
+.TP
+.B NT_PLATFORM
+String from sysinfo(SI_PLATFORM)
+.TP
+.B NT_AUXV
+auxv array
+.TP
+.B NT_GWINDOWS
+gwindows struct
+.TP
+.B NT_ASRS
+asrset struct
+.TP
+.B NT_PSTATUS
+pstatus struct
+.TP
+.B NT_PSINFO
+psinfo struct
+.TP
+.B NT_PRCRED
+prcred struct
+.TP
+.B NT_UTSNAME
+utsname struct
+.TP
+.B NT_LWPSTATUS
+lwpstatus struct
+.TP
+.B NT_LWPSINFO
+lwpinfo struct
+.TP
+.B NT_PRFPXREG
+fprxregset struct
+.TP
+.B NT_SIGINFO
+siginfo_t (size might increase over time)
+.TP
+.B NT_FILE
+Contains information about mapped files
+.TP
+.B NT_PRXFPREG
+user_fxsr_struct
+.TP
+.B NT_PPC_VMX
+PowerPC Altivec/VMX registers
+.TP
+.B NT_PPC_SPE
+PowerPC SPE/EVR registers
+.TP
+.B NT_PPC_VSX
+PowerPC VSX registers
+.TP
+.B NT_386_TLS
+i386 TLS slots (struct user_desc)
+.TP
+.B NT_386_IOPERM
+x86 io permission bitmap (1=deny)
+.TP
+.B NT_X86_XSTATE
+x86 extended state using xsave
+.TP
+.B NT_S390_HIGH_GPRS
+s390 upper register halves
+.TP
+.B NT_S390_TIMER
+s390 timer register
+.TP
+.B NT_S390_TODCMP
+s390 time-of-day (TOD) clock comparator register
+.TP
+.B NT_S390_TODPREG
+s390 time-of-day (TOD) programmable register
+.TP
+.B NT_S390_CTRS
+s390 control registers
+.TP
+.B NT_S390_PREFIX
+s390 prefix register
+.TP
+.B NT_S390_LAST_BREAK
+s390 breaking event address
+.TP
+.B NT_S390_SYSTEM_CALL
+s390 system call restart data
+.TP
+.B NT_S390_TDB
+s390 transaction diagnostic block
+.TP
+.B NT_ARM_VFP
+ARM VFP/NEON registers
+.TP
+.B NT_ARM_TLS
+ARM TLS register
+.TP
+.B NT_ARM_HW_BREAK
+ARM hardware breakpoint registers
+.TP
+.B NT_ARM_HW_WATCH
+ARM hardware watchpoint registers
+.TP
+.B NT_ARM_SYSTEM_CALL
+ARM system call number
+.PD
+.RE
+.TP
+.B n_name = GNU
+Extensions used by the GNU tool chain.
+.RS
+.TP
+.B NT_GNU_ABI_TAG
+Operating system (OS) ABI information.
+The desc field will be 4 words:
+.IP
+.PD 0
+.RS
+.IP [0] 5
+OS descriptor
+(\fBELF_NOTE_OS_LINUX\fR, \fBELF_NOTE_OS_GNU\fR, and so on)`
+.IP [1]
+major version of the ABI
+.IP [2]
+minor version of the ABI
+.IP [3]
+subminor version of the ABI
+.RE
+.PD
+.TP
+.B NT_GNU_HWCAP
+Synthetic hwcap information.
+The desc field begins with two words:
+.IP
+.PD 0
+.RS
+.IP [0] 5
+number of entries
+.IP [1]
+bit mask of enabled entries
+.RE
+.PD
+.IP
+Then follow variable-length entries, one byte followed by a null-terminated
+hwcap name string.
+The byte gives the bit number to test if enabled, (1U << bit) & bit mask.
+.TP
+.B NT_GNU_BUILD_ID
+Unique build ID as generated by the GNU
+.BR ld (1)
+.B \-\-build\-id
+option.
+The desc consists of any nonzero number of bytes.
+.TP
+.B NT_GNU_GOLD_VERSION
+The desc contains the GNU Gold linker version used.
+.RE
+.TP
+.B Default/unknown namespace (e_type != ET_CORE)
+These are used when the namespace is the default (i.e.,
+.I n_namesz
+will be set to 0), or a fallback when the namespace is unknown.
+.RS
+.TP 12
+.PD 0
+.B NT_VERSION
+A version string of some sort.
+.TP
+.B NT_ARCH
+Architecture information.
+.PD
+.RE
+.RE
+.SH NOTES
+.\" OpenBSD
+.\" ELF support first appeared in
+.\" OpenBSD 1.2,
+.\" although not all supported platforms use it as the native
+.\" binary file format.
+ELF first appeared in
+System V.
+The ELF format is an adopted standard.
+.PP
+The extensions for
+.IR e_phnum ,
+.IR e_shnum ,
+and
+.I e_shstrndx
+respectively are
+Linux extensions.
+Sun, BSD, and AMD64 also support them; for further information,
+look under SEE ALSO.
+.\" .SH AUTHORS
+.\" The original version of this manual page was written by
+.\" .An Jeroen Ruigrok van der Werven
+.\" .Aq asmodai@FreeBSD.org
+.\" with inspiration from BSDi's
+.\" .Bsx
+.\" .Nm elf
+.\" man page.
+.SH SEE ALSO
+.BR as (1),
+.BR elfedit (1),
+.BR gdb (1),
+.BR ld (1),
+.BR nm (1),
+.BR objcopy (1),
+.BR objdump (1),
+.BR patchelf (1),
+.BR readelf (1),
+.BR size (1),
+.BR strings (1),
+.BR strip (1),
+.BR execve (2),
+.BR dl_iterate_phdr (3),
+.BR core (5),
+.BR ld.so (8)
+.PP
+Hewlett-Packard,
+.IR "Elf-64 Object File Format" .
+.PP
+Santa Cruz Operation,
+.IR "System V Application Binary Interface" .
+.PP
+UNIX System Laboratories,
+"Object Files",
+.IR "Executable and Linking Format (ELF)" .
+.PP
+Sun Microsystems,
+.IR "Linker and Libraries Guide" .
+.PP
+AMD64 ABI Draft,
+.IR "System V Application Binary Interface AMD64 Architecture Processor Supplement" .
diff --git a/man5/erofs.5 b/man5/erofs.5
new file mode 100644
index 0000000..97edfdc
--- /dev/null
+++ b/man5/erofs.5
@@ -0,0 +1,97 @@
+.\" Copyright (c) 2016 by Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH erofs 5 2023-04-29 "Linux man-pages 6.05.01"
+.SH NAME
+erofs \- the Enhanced Read-Only File System
+.SH DESCRIPTION
+.B erofs
+is a create-once read-only filesystem,
+with support for compression and a multi-device backing store.
+.PP
+There are two inode formats:
+.IP \[bu] 3
+32-byte compact with 16-bit UID/GID,
+32-bit file size,
+and no file times
+.PD 0
+.IP \[bu]
+64-byte extended with 32-bit UID/GID,
+64-bit file size,
+and a modification time
+.RI ( st_mtim ).
+.PD
+.\" See fs/erofs/super.c:shmem_parse_options for options it supports.
+.SS Mount options
+.TP
+.B user_xattr
+.TQ
+.B nouser_xattr
+Controls whether
+.I user
+extended attributes are exposed.
+Defaults to yes.
+.TP
+.B acl
+.TQ
+.B noacl
+Controls whether POSIX
+.BR acl (5)s
+are exposed.
+Defaults to yes.
+.TP
+.BR cache_strategy = disabled | readahead | readaround
+Cache allocation for compressed files:
+never, if reading from start of file, regardless of position.
+Defaults to
+.BR readaround .
+.TP
+.B dax
+.TQ
+.BR dax = always | never
+Direct Access control.
+If
+.B always
+and the source device supports DAX, uncompressed non-inlined files
+will be read directly, without going through the page cache.
+.B dax
+is a synonym for
+.BR always .
+Defaults to unset, which is equivalent to
+.BR never .
+.TP
+.BR device = \fIblobdev\fP
+Add extra device holding some of the data.
+Must be given as many times and in the same order as
+.B \-\-blobdev
+was to
+.BR mkfs.erofs (1).
+.\" Nominally there's a device_table feature and it somehow scans(?) for them,
+.\" cf. super.c:erofs_scan_devices(), but I haven't gotten it to work
+.TP
+.BR domain_id = \fIdid\fP
+.TQ
+.BR fsid = \fIid\fP
+Control CacheFiles on-demand read support.
+To be documented.
+.SH VERSIONS
+.B erofs
+images are versioned through the use of feature flags;
+these are listed in the
+.B \-E
+section of
+.BR mkfs.erofs (1),
+.SH CONFIGURATION
+Linux must be configured with the
+.B CONFIG_EROFS_FS
+option to mount EROFS filesystems.
+There are sub-configuration items that restrict the availability
+of some of the parameters above.
+.SH SEE ALSO
+.BR mkfs.erofs (1),
+.BR fsck.erofs (1),
+.BR dump.erofs (1)
+.PP
+.I Documentation/filesystems/erofs.txt
+in the Linux source.
diff --git a/man5/filesystems.5 b/man5/filesystems.5
new file mode 100644
index 0000000..cc76699
--- /dev/null
+++ b/man5/filesystems.5
@@ -0,0 +1,227 @@
+.\" Copyright 1996 Daniel Quinlan (Daniel.Quinlan@linux.org)
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" 2007-12-14 mtk Added Reiserfs, XFS, JFS.
+.\"
+.TH filesystems 5 2023-04-10 "Linux man-pages 6.05.01"
+.nh
+.SH NAME
+filesystems \- Linux filesystem types: ext, ext2, ext3, ext4, hpfs, iso9660,
+JFS, minix, msdos, ncpfs nfs, ntfs, proc, Reiserfs, smb, sysv, umsdos, vfat,
+XFS, xiafs
+.SH DESCRIPTION
+When, as is customary, the
+.B proc
+filesystem is mounted on
+.IR /proc ,
+you can find in the file
+.I /proc/filesystems
+which filesystems your kernel currently supports;
+see
+.BR proc (5)
+for more details.
+There is also a legacy
+.BR sysfs (2)
+system call (whose availability is controlled by the
+.\" commit: 6af9f7bf3c399e0ab1eee048e13572c6d4e15fe9
+.B CONFIG_SYSFS_SYSCALL
+kernel build configuration option since Linux 3.15)
+that enables enumeration of the currently available filesystem types
+regardless of
+.I /proc
+availability and/or sanity.
+.PP
+If you need a currently unsupported filesystem, insert the corresponding
+kernel module or recompile the kernel.
+.PP
+In order to use a filesystem, you have to
+.I mount
+it; see
+.BR mount (2)
+and
+.BR mount (8).
+.PP
+The following list provides a
+short description of the available or historically available
+filesystems in the Linux kernel.
+See the kernel documentation for a comprehensive
+description of all options and limitations.
+.TP
+.B erofs
+is the Enhanced Read-Only File System, stable since Linux 5.4.
+.\" commit 47e4937a4a7ca4184fd282791dfee76c6799966a moves it out of staging
+See
+.BR erofs (5).
+.TP
+.B ext
+is an elaborate extension of the
+.B minix
+filesystem.
+It has been completely superseded by the second version
+of the extended filesystem
+.RB ( ext2 )
+and has been removed from the kernel (in Linux 2.1.21).
+.TP
+.B ext2
+is a disk filesystem that was used by Linux for fixed disks
+as well as removable media.
+The second extended filesystem was designed as an extension of the
+extended filesystem
+.RB ( ext ).
+See
+.BR ext2 (5).
+.TP
+.B ext3
+is a journaling version of the
+.B ext2
+filesystem.
+It is easy to
+switch back and forth between
+.B ext2
+and
+.BR ext3 .
+See
+.BR ext3 (5).
+.TP
+.B ext4
+is a set of upgrades to
+.B ext3
+including substantial performance and
+reliability enhancements,
+plus large increases in volume, file, and directory size limits.
+See
+.BR ext4 (5).
+.TP
+.B hpfs
+is the High Performance Filesystem, used in OS/2.
+This filesystem is
+read-only under Linux due to the lack of available documentation.
+.TP
+.B iso9660
+is a CD-ROM filesystem type conforming to the ISO 9660 standard.
+.RS
+.TP
+.B "High Sierra"
+Linux supports High Sierra, the precursor to the ISO 9660 standard for
+CD-ROM filesystems.
+It is automatically recognized within the
+.B iso9660
+filesystem support under Linux.
+.TP
+.B "Rock Ridge"
+Linux also supports the System Use Sharing Protocol records specified
+by the Rock Ridge Interchange Protocol.
+They are used to further describe the files in the
+.B iso9660
+filesystem to a UNIX host, and provide information such as long
+filenames, UID/GID, POSIX permissions, and devices.
+It is automatically recognized within the
+.B iso9660
+filesystem support under Linux.
+.RE
+.TP
+.B JFS
+is a journaling filesystem, developed by IBM,
+that was integrated into Linux 2.4.24.
+.TP
+.B minix
+is the filesystem used in the Minix operating system, the first to run
+under Linux.
+It has a number of shortcomings, including a 64\ MB partition size
+limit, short filenames, and a single timestamp.
+It remains useful for floppies and RAM disks.
+.TP
+.B msdos
+is the filesystem used by DOS, Windows, and some OS/2 computers.
+.B msdos
+filenames can be no longer than 8 characters, followed by an
+optional period and 3 character extension.
+.TP
+.B ncpfs
+is a network filesystem that supports the NCP protocol,
+used by Novell NetWare.
+It was removed from the kernel in Linux 4.17.
+.IP
+To use
+.BR ncpfs ,
+you need special programs, which can be found at
+.UR ftp://ftp.gwdg.de\:/pub\:/linux\:/misc\:/ncpfs
+.UE .
+.TP
+.B nfs
+is the network filesystem used to access disks located on remote computers.
+.TP
+.B ntfs
+is the filesystem native to Microsoft Windows NT,
+supporting features like ACLs, journaling, encryption, and so on.
+.TP
+.B proc
+is a pseudo filesystem which is used as an interface to kernel data
+structures rather than reading and interpreting
+.IR /dev/kmem .
+In particular, its files do not take disk space.
+See
+.BR proc (5).
+.TP
+.B Reiserfs
+is a journaling filesystem, designed by Hans Reiser,
+that was integrated into Linux 2.4.1.
+.TP
+.B smb
+is a network filesystem that supports the SMB protocol, used by
+Windows.
+See
+.UR https://www.samba.org\:/samba\:/smbfs/
+.UE .
+.TP
+.B sysv
+is an implementation of the System V/Coherent filesystem for Linux.
+It implements all of Xenix FS, System V/386 FS, and Coherent FS.
+.TP
+.B umsdos
+is an extended DOS filesystem used by Linux.
+It adds capability for
+long filenames, UID/GID, POSIX permissions, and special files
+(devices, named pipes, etc.) under the DOS filesystem, without
+sacrificing compatibility with DOS.
+.TP
+.B tmpfs
+is a filesystem whose contents reside in virtual memory.
+Since the files on such filesystems typically reside in RAM,
+file access is extremely fast.
+See
+.BR tmpfs (5).
+.TP
+.B vfat
+is an extended FAT filesystem used by Microsoft Windows95 and Windows NT.
+.B vfat
+adds the capability to use long filenames under the MSDOS filesystem.
+.TP
+.B XFS
+is a journaling filesystem, developed by SGI,
+that was integrated into Linux 2.4.20.
+.TP
+.B xiafs
+was designed and implemented to be a stable, safe filesystem by
+extending the Minix filesystem code.
+It provides the basic most
+requested features without undue complexity.
+The
+.B xiafs
+filesystem is no longer actively developed or maintained.
+It was removed from the kernel in Linux 2.1.21.
+.SH SEE ALSO
+.BR fuse (4),
+.BR btrfs (5),
+.BR ext2 (5),
+.BR ext3 (5),
+.BR ext4 (5),
+.BR nfs (5),
+.BR proc (5),
+.BR sysfs (5),
+.BR tmpfs (5),
+.BR xfs (5),
+.BR fsck (8),
+.BR mkfs (8),
+.BR mount (8)
diff --git a/man5/fs.5 b/man5/fs.5
new file mode 100644
index 0000000..3ec300c
--- /dev/null
+++ b/man5/fs.5
@@ -0,0 +1 @@
+.so man5/filesystems.5
diff --git a/man5/ftpusers.5 b/man5/ftpusers.5
new file mode 100644
index 0000000..9af5c52
--- /dev/null
+++ b/man5/ftpusers.5
@@ -0,0 +1,42 @@
+.\" Copyright (c) 2000 Christoph J. Thompson <obituary@linuxbe.org>
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.TH ftpusers 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+ftpusers \- list of users that may not log in via the FTP daemon
+.SH DESCRIPTION
+The text file
+.B ftpusers
+contains a list of users that may not log in using the
+File Transfer Protocol (FTP) server daemon.
+This file is used not merely for
+system administration purposes but also for improving security within a TCP/IP
+networked environment.
+.PP
+The
+.B ftpusers
+file will typically contain a list of the users that
+either have no business using ftp or have too many privileges to be allowed
+to log in through the FTP server daemon.
+Such users usually include root, daemon, bin, uucp, and news.
+.PP
+If your FTP server daemon doesn't use
+.BR ftpusers ,
+then it is suggested that you read its documentation to find out how to
+block access for certain users.
+Washington University FTP server Daemon
+(wuftpd) and Professional FTP Daemon (proftpd) are known to make use of
+.BR ftpusers .
+.SS Format
+The format of
+.B ftpusers
+is very simple.
+There is one account name (or username) per line.
+Lines starting with a # are ignored.
+.SH FILES
+.I /etc/ftpusers
+.SH SEE ALSO
+.BR passwd (5),
+.BR proftpd (8),
+.BR wuftpd (8)
diff --git a/man5/gai.conf.5 b/man5/gai.conf.5
new file mode 100644
index 0000000..bba4480
--- /dev/null
+++ b/man5/gai.conf.5
@@ -0,0 +1,89 @@
+.\" Copyright (C) 2006 Red Hat, Inc. All rights reserved.
+.\" Author: Ulrich Drepper <drepper@redhat.com>
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-only
+.\"
+.TH gai.conf 5 2023-02-05 "Linux man-pages 6.05.01"
+.SH NAME
+gai.conf \- getaddrinfo(3) configuration file
+.SH DESCRIPTION
+A call to
+.BR getaddrinfo (3)
+might return multiple answers.
+According to RFC\ 3484 these answers must be sorted so that
+the answer with the highest success rate is first in the list.
+The RFC provides an algorithm for the sorting.
+The static rules are not always adequate, though.
+For this reason,
+the RFC also requires that system administrators should have the possibility
+to dynamically change the sorting.
+For the glibc implementation, this can be achieved with the
+.I /etc/gai.conf
+file.
+.PP
+Each line in the configuration file consists of a keyword and its parameters.
+White spaces in any place are ignored.
+Lines starting with \[aq]#\[aq] are comments and are ignored.
+.PP
+The keywords currently recognized are:
+.TP
+\fBlabel\fR \fInetmask\fR \fIprecedence\fR
+The value is added to the label table used in the RFC\ 3484 sorting.
+If any \fBlabel\fR definition is present in the configuration file,
+the default table is not used.
+All the label definitions
+of the default table which are to be maintained have to be duplicated.
+Following the keyword,
+the line has to contain a network mask and a precedence value.
+.TP
+\fBprecedence\fR \fInetmask\fR \fIprecedence\fR
+This keyword is similar to \fBlabel\fR, but instead the value is added
+to the precedence table as specified in RFC\ 3484.
+Once again, the
+presence of a single \fBprecedence\fR line in the configuration file
+causes the default table to not be used.
+.TP
+\fBreload\fR <\fByes\fR|\fBno\fR>
+This keyword controls whether a process checks whether the configuration
+file has been changed since the last time it was read.
+If the value is
+"\fByes\fR", the file is reread.
+This might cause problems in multithreaded
+applications and is generally a bad idea.
+The default is "\fBno\fR".
+.TP
+\fBscopev4\fR \fImask\fR \fIvalue\fR
+Add another rule to the RFC\ 3484 scope table for IPv4 address.
+By default, the scope IDs described in section 3.2 in RFC\ 3438 are used.
+Changing these defaults should hardly ever be necessary.
+.SH FILES
+\fI/etc/gai.conf\fR
+.SH VERSIONS
+The
+.I gai.conf
+.\" Added in 2006
+file is supported since glibc 2.5.
+.SH EXAMPLES
+The default table according to RFC\ 3484 would be specified with the
+following configuration file:
+.PP
+.in +4n
+.EX
+label ::1/128 0
+label ::/0 1
+label 2002::/16 2
+label ::/96 3
+label ::ffff:0:0/96 4
+precedence ::1/128 50
+precedence ::/0 40
+precedence 2002::/16 30
+precedence ::/96 20
+precedence ::ffff:0:0/96 10
+.EE
+.in
+.\" .SH AUTHOR
+.\" Ulrich Drepper <drepper@redhat.com>
+.\"
+.SH SEE ALSO
+.BR getaddrinfo (3),
+RFC\ 3484
diff --git a/man5/group.5 b/man5/group.5
new file mode 100644
index 0000000..d39f843
--- /dev/null
+++ b/man5/group.5
@@ -0,0 +1,55 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified Sat Jul 24 17:06:03 1993 by Rik Faith (faith@cs.unc.edu)
+.TH group 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+group \- user group file
+.SH DESCRIPTION
+The
+.I /etc/group
+file is a text file that defines the groups on the system.
+There is one entry per line, with the following format:
+.PP
+.in +4n
+.EX
+group_name:password:GID:user_list
+.EE
+.in
+.PP
+The fields are as follows:
+.TP
+.I group_name
+the name of the group.
+.TP
+.I password
+the (encrypted) group password.
+If this field is empty, no password is needed.
+.TP
+.I GID
+the numeric group ID.
+.TP
+.I user_list
+a list of the usernames that are members of this group, separated by commas.
+.SH FILES
+.I /etc/group
+.SH BUGS
+As the 4.2BSD
+.BR initgroups (3)
+man page says: no one seems to keep
+.I /etc/group
+up-to-date.
+.SH SEE ALSO
+.BR chgrp (1),
+.BR gpasswd (1),
+.BR groups (1),
+.BR login (1),
+.BR newgrp (1),
+.BR sg (1),
+.BR getgrent (3),
+.BR getgrnam (3),
+.BR gshadow (5),
+.BR passwd (5),
+.BR vigr (8)
diff --git a/man5/host.conf.5 b/man5/host.conf.5
new file mode 100644
index 0000000..8f64551
--- /dev/null
+++ b/man5/host.conf.5
@@ -0,0 +1,204 @@
+.\" Copyright (c) 1997 Martin Schulze (joey@infodrom.north.de)
+.\" Much of the text is copied from the manpage of resolv+(8).
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" 2003-08-23 Martin Schulze <joey@infodrom.org> Updated according to glibc 2.3.2
+.TH host.conf 5 2023-03-08 "Linux man-pages 6.05.01"
+.SH NAME
+host.conf \- resolver configuration file
+.SH DESCRIPTION
+The file
+.I /etc/host.conf
+contains configuration information specific to the resolver library.
+It should contain one configuration keyword per line, followed by
+appropriate configuration information.
+The following keywords are recognized:
+.TP
+.I trim
+This keyword may be listed more than once.
+Each time it should be
+followed by a list of domains, separated by colons (\[aq]:\[aq]), semicolons
+(\[aq];\[aq]) or commas (\[aq],\[aq]), with the leading dot.
+When set, the
+resolver library will automatically trim the given domain name from the
+end of any hostname resolved via DNS.
+This is intended for use with
+local hosts and domains.
+(Related note:
+.I trim
+will not affect hostnames gathered via NIS or the
+.BR hosts (5)
+file.
+Care should be taken to
+ensure that the first hostname for each entry in the hosts file is
+fully qualified or unqualified, as appropriate for the local
+installation.)
+.TP
+.I multi
+Valid values are
+.IR on " and " off .
+If set to
+.IR on ,
+the resolver library will return all valid addresses for a host that
+appears in the
+.I /etc/hosts
+file,
+instead of only the first.
+This is
+.I off
+by default, as it may cause a substantial performance loss at sites
+with large hosts files.
+.TP
+.I reorder
+Valid values are
+.IR on " and " off .
+If set to
+.IR on ,
+the resolver library
+will attempt to reorder host addresses so that local addresses
+(i.e., on the same subnet) are listed first when a
+.BR gethostbyname (3)
+is performed.
+Reordering is done for all lookup methods.
+The default value is
+.IR off .
+.SH ENVIRONMENT
+The following environment variables can be used to allow users to
+override the behavior which is configured in
+.IR /etc/host.conf :
+.TP
+.B RESOLV_HOST_CONF
+If set, this variable points to a file that should be read instead of
+.IR /etc/host.conf .
+.TP
+.B RESOLV_MULTI
+Overrides the
+.I multi
+command.
+.TP
+.B RESOLV_REORDER
+Overrides the
+.I reorder
+command.
+.TP
+.B RESOLV_ADD_TRIM_DOMAINS
+A list of domains,
+separated by
+colons (\[aq]:\[aq]), semicolons (\[aq];\[aq]), or commas (\[aq],\[aq]),
+with the leading dot,
+which will be added to the list of domains that should be trimmed.
+.TP
+.B RESOLV_OVERRIDE_TRIM_DOMAINS
+A list of domains,
+separated by
+colons (\[aq]:\[aq]), semicolons (\[aq];\[aq]), or commas (\[aq],\[aq]),
+with the leading dot,
+which will replace the list of domains that should be trimmed.
+Overrides the
+.I trim
+command.
+.SH FILES
+.TP
+.I /etc/host.conf
+Resolver configuration file
+.TP
+.I /etc/resolv.conf
+Resolver configuration file
+.TP
+.I /etc/hosts
+Local hosts database
+.SH NOTES
+The following differences exist compared to the original implementation.
+A new command
+.I spoof
+and a new environment variable
+.B RESOLV_SPOOF_CHECK
+can take arguments like
+.IR off ", " nowarn ", and " warn .
+Line comments can appear anywhere and not only at the beginning of a line.
+.SS Historical
+The
+.BR nsswitch.conf (5)
+file is the modern way of controlling the order of host lookups.
+.PP
+In glibc 2.4 and earlier, the following keyword is recognized:
+.TP
+.I order
+This keyword specifies how host lookups are to be performed.
+It should be followed by one or more lookup methods, separated by commas.
+Valid methods are
+.IR bind ", " hosts ", and " nis .
+.TP
+.B RESOLV_SERV_ORDER
+Overrides the
+.I order
+command.
+.PP
+.\" commit 7d68cdaa4f748e87ee921f587ee2d483db624b3d
+Since glibc 2.0.7, and up through glibc 2.24,
+the following keywords and environment variable
+have been recognized but never implemented:
+.TP
+.I nospoof
+Valid values are
+.IR on " and " off .
+If set to
+.IR on ,
+the resolver library will attempt to prevent hostname spoofing to
+enhance the security of
+.BR rlogin " and " rsh .
+It works as follows: after performing a host address lookup,
+the resolver library will perform a hostname lookup for that address.
+If the two hostnames
+do not match, the query fails.
+The default value is
+.IR off .
+.TP
+.I spoofalert
+Valid values are
+.IR on " and " off .
+If this option is set to
+.I on
+and the
+.I nospoof
+option is also set,
+the resolver library will log a warning of the error via the
+syslog facility.
+The default value is
+.IR off .
+.TP
+.I spoof
+Valid values are
+.IR off ", " nowarn ", and " warn .
+If this option is set to
+.IR off ,
+spoofed addresses are permitted and no warnings will be emitted
+via the syslog facility.
+If this option is set to
+.IR warn ,
+the resolver library will attempt to prevent hostname spoofing to
+enhance the security and log a warning of the error via the syslog
+facility.
+If this option is set to
+.IR nowarn ,
+the resolver library will attempt to prevent hostname spoofing to
+enhance the security but not emit warnings via the syslog facility.
+Setting this option to anything else is equal to setting it to
+.IR nowarn .
+.TP
+.B RESOLV_SPOOF_CHECK
+Overrides the
+.IR nospoof ", " spoofalert ", and " spoof
+commands in the same way as the
+.I spoof
+command is parsed.
+Valid values are
+.IR off ", " nowarn ", and " warn .
+.SH SEE ALSO
+.BR gethostbyname (3),
+.BR hosts (5),
+.BR nsswitch.conf (5),
+.BR resolv.conf (5),
+.BR hostname (7),
+.BR named (8)
diff --git a/man5/hosts.5 b/man5/hosts.5
new file mode 100644
index 0000000..7e17814
--- /dev/null
+++ b/man5/hosts.5
@@ -0,0 +1,122 @@
+.\" Copyright (c) 2000 Manoj Srivastava <srivasta@debian.org>
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Minor polishing, aeb
+.\" Modified, 2002-06-16, Mike Coleman
+.\"
+.TH hosts 5 2023-05-03 "Linux man-pages 6.05.01"
+.SH NAME
+hosts \- static table lookup for hostnames
+.SH SYNOPSIS
+.nf
+.B /etc/hosts
+.fi
+.SH DESCRIPTION
+This manual page describes the format of the
+.I /etc/hosts
+file.
+This file is a simple text file that associates IP addresses
+with hostnames, one line per IP address.
+For each host a single
+line should be present with the following information:
+.RS
+.PP
+IP_address canonical_hostname [aliases...]
+.RE
+.PP
+The IP address can conform to either IPv4 or IPv6.
+Fields of the entry are separated by any number of blanks and/or
+tab characters.
+Text from a "#" character until the end of the line is
+a comment, and is ignored.
+Host names may contain only alphanumeric
+characters, minus signs ("\-"), and periods (".").
+They must begin with an
+alphabetic character and end with an alphanumeric character.
+Optional aliases provide for name changes, alternate spellings,
+shorter hostnames, or generic hostnames (for example,
+.IR localhost ).
+If required, a host may have two separate entries in this file;
+one for each version of the Internet Protocol (IPv4 and IPv6).
+.PP
+The Berkeley Internet Name Domain (BIND) Server implements the
+Internet name server for UNIX systems.
+It augments or replaces the
+.I /etc/hosts
+file or hostname lookup, and frees a host from relying on
+.I /etc/hosts
+being up to date and complete.
+.PP
+In modern systems, even though the host table has been superseded by
+DNS, it is still widely used for:
+.TP
+.B bootstrapping
+Most systems have a small host table containing the name and address
+information for important hosts on the local network.
+This is useful
+when DNS is not running, for example during system bootup.
+.TP
+.B NIS
+Sites that use NIS use the host table as input to the NIS host
+database.
+Even though NIS can be used with DNS, most NIS sites still
+use the host table with an entry for all local hosts as a backup.
+.TP
+.B isolated nodes
+Very small sites that are isolated from the network use the host table
+instead of DNS.
+If the local information rarely changes, and the
+network is not connected to the Internet, DNS offers little
+advantage.
+.SH FILES
+.I /etc/hosts
+.SH NOTES
+Modifications to this file normally take effect immediately,
+except in cases where the file is cached by applications.
+.SS Historical notes
+RFC\ 952 gave the original format for the host table, though it has
+since changed.
+.PP
+Before the advent of DNS, the host table was the only way of resolving
+hostnames on the fledgling Internet.
+Indeed, this file could be
+created from the official host data base maintained at the Network
+Information Control Center (NIC), though local changes were often
+required to bring it up to date regarding unofficial aliases and/or
+unknown hosts.
+The NIC no longer maintains the hosts.txt files,
+though looking around at the time of writing (circa 2000), there are
+historical hosts.txt files on the WWW.
+I just found three, from 92,
+94, and 95.
+.SH EXAMPLES
+.EX
+# The following lines are desirable for IPv4 capable hosts
+127.0.0.1 localhost
+\&
+# 127.0.1.1 is often used for the FQDN of the machine
+127.0.1.1 thishost.example.org thishost
+192.168.1.10 foo.example.org foo
+192.168.1.13 bar.example.org bar
+146.82.138.7 master.debian.org master
+209.237.226.90 www.opensource.org
+\&
+# The following lines are desirable for IPv6 capable hosts
+::1 localhost ip6\-localhost ip6\-loopback
+ff02::1 ip6\-allnodes
+ff02::2 ip6\-allrouters
+.EE
+.SH SEE ALSO
+.BR hostname (1),
+.BR resolver (3),
+.BR host.conf (5),
+.BR resolv.conf (5),
+.BR resolver (5),
+.BR hostname (7),
+.BR named (8)
+.PP
+Internet RFC\ 952
+.\" .SH AUTHOR
+.\" This manual page was written by Manoj Srivastava <srivasta@debian.org>,
+.\" for the Debian GNU/Linux system.
diff --git a/man5/hosts.equiv.5 b/man5/hosts.equiv.5
new file mode 100644
index 0000000..a9521da
--- /dev/null
+++ b/man5/hosts.equiv.5
@@ -0,0 +1,212 @@
+.\" Copyright (c) 1995 Peter Tobias <tobias@et-inf.fho-emden.de>
+.\"
+.\" SPDX-License-Identifier: GPL-1.0-or-later
+.TH hosts.equiv 5 2023-02-05 "Linux man-pages 6.05.01"
+.SH NAME
+hosts.equiv \- list of hosts and users that are granted "trusted"
+.B r
+command access to your system
+.SH DESCRIPTION
+The file
+.I /etc/hosts.equiv
+allows or denies hosts and users to use
+the \fBr\fP-commands (e.g.,
+.BR rlogin ,
+.BR rsh ,
+or
+.BR rcp )
+without
+supplying a password.
+.PP
+The file uses the following format:
+.TP
+\fI+|[\-]hostname|+@netgroup|\-@netgroup\fP \fI[+|[\-]username|+@netgroup|\-@netgroup]\fP
+.PP
+The
+.I hostname
+is the name of a host which is logically equivalent
+to the local host.
+Users logged into that host are allowed to access
+like-named user accounts on the local host without supplying a password.
+The
+.I hostname
+may be (optionally) preceded by a plus (+) sign.
+If the plus sign is used alone, it allows any host to access your system.
+You can explicitly deny access to a host by preceding the
+.I hostname
+by a minus (\-) sign.
+Users from that host must always supply additional credentials,
+including possibly a password.
+For security reasons you should always
+use the FQDN of the hostname and not the short hostname.
+.PP
+The
+.I username
+entry grants a specific user access to all user
+accounts (except root) without supplying a password.
+That means the
+user is NOT restricted to like-named accounts.
+The
+.I username
+may
+be (optionally) preceded by a plus (+) sign.
+You can also explicitly
+deny access to a specific user by preceding the
+.I username
+with
+a minus (\-) sign.
+This says that the user is not trusted no matter
+what other entries for that host exist.
+.PP
+Netgroups can be specified by preceding the netgroup by an @ sign.
+.PP
+Be extremely careful when using the plus (+) sign.
+A simple typographical
+error could result in a standalone plus sign.
+A standalone plus sign is
+a wildcard character that means "any host"!
+.SH FILES
+.I /etc/hosts.equiv
+.SH NOTES
+Some systems will honor the contents of this file only when it has owner
+root and no write permission for anybody else.
+Some exceptionally
+paranoid systems even require that there be no other hard links to the file.
+.PP
+Modern systems use the Pluggable Authentication Modules library (PAM).
+With PAM a standalone plus sign is considered a wildcard
+character which means "any host" only when the word
+.I promiscuous
+is added to the auth component line in your PAM file for
+the particular service
+.RB "(e.g., " rlogin ).
+.SH EXAMPLES
+Below are some example
+.I /etc/host.equiv
+or
+.I \[ti]/.rhosts
+files.
+.PP
+Allow any user to log in from any host:
+.PP
+.in +4n
+.EX
++
+.EE
+.in
+.PP
+Allow any user from
+.I host
+with a matching local account to log in:
+.PP
+.in +4n
+.EX
+host
+.EE
+.in
+.PP
+Note: the use of
+.I +host
+is never a valid syntax,
+including attempting to specify that any user from the host is allowed.
+.PP
+Allow any user from
+.I host
+to log in:
+.PP
+.in +4n
+.EX
+host +
+.EE
+.in
+.PP
+Note: this is distinct from the previous example
+since it does not require a matching local account.
+.PP
+Allow
+.I user
+from
+.I host
+to log in as any non-root user:
+.PP
+.in +4n
+.EX
+host user
+.EE
+.in
+.PP
+Allow all users with matching local accounts from
+.I host
+to log in except for
+.IR baduser :
+.PP
+.in +4n
+.EX
+host \-baduser
+host
+.EE
+.in
+.PP
+Deny all users from
+.IR host :
+.PP
+.in +4n
+.EX
+\-host
+.EE
+.in
+.PP
+Note: the use of
+.I "\-host\ \-user"
+is never a valid syntax,
+including attempting to specify that a particular user from the host
+is not trusted.
+.PP
+Allow all users with matching local accounts on all hosts in a
+.IR netgroup :
+.PP
+.in +4n
+.EX
++@netgroup
+.EE
+.in
+.PP
+Disallow all users on all hosts in a
+.IR netgroup :
+.PP
+.in +4n
+.EX
+\-@netgroup
+.EE
+.in
+.PP
+Allow all users in a
+.I netgroup
+to log in from
+.I host
+as any non-root user:
+.PP
+.in +4n
+.EX
+host +@netgroup
+.EE
+.in
+.PP
+Allow all users with matching local accounts on all hosts in a
+.I netgroup
+except
+.IR baduser :
+.PP
+.in +4n
+.EX
++@netgroup \-baduser
++@netgroup
+.EE
+.in
+.PP
+Note: the deny statements must always precede the allow statements because
+the file is processed sequentially until the first matching rule is found.
+.SH SEE ALSO
+.BR rhosts (5),
+.BR rlogind (8),
+.BR rshd (8)
diff --git a/man5/intro.5 b/man5/intro.5
new file mode 100644
index 0000000..d30e194
--- /dev/null
+++ b/man5/intro.5
@@ -0,0 +1,23 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified Sat Jul 24 17:06:52 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jan 14 00:34:09 1996 by Andries Brouwer (aeb@cwi.nl)
+.TH intro 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+intro \- introduction to file formats and filesystems
+.SH DESCRIPTION
+Section 5 of the manual describes various file formats,
+as well as the corresponding C structures, if any.
+.PP
+In addition,
+this section contains a number of pages that document various filesystems.
+.SH NOTES
+.SS Authors and copyright conditions
+Look at the header of the manual page source for the author(s) and copyright
+conditions.
+Note that these can be different from page to page!
+.SH SEE ALSO
+.BR standards (7)
diff --git a/man5/issue.5 b/man5/issue.5
new file mode 100644
index 0000000..98dfe68
--- /dev/null
+++ b/man5/issue.5
@@ -0,0 +1,24 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified Sun Jul 25 11:06:22 1993 by Rik Faith <faith@cs.unc.edu>
+.\" Modified Mon Oct 21 17:47:19 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
+.TH issue 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+issue \- prelogin message and identification file
+.SH DESCRIPTION
+.I /etc/issue
+is a text file which contains a message or
+system identification to be printed before the login prompt.
+It may contain various \fB@\fP\fIchar\fP and \fB\e\fP\fIchar\fP
+sequences, if supported by the
+.BR getty -type
+program employed on the system.
+.SH FILES
+.I /etc/issue
+.SH SEE ALSO
+.BR motd (5),
+.BR agetty (8),
+.BR mingetty (8)
diff --git a/man5/locale.5 b/man5/locale.5
new file mode 100644
index 0000000..051e5ed
--- /dev/null
+++ b/man5/locale.5
@@ -0,0 +1,1316 @@
+.\" Copyright (C) 1994 Jochen Hein (Hein@Student.TU-Clausthal.de)
+.\" Copyright (C) 2008 Petr Baudis (pasky@suse.cz)
+.\" Copyright (C) 2014 Michael Kerrisk <mtk@manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" 2008-06-17 Petr Baudis <pasky@suse.cz>
+.\" LC_TIME: Describe first_weekday and first_workday
+.\"
+.TH locale 5 2023-02-05 "Linux man-pages 6.05.01"
+.SH NAME
+locale \- describes a locale definition file
+.SH DESCRIPTION
+The
+.B locale
+definition file contains all the information that the
+.BR localedef (1)
+command needs to convert it into the binary locale database.
+.PP
+The definition files consist of sections which each describe a
+locale category in detail.
+See
+.BR locale (7)
+for additional details for these categories.
+.SS Syntax
+The locale definition file starts with a header that may consist
+of the following keywords:
+.TP
+.I escape_char
+is followed by a character that should be used as the
+escape-character for the rest of the file to mark characters that
+should be interpreted in a special way.
+It defaults to the backslash (\e).
+.TP
+.I comment_char
+is followed by a character that will be used as the
+comment-character for the rest of the file.
+It defaults to the number sign (#).
+.PP
+The locale definition has one part for each locale category.
+Each part can be copied from another existing locale or
+can be defined from scratch.
+If the category should be copied,
+the only valid keyword in the definition is
+.I copy
+followed by the name of the locale in double quotes which should be
+copied.
+The exceptions for this rule are
+.B LC_COLLATE
+and
+.B LC_CTYPE
+where a
+.I copy
+statement can be followed by locale-specific rules and selected overrides.
+.PP
+When defining a locale or a category from scratch, an existing system-
+provided locale definition file should be used as a reference to follow
+common glibc conventions.
+.SS Locale category sections
+The following category sections are defined by POSIX:
+.IP \[bu] 3
+.B LC_CTYPE
+.IP \[bu]
+.B LC_COLLATE
+.IP \[bu]
+.B LC_MESSAGES
+.IP \[bu]
+.B LC_MONETARY
+.IP \[bu]
+.B LC_NUMERIC
+.IP \[bu]
+.B LC_TIME
+.PP
+In addition, since glibc 2.2,
+the GNU C library supports the following nonstandard categories:
+.IP \[bu] 3
+.B LC_ADDRESS
+.IP \[bu]
+.B LC_IDENTIFICATION
+.IP \[bu]
+.B LC_MEASUREMENT
+.IP \[bu]
+.B LC_NAME
+.IP \[bu]
+.B LC_PAPER
+.IP \[bu]
+.B LC_TELEPHONE
+.PP
+See
+.BR locale (7)
+for a more detailed description of each category.
+.SS LC_ADDRESS
+The definition starts with the string
+.I LC_ADDRESS
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I postal_fmt
+followed by a string containing field descriptors that define
+the format used for postal addresses in the locale.
+The following field descriptors are recognized:
+.RS
+.TP
+%n
+Person's name, possibly constructed with the
+.B LC_NAME
+.I name_fmt
+keyword (since glibc 2.24).
+.TP 4
+%a
+Care of person, or organization.
+.TP
+%f
+Firm name.
+.TP
+%d
+Department name.
+.TP
+%b
+Building name.
+.TP
+%s
+Street or block (e.g., Japanese) name.
+.TP
+%h
+House number or designation.
+.TP
+%N
+Insert an end-of-line if the previous descriptor's value was not an empty
+string; otherwise ignore.
+.TP
+%t
+Insert a space if the previous descriptor's value was not an empty string;
+otherwise ignore.
+.TP
+%r
+Room number, door designation.
+.TP
+%e
+Floor number.
+.TP
+%C
+Country designation, from the
+.I country_post
+keyword.
+.TP
+%l
+Local township within town or city (since glibc 2.24).
+.TP
+%z
+Zip number, postal code.
+.TP
+%T
+Town, city.
+.TP
+%S
+State, province, or prefecture.
+.TP
+%c
+Country, as taken from data record.
+.PP
+Each field descriptor may have an \[aq]R\[aq] after
+the \[aq]%\[aq] to specify that the
+information is taken from a Romanized version string of the
+entity.
+.RE
+.TP
+.I country_name
+followed by the country name in the language of the current document
+(e.g., "Deutschland" for the
+.B de_DE
+locale).
+.TP
+.I country_post
+followed by the abbreviation of the country (see CERT_MAILCODES).
+.TP
+.I country_ab2
+followed by the two-letter abbreviation of the country (ISO 3166).
+.TP
+.I country_ab3
+followed by the three-letter abbreviation of the country (ISO 3166).
+.TP
+.I country_num
+followed by the numeric country code (ISO 3166).
+.TP
+.I country_car
+followed by the international license plate country code.
+.TP
+.I country_isbn
+followed by the ISBN code (for books).
+.TP
+.I lang_name
+followed by the language name in the language of the current document.
+.TP
+.I lang_ab
+followed by the two-letter abbreviation of the language (ISO 639).
+.TP
+.I lang_term
+followed by the three-letter abbreviation of the language (ISO 639-2/T).
+.TP
+.I lang_lib
+followed by the three-letter abbreviation of the language for library
+use (ISO 639-2/B).
+Applications should in general prefer
+.I lang_term
+over
+.IR lang_lib .
+.PP
+The
+.B LC_ADDRESS
+definition ends with the string
+.IR "END LC_ADDRESS" .
+.SS LC_CTYPE
+The definition starts with the string
+.I LC_CTYPE
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I upper
+followed by a list of uppercase letters.
+The letters
+.B A
+through
+.B Z
+are included automatically.
+Characters also specified as
+.BR cntrl ,
+.BR digit ,
+.BR punct ,
+or
+.B space
+are not allowed.
+.TP
+.I lower
+followed by a list of lowercase letters.
+The letters
+.B a
+through
+.B z
+are included automatically.
+Characters also specified as
+.BR cntrl ,
+.BR digit ,
+.BR punct ,
+or
+.B space
+are not allowed.
+.TP
+.I alpha
+followed by a list of letters.
+All character specified as either
+.B upper
+or
+.B lower
+are automatically included.
+Characters also specified as
+.BR cntrl ,
+.BR digit ,
+.BR punct ,
+or
+.B space
+are not allowed.
+.TP
+.I digit
+followed by the characters classified as numeric digits.
+Only the
+digits
+.B 0
+through
+.B 9
+are allowed.
+They are included by default in this class.
+.TP
+.I space
+followed by a list of characters defined as white-space
+characters.
+Characters also specified as
+.BR upper ,
+.BR lower ,
+.BR alpha ,
+.BR digit ,
+.BR graph ,
+or
+.B xdigit
+are not allowed.
+The characters
+.BR <space> ,
+.BR <form-feed> ,
+.BR <newline> ,
+.BR <carriage-return> ,
+.BR <tab> ,
+and
+.B <vertical-tab>
+are automatically included.
+.TP
+.I cntrl
+followed by a list of control characters.
+Characters also specified as
+.BR upper ,
+.BR lower ,
+.BR alpha ,
+.BR digit ,
+.BR punct ,
+.BR graph ,
+.BR print ,
+or
+.B xdigit
+are not allowed.
+.TP
+.I punct
+followed by a list of punctuation characters.
+Characters also
+specified as
+.BR upper ,
+.BR lower ,
+.BR alpha ,
+.BR digit ,
+.BR cntrl ,
+.BR xdigit ,
+or the
+.B <space>
+character are not allowed.
+.TP
+.I graph
+followed by a list of printable characters, not including the
+.B <space>
+character.
+The characters defined as
+.BR upper ,
+.BR lower ,
+.BR alpha ,
+.BR digit ,
+.BR xdigit ,
+and
+.B punct
+are automatically included.
+Characters also specified as
+.B cntrl
+are not allowed.
+.TP
+.I print
+followed by a list of printable characters, including the
+.B <space>
+character.
+The characters defined as
+.BR upper ,
+.BR lower ,
+.BR alpha ,
+.BR digit ,
+.BR xdigit ,
+.BR punct ,
+and the
+.B <space>
+character are automatically included.
+Characters also specified as
+.B cntrl
+are not allowed.
+.TP
+.I xdigit
+followed by a list of characters classified as hexadecimal
+digits.
+The decimal digits must be included followed by one or
+more set of six characters in ascending order.
+The following
+characters are included by default:
+.B 0
+through
+.BR 9 ,
+.B a
+through
+.BR f ,
+.B A
+through
+.BR F .
+.TP
+.I blank
+followed by a list of characters classified as
+.BR blank .
+The characters
+.B <space>
+and
+.B <tab>
+are automatically included.
+.TP
+.I charclass
+followed by a list of locale-specific character class names
+which are then to be defined in the locale.
+.TP
+.I toupper
+followed by a list of mappings from lowercase to uppercase
+letters.
+Each mapping is a pair of a lowercase and an uppercase letter
+separated with a
+.B ,
+and enclosed in parentheses.
+.TP
+.I tolower
+followed by a list of mappings from uppercase to lowercase
+letters.
+If the keyword tolower is not present, the reverse of the
+toupper list is used.
+.TP
+.I map totitle
+followed by a list of mapping pairs of
+characters and letters
+to be used in titles (headings).
+.TP
+.I class
+followed by a locale-specific character class definition,
+starting with the class name followed by the characters
+belonging to the class.
+.TP
+.I charconv
+followed by a list of locale-specific character mapping names
+which are then to be defined in the locale.
+.TP
+.I outdigit
+followed by a list of alternate output digits for the locale.
+.TP
+.I map to_inpunct
+followed by a list of mapping pairs of
+alternate digits and separators
+for input digits for the locale.
+.TP
+.I map to_outpunct
+followed by a list of mapping pairs of
+alternate separators
+for output for the locale.
+.TP
+.I translit_start
+marks the start of the transliteration rules section.
+The section can contain the
+.I include
+keyword in the beginning followed by
+locale-specific rules and overrides.
+Any rule specified in the locale file
+will override any rule
+copied or included from other files.
+In case of duplicate rule definitions in the locale file,
+only the first rule is used.
+.IP
+A transliteration rule consist of a character to be transliterated
+followed by a list of transliteration targets separated by semicolons.
+The first target which can be presented in the target character set
+is used, if none of them can be used the
+.I default_missing
+character will be used instead.
+.TP
+.I include
+in the transliteration rules section includes
+a transliteration rule file
+(and optionally a repertoire map file).
+.TP
+.I default_missing
+in the transliteration rules section
+defines the default character to be used for
+transliteration where none of the targets cannot be presented
+in the target character set.
+.TP
+.I translit_end
+marks the end of the transliteration rules.
+.PP
+The
+.B LC_CTYPE
+definition ends with the string
+.IR "END LC_CTYPE" .
+.SS LC_COLLATE
+Note that glibc does not support all POSIX-defined options,
+only the options described below are supported (as of glibc 2.23).
+.PP
+The definition starts with the string
+.I LC_COLLATE
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I coll_weight_max
+followed by the number representing used collation levels.
+This keyword is recognized but ignored by glibc.
+.TP
+.I collating\-element
+followed by the definition of a collating-element symbol
+representing a multicharacter collating element.
+.TP
+.I collating\-symbol
+followed by the definition of a collating symbol
+that can be used in collation order statements.
+.TP
+.I define
+followed by
+.B string
+to be evaluated in an
+.I ifdef
+.B string
+/
+.I else
+/
+.I endif
+construct.
+.TP
+.I reorder\-after
+followed by a redefinition of a collation rule.
+.TP
+.I reorder\-end
+marks the end of the redefinition of a collation rule.
+.TP
+.I reorde\r-sections\-after
+followed by a script name to reorder listed scripts after.
+.TP
+.I reorder\-sections\-end
+marks the end of the reordering of sections.
+.TP
+.I script
+followed by a declaration of a script.
+.TP
+.I symbol\-equivalence
+followed by a collating-symbol to be equivalent to another defined
+collating-symbol.
+.PP
+The collation rule definition starts with a line:
+.TP
+.I order_start
+followed by a list of keywords chosen from
+.BR forward ,
+.BR backward ,
+or
+.BR position .
+The order definition consists of lines that describe the collation
+order and is terminated with the keyword
+.IR order_end .
+.PP
+The
+.B LC_COLLATE
+definition ends with the string
+.IR "END LC_COLLATE" .
+.SS LC_IDENTIFICATION
+The definition starts with the string
+.I LC_IDENTIFICATION
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I title
+followed by the title of the locale document
+(e.g., "Maori language locale for New Zealand").
+.TP
+.I source
+followed by the name of the organization that maintains this document.
+.TP
+.I address
+followed by the address of the organization that maintains this document.
+.TP
+.I contact
+followed by the name of the contact person at
+the organization that maintains this document.
+.TP
+.I email
+followed by the email address of the person or
+organization that maintains this document.
+.TP
+.I tel
+followed by the telephone number (in international format)
+of the organization that maintains this document.
+As of glibc 2.24, this keyword is deprecated in favor of
+other contact methods.
+.TP
+.I fax
+followed by the fax number (in international format)
+of the organization that maintains this document.
+As of glibc 2.24, this keyword is deprecated in favor of
+other contact methods.
+.TP
+.I language
+followed by the name of the language to which this document applies.
+.TP
+.I territory
+followed by the name of the country/geographic extent
+to which this document applies.
+.TP
+.I audience
+followed by a description of the audience for which this document is
+intended.
+.TP
+.I application
+followed by a description of any special application
+for which this document is intended.
+.TP
+.I abbreviation
+followed by the short name for provider of the source of this document.
+.TP
+.I revision
+followed by the revision number of this document.
+.TP
+.I date
+followed by the revision date of this document.
+.PP
+In addition, for each of the categories defined by the document,
+there should be a line starting with the keyword
+.IR category ,
+followed by:
+.IP (1) 5
+a string that identifies this locale category definition,
+.IP (2)
+a semicolon, and
+.IP (3)
+one of the
+.B LC_*
+identifiers.
+.PP
+The
+.B LC_IDENTIFICATION
+definition ends with the string
+.IR "END LC_IDENTIFICATION" .
+.SS LC_MESSAGES
+The definition starts with the string
+.I LC_MESSAGES
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I yesexpr
+followed by a regular expression that describes possible
+yes-responses.
+.TP
+.I noexpr
+followed by a regular expression that describes possible
+no-responses.
+.TP
+.I yesstr
+followed by the output string corresponding to "yes".
+.TP
+.I nostr
+followed by the output string corresponding to "no".
+.PP
+The
+.B LC_MESSAGES
+definition ends with the string
+.IR "END LC_MESSAGES" .
+.SS LC_MEASUREMENT
+The definition starts with the string
+.I LC_MEASUREMENT
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I measurement
+followed by number identifying the standard used for measurement.
+The following values are recognized:
+.RS
+.TP 4
+.B 1
+Metric.
+.TP
+.B 2
+US customary measurements.
+.RE
+.PP
+The
+.B LC_MEASUREMENT
+definition ends with the string
+.IR "END LC_MEASUREMENT" .
+.SS LC_MONETARY
+The definition starts with the string
+.I LC_MONETARY
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I int_curr_symbol
+followed by the international currency symbol.
+This must be a
+4-character string containing the international currency symbol as
+defined by the ISO 4217 standard (three characters) followed by a
+separator.
+.TP
+.I currency_symbol
+followed by the local currency symbol.
+.TP
+.I mon_decimal_point
+followed by the single-character string that will be used as the
+decimal delimiter when formatting monetary quantities.
+.TP
+.I mon_thousands_sep
+followed by the single-character string that will be used as a group
+separator when formatting monetary quantities.
+.TP
+.I mon_grouping
+followed by a sequence of integers separated by semicolons that
+describe the formatting of monetary quantities.
+See
+.I grouping
+below for details.
+.TP
+.I positive_sign
+followed by a string that is used to indicate a positive sign for
+monetary quantities.
+.TP
+.I negative_sign
+followed by a string that is used to indicate a negative sign for
+monetary quantities.
+.TP
+.I int_frac_digits
+followed by the number of fractional digits that should be used when
+formatting with the
+.IR int_curr_symbol .
+.TP
+.I frac_digits
+followed by the number of fractional digits that should be used when
+formatting with the
+.IR currency_symbol .
+.TP
+.I p_cs_precedes
+followed by an integer that indicates the placement of
+.I currency_symbol
+for a nonnegative formatted monetary quantity:
+.RS
+.TP 4
+.B 0
+the symbol succeeds the value.
+.TP
+.B 1
+the symbol precedes the value.
+.RE
+.TP
+.I p_sep_by_space
+followed by an integer that indicates the separation of
+.IR currency_symbol ,
+the sign string, and the value for a nonnegative formatted monetary quantity.
+The following values are recognized:
+.RS
+.TP 4
+.B 0
+No space separates the currency symbol and the value.
+.TP
+.B 1
+If the currency symbol and the sign string are adjacent,
+a space separates them from the value;
+otherwise a space separates the currency symbol and the value.
+.TP
+.B 2
+If the currency symbol and the sign string are adjacent,
+a space separates them from the value;
+otherwise a space separates the sign string and the value.
+.RE
+.TP
+.I n_cs_precedes
+followed by an integer that indicates the placement of
+.I currency_symbol
+for a negative formatted monetary quantity.
+The same values are recognized as for
+.IR p_cs_precedes .
+.TP
+.I n_sep_by_space
+followed by an integer that indicates the separation of
+.IR currency_symbol ,
+the sign string, and the value for a negative formatted monetary quantity.
+The same values are recognized as for
+.IR p_sep_by_space .
+.TP
+.I p_sign_posn
+followed by an integer that indicates where the
+.I positive_sign
+should be placed for a nonnegative monetary quantity:
+.RS
+.TP 4
+.B 0
+Parentheses enclose the quantity and the
+.I currency_symbol
+or
+.IR int_curr_symbol .
+.TP
+.B 1
+The sign string precedes the quantity and the
+.I currency_symbol
+or the
+.IR int_curr_symbol .
+.TP
+.B 2
+The sign string succeeds the quantity and the
+.I currency_symbol
+or the
+.IR int_curr_symbol .
+.TP
+.B 3
+The sign string precedes the
+.I currency_symbol
+or the
+.IR int_curr_symbol .
+.TP
+.B 4
+The sign string succeeds the
+.I currency_symbol
+or the
+.IR int_curr_symbol .
+.RE
+.TP
+.I n_sign_posn
+followed by an integer that indicates where the
+.I negative_sign
+should be placed for a negative monetary quantity.
+The same values are recognized as for
+.IR p_sign_posn .
+.TP
+.I int_p_cs_precedes
+followed by an integer that indicates the placement of
+.I int_curr_symbol
+for a nonnegative internationally formatted monetary quantity.
+The same values are recognized as for
+.IR p_cs_precedes .
+.TP
+.I int_n_cs_precedes
+followed by an integer that indicates the placement of
+.I int_curr_symbol
+for a negative internationally formatted monetary quantity.
+The same values are recognized as for
+.IR p_cs_precedes .
+.TP
+.I int_p_sep_by_space
+followed by an integer that indicates the separation of
+.IR int_curr_symbol ,
+the sign string,
+and the value for a nonnegative internationally formatted monetary quantity.
+The same values are recognized as for
+.IR p_sep_by_space .
+.TP
+.I int_n_sep_by_space
+followed by an integer that indicates the separation of
+.IR int_curr_symbol ,
+the sign string,
+and the value for a negative internationally formatted monetary quantity.
+The same values are recognized as for
+.IR p_sep_by_space .
+.TP
+.I int_p_sign_posn
+followed by an integer that indicates where the
+.I positive_sign
+should be placed for a nonnegative
+internationally formatted monetary quantity.
+The same values are recognized as for
+.IR p_sign_posn .
+.TP
+.I int_n_sign_posn
+followed by an integer that indicates where the
+.I negative_sign
+should be placed for a negative
+internationally formatted monetary quantity.
+The same values are recognized as for
+.IR p_sign_posn .
+.PP
+The
+.B LC_MONETARY
+definition ends with the string
+.IR "END LC_MONETARY" .
+.SS LC_NAME
+The definition starts with the string
+.I LC_NAME
+in the first column.
+.PP
+Various keywords are allowed, but only
+.I name_fmt
+is mandatory.
+Other keywords are needed only if there is common convention to
+use the corresponding salutation in this locale.
+The allowed keywords are as follows:
+.TP
+.I name_fmt
+followed by a string containing field descriptors that define
+the format used for names in the locale.
+The following field descriptors are recognized:
+.RS
+.TP 4
+%f
+Family name(s).
+.TP
+%F
+Family names in uppercase.
+.TP
+%g
+First given name.
+.TP
+%G
+First given initial.
+.TP
+%l
+First given name with Latin letters.
+.TP
+%o
+Other shorter name.
+.TP
+%m
+Additional given name(s).
+.TP
+%M
+Initials for additional given name(s).
+.TP
+%p
+Profession.
+.TP
+%s
+Salutation, such as "Doctor".
+.TP
+%S
+Abbreviated salutation, such as "Mr." or "Dr.".
+.TP
+%d
+Salutation, using the FDCC-sets conventions.
+.\" 1 for the name_gen
+.\" In glibc 2.19, %d1 is used in only:
+.\" /home/mtk/ARCHIVE/GLIBC/glibc-2.19/localedata/locales/bem_ZM
+.\" /home/mtk/ARCHIVE/GLIBC/glibc-2.19/localedata/locales/zh_HK
+.\" In glibc 2.19, %d[2-5] appear to be not used at all
+.\" 2 for name_mr
+.\" 3 for name_mrs
+.\" 4 for name_miss
+.\" 5 for name_ms
+.TP
+%t
+If the preceding field descriptor resulted in an empty string,
+then the empty string, otherwise a space character.
+.RE
+.TP
+.I name_gen
+followed by the general salutation for any gender.
+.TP
+.I name_mr
+followed by the salutation for men.
+.TP
+.I name_mrs
+followed by the salutation for married women.
+.TP
+.I name_miss
+followed by the salutation for unmarried women.
+.TP
+.I name_ms
+followed by the salutation valid for all women.
+.PP
+The
+.B LC_NAME
+definition ends with the string
+.IR "END LC_NAME" .
+.SS LC_NUMERIC
+The definition starts with the string
+.I LC_NUMERIC
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I decimal_point
+followed by the single-character string that will be used as the
+decimal delimiter when formatting numeric quantities.
+.TP
+.I thousands_sep
+followed by the single-character string that will be used as a group
+separator when formatting numeric quantities.
+.TP
+.I grouping
+followed by a sequence of integers separated by semicolons
+that describe the formatting of numeric quantities.
+.IP
+Each integer specifies the number of digits in a group.
+The first integer defines the size of the group immediately
+to the left of the decimal delimiter.
+Subsequent integers define succeeding groups to the
+left of the previous group.
+If the last integer is not \-1, then the size of the previous group
+(if any) is repeatedly used for the remainder of the digits.
+If the last integer is \-1, then no further grouping is performed.
+.PP
+The
+.B LC_NUMERIC
+definition ends with the string
+.IR "END LC_NUMERIC" .
+.SS LC_PAPER
+The definition starts with the string
+.I LC_PAPER
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I height
+followed by the height, in millimeters, of the standard paper format.
+.TP
+.I width
+followed by the width, in millimeters, of the standard paper format.
+.PP
+The
+.B LC_PAPER
+definition ends with the string
+.IR "END LC_PAPER" .
+.SS LC_TELEPHONE
+The definition starts with the string
+.I LC_TELEPHONE
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I tel_int_fmt
+followed by a string that contains field descriptors that identify
+the format used to dial international numbers.
+The following field descriptors are recognized:
+.RS
+.TP 4
+%a
+Area code without nationwide prefix (the prefix is often "00").
+.TP
+%A
+Area code including nationwide prefix.
+.TP
+%l
+Local number (within area code).
+.TP
+%e
+Extension (to local number).
+.TP
+%c
+Country code.
+.TP
+%C
+Alternate carrier service code used for dialing abroad.
+.TP
+%t
+If the preceding field descriptor resulted in an empty string,
+then the empty string, otherwise a space character.
+.RE
+.TP
+.I tel_dom_fmt
+followed by a string that contains field descriptors that identify
+the format used to dial domestic numbers.
+The recognized field descriptors are the same as for
+.IR tel_int_fmt .
+.TP
+.I int_select
+followed by the prefix used to call international phone numbers.
+.TP
+.I int_prefix
+followed by the prefix used from other countries to dial this country.
+.PP
+The
+.B LC_TELEPHONE
+definition ends with the string
+.IR "END LC_TELEPHONE" .
+.SS LC_TIME
+The definition starts with the string
+.I LC_TIME
+in the first column.
+.PP
+The following keywords are allowed:
+.TP
+.I abday
+followed by a list of abbreviated names of the days of the week.
+The list starts with the first day of the week
+as specified by
+.I week
+(Sunday by default).
+See NOTES.
+.TP
+.I day
+followed by a list of names of the days of the week.
+The list starts with the first day of the week
+as specified by
+.I week
+(Sunday by default).
+See NOTES.
+.TP
+.I abmon
+followed by a list of abbreviated month names.
+.TP
+.I mon
+followed by a list of month names.
+.TP
+.I d_t_fmt
+followed by the appropriate date and time format
+(for syntax, see
+.BR strftime (3)).
+.TP
+.I d_fmt
+followed by the appropriate date format
+(for syntax, see
+.BR strftime (3)).
+.TP
+.I t_fmt
+followed by the appropriate time format
+(for syntax, see
+.BR strftime (3)).
+.TP
+.I am_pm
+followed by the appropriate representation of the
+.B am
+and
+.B pm
+strings.
+This should be left empty for locales not using AM/PM convention.
+.TP
+.I t_fmt_ampm
+followed by the appropriate time format
+(for syntax, see
+.BR strftime (3))
+when using 12h clock format.
+This should be left empty for locales not using AM/PM convention.
+.TP
+.I era
+followed by semicolon-separated strings that define how years are
+counted and displayed for each era in the locale.
+Each string has the following format:
+.RS
+.PP
+.IR direction ":" offset ":" start_date ":" end_date ":" era_name ":" era_format
+.PP
+The fields are to be defined as follows:
+.TP 4
+.I direction
+Either
+.B +
+or
+.BR \- .
+.B +
+means the years closer to
+.I start_date
+have lower numbers than years closer to
+.IR end_date .
+.B \-
+means the opposite.
+.TP
+.I offset
+The number of the year closest to
+.I start_date
+in the era, corresponding to the
+.I %Ey
+descriptor (see
+.BR strptime (3)).
+.TP
+.I start_date
+The start of the era in the form of
+.IR yyyy/mm/dd .
+Years prior AD 1 are represented as negative numbers.
+.TP
+.I end_date
+The end of the era in the form of
+.IR yyyy/mm/dd ,
+or one of the two special values of
+.B \-*
+or
+.BR +* .
+.B \-*
+means the ending date is the beginning of time.
+.B +*
+means the ending date is the end of time.
+.TP
+.I era_name
+The name of the era corresponding to the
+.I %EC
+descriptor (see
+.BR strptime (3)).
+.TP
+.I era_format
+The format of the year in the era corresponding to the
+.I %EY
+descriptor (see
+.BR strptime (3)).
+.RE
+.TP
+.I era_d_fmt
+followed by the format of the date in alternative era notation,
+corresponding to the
+.I %Ex
+descriptor (see
+.BR strptime (3)).
+.TP
+.I era_t_fmt
+followed by the format of the time in alternative era notation,
+corresponding to the
+.I %EX
+descriptor (see
+.BR strptime (3)).
+.TP
+.I era_d_t_fmt
+followed by the format of the date and time in alternative era notation,
+corresponding to the
+.I %Ec
+descriptor (see
+.BR strptime (3)).
+.TP
+.I alt_digits
+followed by the alternative digits used for date and time in the locale.
+.TP
+.I week
+followed by a list of three values separated by semicolons:
+The number of days in a week (by default 7),
+a date of beginning of the week (by default corresponds to Sunday),
+and the minimal length of the first week in year (by default 4).
+Regarding the start of the week,
+.B 19971130
+shall be used for Sunday and
+.B 19971201
+shall be used for Monday.
+See NOTES.
+.TP
+.IR first_weekday " (since glibc 2.2)"
+followed by the number of the day from the
+.I day
+list to be shown as the first day of the week in calendar applications.
+The default value of
+.B 1
+corresponds to either Sunday or Monday depending
+on the value of the second
+.I week
+list item.
+See NOTES.
+.TP
+.IR first_workday " (since glibc 2.2)"
+followed by the number of the first working day from the
+.I day
+list.
+The default value is
+.BR 2 .
+See NOTES.
+.TP
+.I cal_direction
+followed by a number value that indicates the direction for the
+display of calendar dates, as follows:
+.RS
+.TP 4
+.B 1
+Left-right from top.
+.TP
+.B 2
+Top-down from left.
+.TP
+.B 3
+Right-left from top.
+.RE
+.TP
+.I date_fmt
+followed by the appropriate date representation for
+.BR date (1)
+(for syntax, see
+.BR strftime (3)).
+.PP
+The
+.B LC_TIME
+definition ends with the string
+.IR "END LC_TIME" .
+.SH FILES
+.TP
+.I /usr/lib/locale/locale\-archive
+Usual default locale archive location.
+.TP
+.I /usr/share/i18n/locales
+Usual default path for locale definition files.
+.SH STANDARDS
+POSIX.2.
+.SH NOTES
+The collective GNU C library community wisdom regarding
+.IR abday ,
+.IR day ,
+.IR week ,
+.IR first_weekday ,
+and
+.I first_workday
+states at
+https://sourceware.org/glibc/wiki/Locales
+the following:
+.IP \[bu] 3
+The value of the second
+.I week
+list item specifies the base of the
+.I abday
+and
+.I day
+lists.
+.IP \[bu]
+.I first_weekday
+specifies the offset of the first day-of-week in the
+.I abday
+and
+.I day
+lists.
+.IP \[bu]
+For compatibility reasons, all glibc locales should set the value of the
+second
+.I week
+list item to
+.B 19971130
+(Sunday) and base the
+.I abday
+and
+.I day
+lists appropriately, and set
+.I first_weekday
+and
+.I first_workday
+to
+.B 1
+or
+.BR 2 ,
+depending on whether the week and work week actually starts on Sunday or
+Monday for the locale.
+.\" .SH AUTHOR
+.\" Jochen Hein (Hein@Student.TU-Clausthal.de)
+.SH SEE ALSO
+.BR iconv (1),
+.BR locale (1),
+.BR localedef (1),
+.BR localeconv (3),
+.BR newlocale (3),
+.BR setlocale (3),
+.BR strftime (3),
+.BR strptime (3),
+.BR uselocale (3),
+.BR charmap (5),
+.BR charsets (7),
+.BR locale (7),
+.BR unicode (7),
+.BR utf\-8 (7)
diff --git a/man5/motd.5 b/man5/motd.5
new file mode 100644
index 0000000..b506c95
--- /dev/null
+++ b/man5/motd.5
@@ -0,0 +1,25 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified Sat Jul 24 17:08:16 1993 by Rik Faith <faith@cs.unc.edu>
+.\" Modified Mon Oct 21 17:47:19 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
+.TH motd 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+motd \- message of the day
+.SH DESCRIPTION
+The contents of
+.I /etc/motd
+are displayed by
+.BR login (1)
+after a successful login but just before it executes the login shell.
+.PP
+The abbreviation "motd" stands for "message of the day", and this file
+has been traditionally used for exactly that (it requires much less disk
+space than mail to all users).
+.SH FILES
+.I /etc/motd
+.SH SEE ALSO
+.BR login (1),
+.BR issue (5)
diff --git a/man5/networks.5 b/man5/networks.5
new file mode 100644
index 0000000..cf660e3
--- /dev/null
+++ b/man5/networks.5
@@ -0,0 +1,60 @@
+.\" Copyright (c) 2001 Martin Schulze <joey@infodrom.org>
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" 2008-09-04, mtk, taken from Debian downstream, with a few light edits
+.\"
+.TH networks 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+networks \- network name information
+.SH DESCRIPTION
+The file
+.I /etc/networks
+is a plain ASCII file that describes known DARPA networks and symbolic
+names for these networks.
+Each line represents a network and has the following structure:
+.PP
+.RS
+.I name number aliases ...
+.RE
+.PP
+where the fields are delimited by spaces or tabs.
+Empty lines are ignored.
+The hash character (\fB#\fP) indicates the start of a comment:
+this character, and the remaining characters up to
+the end of the current line,
+are ignored by library functions that process the file.
+.PP
+The field descriptions are:
+.TP
+.I name
+The symbolic name for the network.
+Network names can contain any printable characters except
+white-space characters or the comment character.
+.TP
+.I number
+The official number for this network in numbers-and-dots notation (see
+.BR inet (3)).
+The trailing ".0" (for the host component of the network address)
+may be omitted.
+.TP
+.I aliases
+Optional aliases for the network.
+.PP
+This file is read by the
+.BR route (8)
+and
+.BR netstat (8)
+utilities.
+Only Class A, B, or C networks are supported, partitioned networks
+(i.e., network/26 or network/28) are not supported by this file.
+.SH FILES
+.TP
+.I /etc/networks
+The networks definition file.
+.SH SEE ALSO
+.BR getnetbyaddr (3),
+.BR getnetbyname (3),
+.BR getnetent (3),
+.BR netstat (8),
+.BR route (8)
diff --git a/man5/nologin.5 b/man5/nologin.5
new file mode 100644
index 0000000..af006f5
--- /dev/null
+++ b/man5/nologin.5
@@ -0,0 +1,22 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified Sun Jul 25 11:06:34 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Corrected Mon Oct 21 17:47:19 EDT 1996 by Eric S. Raymond (esr@thyrsus.com)
+.TH nologin 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+nologin \- prevent unprivileged users from logging into the system
+.SH DESCRIPTION
+If the file \fI/etc/nologin\fP exists and is readable,
+.BR login (1)
+will allow access only to root.
+Other users will
+be shown the contents of this file and their logins will be refused.
+This provides a simple way of temporarily disabling all unprivileged logins.
+.SH FILES
+.I /etc/nologin
+.SH SEE ALSO
+.BR login (1),
+.BR shutdown (8)
diff --git a/man5/nscd.conf.5 b/man5/nscd.conf.5
new file mode 100644
index 0000000..041793e
--- /dev/null
+++ b/man5/nscd.conf.5
@@ -0,0 +1,342 @@
+.\" Copyright (c) 1999, 2000 SuSE GmbH Nuernberg, Germany
+.\" Author: Thorsten Kukuk <kukuk@suse.de>
+.\" Updates: Greg Banks <gbanks@linkedin.com> Copyright (c) 2021 Microsoft Corp.
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.TH nscd.conf 5 2023-02-05 "Linux man-pages 6.05.01"
+.SH NAME
+nscd.conf \- name service cache daemon configuration file
+.SH DESCRIPTION
+The file
+.I /etc/nscd.conf
+is read from
+.BR nscd (8)
+at startup.
+Each line specifies either an attribute and a value, or an
+attribute, service, and a value.
+Fields are separated either by SPACE
+or TAB characters.
+A \[aq]#\[aq] (number sign) indicates the beginning of a
+comment; following characters, up to the end of the line,
+are not interpreted by nscd.
+.PP
+Valid services are \fIpasswd\fP, \fIgroup\fP, \fIhosts\fP, \fIservices\fP,
+or \fInetgroup\fP.
+.PP
+.B logfile
+.I debug-file-name
+.RS
+Specifies name of the file to which debug info should be written.
+.RE
+.PP
+.B debug\-level
+.I value
+.RS
+Sets the desired debug level.
+0 hides debug info.
+1 shows general debug info.
+2 additionally shows data in cache dumps.
+3 (and above) shows all debug info.
+The default is 0.
+.RE
+.PP
+.B threads
+.I number
+.RS
+This is the initial number of threads that are started to wait for
+requests.
+At least five threads will always be created.
+The number of threads may increase dynamically up to
+.B max\-threads
+in response to demand from clients,
+but never decreases.
+.RE
+.PP
+.B max\-threads
+.I number
+.RS
+Specifies the maximum number of threads.
+The default is 32.
+.RE
+.PP
+.B server\-user
+.I user
+.RS
+If this option is set, nscd will run as this user and not as root.
+If a separate cache for every user is used (\-S parameter), this
+option is ignored.
+.RE
+.PP
+.B stat\-user
+.I user
+.RS
+Specifies the user who is allowed to request statistics.
+.RE
+.PP
+.B reload\-count
+unlimited |
+.I number
+.RS
+Sets a limit on the number of times a cached entry
+gets reloaded without being used
+before it gets removed.
+The limit can take values ranging from 0 to 254;
+values 255 or higher behave the same as
+.BR unlimited .
+Limit values can be specified in either decimal
+or hexadecimal with a "0x" prefix.
+The special value
+.B unlimited
+is case-insensitive.
+The default limit is 5.
+A limit of 0 turns off the reloading feature.
+See NOTES below for further discussion of reloading.
+.RE
+.PP
+.B paranoia
+.I <yes|no>
+.RS
+Enabling paranoia mode causes nscd to restart itself periodically.
+The default is no.
+.RE
+.PP
+.B restart\-interval
+.I time
+.RS
+Sets the restart interval to
+.I time
+seconds
+if periodic restart is enabled by enabling
+.B paranoia
+mode.
+The default is 3600.
+.RE
+.PP
+.B enable\-cache
+.I service
+.I <yes|no>
+.RS
+Enables or disables the specified
+.I service
+cache.
+The default is no.
+.RE
+.PP
+.B positive\-time\-to\-live
+.I service
+.I value
+.RS
+Sets the TTL (time-to-live) for positive entries (successful queries)
+in the specified cache for
+.IR service .
+.I Value
+is in seconds.
+Larger values increase cache hit rates and reduce mean
+response times, but increase problems with cache coherence.
+Note that for some name services (including specifically DNS)
+the TTL returned from the name service is used and
+this attribute is ignored.
+.RE
+.PP
+.B negative\-time\-to\-live
+.I service
+.I value
+.RS
+Sets the TTL (time-to-live) for negative entries (unsuccessful queries)
+in the specified cache for
+.IR service .
+.I Value
+is in seconds.
+Can result in significant performance improvements if there
+are several files owned by UIDs (user IDs) not in system databases (for
+example untarring the Linux kernel sources as root); should be kept small
+to reduce cache coherency problems.
+.RE
+.PP
+.B suggested\-size
+.I service
+.I value
+.RS
+This is the internal hash table size,
+.I value
+should remain a prime number for optimum efficiency.
+The default is 211.
+.RE
+.PP
+.B check\-files
+.I service
+.I <yes|no>
+.RS
+Enables or disables checking the file belonging to the specified
+.I service
+for changes.
+The files are
+.IR /etc/passwd ,
+.IR /etc/group ,
+.IR /etc/hosts ,
+.IR /etc/resolv.conf ,
+.IR /etc/services ,
+and
+.IR /etc/netgroup .
+The default is yes.
+.RE
+.PP
+.B persistent
+.I service
+.I <yes|no>
+.RS
+Keep the content of the cache for
+.I service
+over server restarts; useful when
+.B paranoia
+mode is set.
+The default is no.
+.RE
+.PP
+.B shared
+.I service
+.I <yes|no>
+.RS
+The memory mapping of the nscd databases for
+.I service
+is shared with the clients so
+that they can directly search in them instead of having to ask the
+daemon over the socket each time a lookup is performed.
+The default is no.
+Note that a cache miss will still result in
+asking the daemon over the socket.
+.RE
+.PP
+.B max\-db\-size
+.I service
+.I bytes
+.RS
+The maximum allowable size, in bytes, of the database files for the
+.IR service .
+The default is 33554432.
+.RE
+.PP
+.B auto\-propagate
+.I service
+.I <yes|no>
+.RS
+When set to
+.I no
+for
+.I passwd
+or
+.I group
+service, then the
+.I .byname
+requests are not added to
+.I passwd.byuid
+or
+.I group.bygid
+cache.
+This can help with tables containing multiple records for the same ID.
+The default is yes.
+This option is valid only for services
+.I passwd
+and
+.IR group .
+.RE
+.SH NOTES
+The default values stated in this manual page originate
+from the source code of
+.BR nscd (8)
+and are used if not overridden in the configuration file.
+The default values used in the configuration file of
+your distribution might differ.
+.SS Reloading
+.BR nscd (8)
+has a feature called reloading,
+whose behavior can be surprising.
+.PP
+Reloading is enabled when the
+.B reload-count
+attribute has a non-zero value.
+The default value in the source code enables reloading,
+although your distribution may differ.
+.PP
+When reloading is enabled,
+positive cached entries (the results of successful queries)
+do not simply expire when their TTL is up.
+Instead, at the expiry time,
+.B nscd
+will "reload",
+i.e.,
+re-issue to the name service the same query that created the cached entry,
+to get a new value to cache.
+Depending on
+.I /etc/nsswitch.conf
+this may mean that a DNS, LDAP, or NIS request is made.
+If the new query is successful,
+reloading will repeat when the new value would expire,
+until
+.B reload-count
+reloads have happened for the entry,
+and only then will it actually be removed from the cache.
+A request from a client which hits the entry will
+reset the reload counter on the entry.
+Purging the cache using
+.I nscd\~-i
+overrides the reload logic and removes the entry.
+.PP
+Reloading has the effect of extending cache entry TTLs
+without compromising on cache coherency,
+at the cost of additional load on the backing name service.
+Whether this is a good idea on your system depends on
+details of your applications' behavior,
+your name service,
+and the effective TTL values of your cache entries.
+Note that for some name services
+(for example, DNS),
+the effective TTL is the value returned from the name service and
+.I not
+the value of the
+.B positive\-time\-to\-live
+attribute.
+.PP
+Please consider the following advice carefully:
+.IP \[bu] 3
+If your application will make a second request for the same name,
+after more than 1 TTL but before
+.B reload\-count
+TTLs,
+and is sensitive to the latency of a cache miss,
+then reloading may be a good idea for you.
+.IP \[bu]
+If your name service is configured to return very short TTLs,
+and your applications only make requests rarely under normal circumstances,
+then reloading may result in additional load on your backing name service
+without any benefit to applications,
+which is probably a bad idea for you.
+.IP \[bu]
+If your name service capacity is limited,
+reloading may have the surprising effect of
+increasing load on your name service instead of reducing it,
+and may be a bad idea for you.
+.IP \[bu]
+Setting
+.B reload\-count
+to
+.B unlimited
+is almost never a good idea,
+as it will result in a cache that never expires entries
+and puts never-ending additional load on the backing name service.
+.PP
+Some distributions have an init script for
+.BR nscd (8)
+with a
+.I reload
+command which uses
+.I nscd\~-i
+to purge the cache.
+That use of the word "reload" is entirely different
+from the "reloading" described here.
+.SH SEE ALSO
+.BR nscd (8)
+.\" .SH AUTHOR
+.\" .B nscd
+.\" was written by Thorsten Kukuk and Ulrich Drepper.
diff --git a/man5/nss.5 b/man5/nss.5
new file mode 100644
index 0000000..d53e1cd
--- /dev/null
+++ b/man5/nss.5
@@ -0,0 +1,101 @@
+.\" Copyright (C) 2006 Red Hat, Inc. All rights reserved.
+.\" Author: Ulrich Drepper <drepper@redhat.com>
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-only
+.\"
+.TH nss 5 2023-02-05 "Linux man-pages 6.05.01"
+.SH NAME
+nss \- Name Service Switch configuration file
+.SH DESCRIPTION
+Each call to a function which retrieves data from a system database
+like the password or group database is handled by the Name Service
+Switch implementation in the GNU C library.
+The various services
+provided are implemented by independent modules, each of which
+naturally varies widely from the other.
+.PP
+The default implementations coming with the GNU C library are by
+default conservative and do not use unsafe data.
+This might be very costly in some situations, especially when the databases
+are large.
+Some modules allow the system administrator to request
+taking shortcuts if these are known to be safe.
+It is then the system administrator's responsibility to ensure the assumption
+is correct.
+.PP
+There are other modules where the implementation changed over time.
+If an implementation used to sacrifice speed for memory consumption,
+it might create problems if the preference is switched.
+.PP
+The
+.I /etc/default/nss
+file contains a number of variable assignments.
+Each variable controls the behavior of one or more
+NSS modules.
+White spaces are ignored.
+Lines beginning with \[aq]#\[aq]
+are treated as comments.
+.PP
+The variables currently recognized are:
+.TP
+\fBNETID_AUTHORITATIVE =\fR \fITRUE\fR|\fIFALSE\fR
+If set to TRUE, the NIS backend for the
+.BR initgroups (3)
+function will accept the information
+from the
+.I netid.byname
+NIS map as authoritative.
+This can speed up the function significantly if the
+.I group.byname
+map is large.
+The content of the
+.I netid.byname
+map is used \fBas is\fR.
+The system administrator has to make sure it is correctly generated.
+.TP
+\fBSERVICES_AUTHORITATIVE =\fR \fITRUE\fR|\fIFALSE\fR
+If set to TRUE, the NIS backend for the
+.BR getservbyname (3)
+and
+.BR getservbyname_r (3)
+functions will assume that the
+.I services.byservicename
+NIS map exists and is authoritative, particularly
+that it contains both keys with /proto and without /proto for both
+primary service names and service aliases.
+The system administrator has to make sure it is correctly generated.
+.TP
+\fBSETENT_BATCH_READ =\fR \fITRUE\fR|\fIFALSE\fR
+If set to TRUE, the NIS backend for the
+.BR setpwent (3)
+and
+.BR setgrent (3)
+functions will read the entire database at once and then
+hand out the requests one by one from memory with every corresponding
+.BR getpwent (3)
+or
+.BR getgrent (3)
+call respectively.
+Otherwise, each
+.BR getpwent (3)
+or
+.BR getgrent (3)
+call might result in a network communication with the server to get
+the next entry.
+.SH FILES
+\fI/etc/default/nss\fR
+.SH EXAMPLES
+The default configuration corresponds to the following configuration file:
+.PP
+.in +4n
+.EX
+NETID_AUTHORITATIVE=FALSE
+SERVICES_AUTHORITATIVE=FALSE
+SETENT_BATCH_READ=FALSE
+.EE
+.in
+.\" .SH AUTHOR
+.\" Ulrich Drepper <drepper@redhat.com>
+.\"
+.SH SEE ALSO
+\fInsswitch.conf\fR
diff --git a/man5/nsswitch.conf.5 b/man5/nsswitch.conf.5
new file mode 100644
index 0000000..49b288e
--- /dev/null
+++ b/man5/nsswitch.conf.5
@@ -0,0 +1,427 @@
+.\" Copyright (c) 1998, 1999 Thorsten Kukuk (kukuk@vt.uni-paderborn.de)
+.\" Copyright (c) 2011, Mark R. Bannister <cambridge@users.sourceforge.net>
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.TH nsswitch.conf 5 2023-05-03 "Linux man-pages 6.05.01"
+.SH NAME
+nsswitch.conf \- Name Service Switch configuration file
+.SH DESCRIPTION
+The Name Service Switch (NSS) configuration file,
+.IR /etc/nsswitch.conf ,
+is used by the GNU C Library and certain other applications to determine
+the sources from which to obtain name-service information in
+a range of categories,
+and in what order.
+Each category of information is identified by a database name.
+.PP
+The file is plain ASCII text, with columns separated by spaces or tab
+characters.
+The first column specifies the database name.
+The remaining columns describe the order of sources to query and a
+limited set of actions that can be performed by lookup result.
+.PP
+The following databases are understood by the GNU C Library:
+.TP 12
+.B aliases
+Mail aliases, used by
+.BR getaliasent (3)
+and related functions.
+.TP
+.B ethers
+Ethernet numbers.
+.TP
+.B group
+Groups of users, used by
+.BR getgrent (3)
+and related functions.
+.TP
+.B hosts
+Host names and numbers, used by
+.BR gethostbyname (3)
+and related functions.
+.TP
+.B initgroups
+Supplementary group access list, used by
+.BR getgrouplist (3)
+function.
+.TP
+.B netgroup
+Network-wide list of hosts and users, used for access rules.
+C libraries before glibc 2.1 supported netgroups only over NIS.
+.TP
+.B networks
+Network names and numbers, used by
+.BR getnetent (3)
+and related functions.
+.TP
+.B passwd
+User passwords, used by
+.BR getpwent (3)
+and related functions.
+.TP
+.B protocols
+Network protocols, used by
+.BR getprotoent (3)
+and related functions.
+.TP
+.B publickey
+Public and secret keys for Secure_RPC used by NFS and NIS+.
+.TP
+.B rpc
+Remote procedure call names and numbers, used by
+.BR getrpcbyname (3)
+and related functions.
+.TP
+.B services
+Network services, used by
+.BR getservent (3)
+and related functions.
+.TP
+.B shadow
+Shadow user passwords, used by
+.BR getspnam (3)
+and related functions.
+.PP
+The GNU C Library ignores databases with unknown names.
+Some applications use this to implement special handling for their own
+databases.
+For example,
+.BR sudo (8)
+consults the
+.B sudoers
+database.
+Delegation of subordinate user/group IDs
+can be configured using the
+.B subid
+database.
+Refer to
+.BR subuid (5)
+and
+.BR subgid (5)
+for more details.
+.PP
+Here is an example
+.I /etc/nsswitch.conf
+file:
+.PP
+.in +4n
+.EX
+passwd: compat
+group: compat
+shadow: compat
+\&
+hosts: dns [!UNAVAIL=return] files
+networks: nis [NOTFOUND=return] files
+ethers: nis [NOTFOUND=return] files
+protocols: nis [NOTFOUND=return] files
+rpc: nis [NOTFOUND=return] files
+services: nis [NOTFOUND=return] files
+.EE
+.in
+.PP
+The first column is the database name.
+The remaining columns specify:
+.IP \[bu] 3
+One or more service specifications, for example, "files", "db", or "nis".
+The order of the services on the line determines the order in which
+those services will be queried, in turn, until a result is found.
+.IP \[bu]
+Optional actions to perform if a particular result is obtained
+from the preceding service, for example, "[NOTFOUND=return]".
+.PP
+The service specifications supported on your system depend on the
+presence of shared libraries, and are therefore extensible.
+Libraries called
+.IB /lib/libnss_SERVICE.so. X
+will provide the named
+.IR SERVICE .
+On a standard installation, you can use
+"files", "db", "nis", and "nisplus".
+For the
+.B hosts
+database, you can additionally specify "dns".
+For the
+.BR passwd ,
+.BR group ,
+and
+.B shadow
+databases, you can additionally specify
+"compat" (see
+.B "Compatibility mode"
+below).
+The version number
+.B X
+may be 1 for glibc 2.0, or 2 for glibc 2.1 and later.
+On systems with additional libraries installed, you may have access to
+further services such as "hesiod", "ldap", "winbind", and "wins".
+.PP
+An action may also be specified following a service specification.
+The action modifies the behavior following a result obtained
+from the preceding data source.
+Action items take the general form:
+.PP
+.RS 4
+.RI [ STATUS = ACTION ]
+.br
+.RI [! STATUS = ACTION ]
+.RE
+.PP
+where
+.PP
+.RS 4
+.I STATUS
+=>
+.B success
+|
+.B notfound
+|
+.B unavail
+|
+.B tryagain
+.br
+.I ACTION
+=>
+.B return
+|
+.B continue
+|
+.B merge
+.RE
+.PP
+The ! negates the test, matching all possible results except the
+one specified.
+The case of the keywords is not significant.
+.PP
+The
+.I STATUS
+value is matched against the result of the lookup function called by
+the preceding service specification, and can be one of:
+.RS 4
+.TP 12
+.B success
+No error occurred and the requested entry is returned.
+The default action for this condition is "return".
+.TP
+.B notfound
+The lookup succeeded, but the requested entry was not found.
+The default action for this condition is "continue".
+.TP
+.B unavail
+The service is permanently unavailable.
+This can mean either that the
+required file cannot be read, or, for network services, that the server
+is not available or does not allow queries.
+The default action for this condition is "continue".
+.TP
+.B tryagain
+The service is temporarily unavailable.
+This could mean a file is
+locked or a server currently cannot accept more connections.
+The default action for this condition is "continue".
+.RE
+.PP
+The
+.I ACTION
+value can be one of:
+.RS 4
+.TP 12
+.B return
+Return a result now.
+Do not call any further lookup functions.
+However, for compatibility reasons, if this is the selected action for the
+.B group
+database and the
+.B notfound
+status, and the configuration file does not contain the
+.B initgroups
+line, the next lookup function is always called,
+without affecting the search result.
+.TP
+.B continue
+Call the next lookup function.
+.TP
+.B merge
+.I [SUCCESS=merge]
+is used between two database entries.
+When a group is located in the first of the two group entries,
+processing will continue on to the next one.
+If the group is also found in the next entry (and the group name and GID
+are an exact match), the member list of the second entry will be added
+to the group object to be returned.
+Available since glibc 2.24.
+Note that merging will not be done for
+.BR getgrent (3)
+nor will duplicate members be pruned when they occur in both entries
+being merged.
+.RE
+.SS Compatibility mode (compat)
+The NSS "compat" service is similar to "files" except that it
+additionally permits special entries in corresponding files
+for granting users or members of netgroups access to the system.
+The following entries are valid in this mode:
+.RS 4
+.PP
+For
+.B passwd
+and
+.B shadow
+databases:
+.RS 4
+.TP 12
+.BI + user
+Include the specified
+.I user
+from the NIS passwd/shadow map.
+.TP
+.BI +@ netgroup
+Include all users in the given
+.IR netgroup .
+.TP
+.BI \- user
+Exclude the specified
+.I user
+from the NIS passwd/shadow map.
+.TP
+.BI \-@ netgroup
+Exclude all users in the given
+.IR netgroup .
+.TP
+.B +
+Include every user, except previously excluded ones, from the
+NIS passwd/shadow map.
+.RE
+.PP
+For
+.B group
+database:
+.RS 4
+.TP 12
+.BI + group
+Include the specified
+.I group
+from the NIS group map.
+.TP
+.BI \- group
+Exclude the specified
+.I group
+from the NIS group map.
+.TP
+.B +
+Include every group, except previously excluded ones, from the
+NIS group map.
+.RE
+.RE
+.PP
+By default, the source is "nis", but this may be
+overridden by specifying any NSS service except "compat" itself
+as the source for the pseudo-databases
+.BR passwd_compat ,
+.BR group_compat ,
+and
+.BR shadow_compat .
+.SH FILES
+A service named
+.I SERVICE
+is implemented by a shared object library named
+.IB libnss_SERVICE.so. X
+that resides in
+.IR /lib .
+.RS 4
+.TP 25
+.PD 0
+.I /etc/nsswitch.conf
+NSS configuration file.
+.TP
+.IB /lib/libnss_compat.so. X
+implements "compat" source.
+.TP
+.IB /lib/libnss_db.so. X
+implements "db" source.
+.TP
+.IB /lib/libnss_dns.so. X
+implements "dns" source.
+.TP
+.IB /lib/libnss_files.so. X
+implements "files" source.
+.TP
+.IB /lib/libnss_hesiod.so. X
+implements "hesiod" source.
+.TP
+.IB /lib/libnss_nis.so. X
+implements "nis" source.
+.TP
+.IB /lib/libnss_nisplus.so. X
+implements "nisplus" source.
+.PD
+.RE
+.PP
+The following files are read when "files" source is specified
+for respective databases:
+.RS 4
+.TP 12
+.PD 0
+.B aliases
+.I /etc/aliases
+.TP
+.B ethers
+.I /etc/ethers
+.TP
+.B group
+.I /etc/group
+.TP
+.B hosts
+.I /etc/hosts
+.TP
+.B initgroups
+.I /etc/group
+.TP
+.B netgroup
+.I /etc/netgroup
+.TP
+.B networks
+.I /etc/networks
+.TP
+.B passwd
+.I /etc/passwd
+.TP
+.B protocols
+.I /etc/protocols
+.TP
+.B publickey
+.I /etc/publickey
+.TP
+.B rpc
+.I /etc/rpc
+.TP
+.B services
+.I /etc/services
+.TP
+.B shadow
+.I /etc/shadow
+.PD
+.RE
+.SH NOTES
+Starting with glibc 2.33,
+.\" https://sourceware.org/bugzilla/show_bug.cgi?id=12459
+.B nsswitch.conf
+is automatically reloaded if the file is changed.
+In earlier versions, the entire file was read only once within each process.
+If the file was later changed,
+the process would continue using the old configuration.
+.PP
+Traditionally, there was only a single source for service information,
+often in the form of a single configuration
+file (e.g., \fI/etc/passwd\fP).
+However, as other name services, such as the Network Information
+Service (NIS) and the Domain Name Service (DNS), became popular,
+a method was needed
+that would be more flexible than fixed search orders coded into
+the C library.
+The Name Service Switch mechanism,
+which was based on the mechanism used by
+Sun Microsystems in the Solaris 2 C library,
+introduced a cleaner solution to the problem.
+.SH SEE ALSO
+.BR getent (1),
+.BR nss (5)
diff --git a/man5/passwd.5 b/man5/passwd.5
new file mode 100644
index 0000000..9b9a136
--- /dev/null
+++ b/man5/passwd.5
@@ -0,0 +1,160 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\" Modified Mon Jan 5 20:24:40 MET 1998 by Michael Haardt
+.\" (michael@cantor.informatik.rwth-aachen.de)
+.TH passwd 5 2023-02-05 "Linux man-pages 6.05.01"
+.SH NAME
+passwd \- password file
+.SH DESCRIPTION
+The
+.I /etc/passwd
+file is a text file that describes user login accounts for the system.
+It should have read permission allowed for all users (many utilities, like
+.BR ls (1)
+use it to map user IDs to usernames), but write access only for the
+superuser.
+.PP
+In the good old days there was no great problem with this general
+read permission.
+Everybody could read the encrypted passwords, but the
+hardware was too slow to crack a well-chosen password, and moreover the
+basic assumption used to be that of a friendly user-community.
+These days many people run some version of the shadow password suite, where
+.I /etc/passwd
+has an \[aq]x\[aq] character in the password field,
+and the encrypted passwords are in
+.IR /etc/shadow ,
+which is readable by the superuser only.
+.PP
+If the encrypted password, whether in
+.I /etc/passwd
+or in
+.IR /etc/shadow ,
+is an empty string, login is allowed without even asking for a password.
+Note that this functionality may be intentionally disabled in applications,
+or configurable (for example using the
+.RB \[dq] nullok \[dq]
+or
+.RB \[dq] nonull \[dq]
+arguments to
+.BR pam_unix (8)).
+.PP
+If the encrypted password in
+.I /etc/passwd
+is "\fI*NP*\fP" (without the quotes),
+the shadow record should be obtained from an NIS+ server.
+.PP
+Regardless of whether shadow passwords are used, many system administrators
+use an asterisk (*) in the encrypted password field to make sure
+that this user can not authenticate themself using a
+password.
+(But see NOTES below.)
+.PP
+If you create a new login, first put an asterisk (*) in the password field,
+then use
+.BR passwd (1)
+to set it.
+.PP
+Each line of the file describes a single user,
+and contains seven colon-separated fields:
+.PP
+.in +4n
+.EX
+name:password:UID:GID:GECOS:directory:shell
+.EE
+.in
+.PP
+The field are as follows:
+.TP 12
+.I name
+This is the user's login name.
+It should not contain capital letters.
+.TP
+.I password
+This is either the encrypted user password,
+an asterisk (*), or the letter \[aq]x\[aq].
+(See
+.BR pwconv (8)
+for an explanation of \[aq]x\[aq].)
+.TP
+.I UID
+The privileged
+.I root
+login account (superuser) has the user ID 0.
+.TP
+.I GID
+This is the numeric primary group ID for this user.
+(Additional groups for the user are defined in the system group file; see
+.BR group (5)).
+.TP
+.I GECOS
+This field (sometimes called the "comment field")
+is optional and used only for informational purposes.
+Usually, it contains the full username.
+Some programs (for example,
+.BR finger (1))
+display information from this field.
+.IP
+GECOS stands for "General Electric Comprehensive Operating System",
+which was renamed to GCOS when
+GE's large systems division was sold to Honeywell.
+Dennis Ritchie has reported: "Sometimes we sent printer output or
+batch jobs to the GCOS machine.
+The gcos field in the password file was a place to stash the
+information for the $IDENTcard.
+Not elegant."
+.TP
+.I directory
+This is the user's home directory:
+the initial directory where the user is placed after logging in.
+The value in this field is used to set the
+.B HOME
+environment variable.
+.TP
+.I shell
+This is the program to run at login (if empty, use
+.IR /bin/sh ).
+If set to a nonexistent executable, the user will be unable to login
+through
+.BR login (1).
+The value in this field is used to set the
+.B SHELL
+environment variable.
+.SH FILES
+.I /etc/passwd
+.SH NOTES
+If you want to create user groups, there must be an entry in
+.IR /etc/group ,
+or no group will exist.
+.PP
+If the encrypted password is set to an asterisk (*), the user will be unable
+to login using
+.BR login (1),
+but may still login using
+.BR rlogin (1),
+run existing processes and initiate new ones through
+.BR rsh (1),
+.BR cron (8),
+.BR at (1),
+or mail filters, etc.
+Trying to lock an account by simply changing the
+shell field yields the same result and additionally allows the use of
+.BR su (1).
+.SH SEE ALSO
+.BR chfn (1),
+.BR chsh (1),
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR crypt (3),
+.BR getpwent (3),
+.BR getpwnam (3),
+.BR group (5),
+.BR shadow (5),
+.BR vipw (8)
diff --git a/man5/proc.5 b/man5/proc.5
new file mode 100644
index 0000000..9a48841
--- /dev/null
+++ b/man5/proc.5
@@ -0,0 +1,6965 @@
+'\" t
+.\" Copyright (C) 1994, 1995 by Daniel Quinlan (quinlan@yggdrasil.com)
+.\" and Copyright (C) 2002-2008,2017 Michael Kerrisk <mtk.manpages@gmail.com>
+.\" with networking additions from Alan Cox (A.Cox@swansea.ac.uk)
+.\" and scsi additions from Michael Neuffer (neuffer@mail.uni-mainz.de)
+.\" and sysctl additions from Andries Brouwer (aeb@cwi.nl)
+.\" and System V IPC (as well as various other) additions from
+.\" Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified 1995-05-17 by faith@cs.unc.edu
+.\" Minor changes by aeb and Marty Leisner (leisner@sdsp.mc.xerox.com).
+.\" Modified 1996-04-13, 1996-07-22 by aeb@cwi.nl
+.\" Modified 2001-12-16 by rwhron@earthlink.net
+.\" Modified 2002-07-13 by jbelton@shaw.ca
+.\" Modified 2002-07-22, 2003-05-27, 2004-04-06, 2004-05-25
+.\" by Michael Kerrisk <mtk.manpages@gmail.com>
+.\" 2004-11-17, mtk -- updated notes on /proc/loadavg
+.\" 2004-12-01, mtk, rtsig-max and rtsig-nr went away in Linux 2.6.8
+.\" 2004-12-14, mtk, updated 'statm', and fixed error in order of list
+.\" 2005-05-12, mtk, updated 'stat'
+.\" 2005-07-13, mtk, added /proc/sys/fs/mqueue/*
+.\" 2005-09-16, mtk, Added /proc/sys/fs/suid_dumpable
+.\" 2005-09-19, mtk, added /proc/zoneinfo
+.\" 2005-03-01, mtk, moved /proc/sys/fs/mqueue/* material to mq_overview.7.
+.\" 2008-06-05, mtk, Added /proc/[pid]/oom_score, /proc/[pid]/oom_adj,
+.\" /proc/[pid]/limits, /proc/[pid]/mountinfo, /proc/[pid]/mountstats,
+.\" and /proc/[pid]/fdinfo/*.
+.\" 2008-06-19, mtk, Documented /proc/[pid]/status.
+.\" 2008-07-15, mtk, added /proc/config.gz
+.\"
+.\" FIXME cross check against Documentation/filesystems/proc.txt
+.\" to see what information could be imported from that file
+.\" into this file.
+.\"
+.TH proc 5 2023-07-08 "Linux man-pages 6.05.01"
+.SH NAME
+proc \- process information, system information, and sysctl pseudo-filesystem
+.SH DESCRIPTION
+The
+.B proc
+filesystem is a pseudo-filesystem which provides an interface to
+kernel data structures.
+It is commonly mounted at
+.IR /proc .
+Typically, it is mounted automatically by the system,
+but it can also be mounted manually using a command such as:
+.PP
+.in +4n
+.EX
+mount \-t proc proc /proc
+.EE
+.in
+.PP
+Most of the files in the
+.B proc
+filesystem are read-only,
+but some files are writable, allowing kernel variables to be changed.
+.\"
+.SS Mount options
+The
+.B proc
+filesystem supports the following mount options:
+.TP
+.BR hidepid "=\fIn\fP (since Linux 3.3)"
+.\" commit 0499680a42141d86417a8fbaa8c8db806bea1201
+This option controls who can access the information in
+.IR /proc/ pid
+directories.
+The argument,
+.IR n ,
+is one of the following values:
+.RS
+.TP 4
+0
+Everybody may access all
+.IR /proc/ pid
+directories.
+This is the traditional behavior,
+and the default if this mount option is not specified.
+.TP
+1
+Users may not access files and subdirectories inside any
+.IR /proc/ pid
+directories but their own (the
+.IR /proc/ pid
+directories themselves remain visible).
+Sensitive files such as
+.IR /proc/ pid /cmdline
+and
+.IR /proc/ pid /status
+are now protected against other users.
+This makes it impossible to learn whether any user is running a
+specific program
+(so long as the program doesn't otherwise reveal itself by its behavior).
+.\" As an additional bonus, since
+.\" .IR /proc/[pid]/cmdline
+.\" is inaccessible for other users,
+.\" poorly written programs passing sensitive information via
+.\" program arguments are now protected against local eavesdroppers.
+.TP
+2
+As for mode 1, but in addition the
+.IR /proc/ pid
+directories belonging to other users become invisible.
+This means that
+.IR /proc/ pid
+entries can no longer be used to discover the PIDs on the system.
+This doesn't hide the fact that a process with a specific PID value exists
+(it can be learned by other means, for example, by "kill \-0 $PID"),
+but it hides a process's UID and GID,
+which could otherwise be learned by employing
+.BR stat (2)
+on a
+.IR /proc/ pid
+directory.
+This greatly complicates an attacker's task of gathering
+information about running processes (e.g., discovering whether
+some daemon is running with elevated privileges,
+whether another user is running some sensitive program,
+whether other users are running any program at all, and so on).
+.RE
+.TP
+.BR gid "=\fIgid\fP (since Linux 3.3)"
+.\" commit 0499680a42141d86417a8fbaa8c8db806bea1201
+Specifies the ID of a group whose members are authorized to
+learn process information otherwise prohibited by
+.B hidepid
+(i.e., users in this group behave as though
+.I /proc
+was mounted with
+.IR hidepid=0 ).
+This group should be used instead of approaches such as putting
+nonroot users into the
+.BR sudoers (5)
+file.
+.\"
+.SS Overview
+Underneath
+.IR /proc ,
+there are the following general groups of files and subdirectories:
+.TP
+.IR /proc/ "pid subdirectories"
+Each one of these subdirectories contains files and subdirectories
+exposing information about the process with the corresponding process ID.
+.IP
+Underneath each of the
+.IR /proc/ pid
+directories, a
+.I task
+subdirectory contains subdirectories of the form
+.IR task/ tid,
+which contain corresponding information about each of the threads
+in the process, where
+.I tid
+is the kernel thread ID of the thread.
+.IP
+The
+.IR /proc/ pid
+subdirectories are visible when iterating through
+.I /proc
+with
+.BR getdents (2)
+(and thus are visible when one uses
+.BR ls (1)
+to view the contents of
+.IR /proc ).
+.TP
+.IR /proc/ "tid subdirectories"
+Each one of these subdirectories contains files and subdirectories
+exposing information about the thread with the corresponding thread ID.
+The contents of these directories are the same as the corresponding
+.IR /proc/ pid /task/ tid
+directories.
+.IP
+The
+.IR /proc/ tid
+subdirectories are
+.I not
+visible when iterating through
+.I /proc
+with
+.BR getdents (2)
+(and thus are
+.I not
+visible when one uses
+.BR ls (1)
+to view the contents of
+.IR /proc ).
+.TP
+.I /proc/self
+When a process accesses this magic symbolic link,
+it resolves to the process's own
+.IR /proc/ pid
+directory.
+.TP
+.I /proc/thread\-self
+When a thread accesses this magic symbolic link,
+it resolves to the process's own
+.IR /proc/self/task/ tid
+directory.
+.TP
+.I /proc/[a\-z]*
+Various other files and subdirectories under
+.I /proc
+expose system-wide information.
+.PP
+All of the above are described in more detail below.
+.\"
+.SS Files and directories
+The following list provides details of many of the files and directories
+under the
+.I /proc
+hierarchy.
+.TP
+.IR /proc/ pid
+There is a numerical subdirectory for each running process; the
+subdirectory is named by the process ID.
+Each
+.IR /proc/ pid
+subdirectory contains the pseudo-files and directories described below.
+.IP
+The files inside each
+.IR /proc/ pid
+directory are normally owned by the effective user and
+effective group ID of the process.
+However, as a security measure, the ownership is made
+.I root:root
+if the process's "dumpable" attribute is set to a value other than 1.
+.IP
+Before Linux 4.11,
+.\" commit 68eb94f16227336a5773b83ecfa8290f1d6b78ce
+.I root:root
+meant the "global" root user ID and group ID
+(i.e., UID 0 and GID 0 in the initial user namespace).
+Since Linux 4.11,
+if the process is in a noninitial user namespace that has a
+valid mapping for user (group) ID 0 inside the namespace, then
+the user (group) ownership of the files under
+.IR /proc/ pid
+is instead made the same as the root user (group) ID of the namespace.
+This means that inside a container,
+things work as expected for the container "root" user.
+.IP
+The process's "dumpable" attribute may change for the following reasons:
+.RS
+.IP \[bu] 3
+The attribute was explicitly set via the
+.BR prctl (2)
+.B PR_SET_DUMPABLE
+operation.
+.IP \[bu]
+The attribute was reset to the value in the file
+.I /proc/sys/fs/suid_dumpable
+(described below), for the reasons described in
+.BR prctl (2).
+.RE
+.IP
+Resetting the "dumpable" attribute to 1 reverts the ownership of the
+.IR /proc/ pid /*
+files to the process's effective UID and GID.
+Note, however, that if the effective UID or GID is subsequently modified,
+then the "dumpable" attribute may be reset, as described in
+.BR prctl (2).
+Therefore, it may be desirable to reset the "dumpable" attribute
+.I after
+making any desired changes to the process's effective UID or GID.
+.TP
+.IR /proc/ pid /attr
+.\" https://lwn.net/Articles/28222/
+.\" From: Stephen Smalley <sds@epoch.ncsc.mil>
+.\" To: LKML and others
+.\" Subject: [RFC][PATCH] Process Attribute API for Security Modules
+.\" Date: 08 Apr 2003 16:17:52 -0400
+.\"
+.\" http://www.nsa.gov/research/_files/selinux/papers/module/x362.shtml
+.\"
+The files in this directory provide an API for security modules.
+The contents of this directory are files that can be read and written
+in order to set security-related attributes.
+This directory was added to support SELinux,
+but the intention was that the API be general enough to support
+other security modules.
+For the purpose of explanation,
+examples of how SELinux uses these files are provided below.
+.IP
+This directory is present only if the kernel was configured with
+.BR CONFIG_SECURITY .
+.TP
+.IR /proc/ pid /attr/current " (since Linux 2.6.0)"
+The contents of this file represent the current
+security attributes of the process.
+.IP
+In SELinux, this file is used to get the security context of a process.
+Prior to Linux 2.6.11, this file could not be used to set the security
+context (a write was always denied), since SELinux limited process security
+transitions to
+.BR execve (2)
+(see the description of
+.IR /proc/ pid /attr/exec ,
+below).
+Since Linux 2.6.11, SELinux lifted this restriction and began supporting
+"set" operations via writes to this node if authorized by policy,
+although use of this operation is only suitable for applications that are
+trusted to maintain any desired separation between the old and new security
+contexts.
+.IP
+Prior to Linux 2.6.28, SELinux did not allow threads within a
+multithreaded process to set their security context via this node
+as it would yield an inconsistency among the security contexts of the
+threads sharing the same memory space.
+Since Linux 2.6.28, SELinux lifted
+this restriction and began supporting "set" operations for threads within
+a multithreaded process if the new security context is bounded by the old
+security context, where the bounded relation is defined in policy and
+guarantees that the new security context has a subset of the permissions
+of the old security context.
+.IP
+Other security modules may choose to support "set" operations via
+writes to this node.
+.TP
+.IR /proc/ pid /attr/exec " (since Linux 2.6.0)"
+This file represents the attributes to assign to the
+process upon a subsequent
+.BR execve (2).
+.IP
+In SELinux,
+this is needed to support role/domain transitions, and
+.BR execve (2)
+is the preferred point to make such transitions because it offers better
+control over the initialization of the process in the new security label
+and the inheritance of state.
+In SELinux, this attribute is reset on
+.BR execve (2)
+so that the new program reverts to the default behavior for any
+.BR execve (2)
+calls that it may make.
+In SELinux, a process can set
+only its own
+.IR /proc/ pid /attr/exec
+attribute.
+.TP
+.IR /proc/ pid /attr/fscreate " (since Linux 2.6.0)"
+This file represents the attributes to assign to files
+created by subsequent calls to
+.BR open (2),
+.BR mkdir (2),
+.BR symlink (2),
+and
+.BR mknod (2)
+.IP
+SELinux employs this file to support creation of a file
+(using the aforementioned system calls)
+in a secure state,
+so that there is no risk of inappropriate access being obtained
+between the time of creation and the time that attributes are set.
+In SELinux, this attribute is reset on
+.BR execve (2),
+so that the new program reverts to the default behavior for
+any file creation calls it may make, but the attribute will persist
+across multiple file creation calls within a program unless it is
+explicitly reset.
+In SELinux, a process can set only its own
+.IR /proc/ pid /attr/fscreate
+attribute.
+.TP
+.IR /proc/ pid /attr/keycreate " (since Linux 2.6.18)"
+.\" commit 4eb582cf1fbd7b9e5f466e3718a59c957e75254e
+If a process writes a security context into this file,
+all subsequently created keys
+.RB ( add_key (2))
+will be labeled with this context.
+For further information, see the kernel source file
+.I Documentation/security/keys/core.rst
+(or file
+.\" commit b68101a1e8f0263dbc7b8375d2a7c57c6216fb76
+.I Documentation/security/keys.txt
+between Linux 3.0 and Linux 4.13, or
+.\" commit d410fa4ef99112386de5f218dd7df7b4fca910b4
+.I Documentation/keys.txt
+before Linux 3.0).
+.TP
+.IR /proc/ pid /attr/prev " (since Linux 2.6.0)"
+This file contains the security context of the process before the last
+.BR execve (2);
+that is, the previous value of
+.IR /proc/ pid /attr/current .
+.TP
+.IR /proc/ pid /attr/socketcreate " (since Linux 2.6.18)"
+.\" commit 42c3e03ef6b298813557cdb997bd6db619cd65a2
+If a process writes a security context into this file,
+all subsequently created sockets will be labeled with this context.
+.TP
+.IR /proc/ pid /autogroup " (since Linux 2.6.38)"
+.\" commit 5091faa449ee0b7d73bc296a93bca9540fc51d0a
+See
+.BR sched (7).
+.TP
+.IR /proc/ pid /auxv " (since Linux 2.6.0)"
+.\" Precisely: Linux 2.6.0-test7
+This contains the contents of the ELF interpreter information passed
+to the process at exec time.
+The format is one \fIunsigned long\fP ID
+plus one \fIunsigned long\fP value for each entry.
+The last entry contains two zeros.
+See also
+.BR getauxval (3).
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ pid /cgroup " (since Linux 2.6.24)"
+See
+.BR cgroups (7).
+.TP
+.IR /proc/ pid /clear_refs " (since Linux 2.6.22)"
+.\" commit b813e931b4c8235bb42e301096ea97dbdee3e8fe (2.6.22)
+.\" commit 398499d5f3613c47f2143b8c54a04efb5d7a6da9 (2.6.32)
+.\" commit 040fa02077de01c7e08fa75be6125e4ca5636011 (3.11)
+.\"
+.\" "Clears page referenced bits shown in smaps output"
+.\" write-only, writable only by the owner of the process
+.IP
+This is a write-only file, writable only by owner of the process.
+.IP
+The following values may be written to the file:
+.RS
+.TP
+1 (since Linux 2.6.22)
+.\" Internally: CLEAR_REFS_ALL
+Reset the PG_Referenced and ACCESSED/YOUNG
+bits for all the pages associated with the process.
+(Before Linux 2.6.32, writing any nonzero value to this file
+had this effect.)
+.TP
+2 (since Linux 2.6.32)
+.\" Internally: CLEAR_REFS_ANON
+Reset the PG_Referenced and ACCESSED/YOUNG
+bits for all anonymous pages associated with the process.
+.TP
+3 (since Linux 2.6.32)
+.\" Internally: CLEAR_REFS_MAPPED
+Reset the PG_Referenced and ACCESSED/YOUNG
+bits for all file-mapped pages associated with the process.
+.RE
+.IP
+Clearing the PG_Referenced and ACCESSED/YOUNG bits provides a method
+to measure approximately how much memory a process is using.
+One first inspects the values in the "Referenced" fields
+for the VMAs shown in
+.IR /proc/ pid /smaps
+to get an idea of the memory footprint of the
+process.
+One then clears the PG_Referenced and ACCESSED/YOUNG bits
+and, after some measured time interval,
+once again inspects the values in the "Referenced" fields
+to get an idea of the change in memory footprint of the
+process during the measured interval.
+If one is interested only in inspecting the selected mapping types,
+then the value 2 or 3 can be used instead of 1.
+.IP
+Further values can be written to affect different properties:
+.RS
+.TP
+4 (since Linux 3.11)
+Clear the soft-dirty bit for all the pages associated with the process.
+.\" Internally: CLEAR_REFS_SOFT_DIRTY
+This is used (in conjunction with
+.IR /proc/ pid /pagemap )
+by the check-point restore system to discover which pages of a process
+have been dirtied since the file
+.IR /proc/ pid /clear_refs
+was written to.
+.TP
+5 (since Linux 4.0)
+.\" Internally: CLEAR_REFS_MM_HIWATER_RSS
+Reset the peak resident set size ("high water mark") to the process's
+current resident set size value.
+.RE
+.IP
+Writing any value to
+.IR /proc/ pid /clear_refs
+other than those listed above has no effect.
+.IP
+The
+.IR /proc/ pid /clear_refs
+file is present only if the
+.B CONFIG_PROC_PAGE_MONITOR
+kernel configuration option is enabled.
+.TP
+.IR /proc/ pid /cmdline
+This read-only file holds the complete command line for the process,
+unless the process is a zombie.
+.\" In Linux 2.3.26, this also used to be true if the process was swapped out.
+In the latter case, there is nothing in this file:
+that is, a read on this file will return 0 characters.
+.IP
+For processes which are still running,
+the command-line arguments appear in this file
+in the same layout as they do in process memory:
+If the process is well-behaved,
+it is a set of strings separated by null bytes (\[aq]\e0\[aq]),
+with a further null byte after the last string.
+.IP
+This is the common case,
+but processes have the freedom to
+override the memory region and
+break assumptions about the contents or format of the
+.IR /proc/ pid /cmdline
+file.
+.IP
+If, after an
+.BR execve (2),
+the process modifies its
+.I argv
+strings, those changes will show up here.
+This is not the same thing as modifying the
+.I argv
+array.
+.IP
+Furthermore, a process may change the memory location that this file refers via
+.BR prctl (2)
+operations such as
+.BR PR_SET_MM_ARG_START .
+.IP
+Think of this file as the command line that the process wants you to see.
+.TP
+.IR /proc/ pid /comm " (since Linux 2.6.33)"
+.\" commit 4614a696bd1c3a9af3a08f0e5874830a85b889d4
+This file exposes the process's
+.I comm
+value\[em]that is, the command name associated with the process.
+Different threads in the same process may have different
+.I comm
+values, accessible via
+.IR /proc/ pid /task/ tid /comm .
+A thread may modify its
+.I comm
+value, or that of any of other thread in the same thread group (see
+the discussion of
+.B CLONE_THREAD
+in
+.BR clone (2)),
+by writing to the file
+.IR /proc/self/task/ tid /comm .
+Strings longer than
+.B TASK_COMM_LEN
+(16) characters (including the terminating null byte) are silently truncated.
+.IP
+This file provides a superset of the
+.BR prctl (2)
+.B PR_SET_NAME
+and
+.B PR_GET_NAME
+operations, and is employed by
+.BR pthread_setname_np (3)
+when used to rename threads other than the caller.
+The value in this file is used for the
+.I %e
+specifier in
+.IR /proc/sys/kernel/core_pattern ;
+see
+.BR core (5).
+.TP
+.IR /proc/ pid /coredump_filter " (since Linux 2.6.23)"
+See
+.BR core (5).
+.TP
+.IR /proc/ pid /cpuset " (since Linux 2.6.12)"
+.\" and/proc/[pid]/task/[tid]/cpuset
+See
+.BR cpuset (7).
+.TP
+.IR /proc/ pid /cwd
+This is a symbolic link to the current working directory of the process.
+To find out the current working directory of process 20,
+for instance, you can do this:
+.IP
+.in +4n
+.EX
+.RB "$" " cd /proc/20/cwd; pwd \-P"
+.EE
+.in
+.IP
+.\" The following was still true as at kernel 2.6.13
+In a multithreaded process, the contents of this symbolic link
+are not available if the main thread has already terminated
+(typically by calling
+.BR pthread_exit (3)).
+.IP
+Permission to dereference or read
+.RB ( readlink (2))
+this symbolic link is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ pid /environ
+This file contains the initial environment that was set
+when the currently executing program was started via
+.BR execve (2).
+The entries are separated by null bytes (\[aq]\e0\[aq]),
+and there may be a null byte at the end.
+Thus, to print out the environment of process 1, you would do:
+.IP
+.in +4n
+.EX
+.RB "$" " cat /proc/1/environ | tr \[aq]\e000\[aq] \[aq]\en\[aq]"
+.EE
+.in
+.IP
+If, after an
+.BR execve (2),
+the process modifies its environment
+(e.g., by calling functions such as
+.BR putenv (3)
+or modifying the
+.BR environ (7)
+variable directly),
+this file will
+.I not
+reflect those changes.
+.IP
+Furthermore, a process may change the memory location that this file refers via
+.BR prctl (2)
+operations such as
+.BR PR_SET_MM_ENV_START .
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ pid /exe
+Under Linux 2.2 and later, this file is a symbolic link
+containing the actual pathname of the executed command.
+This symbolic link can be dereferenced normally; attempting to open
+it will open the executable.
+You can even type
+.IR /proc/ pid /exe
+to run another copy of the same executable that is being run by
+process
+.IR pid .
+If the pathname has been unlinked, the symbolic link will contain the
+string \[aq]\ (deleted)\[aq] appended to the original pathname.
+.\" The following was still true as at kernel 2.6.13
+In a multithreaded process, the contents of this symbolic link
+are not available if the main thread has already terminated
+(typically by calling
+.BR pthread_exit (3)).
+.IP
+Permission to dereference or read
+.RB ( readlink (2))
+this symbolic link is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.IP
+Under Linux 2.0 and earlier,
+.IR /proc/ pid /exe
+is a pointer to the binary which was executed,
+and appears as a symbolic link.
+A
+.BR readlink (2)
+call on this file under Linux 2.0 returns a string in the format:
+.IP
+.in +4n
+.EX
+[device]:inode
+.EE
+.in
+.IP
+For example, [0301]:1502 would be inode 1502 on device major 03 (IDE,
+MFM, etc. drives) minor 01 (first partition on the first drive).
+.IP
+.BR find (1)
+with the
+.I \-inum
+option can be used to locate the file.
+.TP
+.IR /proc/ pid /fd/
+This is a subdirectory containing one entry for each file which the
+process has open, named by its file descriptor, and which is a
+symbolic link to the actual file.
+Thus, 0 is standard input, 1 standard output, 2 standard error, and so on.
+.IP
+For file descriptors for pipes and sockets,
+the entries will be symbolic links whose content is the
+file type with the inode.
+A
+.BR readlink (2)
+call on this file returns a string in the format:
+.IP
+.in +4n
+.EX
+type:[inode]
+.EE
+.in
+.IP
+For example,
+.I socket:[2248868]
+will be a socket and its inode is 2248868.
+For sockets, that inode can be used to find more information
+in one of the files under
+.IR /proc/net/ .
+.IP
+For file descriptors that have no corresponding inode
+(e.g., file descriptors produced by
+.BR bpf (2),
+.BR epoll_create (2),
+.BR eventfd (2),
+.BR inotify_init (2),
+.BR perf_event_open (2),
+.BR signalfd (2),
+.BR timerfd_create (2),
+and
+.BR userfaultfd (2)),
+the entry will be a symbolic link with contents of the form
+.IP
+.in +4n
+.EX
+.RI anon_inode: file-type
+.EE
+.in
+.IP
+In many cases (but not all), the
+.I file-type
+is surrounded by square brackets.
+.IP
+For example, an epoll file descriptor will have a symbolic link
+whose content is the string
+.IR "anon_inode:[eventpoll]" .
+.IP
+.\"The following was still true as at kernel 2.6.13
+In a multithreaded process, the contents of this directory
+are not available if the main thread has already terminated
+(typically by calling
+.BR pthread_exit (3)).
+.IP
+Programs that take a filename as a command-line argument,
+but don't take input from standard input if no argument is supplied,
+and programs that write to a file named as a command-line argument,
+but don't send their output to standard output
+if no argument is supplied, can nevertheless be made to use
+standard input or standard output by using
+.IR /proc/ pid /fd
+files as command-line arguments.
+For example, assuming that
+.I \-i
+is the flag designating an input file and
+.I \-o
+is the flag designating an output file:
+.IP
+.in +4n
+.EX
+.RB "$" " foobar \-i /proc/self/fd/0 \-o /proc/self/fd/1 ..."
+.EE
+.in
+.IP
+and you have a working filter.
+.\" The following is not true in my tests (MTK):
+.\" Note that this will not work for
+.\" programs that seek on their files, as the files in the fd directory
+.\" are not seekable.
+.IP
+.I /proc/self/fd/N
+is approximately the same as
+.I /dev/fd/N
+in some UNIX and UNIX-like systems.
+Most Linux MAKEDEV scripts symbolically link
+.I /dev/fd
+to
+.IR /proc/self/fd ,
+in fact.
+.IP
+Most systems provide symbolic links
+.IR /dev/stdin ,
+.IR /dev/stdout ,
+and
+.IR /dev/stderr ,
+which respectively link to the files
+.IR 0 ,
+.IR 1 ,
+and
+.I 2
+in
+.IR /proc/self/fd .
+Thus the example command above could be written as:
+.IP
+.in +4n
+.EX
+.RB "$" " foobar \-i /dev/stdin \-o /dev/stdout ..."
+.EE
+.in
+.IP
+Permission to dereference or read
+.RB ( readlink (2))
+the symbolic links in this directory is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.IP
+Note that for file descriptors referring to inodes
+(pipes and sockets, see above),
+those inodes still have permission bits and ownership information
+distinct from those of the
+.IR /proc/ pid /fd
+entry,
+and that the owner may differ from the user and group IDs of the process.
+An unprivileged process may lack permissions to open them, as in this example:
+.IP
+.in +4n
+.EX
+.RB "$" " echo test | sudo \-u nobody cat"
+test
+.RB "$" " echo test | sudo \-u nobody cat /proc/self/fd/0"
+cat: /proc/self/fd/0: Permission denied
+.EE
+.in
+.IP
+File descriptor 0 refers to the pipe created by the shell
+and owned by that shell's user, which is not
+.IR nobody ,
+so
+.B cat
+does not have permission
+to create a new file descriptor to read from that inode,
+even though it can still read from its existing file descriptor 0.
+.TP
+.IR /proc/ pid /fdinfo/ " (since Linux 2.6.22)"
+This is a subdirectory containing one entry for each file which the
+process has open, named by its file descriptor.
+The files in this directory are readable only by the owner of the process.
+The contents of each file can be read to obtain information
+about the corresponding file descriptor.
+The content depends on the type of file referred to by the
+corresponding file descriptor.
+.IP
+For regular files and directories, we see something like:
+.IP
+.in +4n
+.EX
+.RB "$" " cat /proc/12015/fdinfo/4"
+pos: 1000
+flags: 01002002
+mnt_id: 21
+.EE
+.in
+.IP
+The fields are as follows:
+.RS
+.TP
+.I pos
+This is a decimal number showing the file offset.
+.TP
+.I flags
+This is an octal number that displays the
+file access mode and file status flags (see
+.BR open (2)).
+If the close-on-exec file descriptor flag is set, then
+.I flags
+will also include the value
+.BR O_CLOEXEC .
+.IP
+Before Linux 3.1,
+.\" commit 1117f72ea0217ba0cc19f05adbbd8b9a397f5ab7
+this field incorrectly displayed the setting of
+.B O_CLOEXEC
+at the time the file was opened,
+rather than the current setting of the close-on-exec flag.
+.TP
+.I
+.I mnt_id
+This field, present since Linux 3.15,
+.\" commit 49d063cb353265c3af701bab215ac438ca7df36d
+is the ID of the mount containing this file.
+See the description of
+.IR /proc/ pid /mountinfo .
+.RE
+.IP
+For eventfd file descriptors (see
+.BR eventfd (2)),
+we see (since Linux 3.8)
+.\" commit cbac5542d48127b546a23d816380a7926eee1c25
+the following fields:
+.IP
+.in +4n
+.EX
+pos: 0
+flags: 02
+mnt_id: 10
+eventfd\-count: 40
+.EE
+.in
+.IP
+.I eventfd\-count
+is the current value of the eventfd counter, in hexadecimal.
+.IP
+For epoll file descriptors (see
+.BR epoll (7)),
+we see (since Linux 3.8)
+.\" commit 138d22b58696c506799f8de759804083ff9effae
+the following fields:
+.IP
+.in +4n
+.EX
+pos: 0
+flags: 02
+mnt_id: 10
+tfd: 9 events: 19 data: 74253d2500000009
+tfd: 7 events: 19 data: 74253d2500000007
+.EE
+.in
+.IP
+Each of the lines beginning
+.I tfd
+describes one of the file descriptors being monitored via
+the epoll file descriptor (see
+.BR epoll_ctl (2)
+for some details).
+The
+.I tfd
+field is the number of the file descriptor.
+The
+.I events
+field is a hexadecimal mask of the events being monitored for this file
+descriptor.
+The
+.I data
+field is the data value associated with this file descriptor.
+.IP
+For signalfd file descriptors (see
+.BR signalfd (2)),
+we see (since Linux 3.8)
+.\" commit 138d22b58696c506799f8de759804083ff9effae
+the following fields:
+.IP
+.in +4n
+.EX
+pos: 0
+flags: 02
+mnt_id: 10
+sigmask: 0000000000000006
+.EE
+.in
+.IP
+.I sigmask
+is the hexadecimal mask of signals that are accepted via this
+signalfd file descriptor.
+(In this example, bits 2 and 3 are set, corresponding to the signals
+.B SIGINT
+and
+.BR SIGQUIT ;
+see
+.BR signal (7).)
+.IP
+For inotify file descriptors (see
+.BR inotify (7)),
+we see (since Linux 3.8)
+the following fields:
+.IP
+.in +4n
+.EX
+pos: 0
+flags: 00
+mnt_id: 11
+inotify wd:2 ino:7ef82a sdev:800001 mask:800afff ignored_mask:0 fhandle\-bytes:8 fhandle\-type:1 f_handle:2af87e00220ffd73
+inotify wd:1 ino:192627 sdev:800001 mask:800afff ignored_mask:0 fhandle\-bytes:8 fhandle\-type:1 f_handle:27261900802dfd73
+.EE
+.in
+.IP
+Each of the lines beginning with "inotify" displays information about
+one file or directory that is being monitored.
+The fields in this line are as follows:
+.RS
+.TP
+.I wd
+A watch descriptor number (in decimal).
+.TP
+.I ino
+The inode number of the target file (in hexadecimal).
+.TP
+.I sdev
+The ID of the device where the target file resides (in hexadecimal).
+.TP
+.I mask
+The mask of events being monitored for the target file (in hexadecimal).
+.RE
+.IP
+If the kernel was built with exportfs support, the path to the target
+file is exposed as a file handle, via three hexadecimal fields:
+.IR fhandle\-bytes ,
+.IR fhandle\-type ,
+and
+.IR f_handle .
+.IP
+For fanotify file descriptors (see
+.BR fanotify (7)),
+we see (since Linux 3.8)
+the following fields:
+.IP
+.in +4n
+.EX
+pos: 0
+flags: 02
+mnt_id: 11
+fanotify flags:0 event\-flags:88002
+fanotify ino:19264f sdev:800001 mflags:0 mask:1 ignored_mask:0 fhandle\-bytes:8 fhandle\-type:1 f_handle:4f261900a82dfd73
+.EE
+.in
+.IP
+The fourth line displays information defined when the fanotify group
+was created via
+.BR fanotify_init (2):
+.RS
+.TP
+.I flags
+The
+.I flags
+argument given to
+.BR fanotify_init (2)
+(expressed in hexadecimal).
+.TP
+.I event\-flags
+The
+.I event_f_flags
+argument given to
+.BR fanotify_init (2)
+(expressed in hexadecimal).
+.RE
+.IP
+Each additional line shown in the file contains information
+about one of the marks in the fanotify group.
+Most of these fields are as for inotify, except:
+.RS
+.TP
+.I mflags
+The flags associated with the mark
+(expressed in hexadecimal).
+.TP
+.I mask
+The events mask for this mark
+(expressed in hexadecimal).
+.TP
+.I ignored_mask
+The mask of events that are ignored for this mark
+(expressed in hexadecimal).
+.RE
+.IP
+For details on these fields, see
+.BR fanotify_mark (2).
+.IP
+For timerfd file descriptors (see
+.BR timerfd (2)),
+we see (since Linux 3.17)
+.\" commit af9c4957cf212ad9cf0bee34c95cb11de5426e85
+the following fields:
+.IP
+.in +4n
+.EX
+pos: 0
+flags: 02004002
+mnt_id: 13
+clockid: 0
+ticks: 0
+settime flags: 03
+it_value: (7695568592, 640020877)
+it_interval: (0, 0)
+.EE
+.in
+.RS
+.TP
+.I clockid
+This is the numeric value of the clock ID
+(corresponding to one of the
+.B CLOCK_*
+constants defined via
+.IR <time.h> )
+that is used to mark the progress of the timer (in this example, 0 is
+.BR CLOCK_REALTIME ).
+.TP
+.I ticks
+This is the number of timer expirations that have occurred,
+(i.e., the value that
+.BR read (2)
+on it would return).
+.TP
+.I settime flags
+This field lists the flags with which the timerfd was last armed (see
+.BR timerfd_settime (2)),
+in octal
+(in this example, both
+.B TFD_TIMER_ABSTIME
+and
+.B TFD_TIMER_CANCEL_ON_SET
+are set).
+.TP
+.I it_value
+This field contains the amount of time until the timer will next expire,
+expressed in seconds and nanoseconds.
+This is always expressed as a relative value,
+regardless of whether the timer was created using the
+.B TFD_TIMER_ABSTIME
+flag.
+.TP
+.I it_interval
+This field contains the interval of the timer,
+in seconds and nanoseconds.
+(The
+.I it_value
+and
+.I it_interval
+fields contain the values that
+.BR timerfd_gettime (2)
+on this file descriptor would return.)
+.RE
+.TP
+.IR /proc/ pid /gid_map " (since Linux 3.5)"
+See
+.BR user_namespaces (7).
+.TP
+.IR /proc/ pid /io " (since Linux 2.6.20)"
+.\" commit 7c3ab7381e79dfc7db14a67c6f4f3285664e1ec2
+This file contains I/O statistics for the process, for example:
+.IP
+.in +4n
+.EX
+.RB "#" " cat /proc/3828/io"
+rchar: 323934931
+wchar: 323929600
+syscr: 632687
+syscw: 632675
+read_bytes: 0
+write_bytes: 323932160
+cancelled_write_bytes: 0
+.EE
+.in
+.IP
+The fields are as follows:
+.RS
+.TP
+.IR rchar ": characters read"
+The number of bytes which this task has caused to be read from storage.
+This is simply the sum of bytes which this process passed to
+.BR read (2)
+and similar system calls.
+It includes things such as terminal I/O and
+is unaffected by whether or not actual
+physical disk I/O was required (the read might have been satisfied from
+pagecache).
+.TP
+.IR wchar ": characters written"
+The number of bytes which this task has caused, or shall cause to be written
+to disk.
+Similar caveats apply here as with
+.IR rchar .
+.TP
+.IR syscr ": read syscalls"
+Attempt to count the number of read I/O operations\[em]that is,
+system calls such as
+.BR read (2)
+and
+.BR pread (2).
+.TP
+.IR syscw ": write syscalls"
+Attempt to count the number of write I/O operations\[em]that is,
+system calls such as
+.BR write (2)
+and
+.BR pwrite (2).
+.TP
+.IR read_bytes ": bytes read"
+Attempt to count the number of bytes which this process really did cause to
+be fetched from the storage layer.
+This is accurate for block-backed filesystems.
+.TP
+.IR write_bytes ": bytes written"
+Attempt to count the number of bytes which this process caused to be sent to
+the storage layer.
+.TP
+.IR cancelled_write_bytes :
+The big inaccuracy here is truncate.
+If a process writes 1 MB to a file and then deletes the file,
+it will in fact perform no writeout.
+But it will have been accounted as having caused 1 MB of write.
+In other words: this field represents the number of bytes which this process
+caused to not happen, by truncating pagecache.
+A task can cause "negative" I/O too.
+If this task truncates some dirty pagecache,
+some I/O which another task has been accounted for
+(in its
+.IR write_bytes )
+will not be happening.
+.RE
+.IP
+.IR Note :
+In the current implementation, things are a bit racy on 32-bit systems:
+if process A reads process B's
+.IR /proc/ pid /io
+while process B is updating one of these 64-bit counters,
+process A could see an intermediate result.
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ pid /limits " (since Linux 2.6.24)"
+This file displays the soft limit, hard limit, and units of measurement
+for each of the process's resource limits (see
+.BR getrlimit (2)).
+Up to and including Linux 2.6.35,
+this file is protected to allow reading only by the real UID of the process.
+Since Linux 2.6.36,
+.\" commit 3036e7b490bf7878c6dae952eec5fb87b1106589
+this file is readable by all users on the system.
+.\" FIXME Describe /proc/[pid]/loginuid
+.\" Added in Linux 2.6.11; updating requires CAP_AUDIT_CONTROL
+.\" CONFIG_AUDITSYSCALL
+.TP
+.IR /proc/ pid /map_files/ " (since Linux 3.3)"
+.\" commit 640708a2cff7f81e246243b0073c66e6ece7e53e
+This subdirectory contains entries corresponding to memory-mapped
+files (see
+.BR mmap (2)).
+Entries are named by memory region start and end
+address pair (expressed as hexadecimal numbers),
+and are symbolic links to the mapped files themselves.
+Here is an example,
+with the output wrapped and reformatted to fit on an 80-column display:
+.IP
+.in +4n
+.EX
+.RB "#" " ls \-l /proc/self/map_files/"
+lr\-\-\-\-\-\-\-\-. 1 root root 64 Apr 16 21:31
+ 3252e00000\-3252e20000 \-> /usr/lib64/ld\-2.15.so
+\&...
+.EE
+.in
+.IP
+Although these entries are present for memory regions that were
+mapped with the
+.B MAP_FILE
+flag, the way anonymous shared memory (regions created with the
+.B MAP_ANON | MAP_SHARED
+flags)
+is implemented in Linux
+means that such regions also appear on this directory.
+Here is an example where the target file is the deleted
+.I /dev/zero
+one:
+.IP
+.in +4n
+.EX
+lrw\-\-\-\-\-\-\-. 1 root root 64 Apr 16 21:33
+ 7fc075d2f000\-7fc075e6f000 \-> /dev/zero (deleted)
+.EE
+.in
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.IP
+Until Linux 4.3,
+.\" commit bdb4d100afe9818aebd1d98ced575c5ef143456c
+this directory appeared only if the
+.B CONFIG_CHECKPOINT_RESTORE
+kernel configuration option was enabled.
+.IP
+Capabilities are required to read the contents of the symbolic links in
+this directory: before Linux 5.9, the reading process requires
+.B CAP_SYS_ADMIN
+in the initial user namespace;
+since Linux 5.9, the reading process must have either
+.B CAP_SYS_ADMIN
+or
+.B CAP_CHECKPOINT_RESTORE
+in the initial (i.e. root) user namespace.
+.TP
+.IR /proc/ pid /maps
+A file containing the currently mapped memory regions and their access
+permissions.
+See
+.BR mmap (2)
+for some further information about memory mappings.
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.IP
+The format of the file is:
+.IP
+.in +4n
+.EX
+.I "address perms offset dev inode pathname"
+00400000\-00452000 r\-xp 00000000 08:02 173521 /usr/bin/dbus\-daemon
+00651000\-00652000 r\-\-p 00051000 08:02 173521 /usr/bin/dbus\-daemon
+00652000\-00655000 rw\-p 00052000 08:02 173521 /usr/bin/dbus\-daemon
+00e03000\-00e24000 rw\-p 00000000 00:00 0 [heap]
+00e24000\-011f7000 rw\-p 00000000 00:00 0 [heap]
+\&...
+35b1800000\-35b1820000 r\-xp 00000000 08:02 135522 /usr/lib64/ld\-2.15.so
+35b1a1f000\-35b1a20000 r\-\-p 0001f000 08:02 135522 /usr/lib64/ld\-2.15.so
+35b1a20000\-35b1a21000 rw\-p 00020000 08:02 135522 /usr/lib64/ld\-2.15.so
+35b1a21000\-35b1a22000 rw\-p 00000000 00:00 0
+35b1c00000\-35b1dac000 r\-xp 00000000 08:02 135870 /usr/lib64/libc\-2.15.so
+35b1dac000\-35b1fac000 \-\-\-p 001ac000 08:02 135870 /usr/lib64/libc\-2.15.so
+35b1fac000\-35b1fb0000 r\-\-p 001ac000 08:02 135870 /usr/lib64/libc\-2.15.so
+35b1fb0000\-35b1fb2000 rw\-p 001b0000 08:02 135870 /usr/lib64/libc\-2.15.so
+\&...
+f2c6ff8c000\-7f2c7078c000 rw\-p 00000000 00:00 0 [stack:986]
+\&...
+7fffb2c0d000\-7fffb2c2e000 rw\-p 00000000 00:00 0 [stack]
+7fffb2d48000\-7fffb2d49000 r\-xp 00000000 00:00 0 [vdso]
+.EE
+.in
+.IP
+The
+.I address
+field is the address space in the process that the mapping occupies.
+The
+.I perms
+field is a set of permissions:
+.IP
+.in +4n
+.EX
+r = read
+w = write
+x = execute
+s = shared
+p = private (copy on write)
+.EE
+.in
+.IP
+The
+.I offset
+field is the offset into the file/whatever;
+.I dev
+is the device
+(major:minor);
+.I inode
+is the inode on that device.
+0 indicates that no inode is associated with the memory region,
+as would be the case with BSS (uninitialized data).
+.IP
+The
+.I pathname
+field will usually be the file that is backing the mapping.
+For ELF files,
+you can easily coordinate with the
+.I offset
+field by looking at the
+Offset field in the ELF program headers
+.RI ( "readelf\ \-l" ).
+.IP
+There are additional helpful pseudo-paths:
+.RS
+.TP
+.I [stack]
+The initial process's (also known as the main thread's) stack.
+.TP
+.IR [stack: tid ] " (from Linux 3.4 to Linux 4.4)"
+.\" commit b76437579d1344b612cf1851ae610c636cec7db0 (added)
+.\" commit 65376df582174ffcec9e6471bf5b0dd79ba05e4a (removed)
+A thread's stack (where the
+.I tid
+is a thread ID).
+It corresponds to the
+.IR /proc/ pid /task/ tid /
+path.
+This field was removed in Linux 4.5, since providing this information
+for a process with large numbers of threads is expensive.
+.TP
+.I [vdso]
+The virtual dynamically linked shared object.
+See
+.BR vdso (7).
+.TP
+.I [heap]
+The process's heap.
+.TP
+.IR [anon: name ] " (since Linux 5.17)"
+.\" Commit 9a10064f5625d5572c3626c1516e0bebc6c9fe9b
+A named private anonymous mapping.
+Set with
+.BR prctl (2)
+.BR PR_SET_VMA_ANON_NAME .
+.TP
+.IR [anon_shmem: name ] " (since Linux 6.2)"
+.\" Commit d09e8ca6cb93bb4b97517a18fbbf7eccb0e9ff43
+A named shared anonymous mapping.
+Set with
+.BR prctl (2)
+.BR PR_SET_VMA_ANON_NAME .
+.in
+.RE
+.IP
+If the
+.I pathname
+field is blank,
+this is an anonymous mapping as obtained via
+.BR mmap (2).
+There is no easy way to coordinate this back to a process's source,
+short of running it through
+.BR gdb (1),
+.BR strace (1),
+or similar.
+.IP
+.I pathname
+is shown unescaped except for newline characters, which are replaced
+with an octal escape sequence.
+As a result, it is not possible to determine whether the original
+pathname contained a newline character or the literal
+.I \e012
+character sequence.
+.IP
+If the mapping is file-backed and the file has been deleted, the string
+" (deleted)" is appended to the pathname.
+Note that this is ambiguous too.
+.IP
+Under Linux 2.0, there is no field giving pathname.
+.TP
+.IR /proc/ pid /mem
+This file can be used to access the pages of a process's memory through
+.BR open (2),
+.BR read (2),
+and
+.BR lseek (2).
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_ATTACH_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ pid /mountinfo " (since Linux 2.6.26)"
+.\" This info adapted from Documentation/filesystems/proc.txt
+.\" commit 2d4d4864ac08caff5c204a752bd004eed4f08760
+This file contains information about mounts
+in the process's mount namespace (see
+.BR mount_namespaces (7)).
+It supplies various information
+(e.g., propagation state, root of mount for bind mounts,
+identifier for each mount and its parent) that is missing from the (older)
+.IR /proc/ pid /mounts
+file, and fixes various other problems with that file
+(e.g., nonextensibility,
+failure to distinguish per-mount versus per-superblock options).
+.IP
+The file contains lines of the form:
+.IP
+.EX
+36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 \- ext3 /dev/root rw,errors=continue
+(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
+.EE
+.IP
+The numbers in parentheses are labels for the descriptions below:
+.RS 7
+.TP 5
+(1)
+mount ID: a unique ID for the mount (may be reused after
+.BR umount (2)).
+.TP
+(2)
+parent ID: the ID of the parent mount
+(or of self for the root of this mount namespace's mount tree).
+.IP
+If a new mount is stacked on top of a previous existing mount
+(so that it hides the existing mount) at pathname P,
+then the parent of the new mount is the previous mount at that location.
+Thus, when looking at all the mounts stacked at a particular location,
+the top-most mount is the one that is not the parent
+of any other mount at the same location.
+(Note, however, that this top-most mount will be accessible only if
+the longest path subprefix of P that is a mount point
+is not itself hidden by a stacked mount.)
+.IP
+If the parent mount lies outside the process's root directory (see
+.BR chroot (2)),
+the ID shown here won't have a corresponding record in
+.I mountinfo
+whose mount ID (field 1) matches this parent mount ID
+(because mounts that lie outside the process's root directory
+are not shown in
+.IR mountinfo ).
+As a special case of this point,
+the process's root mount may have a parent mount
+(for the initramfs filesystem) that lies
+.\" Miklos Szeredi, Nov 2017: The hidden one is the initramfs, I believe
+.\" mtk: In the initial mount namespace, this hidden ID has the value 0
+outside the process's root directory,
+and an entry for that mount will not appear in
+.IR mountinfo .
+.TP
+(3)
+major:minor: the value of
+.I st_dev
+for files on this filesystem (see
+.BR stat (2)).
+.TP
+(4)
+root: the pathname of the directory in the filesystem
+which forms the root of this mount.
+.TP
+(5)
+mount point: the pathname of the mount point relative
+to the process's root directory.
+.TP
+(6)
+mount options: per-mount options (see
+.BR mount (2)).
+.TP
+(7)
+optional fields: zero or more fields of the form "tag[:value]"; see below.
+.TP
+(8)
+separator: the end of the optional fields is marked by a single hyphen.
+.TP
+(9)
+filesystem type: the filesystem type in the form "type[.subtype]".
+.TP
+(10)
+mount source: filesystem-specific information or "none".
+.TP
+(11)
+super options: per-superblock options (see
+.BR mount (2)).
+.RE
+.IP
+Currently, the possible optional fields are
+.IR shared ,
+.IR master ,
+.IR propagate_from ,
+and
+.IR unbindable .
+See
+.BR mount_namespaces (7)
+for a description of these fields.
+Parsers should ignore all unrecognized optional fields.
+.IP
+For more information on mount propagation see
+.I Documentation/filesystems/sharedsubtree.rst
+(or
+.I Documentation/filesystems/sharedsubtree.txt
+before Linux 5.8)
+in the Linux kernel source tree.
+.TP
+.IR /proc/ pid /mounts " (since Linux 2.4.19)"
+This file lists all the filesystems currently mounted in the
+process's mount namespace (see
+.BR mount_namespaces (7)).
+The format of this file is documented in
+.BR fstab (5).
+.IP
+Since Linux 2.6.15, this file is pollable:
+after opening the file for reading, a change in this file
+(i.e., a filesystem mount or unmount) causes
+.BR select (2)
+to mark the file descriptor as having an exceptional condition, and
+.BR poll (2)
+and
+.BR epoll_wait (2)
+mark the file as having a priority event
+.RB ( POLLPRI ).
+(Before Linux 2.6.30,
+a change in this file was indicated by the file descriptor
+being marked as readable for
+.BR select (2),
+and being marked as having an error condition for
+.BR poll (2)
+and
+.BR epoll_wait (2).)
+.TP
+.IR /proc/ pid /mountstats " (since Linux 2.6.17)"
+This file exports information (statistics, configuration information)
+about the mounts in the process's mount namespace (see
+.BR mount_namespaces (7)).
+Lines in this file have the form:
+.IP
+.in +4n
+.EX
+device /dev/sda7 mounted on /home with fstype ext3 [stats]
+( 1 ) ( 2 ) (3 ) ( 4 )
+.EE
+.in
+.IP
+The fields in each line are:
+.RS 7
+.TP 5
+(1)
+The name of the mounted device
+(or "nodevice" if there is no corresponding device).
+.TP
+(2)
+The mount point within the filesystem tree.
+.TP
+(3)
+The filesystem type.
+.TP
+(4)
+Optional statistics and configuration information.
+Currently (as at Linux 2.6.26), only NFS filesystems export
+information via this field.
+.RE
+.IP
+This file is readable only by the owner of the process.
+.TP
+.IR /proc/ pid /net " (since Linux 2.6.25)"
+See the description of
+.IR /proc/net .
+.TP
+.IR /proc/ pid /ns/ " (since Linux 3.0)"
+.\" See commit 6b4e306aa3dc94a0545eb9279475b1ab6209a31f
+This is a subdirectory containing one entry for each namespace that
+supports being manipulated by
+.BR setns (2).
+For more information, see
+.BR namespaces (7).
+.TP
+.IR /proc/ pid /numa_maps " (since Linux 2.6.14)"
+See
+.BR numa (7).
+.TP
+.IR /proc/ pid /oom_adj " (since Linux 2.6.11)"
+This file can be used to adjust the score used to select which process
+should be killed in an out-of-memory (OOM) situation.
+The kernel uses this value for a bit-shift operation of the process's
+.I oom_score
+value:
+valid values are in the range \-16 to +15,
+plus the special value \-17,
+which disables OOM-killing altogether for this process.
+A positive score increases the likelihood of this
+process being killed by the OOM-killer;
+a negative score decreases the likelihood.
+.IP
+The default value for this file is 0;
+a new process inherits its parent's
+.I oom_adj
+setting.
+A process must be privileged
+.RB ( CAP_SYS_RESOURCE )
+to update this file,
+although a process can always increase its own
+.I oom_adj
+setting (since Linux 2.6.20).
+.IP
+Since Linux 2.6.36, use of this file is deprecated in favor of
+.IR /proc/ pid /oom_score_adj ,
+and finally removed in Linux 3.7.
+.TP
+.IR /proc/ pid /oom_score " (since Linux 2.6.11)"
+.\" See mm/oom_kill.c::badness() before Linux 2.6.36 sources
+.\" See mm/oom_kill.c::oom_badness() after Linux 2.6.36
+.\" commit a63d83f427fbce97a6cea0db2e64b0eb8435cd10
+This file displays the current score that the kernel gives to
+this process for the purpose of selecting a process
+for the OOM-killer.
+A higher score means that the process is more likely to be
+selected by the OOM-killer.
+The basis for this score is the amount of memory used by the process,
+with increases (+) or decreases (\-) for factors including:
+.\" See mm/oom_kill.c::badness() before Linux 2.6.36 sources
+.\" See mm/oom_kill.c::oom_badness() after Linux 2.6.36
+.\" commit a63d83f427fbce97a6cea0db2e64b0eb8435cd10
+.RS
+.IP \[bu] 3
+whether the process is privileged (\-).
+.\" More precisely, if it has CAP_SYS_ADMIN or (pre 2.6.36) CAP_SYS_RESOURCE
+.RE
+.IP
+Before Linux 2.6.36
+the following factors were also used in the calculation of oom_score:
+.RS
+.IP \[bu] 3
+whether the process creates a lot of children using
+.BR fork (2)
+(+);
+.IP \[bu]
+whether the process has been running a long time,
+or has used a lot of CPU time (\-);
+.IP \[bu]
+whether the process has a low nice value (i.e., > 0) (+); and
+.IP \[bu]
+whether the process is making direct hardware access (\-).
+.\" More precisely, if it has CAP_SYS_RAWIO
+.RE
+.IP
+The
+.I oom_score
+also reflects the adjustment specified by the
+.I oom_score_adj
+or
+.I oom_adj
+setting for the process.
+.TP
+.IR /proc/ pid /oom_score_adj " (since Linux 2.6.36)"
+.\" Text taken from Linux 3.7 Documentation/filesystems/proc.txt
+This file can be used to adjust the badness heuristic used to select which
+process gets killed in out-of-memory conditions.
+.IP
+The badness heuristic assigns a value to each candidate task ranging from 0
+(never kill) to 1000 (always kill) to determine which process is targeted.
+The units are roughly a proportion along that range of
+allowed memory the process may allocate from,
+based on an estimation of its current memory and swap use.
+For example, if a task is using all allowed memory,
+its badness score will be 1000.
+If it is using half of its allowed memory, its score will be 500.
+.IP
+There is an additional factor included in the badness score: root
+processes are given 3% extra memory over other tasks.
+.IP
+The amount of "allowed" memory depends on the context
+in which the OOM-killer was called.
+If it is due to the memory assigned to the allocating task's cpuset
+being exhausted,
+the allowed memory represents the set of mems assigned to that
+cpuset (see
+.BR cpuset (7)).
+If it is due to a mempolicy's node(s) being exhausted,
+the allowed memory represents the set of mempolicy nodes.
+If it is due to a memory limit (or swap limit) being reached,
+the allowed memory is that configured limit.
+Finally, if it is due to the entire system being out of memory, the
+allowed memory represents all allocatable resources.
+.IP
+The value of
+.I oom_score_adj
+is added to the badness score before it
+is used to determine which task to kill.
+Acceptable values range from \-1000
+(OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX).
+This allows user space to control the preference for OOM-killing,
+ranging from always preferring a certain
+task or completely disabling it from OOM-killing.
+The lowest possible value, \-1000, is
+equivalent to disabling OOM-killing entirely for that task,
+since it will always report a badness score of 0.
+.IP
+Consequently, it is very simple for user space to define
+the amount of memory to consider for each task.
+Setting an
+.I oom_score_adj
+value of +500, for example,
+is roughly equivalent to allowing the remainder of tasks sharing the
+same system, cpuset, mempolicy, or memory controller resources
+to use at least 50% more memory.
+A value of \-500, on the other hand, would be roughly
+equivalent to discounting 50% of the task's
+allowed memory from being considered as scoring against the task.
+.IP
+For backward compatibility with previous kernels,
+.IR /proc/ pid /oom_adj
+can still be used to tune the badness score.
+Its value is
+scaled linearly with
+.IR oom_score_adj .
+.IP
+Writing to
+.IR /proc/ pid /oom_score_adj
+or
+.IR /proc/ pid /oom_adj
+will change the other with its scaled value.
+.IP
+The
+.BR choom (1)
+program provides a command-line interface for adjusting the
+.I oom_score_adj
+value of a running process or a newly executed command.
+.TP
+.IR /proc/ pid /pagemap " (since Linux 2.6.25)"
+This file shows the mapping of each of the process's virtual pages
+into physical page frames or swap area.
+It contains one 64-bit value for each virtual page,
+with the bits set as follows:
+.RS
+.TP
+63
+If set, the page is present in RAM.
+.TP
+62
+If set, the page is in swap space
+.TP
+61 (since Linux 3.5)
+The page is a file-mapped page or a shared anonymous page.
+.TP
+60\[en]58 (since Linux 3.11)
+Zero
+.\" Not quite true; see commit 541c237c0923f567c9c4cabb8a81635baadc713f
+.TP
+57 (since Linux 5.14)
+If set, the page is write-protected through
+.BR userfaultfd (2).
+.TP
+56 (since Linux 4.2)
+.\" commit 77bb499bb60f4b79cca7d139c8041662860fcf87
+.\" commit 83b4b0bb635eee2b8e075062e4e008d1bc110ed7
+The page is exclusively mapped.
+.TP
+55 (since Linux 3.11)
+PTE is soft-dirty
+(see the kernel source file
+.IR Documentation/admin\-guide/mm/soft\-dirty.rst ).
+.TP
+54\[en]0
+If the page is present in RAM (bit 63), then these bits
+provide the page frame number, which can be used to index
+.I /proc/kpageflags
+and
+.IR /proc/kpagecount .
+If the page is present in swap (bit 62),
+then bits 4\[en]0 give the swap type, and bits 54\[en]5 encode the swap offset.
+.RE
+.IP
+Before Linux 3.11, bits 60\[en]55 were
+used to encode the base-2 log of the page size.
+.IP
+To employ
+.IR /proc/ pid /pagemap
+efficiently, use
+.IR /proc/ pid /maps
+to determine which areas of memory are actually mapped and seek
+to skip over unmapped regions.
+.IP
+The
+.IR /proc/ pid /pagemap
+file is present only if the
+.B CONFIG_PROC_PAGE_MONITOR
+kernel configuration option is enabled.
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ pid /personality " (since Linux 2.6.28)"
+.\" commit 478307230810d7e2a753ed220db9066dfdf88718
+This read-only file exposes the process's execution domain, as set by
+.BR personality (2).
+The value is displayed in hexadecimal notation.
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_ATTACH_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ pid /root
+UNIX and Linux support the idea of a per-process root of the
+filesystem, set by the
+.BR chroot (2)
+system call.
+This file is a symbolic link that points to the process's
+root directory, and behaves in the same way as
+.IR exe ,
+and
+.IR fd/* .
+.IP
+Note however that this file is not merely a symbolic link.
+It provides the same view of the filesystem (including namespaces and the
+set of per-process mounts) as the process itself.
+An example illustrates this point.
+In one terminal, we start a shell in new user and mount namespaces,
+and in that shell we create some new mounts:
+.IP
+.in +4n
+.EX
+$ \fBPS1=\[aq]sh1# \[aq] unshare \-Urnm\fP
+sh1# \fBmount \-t tmpfs tmpfs /etc\fP # Mount empty tmpfs at /etc
+sh1# \fBmount \-\-bind /usr /dev\fP # Mount /usr at /dev
+sh1# \fBecho $$\fP
+27123
+.EE
+.in
+.IP
+In a second terminal window, in the initial mount namespace,
+we look at the contents of the corresponding mounts in
+the initial and new namespaces:
+.IP
+.in +4n
+.EX
+$ \fBPS1=\[aq]sh2# \[aq] sudo sh\fP
+sh2# \fBls /etc | wc \-l\fP # In initial NS
+309
+sh2# \fBls /proc/27123/root/etc | wc \-l\fP # /etc in other NS
+0 # The empty tmpfs dir
+sh2# \fBls /dev | wc \-l\fP # In initial NS
+205
+sh2# \fBls /proc/27123/root/dev | wc \-l\fP # /dev in other NS
+11 # Actually bind
+ # mounted to /usr
+sh2# \fBls /usr | wc \-l\fP # /usr in initial NS
+11
+.EE
+.in
+.IP
+.\" The following was still true as at kernel 2.6.13
+In a multithreaded process, the contents of the
+.IR /proc/ pid /root
+symbolic link are not available if the main thread has already terminated
+(typically by calling
+.BR pthread_exit (3)).
+.IP
+Permission to dereference or read
+.RB ( readlink (2))
+this symbolic link is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ pid /projid_map " (since Linux 3.7)"
+.\" commit f76d207a66c3a53defea67e7d36c3eb1b7d6d61d
+See
+.BR user_namespaces (7).
+.TP
+.IR /proc/ pid /seccomp " (Linux 2.6.12 to Linux 2.6.22)"
+This file can be used to read and change the process's
+secure computing (seccomp) mode setting.
+It contains the value 0 if the process is not in seccomp mode,
+and 1 if the process is in strict seccomp mode (see
+.BR seccomp (2)).
+Writing 1 to this file places the process irreversibly in strict seccomp mode.
+(Further attempts to write to the file fail with the
+.B EPERM
+error.)
+.IP
+In Linux 2.6.23,
+this file went away, to be replaced by the
+.BR prctl (2)
+.B PR_GET_SECCOMP
+and
+.B PR_SET_SECCOMP
+operations (and later by
+.BR seccomp (2)
+and the
+.I Seccomp
+field in
+.IR /proc/ pid /status ).
+.\" FIXME Describe /proc/[pid]/sessionid
+.\" commit 1e0bd7550ea9cf474b1ad4c6ff5729a507f75fdc
+.\" CONFIG_AUDITSYSCALL
+.\" Added in Linux 2.6.25; read-only; only readable by real UID
+.\"
+.\" FIXME Describe /proc/[pid]/sched
+.\" Added in Linux 2.6.23
+.\" CONFIG_SCHED_DEBUG, and additional fields if CONFIG_SCHEDSTATS
+.\" Displays various scheduling parameters
+.\" This file can be written, to reset stats
+.\" The set of fields exposed by this file have changed
+.\" significantly over time.
+.\" commit 43ae34cb4cd650d1eb4460a8253a8e747ba052ac
+.\"
+.\" FIXME Describe /proc/[pid]/schedstats and
+.\" /proc/[pid]/task/[tid]/schedstats
+.\" Added in Linux 2.6.9
+.\" CONFIG_SCHEDSTATS
+.TP
+.IR /proc/ pid /setgroups " (since Linux 3.19)"
+See
+.BR user_namespaces (7).
+.TP
+.IR /proc/ pid /smaps " (since Linux 2.6.14)"
+This file shows memory consumption for each of the process's mappings.
+(The
+.BR pmap (1)
+command displays similar information,
+in a form that may be easier for parsing.)
+For each mapping there is a series of lines such as the following:
+.IP
+.in +4n
+.EX
+00400000\-0048a000 r\-xp 00000000 fd:03 960637 /bin/bash
+Size: 552 kB
+Rss: 460 kB
+Pss: 100 kB
+Shared_Clean: 452 kB
+Shared_Dirty: 0 kB
+Private_Clean: 8 kB
+Private_Dirty: 0 kB
+Referenced: 460 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+ShmemHugePages: 0 kB
+ShmemPmdMapped: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+ProtectionKey: 0
+VmFlags: rd ex mr mw me dw
+.EE
+.in
+.IP
+The first of these lines shows the same information as is displayed
+for the mapping in
+.IR /proc/ pid /maps .
+The following lines show the size of the mapping,
+the amount of the mapping that is currently resident in RAM ("Rss"),
+the process's proportional share of this mapping ("Pss"),
+the number of clean and dirty shared pages in the mapping,
+and the number of clean and dirty private pages in the mapping.
+"Referenced" indicates the amount of memory currently marked as
+referenced or accessed.
+"Anonymous" shows the amount of memory
+that does not belong to any file.
+"Swap" shows how much
+would-be-anonymous memory is also used, but out on swap.
+.IP
+The "KernelPageSize" line (available since Linux 2.6.29)
+is the page size used by the kernel to back the virtual memory area.
+This matches the size used by the MMU in the majority of cases.
+However, one counter-example occurs on PPC64 kernels
+whereby a kernel using 64 kB as a base page size may still use 4 kB
+pages for the MMU on older processors.
+To distinguish the two attributes, the "MMUPageSize" line
+(also available since Linux 2.6.29)
+reports the page size used by the MMU.
+.IP
+The "Locked" indicates whether the mapping is locked in memory
+or not.
+.IP
+The "ProtectionKey" line (available since Linux 4.9, on x86 only)
+contains the memory protection key (see
+.BR pkeys (7))
+associated with the virtual memory area.
+This entry is present only if the kernel was built with the
+.B CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
+configuration option (since Linux 4.6).
+.IP
+The "VmFlags" line (available since Linux 3.8)
+represents the kernel flags associated with the virtual memory area,
+encoded using the following two-letter codes:
+.RS
+.IP
+.TS
+l l l.
+rd - readable
+wr - writable
+ex - executable
+sh - shared
+mr - may read
+mw - may write
+me - may execute
+ms - may share
+gd - stack segment grows down
+pf - pure PFN range
+dw - disabled write to the mapped file
+lo - pages are locked in memory
+io - memory mapped I/O area
+sr - sequential read advise provided
+rr - random read advise provided
+dc - do not copy area on fork
+de - do not expand area on remapping
+ac - area is accountable
+nr - swap space is not reserved for the area
+ht - area uses huge tlb pages
+sf - perform synchronous page faults (since Linux 4.15)
+nl - non-linear mapping (removed in Linux 4.0)
+ar - architecture specific flag
+wf - wipe on fork (since Linux 4.14)
+dd - do not include area into core dump
+sd - soft-dirty flag (since Linux 3.13)
+mm - mixed map area
+hg - huge page advise flag
+nh - no-huge page advise flag
+mg - mergeable advise flag
+um - userfaultfd missing pages tracking (since Linux 4.3)
+uw - userfaultfd wprotect pages tracking (since Linux 4.3)
+.TE
+.RE
+.IP
+The
+.IR /proc/ pid /smaps
+file is present only if the
+.B CONFIG_PROC_PAGE_MONITOR
+kernel configuration option is enabled.
+.TP
+.IR /proc/ pid /stack " (since Linux 2.6.29)"
+.\" 2ec220e27f5040aec1e88901c1b6ea3d135787ad
+This file provides a symbolic trace of the function calls in this
+process's kernel stack.
+This file is provided only if the kernel was built with the
+.B CONFIG_STACKTRACE
+configuration option.
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_ATTACH_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ pid /stat
+Status information about the process.
+This is used by
+.BR ps (1).
+It is defined in the kernel source file
+.IR fs/proc/array.c "."
+.IP
+The fields, in order, with their proper
+.BR scanf (3)
+format specifiers, are listed below.
+Whether or not certain of these fields display valid information is governed by
+a ptrace access mode
+.BR PTRACE_MODE_READ_FSCREDS " | " PTRACE_MODE_NOAUDIT
+check (refer to
+.BR ptrace (2)).
+If the check denies access, then the field value is displayed as 0.
+The affected fields are indicated with the marking [PT].
+.RS
+.TP
+(1) \fIpid\fP \ %d
+.br
+The process ID.
+.TP
+(2) \fIcomm\fP \ %s
+The filename of the executable, in parentheses.
+Strings longer than
+.B TASK_COMM_LEN
+(16) characters (including the terminating null byte) are silently truncated.
+This is visible whether or not the executable is swapped out.
+.TP
+(3) \fIstate\fP \ %c
+One of the following characters, indicating process state:
+.RS
+.TP
+R
+Running
+.TP
+S
+Sleeping in an interruptible wait
+.TP
+D
+Waiting in uninterruptible
+disk sleep
+.TP
+Z
+Zombie
+.TP
+T
+Stopped (on a signal) or (before Linux 2.6.33) trace stopped
+.TP
+t
+.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
+Tracing stop (Linux 2.6.33 onward)
+.TP
+W
+Paging (only before Linux 2.6.0)
+.TP
+X
+Dead (from Linux 2.6.0 onward)
+.TP
+x
+.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
+Dead (Linux 2.6.33 to
+.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
+3.13 only)
+.TP
+K
+.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
+Wakekill (Linux 2.6.33 to
+.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
+3.13 only)
+.TP
+W
+.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
+Waking (Linux 2.6.33 to
+.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
+3.13 only)
+.TP
+P
+.\" commit f2530dc71cf0822f90bb63ea4600caaef33a66bb
+Parked (Linux 3.9 to
+.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
+3.13 only)
+.TP
+I
+.\" commit 06eb61844d841d0032a9950ce7f8e783ee49c0d0
+Idle (Linux 4.14 onward)
+.RE
+.TP
+(4) \fIppid\fP \ %d
+The PID of the parent of this process.
+.TP
+(5) \fIpgrp\fP \ %d
+The process group ID of the process.
+.TP
+(6) \fIsession\fP \ %d
+The session ID of the process.
+.TP
+(7) \fItty_nr\fP \ %d
+The controlling terminal of the process.
+(The minor device number is contained in the combination of bits
+31 to 20 and 7 to 0;
+the major device number is in bits 15 to 8.)
+.TP
+(8) \fItpgid\fP \ %d
+.\" This field and following, up to and including wchan added 0.99.1
+The ID of the foreground process group of the controlling
+terminal of the process.
+.TP
+(9) \fIflags\fP \ %u
+The kernel flags word of the process.
+For bit meanings,
+see the PF_* defines in the Linux kernel source file
+.IR include/linux/sched.h .
+Details depend on the kernel version.
+.IP
+The format for this field was %lu before Linux 2.6.
+.TP
+(10) \fIminflt\fP \ %lu
+The number of minor faults the process has made which have not
+required loading a memory page from disk.
+.TP
+(11) \fIcminflt\fP \ %lu
+The number of minor faults that the process's
+waited-for children have made.
+.TP
+(12) \fImajflt\fP \ %lu
+The number of major faults the process has made which have
+required loading a memory page from disk.
+.TP
+(13) \fIcmajflt\fP \ %lu
+The number of major faults that the process's
+waited-for children have made.
+.TP
+(14) \fIutime\fP \ %lu
+Amount of time that this process has been scheduled in user mode,
+measured in clock ticks (divide by
+.IR sysconf(_SC_CLK_TCK) ).
+This includes guest time, \fIguest_time\fP
+(time spent running a virtual CPU, see below),
+so that applications that are not aware of the guest time field
+do not lose that time from their calculations.
+.TP
+(15) \fIstime\fP \ %lu
+Amount of time that this process has been scheduled in kernel mode,
+measured in clock ticks (divide by
+.IR sysconf(_SC_CLK_TCK) ).
+.TP
+(16) \fIcutime\fP \ %ld
+Amount of time that this process's
+waited-for children have been scheduled in user mode,
+measured in clock ticks (divide by
+.IR sysconf(_SC_CLK_TCK) ).
+(See also
+.BR times (2).)
+This includes guest time, \fIcguest_time\fP
+(time spent running a virtual CPU, see below).
+.TP
+(17) \fIcstime\fP \ %ld
+Amount of time that this process's
+waited-for children have been scheduled in kernel mode,
+measured in clock ticks (divide by
+.IR sysconf(_SC_CLK_TCK) ).
+.TP
+(18) \fIpriority\fP \ %ld
+(Explanation for Linux 2.6)
+For processes running a real-time scheduling policy
+.RI ( policy
+below; see
+.BR sched_setscheduler (2)),
+this is the negated scheduling priority, minus one;
+that is, a number in the range \-2 to \-100,
+corresponding to real-time priorities 1 to 99.
+For processes running under a non-real-time scheduling policy,
+this is the raw nice value
+.RB ( setpriority (2))
+as represented in the kernel.
+The kernel stores nice values as numbers
+in the range 0 (high) to 39 (low),
+corresponding to the user-visible nice range of \-20 to 19.
+.IP
+Before Linux 2.6, this was a scaled value based on
+the scheduler weighting given to this process.
+.\" And back in Linux 1.2 days things were different again.
+.TP
+(19) \fInice\fP \ %ld
+The nice value (see
+.BR setpriority (2)),
+a value in the range 19 (low priority) to \-20 (high priority).
+.\" Back in Linux 1.2 days things were different.
+.\" .TP
+.\" \fIcounter\fP %ld
+.\" The current maximum size in jiffies of the process's next timeslice,
+.\" or what is currently left of its current timeslice, if it is the
+.\" currently running process.
+.\" .TP
+.\" \fItimeout\fP %u
+.\" The time in jiffies of the process's next timeout.
+.\" timeout was removed sometime around 2.1/2.2
+.TP
+(20) \fInum_threads\fP \ %ld
+Number of threads in this process (since Linux 2.6).
+Before Linux 2.6, this field was hard coded to 0 as a placeholder
+for an earlier removed field.
+.TP
+(21) \fIitrealvalue\fP \ %ld
+The time in jiffies before the next
+.B SIGALRM
+is sent to the process due to an interval timer.
+Since Linux 2.6.17, this field is no longer maintained,
+and is hard coded as 0.
+.TP
+(22) \fIstarttime\fP \ %llu
+The time the process started after system boot.
+Before Linux 2.6, this value was expressed in jiffies.
+Since Linux 2.6, the value is expressed in clock ticks (divide by
+.IR sysconf(_SC_CLK_TCK) ).
+.IP
+The format for this field was %lu before Linux 2.6.
+.TP
+(23) \fIvsize\fP \ %lu
+Virtual memory size in bytes.
+.TP
+(24) \fIrss\fP \ %ld
+Resident Set Size: number of pages the process has in real memory.
+This is just the pages which
+count toward text, data, or stack space.
+This does not include pages
+which have not been demand-loaded in, or which are swapped out.
+This value is inaccurate; see
+.IR /proc/ pid /statm
+below.
+.TP
+(25) \fIrsslim\fP \ %lu
+Current soft limit in bytes on the rss of the process;
+see the description of
+.B RLIMIT_RSS
+in
+.BR getrlimit (2).
+.TP
+(26) \fIstartcode\fP \ %lu \ [PT]
+The address above which program text can run.
+.TP
+(27) \fIendcode\fP \ %lu \ [PT]
+The address below which program text can run.
+.TP
+(28) \fIstartstack\fP \ %lu \ [PT]
+The address of the start (i.e., bottom) of the stack.
+.TP
+(29) \fIkstkesp\fP \ %lu \ [PT]
+The current value of ESP (stack pointer), as found in the
+kernel stack page for the process.
+.TP
+(30) \fIkstkeip\fP \ %lu \ [PT]
+The current EIP (instruction pointer).
+.TP
+(31) \fIsignal\fP \ %lu
+The bitmap of pending signals, displayed as a decimal number.
+Obsolete, because it does not provide information on real-time signals; use
+.IR /proc/ pid /status
+instead.
+.TP
+(32) \fIblocked\fP \ %lu
+The bitmap of blocked signals, displayed as a decimal number.
+Obsolete, because it does not provide information on real-time signals; use
+.IR /proc/ pid /status
+instead.
+.TP
+(33) \fIsigignore\fP \ %lu
+The bitmap of ignored signals, displayed as a decimal number.
+Obsolete, because it does not provide information on real-time signals; use
+.IR /proc/ pid /status
+instead.
+.TP
+(34) \fIsigcatch\fP \ %lu
+The bitmap of caught signals, displayed as a decimal number.
+Obsolete, because it does not provide information on real-time signals; use
+.IR /proc/ pid /status
+instead.
+.TP
+(35) \fIwchan\fP \ %lu \ [PT]
+This is the "channel" in which the process is waiting.
+It is the address of a location in the kernel where the process is sleeping.
+The corresponding symbolic name can be found in
+.IR /proc/ pid /wchan .
+.TP
+(36) \fInswap\fP \ %lu
+.\" nswap was added in Linux 2.0
+Number of pages swapped (not maintained).
+.TP
+(37) \fIcnswap\fP \ %lu
+.\" cnswap was added in Linux 2.0
+Cumulative \fInswap\fP for child processes (not maintained).
+.TP
+(38) \fIexit_signal\fP \ %d \ (since Linux 2.1.22)
+Signal to be sent to parent when we die.
+.TP
+(39) \fIprocessor\fP \ %d \ (since Linux 2.2.8)
+CPU number last executed on.
+.TP
+(40) \fIrt_priority\fP \ %u \ (since Linux 2.5.19)
+Real-time scheduling priority, a number in the range 1 to 99 for
+processes scheduled under a real-time policy,
+or 0, for non-real-time processes (see
+.BR sched_setscheduler (2)).
+.TP
+(41) \fIpolicy\fP \ %u \ (since Linux 2.5.19)
+Scheduling policy (see
+.BR sched_setscheduler (2)).
+Decode using the SCHED_* constants in
+.IR linux/sched.h .
+.IP
+The format for this field was %lu before Linux 2.6.22.
+.TP
+(42) \fIdelayacct_blkio_ticks\fP \ %llu \ (since Linux 2.6.18)
+Aggregated block I/O delays, measured in clock ticks (centiseconds).
+.TP
+(43) \fIguest_time\fP \ %lu \ (since Linux 2.6.24)
+Guest time of the process (time spent running a virtual CPU
+for a guest operating system), measured in clock ticks (divide by
+.IR sysconf(_SC_CLK_TCK) ).
+.TP
+(44) \fIcguest_time\fP \ %ld \ (since Linux 2.6.24)
+Guest time of the process's children, measured in clock ticks (divide by
+.IR sysconf(_SC_CLK_TCK) ).
+.TP
+(45) \fIstart_data\fP \ %lu \ (since Linux 3.3) \ [PT]
+.\" commit b3f7f573a20081910e34e99cbc91831f4f02f1ff
+Address above which program initialized and
+uninitialized (BSS) data are placed.
+.TP
+(46) \fIend_data\fP \ %lu \ (since Linux 3.3) \ [PT]
+.\" commit b3f7f573a20081910e34e99cbc91831f4f02f1ff
+Address below which program initialized and
+uninitialized (BSS) data are placed.
+.TP
+(47) \fIstart_brk\fP \ %lu \ (since Linux 3.3) \ [PT]
+.\" commit b3f7f573a20081910e34e99cbc91831f4f02f1ff
+Address above which program heap can be expanded with
+.BR brk (2).
+.TP
+(48) \fIarg_start\fP \ %lu \ (since Linux 3.5) \ [PT]
+.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
+Address above which program command-line arguments
+.RI ( argv )
+are placed.
+.TP
+(49) \fIarg_end\fP \ %lu \ (since Linux 3.5) \ [PT]
+.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
+Address below program command-line arguments
+.RI ( argv )
+are placed.
+.TP
+(50) \fIenv_start\fP \ %lu \ (since Linux 3.5) \ [PT]
+.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
+Address above which program environment is placed.
+.TP
+(51) \fIenv_end\fP \ %lu \ (since Linux 3.5) \ [PT]
+.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
+Address below which program environment is placed.
+.TP
+(52) \fIexit_code\fP \ %d \ (since Linux 3.5) \ [PT]
+.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
+The thread's exit status in the form reported by
+.BR waitpid (2).
+.RE
+.TP
+.IR /proc/ pid /statm
+Provides information about memory usage, measured in pages.
+The columns are:
+.IP
+.in +4n
+.EX
+size (1) total program size
+ (same as VmSize in \fI/proc/\fPpid\fI/status\fP)
+resident (2) resident set size
+ (inaccurate; same as VmRSS in \fI/proc/\fPpid\fI/status\fP)
+shared (3) number of resident shared pages
+ (i.e., backed by a file)
+ (inaccurate; same as RssFile+RssShmem in
+ \fI/proc/\fPpid\fI/status\fP)
+text (4) text (code)
+.\" (not including libs; broken, includes data segment)
+lib (5) library (unused since Linux 2.6; always 0)
+data (6) data + stack
+.\" (including libs; broken, includes library text)
+dt (7) dirty pages (unused since Linux 2.6; always 0)
+.EE
+.in
+.IP
+.\" See SPLIT_RSS_COUNTING in the kernel.
+.\" Inaccuracy is bounded by TASK_RSS_EVENTS_THRESH.
+Some of these values are inaccurate because
+of a kernel-internal scalability optimization.
+If accurate values are required, use
+.IR /proc/ pid /smaps
+or
+.IR /proc/ pid /smaps_rollup
+instead, which are much slower but provide accurate, detailed information.
+.TP
+.IR /proc/ pid /status
+Provides much of the information in
+.IR /proc/ pid /stat
+and
+.IR /proc/ pid /statm
+in a format that's easier for humans to parse.
+Here's an example:
+.IP
+.in +4n
+.EX
+.RB "$" " cat /proc/$$/status"
+Name: bash
+Umask: 0022
+State: S (sleeping)
+Tgid: 17248
+Ngid: 0
+Pid: 17248
+PPid: 17200
+TracerPid: 0
+Uid: 1000 1000 1000 1000
+Gid: 100 100 100 100
+FDSize: 256
+Groups: 16 33 100
+NStgid: 17248
+NSpid: 17248
+NSpgid: 17248
+NSsid: 17200
+VmPeak: 131168 kB
+VmSize: 131168 kB
+VmLck: 0 kB
+VmPin: 0 kB
+VmHWM: 13484 kB
+VmRSS: 13484 kB
+RssAnon: 10264 kB
+RssFile: 3220 kB
+RssShmem: 0 kB
+VmData: 10332 kB
+VmStk: 136 kB
+VmExe: 992 kB
+VmLib: 2104 kB
+VmPTE: 76 kB
+VmPMD: 12 kB
+VmSwap: 0 kB
+HugetlbPages: 0 kB # 4.4
+CoreDumping: 0 # 4.15
+Threads: 1
+SigQ: 0/3067
+SigPnd: 0000000000000000
+ShdPnd: 0000000000000000
+SigBlk: 0000000000010000
+SigIgn: 0000000000384004
+SigCgt: 000000004b813efb
+CapInh: 0000000000000000
+CapPrm: 0000000000000000
+CapEff: 0000000000000000
+CapBnd: ffffffffffffffff
+CapAmb: 0000000000000000
+NoNewPrivs: 0
+Seccomp: 0
+Speculation_Store_Bypass: vulnerable
+Cpus_allowed: 00000001
+Cpus_allowed_list: 0
+Mems_allowed: 1
+Mems_allowed_list: 0
+voluntary_ctxt_switches: 150
+nonvoluntary_ctxt_switches: 545
+.EE
+.in
+.IP
+The fields are as follows:
+.RS
+.TP
+.I Name
+Command run by this process.
+Strings longer than
+.B TASK_COMM_LEN
+(16) characters (including the terminating null byte) are silently truncated.
+.TP
+.I Umask
+Process umask, expressed in octal with a leading zero; see
+.BR umask (2).
+(Since Linux 4.7.)
+.TP
+.I State
+Current state of the process.
+One of
+"R (running)",
+"S (sleeping)",
+"D (disk sleep)",
+"T (stopped)",
+"t (tracing stop)",
+"Z (zombie)",
+or
+"X (dead)".
+.TP
+.I Tgid
+Thread group ID (i.e., Process ID).
+.TP
+.I Ngid
+NUMA group ID (0 if none; since Linux 3.13).
+.TP
+.I Pid
+Thread ID (see
+.BR gettid (2)).
+.TP
+.I PPid
+PID of parent process.
+.TP
+.I TracerPid
+PID of process tracing this process (0 if not being traced).
+.TP
+.IR Uid ", " Gid
+Real, effective, saved set, and filesystem UIDs (GIDs).
+.TP
+.I FDSize
+Number of file descriptor slots currently allocated.
+.TP
+.I Groups
+Supplementary group list.
+.TP
+.I NStgid
+Thread group ID (i.e., PID) in each of the PID namespaces of which
+.I pid
+is a member.
+The leftmost entry shows the value with respect to the PID namespace
+of the process that mounted this procfs (or the root namespace
+if mounted by the kernel),
+followed by the value in successively nested inner namespaces.
+.\" commit e4bc33245124db69b74a6d853ac76c2976f472d5
+(Since Linux 4.1.)
+.TP
+.I NSpid
+Thread ID in each of the PID namespaces of which
+.I pid
+is a member.
+The fields are ordered as for
+.IR NStgid .
+(Since Linux 4.1.)
+.TP
+.I NSpgid
+Process group ID in each of the PID namespaces of which
+.I pid
+is a member.
+The fields are ordered as for
+.IR NStgid .
+(Since Linux 4.1.)
+.TP
+.I NSsid
+descendant namespace session ID hierarchy
+Session ID in each of the PID namespaces of which
+.I pid
+is a member.
+The fields are ordered as for
+.IR NStgid .
+(Since Linux 4.1.)
+.TP
+.I VmPeak
+Peak virtual memory size.
+.TP
+.I VmSize
+Virtual memory size.
+.TP
+.I VmLck
+Locked memory size (see
+.BR mlock (2)).
+.TP
+.I VmPin
+Pinned memory size
+.\" commit bc3e53f682d93df677dbd5006a404722b3adfe18
+(since Linux 3.2).
+These are pages that can't be moved because something needs to
+directly access physical memory.
+.TP
+.I VmHWM
+Peak resident set size ("high water mark").
+This value is inaccurate; see
+.IR /proc/ pid /statm
+above.
+.TP
+.I VmRSS
+Resident set size.
+Note that the value here is the sum of
+.IR RssAnon ,
+.IR RssFile ,
+and
+.IR RssShmem .
+This value is inaccurate; see
+.IR /proc/ pid /statm
+above.
+.TP
+.I RssAnon
+Size of resident anonymous memory.
+.\" commit bf9683d6990589390b5178dafe8fd06808869293
+(since Linux 4.5).
+This value is inaccurate; see
+.IR /proc/ pid /statm
+above.
+.TP
+.I RssFile
+Size of resident file mappings.
+.\" commit bf9683d6990589390b5178dafe8fd06808869293
+(since Linux 4.5).
+This value is inaccurate; see
+.IR /proc/ pid /statm
+above.
+.TP
+.I RssShmem
+Size of resident shared memory (includes System V shared memory,
+mappings from
+.BR tmpfs (5),
+and shared anonymous mappings).
+.\" commit bf9683d6990589390b5178dafe8fd06808869293
+(since Linux 4.5).
+.TP
+.IR VmData ", " VmStk ", " VmExe
+Size of data, stack, and text segments.
+This value is inaccurate; see
+.IR /proc/ pid /statm
+above.
+.TP
+.I VmLib
+Shared library code size.
+.TP
+.I VmPTE
+Page table entries size (since Linux 2.6.10).
+.TP
+.I VmPMD
+.\" commit dc6c9a35b66b520cf67e05d8ca60ebecad3b0479
+Size of second-level page tables (added in Linux 4.0; removed in Linux 4.15).
+.TP
+.I VmSwap
+.\" commit b084d4353ff99d824d3bc5a5c2c22c70b1fba722
+Swapped-out virtual memory size by anonymous private pages;
+shmem swap usage is not included (since Linux 2.6.34).
+This value is inaccurate; see
+.IR /proc/ pid /statm
+above.
+.TP
+.I HugetlbPages
+Size of hugetlb memory portions
+.\" commit 5d317b2b6536592a9b51fe65faed43d65ca9158e
+(since Linux 4.4).
+.TP
+.I CoreDumping
+Contains the value 1 if the process is currently dumping core,
+and 0 if it is not
+.\" commit c643401218be0f4ab3522e0c0a63016596d6e9ca
+(since Linux 4.15).
+This information can be used by a monitoring process to avoid killing
+a process that is currently dumping core,
+which could result in a corrupted core dump file.
+.TP
+.I Threads
+Number of threads in process containing this thread.
+.TP
+.I SigQ
+This field contains two slash-separated numbers that relate to
+queued signals for the real user ID of this process.
+The first of these is the number of currently queued
+signals for this real user ID, and the second is the
+resource limit on the number of queued signals for this process
+(see the description of
+.B RLIMIT_SIGPENDING
+in
+.BR getrlimit (2)).
+.TP
+.IR SigPnd ", " ShdPnd
+Mask (expressed in hexadecimal)
+of signals pending for thread and for process as a whole (see
+.BR pthreads (7)
+and
+.BR signal (7)).
+.TP
+.IR SigBlk ", " SigIgn ", " SigCgt
+Masks (expressed in hexadecimal)
+indicating signals being blocked, ignored, and caught (see
+.BR signal (7)).
+.TP
+.IR CapInh ", " CapPrm ", " CapEff
+Masks (expressed in hexadecimal)
+of capabilities enabled in inheritable, permitted, and effective sets
+(see
+.BR capabilities (7)).
+.TP
+.I CapBnd
+Capability bounding set, expressed in hexadecimal
+(since Linux 2.6.26, see
+.BR capabilities (7)).
+.TP
+.I CapAmb
+Ambient capability set, expressed in hexadecimal
+(since Linux 4.3, see
+.BR capabilities (7)).
+.TP
+.I NoNewPrivs
+.\" commit af884cd4a5ae62fcf5e321fecf0ec1014730353d
+Value of the
+.I no_new_privs
+bit
+(since Linux 4.10, see
+.BR prctl (2)).
+.TP
+.I Seccomp
+.\" commit 2f4b3bf6b2318cfaa177ec5a802f4d8d6afbd816
+Seccomp mode of the process
+(since Linux 3.8, see
+.BR seccomp (2)).
+0 means
+.BR SECCOMP_MODE_DISABLED ;
+1 means
+.BR SECCOMP_MODE_STRICT ;
+2 means
+.BR SECCOMP_MODE_FILTER .
+This field is provided only if the kernel was built with the
+.B CONFIG_SECCOMP
+kernel configuration option enabled.
+.TP
+.I Speculation_Store_Bypass
+.\" commit fae1fa0fc6cca8beee3ab8ed71d54f9a78fa3f64
+Speculation flaw mitigation state
+(since Linux 4.17, see
+.BR prctl (2)).
+.TP
+.I Cpus_allowed
+Hexadecimal mask of CPUs on which this process may run
+(since Linux 2.6.24, see
+.BR cpuset (7)).
+.TP
+.I Cpus_allowed_list
+Same as previous, but in "list format"
+(since Linux 2.6.26, see
+.BR cpuset (7)).
+.TP
+.I Mems_allowed
+Mask of memory nodes allowed to this process
+(since Linux 2.6.24, see
+.BR cpuset (7)).
+.TP
+.I Mems_allowed_list
+Same as previous, but in "list format"
+(since Linux 2.6.26, see
+.BR cpuset (7)).
+.TP
+.IR voluntary_ctxt_switches ", " nonvoluntary_ctxt_switches
+Number of voluntary and involuntary context switches (since Linux 2.6.23).
+.RE
+.TP
+.IR /proc/ pid /syscall " (since Linux 2.6.27)"
+.\" commit ebcb67341fee34061430f3367f2e507e52ee051b
+This file exposes the system call number and argument registers for the
+system call currently being executed by the process,
+followed by the values of the stack pointer and program counter registers.
+The values of all six argument registers are exposed,
+although most system calls use fewer registers.
+.IP
+If the process is blocked, but not in a system call,
+then the file displays \-1 in place of the system call number,
+followed by just the values of the stack pointer and program counter.
+If process is not blocked, then the file contains just the string "running".
+.IP
+This file is present only if the kernel was configured with
+.BR CONFIG_HAVE_ARCH_TRACEHOOK .
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_ATTACH_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ pid /task " (since Linux 2.6.0)"
+.\" Precisely: Linux 2.6.0-test6
+This is a directory that contains one subdirectory
+for each thread in the process.
+The name of each subdirectory is the numerical thread ID
+.RI ( tid )
+of the thread (see
+.BR gettid (2)).
+.IP
+Within each of these subdirectories, there is a set of
+files with the same names and contents as under the
+.IR /proc/ pid
+directories.
+For attributes that are shared by all threads, the contents for
+each of the files under the
+.IR task/ tid
+subdirectories will be the same as in the corresponding
+file in the parent
+.IR /proc/ pid
+directory
+(e.g., in a multithreaded process, all of the
+.IR task/ tid /cwd
+files will have the same value as the
+.IR /proc/ pid /cwd
+file in the parent directory, since all of the threads in a process
+share a working directory).
+For attributes that are distinct for each thread,
+the corresponding files under
+.IR task/ tid
+may have different values (e.g., various fields in each of the
+.IR task/ tid /status
+files may be different for each thread),
+.\" in particular: "children" :/
+or they might not exist in
+.IR /proc/ pid
+at all.
+.IP
+.\" The following was still true as at kernel 2.6.13
+In a multithreaded process, the contents of the
+.IR /proc/ pid /task
+directory are not available if the main thread has already terminated
+(typically by calling
+.BR pthread_exit (3)).
+.TP
+.IR /proc/ pid /task/ tid /children " (since Linux 3.5)"
+.\" commit 818411616baf46ceba0cff6f05af3a9b294734f7
+A space-separated list of child tasks of this task.
+Each child task is represented by its TID.
+.IP
+.\" see comments in get_children_pid() in fs/proc/array.c
+This option is intended for use by the checkpoint-restore (CRIU) system,
+and reliably provides a list of children only if all of the child processes
+are stopped or frozen.
+It does not work properly if children of the target task exit while
+the file is being read!
+Exiting children may cause non-exiting children to be omitted from the list.
+This makes this interface even more unreliable than classic PID-based
+approaches if the inspected task and its children aren't frozen,
+and most code should probably not use this interface.
+.IP
+Until Linux 4.2, the presence of this file was governed by the
+.B CONFIG_CHECKPOINT_RESTORE
+kernel configuration option.
+Since Linux 4.2,
+.\" commit 2e13ba54a2682eea24918b87ad3edf70c2cf085b
+it is governed by the
+.B CONFIG_PROC_CHILDREN
+option.
+.TP
+.IR /proc/ pid /timers " (since Linux 3.10)"
+.\" commit 5ed67f05f66c41e39880a6d61358438a25f9fee5
+.\" commit 48f6a7a511ef8823fdff39afee0320092d43a8a0
+A list of the POSIX timers for this process.
+Each timer is listed with a line that starts with the string "ID:".
+For example:
+.IP
+.in +4n
+.EX
+ID: 1
+signal: 60/00007fff86e452a8
+notify: signal/pid.2634
+ClockID: 0
+ID: 0
+signal: 60/00007fff86e452a8
+notify: signal/pid.2634
+ClockID: 1
+.EE
+.in
+.IP
+The lines shown for each timer have the following meanings:
+.RS
+.TP
+.I ID
+The ID for this timer.
+This is not the same as the timer ID returned by
+.BR timer_create (2);
+rather, it is the same kernel-internal ID that is available via the
+.I si_timerid
+field of the
+.I siginfo_t
+structure (see
+.BR sigaction (2)).
+.TP
+.I signal
+This is the signal number that this timer uses to deliver notifications
+followed by a slash, and then the
+.I sigev_value
+value supplied to the signal handler.
+Valid only for timers that notify via a signal.
+.TP
+.I notify
+The part before the slash specifies the mechanism
+that this timer uses to deliver notifications,
+and is one of "thread", "signal", or "none".
+Immediately following the slash is either the string "tid" for timers
+with
+.B SIGEV_THREAD_ID
+notification, or "pid" for timers that notify by other mechanisms.
+Following the "." is the PID of the process
+(or the kernel thread ID of the thread) that will be delivered
+a signal if the timer delivers notifications via a signal.
+.TP
+.I ClockID
+This field identifies the clock that the timer uses for measuring time.
+For most clocks, this is a number that matches one of the user-space
+.B CLOCK_*
+constants exposed via
+.IR <time.h> .
+.B CLOCK_PROCESS_CPUTIME_ID
+timers display with a value of \-6
+in this field.
+.B CLOCK_THREAD_CPUTIME_ID
+timers display with a value of \-2
+in this field.
+.RE
+.IP
+This file is available only when the kernel was configured with
+.BR CONFIG_CHECKPOINT_RESTORE .
+.TP
+.IR /proc/ pid /timerslack_ns " (since Linux 4.6)"
+.\" commit da8b44d5a9f8bf26da637b7336508ca534d6b319
+.\" commit 5de23d435e88996b1efe0e2cebe242074ce67c9e
+This file exposes the process's "current" timer slack value,
+expressed in nanoseconds.
+The file is writable,
+allowing the process's timer slack value to be changed.
+Writing 0 to this file resets the "current" timer slack to the
+"default" timer slack value.
+For further details, see the discussion of
+.B PR_SET_TIMERSLACK
+in
+.BR prctl (2).
+.IP
+Initially,
+permission to access this file was governed by a ptrace access mode
+.B PTRACE_MODE_ATTACH_FSCREDS
+check (see
+.BR ptrace (2)).
+However, this was subsequently deemed too strict a requirement
+(and had the side effect that requiring a process to have the
+.B CAP_SYS_PTRACE
+capability would also allow it to view and change any process's memory).
+Therefore, since Linux 4.9,
+.\" commit 7abbaf94049914f074306d960b0f968ffe52e59f
+only the (weaker)
+.B CAP_SYS_NICE
+capability is required to access this file.
+.TP
+.IR /proc/ pid /uid_map " (since Linux 3.5)"
+See
+.BR user_namespaces (7).
+.TP
+.IR /proc/ pid /wchan " (since Linux 2.6.0)"
+The symbolic name corresponding to the location
+in the kernel where the process is sleeping.
+.IP
+Permission to access this file is governed by a ptrace access mode
+.B PTRACE_MODE_READ_FSCREDS
+check; see
+.BR ptrace (2).
+.TP
+.IR /proc/ tid
+There is a numerical subdirectory for each running thread
+that is not a thread group leader
+(i.e., a thread whose thread ID is not the same as its process ID);
+the subdirectory is named by the thread ID.
+Each one of these subdirectories contains files and subdirectories
+exposing information about the thread with the thread ID
+.IR tid .
+The contents of these directories are the same as the corresponding
+.IR /proc/ pid /task/ tid
+directories.
+.IP
+The
+.IR /proc/ tid
+subdirectories are
+.I not
+visible when iterating through
+.I /proc
+with
+.BR getdents (2)
+(and thus are
+.I not
+visible when one uses
+.BR ls (1)
+to view the contents of
+.IR /proc ).
+However, the pathnames of these directories are visible to
+(i.e., usable as arguments in)
+system calls that operate on pathnames.
+.TP
+.I /proc/apm
+Advanced power management version and battery information when
+.B CONFIG_APM
+is defined at kernel compilation time.
+.TP
+.I /proc/buddyinfo
+This file contains information which is used for diagnosing memory
+fragmentation issues.
+Each line starts with the identification of the node and the name
+of the zone which together identify a memory region.
+This is then
+followed by the count of available chunks of a certain order in
+which these zones are split.
+The size in bytes of a certain order is given by the formula:
+.IP
+.in +4n
+.EX
+(2\[ha]order)\ *\ PAGE_SIZE
+.EE
+.in
+.IP
+The binary buddy allocator algorithm inside the kernel will split
+one chunk into two chunks of a smaller order (thus with half the
+size) or combine two contiguous chunks into one larger chunk of
+a higher order (thus with double the size) to satisfy allocation
+requests and to counter memory fragmentation.
+The order matches the column number, when starting to count at zero.
+.IP
+For example on an x86-64 system:
+.RS -12
+.EX
+Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3
+Node 0, zone DMA32 65 47 4 81 52 28 13 10 5 1 404
+Node 0, zone Normal 216 55 189 101 84 38 37 27 5 3 587
+.EE
+.RE
+.IP
+In this example, there is one node containing three zones and there
+are 11 different chunk sizes.
+If the page size is 4 kilobytes, then the first zone called
+.I DMA
+(on x86 the first 16 megabyte of memory) has 1 chunk of 4 kilobytes
+(order 0) available and has 3 chunks of 4 megabytes (order 10) available.
+.IP
+If the memory is heavily fragmented, the counters for higher
+order chunks will be zero and allocation of large contiguous areas
+will fail.
+.IP
+Further information about the zones can be found in
+.IR /proc/zoneinfo .
+.TP
+.I /proc/bus
+Contains subdirectories for installed buses.
+.TP
+.I /proc/bus/pccard
+Subdirectory for PCMCIA devices when
+.B CONFIG_PCMCIA
+is set at kernel compilation time.
+.TP
+.I /proc/bus/pccard/drivers
+.TP
+.I /proc/bus/pci
+Contains various bus subdirectories and pseudo-files containing
+information about PCI buses, installed devices, and device
+drivers.
+Some of these files are not ASCII.
+.TP
+.I /proc/bus/pci/devices
+Information about PCI devices.
+They may be accessed through
+.BR lspci (8)
+and
+.BR setpci (8).
+.TP
+.IR /proc/cgroups " (since Linux 2.6.24)"
+See
+.BR cgroups (7).
+.TP
+.I /proc/cmdline
+Arguments passed to the Linux kernel at boot time.
+Often done via a boot manager such as
+.BR lilo (8)
+or
+.BR grub (8).
+Any arguments embedded in the kernel image or initramfs via
+.B CONFIG_BOOT_CONFIG
+will also be displayed.
+.TP
+.IR /proc/config.gz " (since Linux 2.6)"
+This file exposes the configuration options that were used
+to build the currently running kernel,
+in the same format as they would be shown in the
+.I .config
+file that resulted when configuring the kernel (using
+.IR "make xconfig" ,
+.IR "make config" ,
+or similar).
+The file contents are compressed; view or search them using
+.BR zcat (1)
+and
+.BR zgrep (1).
+As long as no changes have been made to the following file,
+the contents of
+.I /proc/config.gz
+are the same as those provided by:
+.IP
+.in +4n
+.EX
+cat /lib/modules/$(uname \-r)/build/.config
+.EE
+.in
+.IP
+.I /proc/config.gz
+is provided only if the kernel is configured with
+.BR CONFIG_IKCONFIG_PROC .
+.TP
+.I /proc/crypto
+A list of the ciphers provided by the kernel crypto API.
+For details, see the kernel
+.I "Linux Kernel Crypto API"
+documentation available under the kernel source directory
+.I Documentation/crypto/
+.\" commit 3b72c814a8e8cd638e1ba0da4dfce501e9dff5af
+(or
+.I Documentation/DocBook
+before Linux 4.10;
+the documentation can be built using a command such as
+.I make htmldocs
+in the root directory of the kernel source tree).
+.TP
+.I /proc/cpuinfo
+This is a collection of CPU and system architecture dependent items,
+for each supported architecture a different list.
+Two common entries are \fIprocessor\fP which gives CPU number and
+\fIbogomips\fP; a system constant that is calculated
+during kernel initialization.
+SMP machines have information for
+each CPU.
+The
+.BR lscpu (1)
+command gathers its information from this file.
+.TP
+.I /proc/devices
+Text listing of major numbers and device groups.
+This can be used by MAKEDEV scripts for consistency with the kernel.
+.TP
+.IR /proc/diskstats " (since Linux 2.5.69)"
+This file contains disk I/O statistics for each disk device.
+See the Linux kernel source file
+.I Documentation/admin\-guide/iostats.rst
+(or
+.I Documentation/iostats.txt
+before Linux 5.3)
+for further information.
+.TP
+.I /proc/dma
+This is a list of the registered \fIISA\fP DMA (direct memory access)
+channels in use.
+.TP
+.I /proc/driver
+Empty subdirectory.
+.TP
+.I /proc/execdomains
+Used to list ABI personalities before Linux 4.1;
+now contains a constant string for userspace compatibility.
+.TP
+.I /proc/fb
+Frame buffer information when
+.B CONFIG_FB
+is defined during kernel compilation.
+.TP
+.I /proc/filesystems
+A text listing of the filesystems which are supported by the kernel,
+namely filesystems which were compiled into the kernel or whose kernel
+modules are currently loaded.
+(See also
+.BR filesystems (5).)
+If a filesystem is marked with "nodev",
+this means that it does not require a block device to be mounted
+(e.g., virtual filesystem, network filesystem).
+.IP
+Incidentally, this file may be used by
+.BR mount (8)
+when no filesystem is specified and it didn't manage to determine the
+filesystem type.
+Then filesystems contained in this file are tried
+(excepted those that are marked with "nodev").
+.TP
+.I /proc/fs
+.\" FIXME Much more needs to be said about /proc/fs
+.\"
+Contains subdirectories that in turn contain files
+with information about (certain) mounted filesystems.
+.TP
+.I /proc/ide
+This directory
+exists on systems with the IDE bus.
+There are directories for each IDE channel and attached device.
+Files include:
+.IP
+.in +4n
+.EX
+cache buffer size in KB
+capacity number of sectors
+driver driver version
+geometry physical and logical geometry
+identify in hexadecimal
+media media type
+model manufacturer\[aq]s model number
+settings drive settings
+smart_thresholds IDE disk management thresholds (in hex)
+smart_values IDE disk management values (in hex)
+.EE
+.in
+.IP
+The
+.BR hdparm (8)
+utility provides access to this information in a friendly format.
+.TP
+.I /proc/interrupts
+This is used to record the number of interrupts per CPU per IO device.
+Since Linux 2.6.24,
+for the i386 and x86-64 architectures, at least, this also includes
+interrupts internal to the system (that is, not associated with a device
+as such), such as NMI (nonmaskable interrupt), LOC (local timer interrupt),
+and for SMP systems, TLB (TLB flush interrupt), RES (rescheduling
+interrupt), CAL (remote function call interrupt), and possibly others.
+Very easy to read formatting, done in ASCII.
+.TP
+.I /proc/iomem
+I/O memory map in Linux 2.4.
+.TP
+.I /proc/ioports
+This is a list of currently registered Input-Output port regions that
+are in use.
+.TP
+.IR /proc/kallsyms " (since Linux 2.5.71)"
+This holds the kernel exported symbol definitions used by the
+.BR modules (X)
+tools to dynamically link and bind loadable modules.
+In Linux 2.5.47 and earlier, a similar file with slightly different syntax
+was named
+.IR ksyms .
+.TP
+.I /proc/kcore
+This file represents the physical memory of the system and is stored
+in the ELF core file format.
+With this pseudo-file, and an unstripped
+kernel
+.RI ( /usr/src/linux/vmlinux )
+binary, GDB can be used to
+examine the current state of any kernel data structures.
+.IP
+The total length of the file is the size of physical memory (RAM) plus
+4\ KiB.
+.TP
+.IR /proc/keys " (since Linux 2.6.10)"
+See
+.BR keyrings (7).
+.TP
+.IR /proc/key\-users " (since Linux 2.6.10)"
+See
+.BR keyrings (7).
+.TP
+.I /proc/kmsg
+This file can be used instead of the
+.BR syslog (2)
+system call to read kernel messages.
+A process must have superuser
+privileges to read this file, and only one process should read this
+file.
+This file should not be read if a syslog process is running
+which uses the
+.BR syslog (2)
+system call facility to log kernel messages.
+.IP
+Information in this file is retrieved with the
+.BR dmesg (1)
+program.
+.TP
+.IR /proc/kpagecgroup " (since Linux 4.3)"
+.\" commit 80ae2fdceba8313b0433f899bdd9c6c463291a17
+This file contains a 64-bit inode number of
+the memory cgroup each page is charged to,
+indexed by page frame number (see the discussion of
+.IR /proc/ pid /pagemap ).
+.IP
+The
+.I /proc/kpagecgroup
+file is present only if the
+.B CONFIG_MEMCG
+kernel configuration option is enabled.
+.TP
+.IR /proc/kpagecount " (since Linux 2.6.25)"
+This file contains a 64-bit count of the number of
+times each physical page frame is mapped,
+indexed by page frame number (see the discussion of
+.IR /proc/ pid /pagemap ).
+.IP
+The
+.I /proc/kpagecount
+file is present only if the
+.B CONFIG_PROC_PAGE_MONITOR
+kernel configuration option is enabled.
+.TP
+.IR /proc/kpageflags " (since Linux 2.6.25)"
+This file contains 64-bit masks corresponding to each physical page frame;
+it is indexed by page frame number (see the discussion of
+.IR /proc/ pid /pagemap ).
+The bits are as follows:
+.RS
+.IP
+.TS
+r l l l.
+0 - KPF_LOCKED
+1 - KPF_ERROR
+2 - KPF_REFERENCED
+3 - KPF_UPTODATE
+4 - KPF_DIRTY
+5 - KPF_LRU
+6 - KPF_ACTIVE
+7 - KPF_SLAB
+8 - KPF_WRITEBACK
+9 - KPF_RECLAIM
+10 - KPF_BUDDY
+11 - KPF_MMAP (since Linux 2.6.31)
+12 - KPF_ANON (since Linux 2.6.31)
+13 - KPF_SWAPCACHE (since Linux 2.6.31)
+14 - KPF_SWAPBACKED (since Linux 2.6.31)
+15 - KPF_COMPOUND_HEAD (since Linux 2.6.31)
+16 - KPF_COMPOUND_TAIL (since Linux 2.6.31)
+17 - KPF_HUGE (since Linux 2.6.31)
+18 - KPF_UNEVICTABLE (since Linux 2.6.31)
+19 - KPF_HWPOISON (since Linux 2.6.31)
+20 - KPF_NOPAGE (since Linux 2.6.31)
+21 - KPF_KSM (since Linux 2.6.32)
+22 - KPF_THP (since Linux 3.4)
+23 - KPF_BALLOON (since Linux 3.18)
+.\" KPF_BALLOON: commit 09316c09dde33aae14f34489d9e3d243ec0d5938
+24 - KPF_ZERO_PAGE (since Linux 4.0)
+.\" KPF_ZERO_PAGE: commit 56873f43abdcd574b25105867a990f067747b2f4
+25 - KPF_IDLE (since Linux 4.3)
+.\" KPF_IDLE: commit f074a8f49eb87cde95ac9d040ad5e7ea4f029738
+26 - KPF_PGTABLE (since Linux 4.18)
+.\" KPF_PGTABLE: commit 1d40a5ea01d53251c23c7be541d3f4a656cfc537
+.TE
+.RE
+.IP
+For further details on the meanings of these bits,
+see the kernel source file
+.IR Documentation/admin\-guide/mm/pagemap.rst .
+Before Linux 2.6.29,
+.\" commit ad3bdefe877afb47480418fdb05ecd42842de65e
+.\" commit e07a4b9217d1e97d2f3a62b6b070efdc61212110
+.BR KPF_WRITEBACK ,
+.BR KPF_RECLAIM ,
+.BR KPF_BUDDY ,
+and
+.B KPF_LOCKED
+did not report correctly.
+.IP
+The
+.I /proc/kpageflags
+file is present only if the
+.B CONFIG_PROC_PAGE_MONITOR
+kernel configuration option is enabled.
+.TP
+.IR /proc/ksyms " (Linux 1.1.23\[en]2.5.47)"
+See
+.IR /proc/kallsyms .
+.TP
+.I /proc/loadavg
+The first three fields in this file are load average figures
+giving the number of jobs in the run queue (state R)
+or waiting for disk I/O (state D) averaged over 1, 5, and 15 minutes.
+They are the same as the load average numbers given by
+.BR uptime (1)
+and other programs.
+The fourth field consists of two numbers separated by a slash (/).
+The first of these is the number of currently runnable kernel
+scheduling entities (processes, threads).
+The value after the slash is the number of kernel scheduling entities
+that currently exist on the system.
+The fifth field is the PID of the process that was most
+recently created on the system.
+.TP
+.I /proc/locks
+This file shows current file locks
+.RB ( flock "(2) and " fcntl (2))
+and leases
+.RB ( fcntl (2)).
+.IP
+An example of the content shown in this file is the following:
+.IP
+.in +4n
+.EX
+1: POSIX ADVISORY READ 5433 08:01:7864448 128 128
+2: FLOCK ADVISORY WRITE 2001 08:01:7864554 0 EOF
+3: FLOCK ADVISORY WRITE 1568 00:2f:32388 0 EOF
+4: POSIX ADVISORY WRITE 699 00:16:28457 0 EOF
+5: POSIX ADVISORY WRITE 764 00:16:21448 0 0
+6: POSIX ADVISORY READ 3548 08:01:7867240 1 1
+7: POSIX ADVISORY READ 3548 08:01:7865567 1826 2335
+8: OFDLCK ADVISORY WRITE \-1 08:01:8713209 128 191
+.EE
+.in
+.IP
+The fields shown in each line are as follows:
+.RS
+.IP [1] 5
+The ordinal position of the lock in the list.
+.IP [2]
+The lock type.
+Values that may appear here include:
+.RS
+.TP
+.B FLOCK
+This is a BSD file lock created using
+.BR flock (2).
+.TP
+.B OFDLCK
+This is an open file description (OFD) lock created using
+.BR fcntl (2).
+.TP
+.B POSIX
+This is a POSIX byte-range lock created using
+.BR fcntl (2).
+.RE
+.IP [3]
+Among the strings that can appear here are the following:
+.RS
+.TP
+.B ADVISORY
+This is an advisory lock.
+.TP
+.B MANDATORY
+This is a mandatory lock.
+.RE
+.IP [4]
+The type of lock.
+Values that can appear here are:
+.RS
+.TP
+.B READ
+This is a POSIX or OFD read lock, or a BSD shared lock.
+.TP
+.B WRITE
+This is a POSIX or OFD write lock, or a BSD exclusive lock.
+.RE
+.IP [5]
+The PID of the process that owns the lock.
+.IP
+Because OFD locks are not owned by a single process
+(since multiple processes may have file descriptors that
+refer to the same open file description),
+the value \-1 is displayed in this field for OFD locks.
+(Before Linux 4.14,
+.\" commit 9d5b86ac13c573795525ecac6ed2db39ab23e2a8
+a bug meant that the PID of the process that
+initially acquired the lock was displayed instead of the value \-1.)
+.IP [6]
+Three colon-separated subfields that identify the major and minor device
+ID of the device containing the filesystem where the locked file resides,
+followed by the inode number of the locked file.
+.IP [7]
+The byte offset of the first byte of the lock.
+For BSD locks, this value is always 0.
+.IP [8]
+The byte offset of the last byte of the lock.
+.B EOF
+in this field means that the lock extends to the end of the file.
+For BSD locks, the value shown is always
+.IR EOF .
+.RE
+.IP
+Since Linux 4.9,
+.\" commit d67fd44f697dff293d7cdc29af929241b669affe
+the list of locks shown in
+.I /proc/locks
+is filtered to show just the locks for the processes in the PID
+namespace (see
+.BR pid_namespaces (7))
+for which the
+.I /proc
+filesystem was mounted.
+(In the initial PID namespace,
+there is no filtering of the records shown in this file.)
+.IP
+The
+.BR lslocks (8)
+command provides a bit more information about each lock.
+.TP
+.IR /proc/malloc " (only up to and including Linux 2.2)"
+.\" It looks like this only ever did something back in 1.0 days
+This file is present only if
+.B CONFIG_DEBUG_MALLOC
+was defined during compilation.
+.TP
+.I /proc/meminfo
+This file reports statistics about memory usage on the system.
+It is used by
+.BR free (1)
+to report the amount of free and used memory (both physical and swap)
+on the system as well as the shared memory and buffers used by the
+kernel.
+Each line of the file consists of a parameter name, followed by a colon,
+the value of the parameter, and an option unit of measurement (e.g., "kB").
+The list below describes the parameter names and
+the format specifier required to read the field value.
+Except as noted below,
+all of the fields have been present since at least Linux 2.6.0.
+Some fields are displayed only if the kernel was configured
+with various options; those dependencies are noted in the list.
+.RS
+.TP
+.IR MemTotal " %lu"
+Total usable RAM (i.e., physical RAM minus a few reserved
+bits and the kernel binary code).
+.TP
+.IR MemFree " %lu"
+The sum of
+.IR LowFree + HighFree .
+.TP
+.IR MemAvailable " %lu (since Linux 3.14)"
+An estimate of how much memory is available for starting new
+applications, without swapping.
+.TP
+.IR Buffers " %lu"
+Relatively temporary storage for raw disk blocks that
+shouldn't get tremendously large (20 MB or so).
+.TP
+.IR Cached " %lu"
+In-memory cache for files read from the disk (the page cache).
+Doesn't include
+.IR SwapCached .
+.TP
+.IR SwapCached " %lu"
+Memory that once was swapped out, is swapped back in but
+still also is in the swap file.
+(If memory pressure is high, these pages
+don't need to be swapped out again because they are already
+in the swap file.
+This saves I/O.)
+.TP
+.IR Active " %lu"
+Memory that has been used more recently and usually not
+reclaimed unless absolutely necessary.
+.TP
+.IR Inactive " %lu"
+Memory which has been less recently used.
+It is more eligible to be reclaimed for other purposes.
+.TP
+.IR Active(anon) " %lu (since Linux 2.6.28)"
+[To be documented.]
+.TP
+.IR Inactive(anon) " %lu (since Linux 2.6.28)"
+[To be documented.]
+.TP
+.IR Active(file) " %lu (since Linux 2.6.28)"
+[To be documented.]
+.TP
+.IR Inactive(file) " %lu (since Linux 2.6.28)"
+[To be documented.]
+.TP
+.IR Unevictable " %lu (since Linux 2.6.28)"
+(From Linux 2.6.28 to Linux 2.6.30,
+\fBCONFIG_UNEVICTABLE_LRU\fP was required.)
+[To be documented.]
+.TP
+.IR Mlocked " %lu (since Linux 2.6.28)"
+(From Linux 2.6.28 to Linux 2.6.30,
+\fBCONFIG_UNEVICTABLE_LRU\fP was required.)
+[To be documented.]
+.TP
+.IR HighTotal " %lu"
+(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
+Total amount of highmem.
+Highmem is all memory above \[ti]860 MB of physical memory.
+Highmem areas are for use by user-space programs,
+or for the page cache.
+The kernel must use tricks to access
+this memory, making it slower to access than lowmem.
+.TP
+.IR HighFree " %lu"
+(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
+Amount of free highmem.
+.TP
+.IR LowTotal " %lu"
+(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
+Total amount of lowmem.
+Lowmem is memory which can be used for everything that
+highmem can be used for, but it is also available for the
+kernel's use for its own data structures.
+Among many other things,
+it is where everything from
+.I Slab
+is allocated.
+Bad things happen when you're out of lowmem.
+.TP
+.IR LowFree " %lu"
+(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
+Amount of free lowmem.
+.TP
+.IR MmapCopy " %lu (since Linux 2.6.29)"
+.RB ( CONFIG_MMU
+is required.)
+[To be documented.]
+.TP
+.IR SwapTotal " %lu"
+Total amount of swap space available.
+.TP
+.IR SwapFree " %lu"
+Amount of swap space that is currently unused.
+.TP
+.IR Dirty " %lu"
+Memory which is waiting to get written back to the disk.
+.TP
+.IR Writeback " %lu"
+Memory which is actively being written back to the disk.
+.TP
+.IR AnonPages " %lu (since Linux 2.6.18)"
+Non-file backed pages mapped into user-space page tables.
+.TP
+.IR Mapped " %lu"
+Files which have been mapped into memory (with
+.BR mmap (2)),
+such as libraries.
+.TP
+.IR Shmem " %lu (since Linux 2.6.32)"
+Amount of memory consumed in
+.BR tmpfs (5)
+filesystems.
+.TP
+.IR KReclaimable " %lu (since Linux 4.20)"
+Kernel allocations that the kernel will attempt to reclaim
+under memory pressure.
+Includes
+.I SReclaimable
+(below), and other direct allocations with a shrinker.
+.TP
+.IR Slab " %lu"
+In-kernel data structures cache.
+(See
+.BR slabinfo (5).)
+.TP
+.IR SReclaimable " %lu (since Linux 2.6.19)"
+Part of
+.IR Slab ,
+that might be reclaimed, such as caches.
+.TP
+.IR SUnreclaim " %lu (since Linux 2.6.19)"
+Part of
+.IR Slab ,
+that cannot be reclaimed on memory pressure.
+.TP
+.IR KernelStack " %lu (since Linux 2.6.32)"
+Amount of memory allocated to kernel stacks.
+.TP
+.IR PageTables " %lu (since Linux 2.6.18)"
+Amount of memory dedicated to the lowest level of page tables.
+.TP
+.IR Quicklists " %lu (since Linux 2.6.27)"
+(\fBCONFIG_QUICKLIST\fP is required.)
+[To be documented.]
+.TP
+.IR NFS_Unstable " %lu (since Linux 2.6.18)"
+NFS pages sent to the server, but not yet committed to stable storage.
+.TP
+.IR Bounce " %lu (since Linux 2.6.18)"
+Memory used for block device "bounce buffers".
+.TP
+.IR WritebackTmp " %lu (since Linux 2.6.26)"
+Memory used by FUSE for temporary writeback buffers.
+.TP
+.IR CommitLimit " %lu (since Linux 2.6.10)"
+This is the total amount of memory currently available to
+be allocated on the system, expressed in kilobytes.
+This limit is adhered to
+only if strict overcommit accounting is enabled (mode 2 in
+.IR /proc/sys/vm/overcommit_memory ).
+The limit is calculated according to the formula described under
+.IR /proc/sys/vm/overcommit_memory .
+For further details, see the kernel source file
+.IR Documentation/vm/overcommit\-accounting.rst .
+.TP
+.IR Committed_AS " %lu"
+The amount of memory presently allocated on the system.
+The committed memory is a sum of all of the memory which
+has been allocated by processes, even if it has not been
+"used" by them as of yet.
+A process which allocates 1 GB of memory (using
+.BR malloc (3)
+or similar), but touches only 300 MB of that memory will show up
+as using only 300 MB of memory even if it has the address space
+allocated for the entire 1 GB.
+.IP
+This 1 GB is memory which has been "committed" to by the VM
+and can be used at any time by the allocating application.
+With strict overcommit enabled on the system (mode 2 in
+.IR /proc/sys/vm/overcommit_memory ),
+allocations which would exceed the
+.I CommitLimit
+will not be permitted.
+This is useful if one needs to guarantee that processes will not
+fail due to lack of memory once that memory has been successfully allocated.
+.TP
+.IR VmallocTotal " %lu"
+Total size of vmalloc memory area.
+.TP
+.IR VmallocUsed " %lu"
+Amount of vmalloc area which is used.
+Since Linux 4.4,
+.\" commit a5ad88ce8c7fae7ddc72ee49a11a75aa837788e0
+this field is no longer calculated, and is hard coded as 0.
+See
+.IR /proc/vmallocinfo .
+.TP
+.IR VmallocChunk " %lu"
+Largest contiguous block of vmalloc area which is free.
+Since Linux 4.4,
+.\" commit a5ad88ce8c7fae7ddc72ee49a11a75aa837788e0
+this field is no longer calculated and is hard coded as 0.
+See
+.IR /proc/vmallocinfo .
+.TP
+.IR HardwareCorrupted " %lu (since Linux 2.6.32)"
+(\fBCONFIG_MEMORY_FAILURE\fP is required.)
+[To be documented.]
+.TP
+.IR LazyFree " %lu (since Linux 4.12)"
+Shows the amount of memory marked by
+.BR madvise (2)
+.BR MADV_FREE .
+.TP
+.IR AnonHugePages " %lu (since Linux 2.6.38)"
+(\fBCONFIG_TRANSPARENT_HUGEPAGE\fP is required.)
+Non-file backed huge pages mapped into user-space page tables.
+.TP
+.IR ShmemHugePages " %lu (since Linux 4.8)"
+(\fBCONFIG_TRANSPARENT_HUGEPAGE\fP is required.)
+Memory used by shared memory (shmem) and
+.BR tmpfs (5)
+allocated with huge pages.
+.TP
+.IR ShmemPmdMapped " %lu (since Linux 4.8)"
+(\fBCONFIG_TRANSPARENT_HUGEPAGE\fP is required.)
+Shared memory mapped into user space with huge pages.
+.TP
+.IR CmaTotal " %lu (since Linux 3.1)"
+Total CMA (Contiguous Memory Allocator) pages.
+(\fBCONFIG_CMA\fP is required.)
+.TP
+.IR CmaFree " %lu (since Linux 3.1)"
+Free CMA (Contiguous Memory Allocator) pages.
+(\fBCONFIG_CMA\fP is required.)
+.TP
+.IR HugePages_Total " %lu"
+(\fBCONFIG_HUGETLB_PAGE\fP is required.)
+The size of the pool of huge pages.
+.TP
+.IR HugePages_Free " %lu"
+(\fBCONFIG_HUGETLB_PAGE\fP is required.)
+The number of huge pages in the pool that are not yet allocated.
+.TP
+.IR HugePages_Rsvd " %lu (since Linux 2.6.17)"
+(\fBCONFIG_HUGETLB_PAGE\fP is required.)
+This is the number of huge pages for
+which a commitment to allocate from the pool has been made,
+but no allocation has yet been made.
+These reserved huge pages
+guarantee that an application will be able to allocate a
+huge page from the pool of huge pages at fault time.
+.TP
+.IR HugePages_Surp " %lu (since Linux 2.6.24)"
+(\fBCONFIG_HUGETLB_PAGE\fP is required.)
+This is the number of huge pages in
+the pool above the value in
+.IR /proc/sys/vm/nr_hugepages .
+The maximum number of surplus huge pages is controlled by
+.IR /proc/sys/vm/nr_overcommit_hugepages .
+.TP
+.IR Hugepagesize " %lu"
+(\fBCONFIG_HUGETLB_PAGE\fP is required.)
+The size of huge pages.
+.TP
+.IR DirectMap4k " %lu (since Linux 2.6.27)"
+Number of bytes of RAM linearly mapped by kernel in 4 kB pages.
+(x86.)
+.TP
+.IR DirectMap4M " %lu (since Linux 2.6.27)"
+Number of bytes of RAM linearly mapped by kernel in 4 MB pages.
+(x86 with
+.B CONFIG_X86_64
+or
+.B CONFIG_X86_PAE
+enabled.)
+.TP
+.IR DirectMap2M " %lu (since Linux 2.6.27)"
+Number of bytes of RAM linearly mapped by kernel in 2 MB pages.
+(x86 with neither
+.B CONFIG_X86_64
+nor
+.B CONFIG_X86_PAE
+enabled.)
+.TP
+.IR DirectMap1G " %lu (since Linux 2.6.27)"
+(x86 with
+.B CONFIG_X86_64
+and
+.B CONFIG_X86_DIRECT_GBPAGES
+enabled.)
+.RE
+.TP
+.I /proc/modules
+A text list of the modules that have been loaded by the system.
+See also
+.BR lsmod (8).
+.TP
+.I /proc/mounts
+Before Linux 2.4.19, this file was a list
+of all the filesystems currently mounted on the system.
+With the introduction of per-process mount namespaces in Linux 2.4.19 (see
+.BR mount_namespaces (7)),
+this file became a link to
+.IR /proc/self/mounts ,
+which lists the mounts of the process's own mount namespace.
+The format of this file is documented in
+.BR fstab (5).
+.TP
+.I /proc/mtrr
+Memory Type Range Registers.
+See the Linux kernel source file
+.I Documentation/x86/mtrr.rst
+(or
+.I Documentation/x86/mtrr.txt
+.\" commit 7225e75144b9718cbbe1820d9c011c809d5773fd
+before Linux 5.2, or
+.I Documentation/mtrr.txt
+before Linux 2.6.28)
+for details.
+.TP
+.I /proc/net
+This directory contains various files and subdirectories containing
+information about the networking layer.
+The files contain ASCII structures and are,
+therefore, readable with
+.BR cat (1).
+However, the standard
+.BR netstat (8)
+suite provides much cleaner access to these files.
+.IP
+With the advent of network namespaces,
+various information relating to the network stack is virtualized (see
+.BR network_namespaces (7)).
+Thus, since Linux 2.6.25,
+.\" commit e9720acd728a46cb40daa52c99a979f7c4ff195c
+.I /proc/net
+is a symbolic link to the directory
+.IR /proc/self/net ,
+which contains the same files and directories as listed below.
+However, these files and directories now expose information
+for the network namespace of which the process is a member.
+.TP
+.I /proc/net/arp
+This holds an ASCII readable dump of the kernel ARP table used for
+address resolutions.
+It will show both dynamically learned and preprogrammed ARP entries.
+The format is:
+.IP
+.in +4n
+.EX
+IP address HW type Flags HW address Mask Device
+192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0
+192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
+.EE
+.in
+.IP
+Here "IP address" is the IPv4 address of the machine and the "HW type"
+is the hardware type of the address from RFC\ 826.
+The flags are the internal
+flags of the ARP structure (as defined in
+.IR /usr/include/linux/if_arp.h )
+and
+the "HW address" is the data link layer mapping for that IP address if
+it is known.
+.TP
+.I /proc/net/dev
+The dev pseudo-file contains network device status information.
+This gives
+the number of received and sent packets, the number of errors and
+collisions
+and other basic statistics.
+These are used by the
+.BR ifconfig (8)
+program to report device status.
+The format is:
+.IP
+.EX
+Inter\-| Receive | Transmit
+ face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
+ lo: 2776770 11307 0 0 0 0 0 0 2776770 11307 0 0 0 0 0 0
+ eth0: 1215645 2751 0 0 0 0 0 0 1782404 4324 0 0 0 427 0 0
+ ppp0: 1622270 5552 1 0 0 0 0 0 354130 5669 0 0 0 0 0 0
+ tap0: 7714 81 0 0 0 0 0 0 7714 81 0 0 0 0 0 0
+.EE
+.\" .TP
+.\" .I /proc/net/ipx
+.\" No information.
+.\" .TP
+.\" .I /proc/net/ipx_route
+.\" No information.
+.TP
+.I /proc/net/dev_mcast
+Defined in
+.IR /usr/src/linux/net/core/dev_mcast.c :
+.IP
+.in +4n
+.EX
+indx interface_name dmi_u dmi_g dmi_address
+2 eth0 1 0 01005e000001
+3 eth1 1 0 01005e000001
+4 eth2 1 0 01005e000001
+.EE
+.in
+.TP
+.I /proc/net/igmp
+Internet Group Management Protocol.
+Defined in
+.IR /usr/src/linux/net/core/igmp.c .
+.TP
+.I /proc/net/rarp
+This file uses the same format as the
+.I arp
+file and contains the current reverse mapping database used to provide
+.BR rarp (8)
+reverse address lookup services.
+If RARP is not configured into the
+kernel,
+this file will not be present.
+.TP
+.I /proc/net/raw
+Holds a dump of the RAW socket table.
+Much of the information is not of
+use
+apart from debugging.
+The "sl" value is the kernel hash slot for the
+socket,
+the "local_address" is the local address and protocol number pair.
+\&"St" is
+the internal status of the socket.
+The "tx_queue" and "rx_queue" are the
+outgoing and incoming data queue in terms of kernel memory usage.
+The "tr", "tm\->when", and "rexmits" fields are not used by RAW.
+The "uid"
+field holds the effective UID of the creator of the socket.
+.\" .TP
+.\" .I /proc/net/route
+.\" No information, but looks similar to
+.\" .BR route (8).
+.TP
+.I /proc/net/snmp
+This file holds the ASCII data needed for the IP, ICMP, TCP, and UDP
+management
+information bases for an SNMP agent.
+.TP
+.I /proc/net/tcp
+Holds a dump of the TCP socket table.
+Much of the information is not
+of use apart from debugging.
+The "sl" value is the kernel hash slot
+for the socket, the "local_address" is the local address and port number pair.
+The "rem_address" is the remote address and port number pair
+(if connected).
+\&"St" is the internal status of the socket.
+The "tx_queue" and "rx_queue" are the
+outgoing and incoming data queue in terms of kernel memory usage.
+The "tr", "tm\->when", and "rexmits" fields hold internal information of
+the kernel socket state and are useful only for debugging.
+The "uid"
+field holds the effective UID of the creator of the socket.
+.TP
+.I /proc/net/udp
+Holds a dump of the UDP socket table.
+Much of the information is not of
+use apart from debugging.
+The "sl" value is the kernel hash slot for the
+socket, the "local_address" is the local address and port number pair.
+The "rem_address" is the remote address and port number pair
+(if connected).
+"St" is the internal status of the socket.
+The "tx_queue" and "rx_queue" are the outgoing and incoming data queue
+in terms of kernel memory usage.
+The "tr", "tm\->when", and "rexmits" fields
+are not used by UDP.
+The "uid"
+field holds the effective UID of the creator of the socket.
+The format is:
+.IP
+.EX
+sl local_address rem_address st tx_queue rx_queue tr rexmits tm\->when uid
+ 1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0
+ 1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0
+ 1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
+.EE
+.TP
+.I /proc/net/unix
+Lists the UNIX domain sockets present within the system and their
+status.
+The format is:
+.IP
+.EX
+Num RefCount Protocol Flags Type St Inode Path
+ 0: 00000002 00000000 00000000 0001 03 42
+ 1: 00000001 00000000 00010000 0001 01 1948 /dev/printer
+.EE
+.IP
+The fields are as follows:
+.RS
+.TP 10
+.IR Num :
+the kernel table slot number.
+.TP
+.IR RefCount :
+the number of users of the socket.
+.TP
+.IR Protocol :
+currently always 0.
+.TP
+.IR Flags :
+the internal kernel flags holding the status of the socket.
+.TP
+.IR Type :
+the socket type.
+For
+.B SOCK_STREAM
+sockets, this is 0001; for
+.B SOCK_DGRAM
+sockets, it is 0002; and for
+.B SOCK_SEQPACKET
+sockets, it is 0005.
+.TP
+.IR St :
+the internal state of the socket.
+.TP
+.IR Inode :
+the inode number of the socket.
+.TP
+.IR Path :
+the bound pathname (if any) of the socket.
+Sockets in the abstract namespace are included in the list,
+and are shown with a
+.I Path
+that commences with the character '@'.
+.RE
+.TP
+.I /proc/net/netfilter/nfnetlink_queue
+This file contains information about netfilter user-space queueing, if used.
+Each line represents a queue.
+Queues that have not been subscribed to
+by user space are not shown.
+.IP
+.in +4n
+.EX
+ 1 4207 0 2 65535 0 0 0 1
+ (1) (2) (3)(4) (5) (6) (7) (8)
+.EE
+.in
+.IP
+The fields in each line are:
+.RS 7
+.TP 5
+(1)
+The ID of the queue.
+This matches what is specified in the
+.B \-\-queue\-num
+or
+.B \-\-queue\-balance
+options to the
+.BR iptables (8)
+NFQUEUE target.
+See
+.BR iptables\-extensions (8)
+for more information.
+.TP
+(2)
+The netlink port ID subscribed to the queue.
+.TP
+(3)
+The number of packets currently queued and waiting to be processed by
+the application.
+.TP
+(4)
+The copy mode of the queue.
+It is either 1 (metadata only) or 2
+(also copy payload data to user space).
+.TP
+(5)
+Copy range; that is, how many bytes of packet payload should be copied to
+user space at most.
+.TP
+(6)
+queue dropped.
+Number of packets that had to be dropped by the kernel because
+too many packets are already waiting for user space to send back the mandatory
+accept/drop verdicts.
+.TP
+(7)
+queue user dropped.
+Number of packets that were dropped within the netlink
+subsystem.
+Such drops usually happen when the corresponding socket buffer is
+full; that is, user space is not able to read messages fast enough.
+.TP
+(8)
+sequence number.
+Every queued packet is associated with a (32-bit)
+monotonically increasing sequence number.
+This shows the ID of the most recent packet queued.
+.RE
+.IP
+The last number exists only for compatibility reasons and is always 1.
+.TP
+.I /proc/partitions
+Contains the major and minor numbers of each partition as well as the number
+of 1024-byte blocks and the partition name.
+.TP
+.I /proc/pci
+This is a listing of all PCI devices found during kernel initialization
+and their configuration.
+.IP
+This file has been deprecated in favor of a new
+.I /proc
+interface for PCI
+.RI ( /proc/bus/pci ).
+It became optional in Linux 2.2 (available with
+.B CONFIG_PCI_OLD_PROC
+set at kernel compilation).
+It became once more nonoptionally enabled in Linux 2.4.
+Next, it was deprecated in Linux 2.6 (still available with
+.B CONFIG_PCI_LEGACY_PROC
+set), and finally removed altogether since Linux 2.6.17.
+.\" FIXME Document /proc/sched_debug (since Linux 2.6.23)
+.\" See also /proc/[pid]/sched
+.TP
+.IR /proc/profile " (since Linux 2.4)"
+This file is present only if the kernel was booted with the
+.I profile=1
+command-line option.
+It exposes kernel profiling information in a binary format for use by
+.BR readprofile (1).
+Writing (e.g., an empty string) to this file resets the profiling counters;
+on some architectures,
+writing a binary integer "profiling multiplier" of size
+.I sizeof(int)
+sets the profiling interrupt frequency.
+.TP
+.I /proc/scsi
+A directory with the
+.I scsi
+mid-level pseudo-file and various SCSI low-level
+driver directories,
+which contain a file for each SCSI host in this system, all of
+which give the status of some part of the SCSI IO subsystem.
+These files contain ASCII structures and are, therefore, readable with
+.BR cat (1).
+.IP
+You can also write to some of the files to reconfigure the subsystem or
+switch certain features on or off.
+.TP
+.I /proc/scsi/scsi
+This is a listing of all SCSI devices known to the kernel.
+The listing is similar to the one seen during bootup.
+scsi currently supports only the \fIadd\-single\-device\fP command which
+allows root to add a hotplugged device to the list of known devices.
+.IP
+The command
+.IP
+.in +4n
+.EX
+echo \[aq]scsi add\-single\-device 1 0 5 0\[aq] > /proc/scsi/scsi
+.EE
+.in
+.IP
+will cause
+host scsi1 to scan on SCSI channel 0 for a device on ID 5 LUN 0.
+If there
+is already a device known on this address or the address is invalid, an
+error will be returned.
+.TP
+.IR /proc/scsi/ drivername
+\fIdrivername\fP can currently be NCR53c7xx, aha152x, aha1542, aha1740,
+aic7xxx, buslogic, eata_dma, eata_pio, fdomain, in2000, pas16, qlogic,
+scsi_debug, seagate, t128, u15\-24f, ultrastore, or wd7000.
+These directories show up for all drivers that registered at least one
+SCSI HBA.
+Every directory contains one file per registered host.
+Every host-file is named after the number the host was assigned during
+initialization.
+.IP
+Reading these files will usually show driver and host configuration,
+statistics, and so on.
+.IP
+Writing to these files allows different things on different hosts.
+For example, with the \fIlatency\fP and \fInolatency\fP commands,
+root can switch on and off command latency measurement code in the
+eata_dma driver.
+With the \fIlockup\fP and \fIunlock\fP commands,
+root can control bus lockups simulated by the scsi_debug driver.
+.TP
+.I /proc/self
+This directory refers to the process accessing the
+.I /proc
+filesystem,
+and is identical to the
+.I /proc
+directory named by the process ID of the same process.
+.TP
+.I /proc/slabinfo
+Information about kernel caches.
+See
+.BR slabinfo (5)
+for details.
+.TP
+.I /proc/stat
+kernel/system statistics.
+Varies with architecture.
+Common
+entries include:
+.RS
+.TP
+.I cpu 10132153 290696 3084719 46828483 16683 0 25195 0 175628 0
+.TQ
+.I cpu0 1393280 32966 572056 13343292 6130 0 17875 0 23933 0
+The amount of time, measured in units of
+USER_HZ (1/100ths of a second on most architectures, use
+.I sysconf(_SC_CLK_TCK)
+to obtain the right value),
+.\" 1024 on Alpha and ia64
+that the system ("cpu" line) or the specific CPU ("cpu\fIN\fR" line)
+spent in various states:
+.RS
+.TP
+.I user
+(1) Time spent in user mode.
+.TP
+.I nice
+(2) Time spent in user mode with low priority (nice).
+.TP
+.I system
+(3) Time spent in system mode.
+.TP
+.I idle
+(4) Time spent in the idle task.
+.\" FIXME . Actually, the following info about the /proc/stat 'cpu' field
+.\" does not seem to be quite right (at least in Linux 2.6.12 or Linux 3.6):
+.\" the idle time in /proc/uptime does not quite match this value
+This value should be USER_HZ times the
+second entry in the
+.I /proc/uptime
+pseudo-file.
+.TP
+.IR iowait " (since Linux 2.5.41)"
+(5) Time waiting for I/O to complete.
+This value is not reliable, for the following reasons:
+.\" See kernel commit 9c240d757658a3ae9968dd309e674c61f07c7f48
+.RS
+.IP \[bu] 3
+The CPU will not wait for I/O to complete;
+iowait is the time that a task is waiting for I/O to complete.
+When a CPU goes into idle state for outstanding task I/O,
+another task will be scheduled on this CPU.
+.IP \[bu]
+On a multi-core CPU,
+the task waiting for I/O to complete is not running on any CPU,
+so the iowait of each CPU is difficult to calculate.
+.IP \[bu]
+The value in this field may
+.I decrease
+in certain conditions.
+.RE
+.TP
+.IR irq " (since Linux 2.6.0)"
+.\" Precisely: Linux 2.6.0-test4
+(6) Time servicing interrupts.
+.TP
+.IR softirq " (since Linux 2.6.0)"
+.\" Precisely: Linux 2.6.0-test4
+(7) Time servicing softirqs.
+.TP
+.IR steal " (since Linux 2.6.11)"
+(8) Stolen time, which is the time spent in other operating systems when
+running in a virtualized environment
+.TP
+.IR guest " (since Linux 2.6.24)"
+(9) Time spent running a virtual CPU for guest
+operating systems under the control of the Linux kernel.
+.\" See Changelog entry for 5e84cfde51cf303d368fcb48f22059f37b3872de
+.TP
+.IR guest_nice " (since Linux 2.6.33)"
+.\" commit ce0e7b28fb75cb003cfc8d0238613aaf1c55e797
+(10) Time spent running a niced guest (virtual CPU for guest
+operating systems under the control of the Linux kernel).
+.RE
+.TP
+\fIpage 5741 1808\fP
+The number of pages the system paged in and the number that were paged
+out (from disk).
+.TP
+\fIswap 1 0\fP
+The number of swap pages that have been brought in and out.
+.TP
+.\" FIXME . The following is not the full picture for the 'intr' of
+.\" /proc/stat on 2.6:
+\fIintr 1462898\fP
+This line shows counts of interrupts serviced since boot time,
+for each of the possible system interrupts.
+The first column is the total of all interrupts serviced
+including unnumbered architecture specific interrupts;
+each subsequent column is the total for that particular numbered interrupt.
+Unnumbered interrupts are not shown, only summed into the total.
+.TP
+\fIdisk_io: (2,0):(31,30,5764,1,2) (3,0):\fP...
+(major,disk_idx):(noinfo, read_io_ops, blks_read, write_io_ops, blks_written)
+.br
+(Linux 2.4 only)
+.TP
+\fIctxt 115315\fP
+The number of context switches that the system underwent.
+.TP
+\fIbtime 769041601\fP
+boot time, in seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
+.TP
+\fIprocesses 86031\fP
+Number of forks since boot.
+.TP
+\fIprocs_running 6\fP
+Number of processes in runnable state.
+(Linux 2.5.45 onward.)
+.TP
+\fIprocs_blocked 2\fP
+Number of processes blocked waiting for I/O to complete.
+(Linux 2.5.45 onward.)
+.TP
+.I softirq 229245889 94 60001584 13619 5175704 2471304 28 51212741 59130143 0 51240672
+.\" commit d3d64df21d3d0de675a0d3ffa7c10514f3644b30
+This line shows the number of softirq for all CPUs.
+The first column is the total of all softirqs and
+each subsequent column is the total for particular softirq.
+(Linux 2.6.31 onward.)
+.RE
+.TP
+.I /proc/swaps
+Swap areas in use.
+See also
+.BR swapon (8).
+.TP
+.I /proc/sys
+This directory (present since Linux 1.3.57) contains a number of files
+and subdirectories corresponding to kernel variables.
+These variables can be read and in some cases modified using
+the \fI/proc\fP filesystem, and the (deprecated)
+.BR sysctl (2)
+system call.
+.IP
+String values may be terminated by either \[aq]\e0\[aq] or \[aq]\en\[aq].
+.IP
+Integer and long values may be written either in decimal or in
+hexadecimal notation (e.g., 0x3FFF).
+When writing multiple integer or long values, these may be separated
+by any of the following whitespace characters:
+\[aq]\ \[aq], \[aq]\et\[aq], or \[aq]\en\[aq].
+Using other separators leads to the error
+.BR EINVAL .
+.TP
+.IR /proc/sys/abi " (since Linux 2.4.10)"
+This directory may contain files with application binary information.
+.\" On some systems, it is not present.
+See the Linux kernel source file
+.I Documentation/sysctl/abi.rst
+(or
+.I Documentation/sysctl/abi.txt
+before Linux 5.3)
+for more information.
+.TP
+.I /proc/sys/debug
+This directory may be empty.
+.TP
+.I /proc/sys/dev
+This directory contains device-specific information (e.g.,
+.IR dev/cdrom/info ).
+On
+some systems, it may be empty.
+.TP
+.I /proc/sys/fs
+This directory contains the files and subdirectories for kernel variables
+related to filesystems.
+.TP
+.IR /proc/sys/fs/aio\-max\-nr " and " /proc/sys/fs/aio\-nr " (since Linux 2.6.4)"
+.I aio\-nr
+is the running total of the number of events specified by
+.BR io_setup (2)
+calls for all currently active AIO contexts.
+If
+.I aio\-nr
+reaches
+.IR aio\-max\-nr ,
+then
+.BR io_setup (2)
+will fail with the error
+.BR EAGAIN .
+Raising
+.I aio\-max\-nr
+does not result in the preallocation or resizing
+of any kernel data structures.
+.TP
+.I /proc/sys/fs/binfmt_misc
+Documentation for files in this directory can be found
+in the Linux kernel source in the file
+.I Documentation/admin\-guide/binfmt\-misc.rst
+(or in
+.I Documentation/binfmt_misc.txt
+on older kernels).
+.TP
+.IR /proc/sys/fs/dentry\-state " (since Linux 2.2)"
+This file contains information about the status of the
+directory cache (dcache).
+The file contains six numbers,
+.IR nr_dentry ,
+.IR nr_unused ,
+.I age_limit
+(age in seconds),
+.I want_pages
+(pages requested by system) and two dummy values.
+.RS
+.IP \[bu] 3
+.I nr_dentry
+is the number of allocated dentries (dcache entries).
+This field is unused in Linux 2.2.
+.IP \[bu]
+.I nr_unused
+is the number of unused dentries.
+.IP \[bu]
+.I age_limit
+.\" looks like this is unused in Linux 2.2 to Linux 2.6
+is the age in seconds after which dcache entries
+can be reclaimed when memory is short.
+.IP \[bu]
+.I want_pages
+.\" looks like this is unused in Linux 2.2 to Linux 2.6
+is nonzero when the kernel has called shrink_dcache_pages() and the
+dcache isn't pruned yet.
+.RE
+.TP
+.I /proc/sys/fs/dir\-notify\-enable
+This file can be used to disable or enable the
+.I dnotify
+interface described in
+.BR fcntl (2)
+on a system-wide basis.
+A value of 0 in this file disables the interface,
+and a value of 1 enables it.
+.TP
+.I /proc/sys/fs/dquot\-max
+This file shows the maximum number of cached disk quota entries.
+On some (2.4) systems, it is not present.
+If the number of free cached disk quota entries is very low and
+you have some awesome number of simultaneous system users,
+you might want to raise the limit.
+.TP
+.I /proc/sys/fs/dquot\-nr
+This file shows the number of allocated disk quota
+entries and the number of free disk quota entries.
+.TP
+.IR /proc/sys/fs/epoll " (since Linux 2.6.28)"
+This directory contains the file
+.IR max_user_watches ,
+which can be used to limit the amount of kernel memory consumed by the
+.I epoll
+interface.
+For further details, see
+.BR epoll (7).
+.TP
+.I /proc/sys/fs/file\-max
+This file defines
+a system-wide limit on the number of open files for all processes.
+System calls that fail when encountering this limit fail with the error
+.BR ENFILE .
+(See also
+.BR setrlimit (2),
+which can be used by a process to set the per-process limit,
+.BR RLIMIT_NOFILE ,
+on the number of files it may open.)
+If you get lots
+of error messages in the kernel log about running out of file handles
+(open file descriptions)
+(look for "VFS: file\-max limit <number> reached"),
+try increasing this value:
+.IP
+.in +4n
+.EX
+echo 100000 > /proc/sys/fs/file\-max
+.EE
+.in
+.IP
+Privileged processes
+.RB ( CAP_SYS_ADMIN )
+can override the
+.I file\-max
+limit.
+.TP
+.I /proc/sys/fs/file\-nr
+This (read-only) file contains three numbers:
+the number of allocated file handles
+(i.e., the number of open file descriptions; see
+.BR open (2));
+the number of free file handles;
+and the maximum number of file handles (i.e., the same value as
+.IR /proc/sys/fs/file\-max ).
+If the number of allocated file handles is close to the
+maximum, you should consider increasing the maximum.
+Before Linux 2.6,
+the kernel allocated file handles dynamically,
+but it didn't free them again.
+Instead the free file handles were kept in a list for reallocation;
+the "free file handles" value indicates the size of that list.
+A large number of free file handles indicates that there was
+a past peak in the usage of open file handles.
+Since Linux 2.6, the kernel does deallocate freed file handles,
+and the "free file handles" value is always zero.
+.TP
+.IR /proc/sys/fs/inode\-max " (only present until Linux 2.2)"
+This file contains the maximum number of in-memory inodes.
+This value should be 3\[en]4 times larger
+than the value in
+.IR file\-max ,
+since \fIstdin\fP, \fIstdout\fP
+and network sockets also need an inode to handle them.
+When you regularly run out of inodes, you need to increase this value.
+.IP
+Starting with Linux 2.4,
+there is no longer a static limit on the number of inodes,
+and this file is removed.
+.TP
+.I /proc/sys/fs/inode\-nr
+This file contains the first two values from
+.IR inode\-state .
+.TP
+.I /proc/sys/fs/inode\-state
+This file
+contains seven numbers:
+.IR nr_inodes ,
+.IR nr_free_inodes ,
+.IR preshrink ,
+and four dummy values (always zero).
+.IP
+.I nr_inodes
+is the number of inodes the system has allocated.
+.\" This can be slightly more than
+.\" .I inode\-max
+.\" because Linux allocates them one page full at a time.
+.I nr_free_inodes
+represents the number of free inodes.
+.IP
+.I preshrink
+is nonzero when the
+.I nr_inodes
+>
+.I inode\-max
+and the system needs to prune the inode list instead of allocating more;
+since Linux 2.4, this field is a dummy value (always zero).
+.TP
+.IR /proc/sys/fs/inotify " (since Linux 2.6.13)"
+This directory contains files
+.IR max_queued_events ", " max_user_instances ", and " max_user_watches ,
+that can be used to limit the amount of kernel memory consumed by the
+.I inotify
+interface.
+For further details, see
+.BR inotify (7).
+.TP
+.I /proc/sys/fs/lease\-break\-time
+This file specifies the grace period that the kernel grants to a process
+holding a file lease
+.RB ( fcntl (2))
+after it has sent a signal to that process notifying it
+that another process is waiting to open the file.
+If the lease holder does not remove or downgrade the lease within
+this grace period, the kernel forcibly breaks the lease.
+.TP
+.I /proc/sys/fs/leases\-enable
+This file can be used to enable or disable file leases
+.RB ( fcntl (2))
+on a system-wide basis.
+If this file contains the value 0, leases are disabled.
+A nonzero value enables leases.
+.TP
+.IR /proc/sys/fs/mount\-max " (since Linux 4.9)"
+.\" commit d29216842a85c7970c536108e093963f02714498
+The value in this file specifies the maximum number of mounts that may exist
+in a mount namespace.
+The default value in this file is 100,000.
+.TP
+.IR /proc/sys/fs/mqueue " (since Linux 2.6.6)"
+This directory contains files
+.IR msg_max ", " msgsize_max ", and " queues_max ,
+controlling the resources used by POSIX message queues.
+See
+.BR mq_overview (7)
+for details.
+.TP
+.IR /proc/sys/fs/nr_open " (since Linux 2.6.25)"
+.\" commit 9cfe015aa424b3c003baba3841a60dd9b5ad319b
+This file imposes a ceiling on the value to which the
+.B RLIMIT_NOFILE
+resource limit can be raised (see
+.BR getrlimit (2)).
+This ceiling is enforced for both unprivileged and privileged process.
+The default value in this file is 1048576.
+(Before Linux 2.6.25, the ceiling for
+.B RLIMIT_NOFILE
+was hard-coded to the same value.)
+.TP
+.IR /proc/sys/fs/overflowgid " and " /proc/sys/fs/overflowuid
+These files
+allow you to change the value of the fixed UID and GID.
+The default is 65534.
+Some filesystems support only 16-bit UIDs and GIDs, although in Linux
+UIDs and GIDs are 32 bits.
+When one of these filesystems is mounted
+with writes enabled, any UID or GID that would exceed 65535 is translated
+to the overflow value before being written to disk.
+.TP
+.IR /proc/sys/fs/pipe\-max\-size " (since Linux 2.6.35)"
+See
+.BR pipe (7).
+.TP
+.IR /proc/sys/fs/pipe\-user\-pages\-hard " (since Linux 4.5)"
+See
+.BR pipe (7).
+.TP
+.IR /proc/sys/fs/pipe\-user\-pages\-soft " (since Linux 4.5)"
+See
+.BR pipe (7).
+.TP
+.IR /proc/sys/fs/protected_fifos " (since Linux 4.19)"
+The value in this file is/can be set to one of the following:
+.RS
+.TP 4
+0
+Writing to FIFOs is unrestricted.
+.TP
+1
+Don't allow
+.B O_CREAT
+.BR open (2)
+on FIFOs that the caller doesn't own in world-writable sticky directories,
+unless the FIFO is owned by the owner of the directory.
+.TP
+2
+As for the value 1,
+but the restriction also applies to group-writable sticky directories.
+.RE
+.IP
+The intent of the above protections is to avoid unintentional writes to an
+attacker-controlled FIFO when a program expected to create a regular file.
+.TP
+.IR /proc/sys/fs/protected_hardlinks " (since Linux 3.6)"
+.\" commit 800179c9b8a1e796e441674776d11cd4c05d61d7
+When the value in this file is 0,
+no restrictions are placed on the creation of hard links
+(i.e., this is the historical behavior before Linux 3.6).
+When the value in this file is 1,
+a hard link can be created to a target file
+only if one of the following conditions is true:
+.RS
+.IP \[bu] 3
+The calling process has the
+.B CAP_FOWNER
+capability in its user namespace
+and the file UID has a mapping in the namespace.
+.IP \[bu]
+The filesystem UID of the process creating the link matches
+the owner (UID) of the target file
+(as described in
+.BR credentials (7),
+a process's filesystem UID is normally the same as its effective UID).
+.IP \[bu]
+All of the following conditions are true:
+.RS 4
+.IP \[bu] 3
+the target is a regular file;
+.IP \[bu]
+the target file does not have its set-user-ID mode bit enabled;
+.IP \[bu]
+the target file does not have both its set-group-ID and
+group-executable mode bits enabled; and
+.IP \[bu]
+the caller has permission to read and write the target file
+(either via the file's permissions mask or because it has
+suitable capabilities).
+.RE
+.RE
+.IP
+The default value in this file is 0.
+Setting the value to 1
+prevents a longstanding class of security issues caused by
+hard-link-based time-of-check, time-of-use races,
+most commonly seen in world-writable directories such as
+.IR /tmp .
+The common method of exploiting this flaw
+is to cross privilege boundaries when following a given hard link
+(i.e., a root process follows a hard link created by another user).
+Additionally, on systems without separated partitions,
+this stops unauthorized users from "pinning" vulnerable set-user-ID and
+set-group-ID files against being upgraded by
+the administrator, or linking to special files.
+.TP
+.IR /proc/sys/fs/protected_regular " (since Linux 4.19)"
+The value in this file is/can be set to one of the following:
+.RS
+.TP 4
+0
+Writing to regular files is unrestricted.
+.TP
+1
+Don't allow
+.B O_CREAT
+.BR open (2)
+on regular files that the caller doesn't own in
+world-writable sticky directories,
+unless the regular file is owned by the owner of the directory.
+.TP
+2
+As for the value 1,
+but the restriction also applies to group-writable sticky directories.
+.RE
+.IP
+The intent of the above protections is similar to
+.IR protected_fifos ,
+but allows an application to
+avoid writes to an attacker-controlled regular file,
+where the application expected to create one.
+.TP
+.IR /proc/sys/fs/protected_symlinks " (since Linux 3.6)"
+.\" commit 800179c9b8a1e796e441674776d11cd4c05d61d7
+When the value in this file is 0,
+no restrictions are placed on following symbolic links
+(i.e., this is the historical behavior before Linux 3.6).
+When the value in this file is 1, symbolic links are followed only
+in the following circumstances:
+.RS
+.IP \[bu] 3
+the filesystem UID of the process following the link matches
+the owner (UID) of the symbolic link
+(as described in
+.BR credentials (7),
+a process's filesystem UID is normally the same as its effective UID);
+.IP \[bu]
+the link is not in a sticky world-writable directory; or
+.IP \[bu]
+the symbolic link and its parent directory have the same owner (UID)
+.RE
+.IP
+A system call that fails to follow a symbolic link
+because of the above restrictions returns the error
+.B EACCES
+in
+.IR errno .
+.IP
+The default value in this file is 0.
+Setting the value to 1 avoids a longstanding class of security issues
+based on time-of-check, time-of-use races when accessing symbolic links.
+.TP
+.IR /proc/sys/fs/suid_dumpable " (since Linux 2.6.13)"
+.\" The following is based on text from Documentation/sysctl/kernel.txt
+The value in this file is assigned to a process's "dumpable" flag
+in the circumstances described in
+.BR prctl (2).
+In effect,
+the value in this file determines whether core dump files are
+produced for set-user-ID or otherwise protected/tainted binaries.
+The "dumpable" setting also affects the ownership of files in a process's
+.IR /proc/ pid
+directory, as described above.
+.IP
+Three different integer values can be specified:
+.RS
+.TP
+\fI0\ (default)\fP
+.\" In kernel source: SUID_DUMP_DISABLE
+This provides the traditional (pre-Linux 2.6.13) behavior.
+A core dump will not be produced for a process which has
+changed credentials (by calling
+.BR seteuid (2),
+.BR setgid (2),
+or similar, or by executing a set-user-ID or set-group-ID program)
+or whose binary does not have read permission enabled.
+.TP
+\fI1\ ("debug")\fP
+.\" In kernel source: SUID_DUMP_USER
+All processes dump core when possible.
+(Reasons why a process might nevertheless not dump core are described in
+.BR core (5).)
+The core dump is owned by the filesystem user ID of the dumping process
+and no security is applied.
+This is intended for system debugging situations only:
+this mode is insecure because it allows unprivileged users to
+examine the memory contents of privileged processes.
+.TP
+\fI2\ ("suidsafe")\fP
+.\" In kernel source: SUID_DUMP_ROOT
+Any binary which normally would not be dumped (see "0" above)
+is dumped readable by root only.
+This allows the user to remove the core dump file but not to read it.
+For security reasons core dumps in this mode will not overwrite one
+another or other files.
+This mode is appropriate when administrators are
+attempting to debug problems in a normal environment.
+.IP
+Additionally, since Linux 3.6,
+.\" 9520628e8ceb69fa9a4aee6b57f22675d9e1b709
+.I /proc/sys/kernel/core_pattern
+must either be an absolute pathname
+or a pipe command, as detailed in
+.BR core (5).
+Warnings will be written to the kernel log if
+.I core_pattern
+does not follow these rules, and no core dump will be produced.
+.\" 54b501992dd2a839e94e76aa392c392b55080ce8
+.RE
+.IP
+For details of the effect of a process's "dumpable" setting
+on ptrace access mode checking, see
+.BR ptrace (2).
+.TP
+.I /proc/sys/fs/super\-max
+This file
+controls the maximum number of superblocks, and
+thus the maximum number of mounted filesystems the kernel
+can have.
+You need increase only
+.I super\-max
+if you need to mount more filesystems than the current value in
+.I super\-max
+allows you to.
+.TP
+.I /proc/sys/fs/super\-nr
+This file
+contains the number of filesystems currently mounted.
+.TP
+.I /proc/sys/kernel
+This directory contains files controlling a range of kernel parameters,
+as described below.
+.TP
+.I /proc/sys/kernel/acct
+This file
+contains three numbers:
+.IR highwater ,
+.IR lowwater ,
+and
+.IR frequency .
+If BSD-style process accounting is enabled, these values control
+its behavior.
+If free space on filesystem where the log lives goes below
+.I lowwater
+percent, accounting suspends.
+If free space gets above
+.I highwater
+percent, accounting resumes.
+.I frequency
+determines
+how often the kernel checks the amount of free space (value is in
+seconds).
+Default values are 4, 2, and 30.
+That is, suspend accounting if 2% or less space is free; resume it
+if 4% or more space is free; consider information about amount of free space
+valid for 30 seconds.
+.TP
+.IR /proc/sys/kernel/auto_msgmni " (Linux 2.6.27 to Linux 3.18)"
+.\" commit 9eefe520c814f6f62c5d36a2ddcd3fb99dfdb30e (introduces feature)
+.\" commit 0050ee059f7fc86b1df2527aaa14ed5dc72f9973 (rendered redundant)
+From Linux 2.6.27 to Linux 3.18,
+this file was used to control recomputing of the value in
+.I /proc/sys/kernel/msgmni
+upon the addition or removal of memory or upon IPC namespace creation/removal.
+Echoing "1" into this file enabled
+.I msgmni
+automatic recomputing (and triggered a recomputation of
+.I msgmni
+based on the current amount of available memory and number of IPC namespaces).
+Echoing "0" disabled automatic recomputing.
+(Automatic recomputing was also disabled if a value was explicitly assigned to
+.IR /proc/sys/kernel/msgmni .)
+The default value in
+.I auto_msgmni
+was 1.
+.IP
+Since Linux 3.19, the content of this file has no effect (because
+.I msgmni
+.\" FIXME Must document the 3.19 'msgmni' changes.
+defaults to near the maximum value possible),
+and reads from this file always return the value "0".
+.TP
+.IR /proc/sys/kernel/cap_last_cap " (since Linux 3.2)"
+See
+.BR capabilities (7).
+.TP
+.IR /proc/sys/kernel/cap\-bound " (from Linux 2.2 to Linux 2.6.24)"
+This file holds the value of the kernel
+.I "capability bounding set"
+(expressed as a signed decimal number).
+This set is ANDed against the capabilities permitted to a process
+during
+.BR execve (2).
+Starting with Linux 2.6.25,
+the system-wide capability bounding set disappeared,
+and was replaced by a per-thread bounding set; see
+.BR capabilities (7).
+.TP
+.I /proc/sys/kernel/core_pattern
+See
+.BR core (5).
+.TP
+.I /proc/sys/kernel/core_pipe_limit
+See
+.BR core (5).
+.TP
+.I /proc/sys/kernel/core_uses_pid
+See
+.BR core (5).
+.TP
+.I /proc/sys/kernel/ctrl\-alt\-del
+This file
+controls the handling of Ctrl-Alt-Del from the keyboard.
+When the value in this file is 0, Ctrl-Alt-Del is trapped and
+sent to the
+.BR init (1)
+program to handle a graceful restart.
+When the value is greater than zero, Linux's reaction to a Vulcan
+Nerve Pinch (tm) will be an immediate reboot, without even
+syncing its dirty buffers.
+Note: when a program (like dosemu) has the keyboard in "raw"
+mode, the Ctrl-Alt-Del is intercepted by the program before it
+ever reaches the kernel tty layer, and it's up to the program
+to decide what to do with it.
+.TP
+.IR /proc/sys/kernel/dmesg_restrict " (since Linux 2.6.37)"
+The value in this file determines who can see kernel syslog contents.
+A value of 0 in this file imposes no restrictions.
+If the value is 1, only privileged users can read the kernel syslog.
+(See
+.BR syslog (2)
+for more details.)
+Since Linux 3.4,
+.\" commit 620f6e8e855d6d447688a5f67a4e176944a084e8
+only users with the
+.B CAP_SYS_ADMIN
+capability may change the value in this file.
+.TP
+.IR /proc/sys/kernel/domainname " and " /proc/sys/kernel/hostname
+can be used to set the NIS/YP domainname and the
+hostname of your box in exactly the same way as the commands
+.BR domainname (1)
+and
+.BR hostname (1),
+that is:
+.IP
+.in +4n
+.EX
+.RB "#" " echo \[aq]darkstar\[aq] > /proc/sys/kernel/hostname"
+.RB "#" " echo \[aq]mydomain\[aq] > /proc/sys/kernel/domainname"
+.EE
+.in
+.IP
+has the same effect as
+.IP
+.in +4n
+.EX
+.RB "#" " hostname \[aq]darkstar\[aq]"
+.RB "#" " domainname \[aq]mydomain\[aq]"
+.EE
+.in
+.IP
+Note, however, that the classic darkstar.frop.org has the
+hostname "darkstar" and DNS (Internet Domain Name Server)
+domainname "frop.org", not to be confused with the NIS (Network
+Information Service) or YP (Yellow Pages) domainname.
+These two
+domain names are in general different.
+For a detailed discussion
+see the
+.BR hostname (1)
+man page.
+.TP
+.I /proc/sys/kernel/hotplug
+This file
+contains the pathname for the hotplug policy agent.
+The default value in this file is
+.IR /sbin/hotplug .
+.TP
+.\" Removed in commit 87f504e5c78b910b0c1d6ffb89bc95e492322c84 (tglx/history.git)
+.IR /proc/sys/kernel/htab\-reclaim " (before Linux 2.4.9.2)"
+(PowerPC only) If this file is set to a nonzero value,
+the PowerPC htab
+.\" removed in commit 1b483a6a7b2998e9c98ad985d7494b9b725bd228, before Linux 2.6.28
+(see kernel file
+.IR Documentation/powerpc/ppc_htab.txt )
+is pruned
+each time the system hits the idle loop.
+.TP
+.I /proc/sys/kernel/keys/*
+This directory contains various files that define parameters and limits
+for the key-management facility.
+These files are described in
+.BR keyrings (7).
+.TP
+.IR /proc/sys/kernel/kptr_restrict " (since Linux 2.6.38)"
+.\" 455cd5ab305c90ffc422dd2e0fb634730942b257
+The value in this file determines whether kernel addresses are exposed via
+.I /proc
+files and other interfaces.
+A value of 0 in this file imposes no restrictions.
+If the value is 1, kernel pointers printed using the
+.I %pK
+format specifier will be replaced with zeros unless the user has the
+.B CAP_SYSLOG
+capability.
+If the value is 2, kernel pointers printed using the
+.I %pK
+format specifier will be replaced with zeros regardless
+of the user's capabilities.
+The initial default value for this file was 1,
+but the default was changed
+.\" commit 411f05f123cbd7f8aa1edcae86970755a6e2a9d9
+to 0 in Linux 2.6.39.
+Since Linux 3.4,
+.\" commit 620f6e8e855d6d447688a5f67a4e176944a084e8
+only users with the
+.B CAP_SYS_ADMIN
+capability can change the value in this file.
+.TP
+.I /proc/sys/kernel/l2cr
+(PowerPC only) This file
+contains a flag that controls the L2 cache of G3 processor
+boards.
+If 0, the cache is disabled.
+Enabled if nonzero.
+.TP
+.I /proc/sys/kernel/modprobe
+This file contains the pathname for the kernel module loader.
+The default value is
+.IR /sbin/modprobe .
+The file is present only if the kernel is built with the
+.B CONFIG_MODULES
+.RB ( CONFIG_KMOD
+in Linux 2.6.26 and earlier)
+option enabled.
+It is described by the Linux kernel source file
+.I Documentation/kmod.txt
+(present only in Linux 2.4 and earlier).
+.TP
+.IR /proc/sys/kernel/modules_disabled " (since Linux 2.6.31)"
+.\" 3d43321b7015387cfebbe26436d0e9d299162ea1
+.\" From Documentation/sysctl/kernel.txt
+A toggle value indicating if modules are allowed to be loaded
+in an otherwise modular kernel.
+This toggle defaults to off (0), but can be set true (1).
+Once true, modules can be neither loaded nor unloaded,
+and the toggle cannot be set back to false.
+The file is present only if the kernel is built with the
+.B CONFIG_MODULES
+option enabled.
+.TP
+.IR /proc/sys/kernel/msgmax " (since Linux 2.2)"
+This file defines
+a system-wide limit specifying the maximum number of bytes in
+a single message written on a System V message queue.
+.TP
+.IR /proc/sys/kernel/msgmni " (since Linux 2.4)"
+This file defines the system-wide limit on the number of
+message queue identifiers.
+See also
+.IR /proc/sys/kernel/auto_msgmni .
+.TP
+.IR /proc/sys/kernel/msgmnb " (since Linux 2.2)"
+This file defines a system-wide parameter used to initialize the
+.I msg_qbytes
+setting for subsequently created message queues.
+The
+.I msg_qbytes
+setting specifies the maximum number of bytes that may be written to the
+message queue.
+.TP
+.IR /proc/sys/kernel/ngroups_max " (since Linux 2.6.4)"
+This is a read-only file that displays the upper limit on the
+number of a process's group memberships.
+.TP
+.IR /proc/sys/kernel/ns_last_pid " (since Linux 3.3)"
+See
+.BR pid_namespaces (7).
+.TP
+.IR /proc/sys/kernel/ostype " and " /proc/sys/kernel/osrelease
+These files
+give substrings of
+.IR /proc/version .
+.TP
+.IR /proc/sys/kernel/overflowgid " and " /proc/sys/kernel/overflowuid
+These files duplicate the files
+.I /proc/sys/fs/overflowgid
+and
+.IR /proc/sys/fs/overflowuid .
+.TP
+.I /proc/sys/kernel/panic
+This file gives read/write access to the kernel variable
+.IR panic_timeout .
+If this is zero, the kernel will loop on a panic; if nonzero,
+it indicates that the kernel should autoreboot after this number
+of seconds.
+When you use the
+software watchdog device driver, the recommended setting is 60.
+.TP
+.IR /proc/sys/kernel/panic_on_oops " (since Linux 2.5.68)"
+This file controls the kernel's behavior when an oops
+or BUG is encountered.
+If this file contains 0, then the system
+tries to continue operation.
+If it contains 1, then the system
+delays a few seconds (to give klogd time to record the oops output)
+and then panics.
+If the
+.I /proc/sys/kernel/panic
+file is also nonzero, then the machine will be rebooted.
+.TP
+.IR /proc/sys/kernel/pid_max " (since Linux 2.5.34)"
+This file specifies the value at which PIDs wrap around
+(i.e., the value in this file is one greater than the maximum PID).
+PIDs greater than this value are not allocated;
+thus, the value in this file also acts as a system-wide limit
+on the total number of processes and threads.
+The default value for this file, 32768,
+results in the same range of PIDs as on earlier kernels.
+On 32-bit platforms, 32768 is the maximum value for
+.IR pid_max .
+On 64-bit systems,
+.I pid_max
+can be set to any value up to 2\[ha]22
+.RB ( PID_MAX_LIMIT ,
+approximately 4 million).
+.\" Prior to Linux 2.6.10, pid_max could also be raised above 32768 on 32-bit
+.\" platforms, but this broke /proc/[pid]
+.\" See http://marc.theaimsgroup.com/?l=linux-kernel&m=109513010926152&w=2
+.TP
+.IR /proc/sys/kernel/powersave\-nap " (PowerPC only)"
+This file contains a flag.
+If set, Linux-PPC will use the "nap" mode of
+powersaving,
+otherwise the "doze" mode will be used.
+.TP
+.I /proc/sys/kernel/printk
+See
+.BR syslog (2).
+.TP
+.IR /proc/sys/kernel/pty " (since Linux 2.6.4)"
+This directory contains two files relating to the number of UNIX 98
+pseudoterminals (see
+.BR pts (4))
+on the system.
+.TP
+.I /proc/sys/kernel/pty/max
+This file defines the maximum number of pseudoterminals.
+.\" FIXME Document /proc/sys/kernel/pty/reserve
+.\" New in Linux 3.3
+.\" commit e9aba5158a80098447ff207a452a3418ae7ee386
+.TP
+.I /proc/sys/kernel/pty/nr
+This read-only file
+indicates how many pseudoterminals are currently in use.
+.TP
+.I /proc/sys/kernel/random
+This directory
+contains various parameters controlling the operation of the file
+.IR /dev/random .
+See
+.BR random (4)
+for further information.
+.TP
+.IR /proc/sys/kernel/random/uuid " (since Linux 2.4)"
+Each read from this read-only file returns a randomly generated 128-bit UUID,
+as a string in the standard UUID format.
+.TP
+.IR /proc/sys/kernel/randomize_va_space " (since Linux 2.6.12)"
+.\" Some further details can be found in Documentation/sysctl/kernel.txt
+Select the address space layout randomization (ASLR) policy for the system
+(on architectures that support ASLR).
+Three values are supported for this file:
+.RS
+.TP
+.B 0
+Turn ASLR off.
+This is the default for architectures that don't support ASLR,
+and when the kernel is booted with the
+.I norandmaps
+parameter.
+.TP
+.B 1
+Make the addresses of
+.BR mmap (2)
+allocations, the stack, and the VDSO page randomized.
+Among other things, this means that shared libraries will be
+loaded at randomized addresses.
+The text segment of PIE-linked binaries will also be loaded
+at a randomized address.
+This value is the default if the kernel was configured with
+.BR CONFIG_COMPAT_BRK .
+.TP
+.B 2
+(Since Linux 2.6.25)
+.\" commit c1d171a002942ea2d93b4fbd0c9583c56fce0772
+Also support heap randomization.
+This value is the default if the kernel was not configured with
+.BR CONFIG_COMPAT_BRK .
+.RE
+.TP
+.I /proc/sys/kernel/real\-root\-dev
+This file is documented in the Linux kernel source file
+.I Documentation/admin\-guide/initrd.rst
+.\" commit 9d85025b0418163fae079c9ba8f8445212de8568
+(or
+.I Documentation/initrd.txt
+before Linux 4.10).
+.TP
+.IR /proc/sys/kernel/reboot\-cmd " (Sparc only)"
+This file seems to be a way to give an argument to the SPARC
+ROM/Flash boot loader.
+Maybe to tell it what to do after
+rebooting?
+.TP
+.I /proc/sys/kernel/rtsig\-max
+(Up to and including Linux 2.6.7; see
+.BR setrlimit (2))
+This file can be used to tune the maximum number
+of POSIX real-time (queued) signals that can be outstanding
+in the system.
+.TP
+.I /proc/sys/kernel/rtsig\-nr
+(Up to and including Linux 2.6.7.)
+This file shows the number of POSIX real-time signals currently queued.
+.TP
+.IR /proc/ pid /sched_autogroup_enabled " (since Linux 2.6.38)"
+.\" commit 5091faa449ee0b7d73bc296a93bca9540fc51d0a
+See
+.BR sched (7).
+.TP
+.IR /proc/sys/kernel/sched_child_runs_first " (since Linux 2.6.23)"
+If this file contains the value zero, then, after a
+.BR fork (2),
+the parent is first scheduled on the CPU.
+If the file contains a nonzero value,
+then the child is scheduled first on the CPU.
+(Of course, on a multiprocessor system,
+the parent and the child might both immediately be scheduled on a CPU.)
+.TP
+.IR /proc/sys/kernel/sched_rr_timeslice_ms " (since Linux 3.9)"
+See
+.BR sched_rr_get_interval (2).
+.TP
+.IR /proc/sys/kernel/sched_rt_period_us " (since Linux 2.6.25)"
+See
+.BR sched (7).
+.TP
+.IR /proc/sys/kernel/sched_rt_runtime_us " (since Linux 2.6.25)"
+See
+.BR sched (7).
+.TP
+.IR /proc/sys/kernel/seccomp " (since Linux 4.14)"
+.\" commit 8e5f1ad116df6b0de65eac458d5e7c318d1c05af
+This directory provides additional seccomp information and
+configuration.
+See
+.BR seccomp (2)
+for further details.
+.TP
+.IR /proc/sys/kernel/sem " (since Linux 2.4)"
+This file contains 4 numbers defining limits for System V IPC semaphores.
+These fields are, in order:
+.RS
+.TP
+SEMMSL
+The maximum semaphores per semaphore set.
+.TP
+SEMMNS
+A system-wide limit on the number of semaphores in all semaphore sets.
+.TP
+SEMOPM
+The maximum number of operations that may be specified in a
+.BR semop (2)
+call.
+.TP
+SEMMNI
+A system-wide limit on the maximum number of semaphore identifiers.
+.RE
+.TP
+.I /proc/sys/kernel/sg\-big\-buff
+This file
+shows the size of the generic SCSI device (sg) buffer.
+You can't tune it just yet, but you could change it at
+compile time by editing
+.I include/scsi/sg.h
+and changing
+the value of
+.BR SG_BIG_BUFF .
+However, there shouldn't be any reason to change this value.
+.TP
+.IR /proc/sys/kernel/shm_rmid_forced " (since Linux 3.1)"
+.\" commit b34a6b1da371ed8af1221459a18c67970f7e3d53
+.\" See also Documentation/sysctl/kernel.txt
+If this file is set to 1, all System V shared memory segments will
+be marked for destruction as soon as the number of attached processes
+falls to zero;
+in other words, it is no longer possible to create shared memory segments
+that exist independently of any attached process.
+.IP
+The effect is as though a
+.BR shmctl (2)
+.B IPC_RMID
+is performed on all existing segments as well as all segments
+created in the future (until this file is reset to 0).
+Note that existing segments that are attached to no process will be
+immediately destroyed when this file is set to 1.
+Setting this option will also destroy segments that were created,
+but never attached,
+upon termination of the process that created the segment with
+.BR shmget (2).
+.IP
+Setting this file to 1 provides a way of ensuring that
+all System V shared memory segments are counted against the
+resource usage and resource limits (see the description of
+.B RLIMIT_AS
+in
+.BR getrlimit (2))
+of at least one process.
+.IP
+Because setting this file to 1 produces behavior that is nonstandard
+and could also break existing applications,
+the default value in this file is 0.
+Set this file to 1 only if you have a good understanding
+of the semantics of the applications using
+System V shared memory on your system.
+.TP
+.IR /proc/sys/kernel/shmall " (since Linux 2.2)"
+This file
+contains the system-wide limit on the total number of pages of
+System V shared memory.
+.TP
+.IR /proc/sys/kernel/shmmax " (since Linux 2.2)"
+This file
+can be used to query and set the run-time limit
+on the maximum (System V IPC) shared memory segment size that can be
+created.
+Shared memory segments up to 1 GB are now supported in the
+kernel.
+This value defaults to
+.BR SHMMAX .
+.TP
+.IR /proc/sys/kernel/shmmni " (since Linux 2.4)"
+This file
+specifies the system-wide maximum number of System V shared memory
+segments that can be created.
+.TP
+.IR /proc/sys/kernel/sysctl_writes_strict " (since Linux 3.16)"
+.\" commit f88083005ab319abba5d0b2e4e997558245493c8
+.\" commit 2ca9bb456ada8bcbdc8f77f8fc78207653bbaa92
+.\" commit f4aacea2f5d1a5f7e3154e967d70cf3f711bcd61
+.\" commit 24fe831c17ab8149413874f2fd4e5c8a41fcd294
+The value in this file determines how the file offset affects
+the behavior of updating entries in files under
+.IR /proc/sys .
+The file has three possible values:
+.RS
+.TP 4
+\-1
+This provides legacy handling, with no printk warnings.
+Each
+.BR write (2)
+must fully contain the value to be written,
+and multiple writes on the same file descriptor
+will overwrite the entire value, regardless of the file position.
+.TP
+0
+(default) This provides the same behavior as for \-1,
+but printk warnings are written for processes that
+perform writes when the file offset is not 0.
+.TP
+1
+Respect the file offset when writing strings into
+.I /proc/sys
+files.
+Multiple writes will
+.I append
+to the value buffer.
+Anything written beyond the maximum length
+of the value buffer will be ignored.
+Writes to numeric
+.I /proc/sys
+entries must always be at file offset 0 and the value must be
+fully contained in the buffer provided to
+.BR write (2).
+.\" FIXME .
+.\" With /proc/sys/kernel/sysctl_writes_strict==1, writes at an
+.\" offset other than 0 do not generate an error. Instead, the
+.\" write() succeeds, but the file is left unmodified.
+.\" This is surprising. The behavior may change in the future.
+.\" See thread.gmane.org/gmane.linux.man/9197
+.\" From: Michael Kerrisk (man-pages <mtk.manpages@...>
+.\" Subject: sysctl_writes_strict documentation + an oddity?
+.\" Newsgroups: gmane.linux.man, gmane.linux.kernel
+.\" Date: 2015-05-09 08:54:11 GMT
+.RE
+.TP
+.I /proc/sys/kernel/sysrq
+This file controls the functions allowed to be invoked by the SysRq key.
+By default,
+the file contains 1 meaning that every possible SysRq request is allowed
+(in older kernel versions, SysRq was disabled by default,
+and you were required to specifically enable it at run-time,
+but this is not the case any more).
+Possible values in this file are:
+.RS
+.TP 5
+0
+Disable sysrq completely
+.TP
+1
+Enable all functions of sysrq
+.TP
+> 1
+Bit mask of allowed sysrq functions, as follows:
+.PD 0
+.RS
+.TP 5
+\ \ 2
+Enable control of console logging level
+.TP
+\ \ 4
+Enable control of keyboard (SAK, unraw)
+.TP
+\ \ 8
+Enable debugging dumps of processes etc.
+.TP
+\ 16
+Enable sync command
+.TP
+\ 32
+Enable remount read-only
+.TP
+\ 64
+Enable signaling of processes (term, kill, oom-kill)
+.TP
+128
+Allow reboot/poweroff
+.TP
+256
+Allow nicing of all real-time tasks
+.RE
+.PD
+.RE
+.IP
+This file is present only if the
+.B CONFIG_MAGIC_SYSRQ
+kernel configuration option is enabled.
+For further details see the Linux kernel source file
+.I Documentation/admin\-guide/sysrq.rst
+.\" commit 9d85025b0418163fae079c9ba8f8445212de8568
+(or
+.I Documentation/sysrq.txt
+before Linux 4.10).
+.TP
+.I /proc/sys/kernel/version
+This file contains a string such as:
+.IP
+.in +4n
+.EX
+#5 Wed Feb 25 21:49:24 MET 1998
+.EE
+.in
+.IP
+The "#5" means that
+this is the fifth kernel built from this source base and the
+date following it indicates the time the kernel was built.
+.TP
+.IR /proc/sys/kernel/threads\-max " (since Linux 2.3.11)"
+.\" The following is based on Documentation/sysctl/kernel.txt
+This file specifies the system-wide limit on the number of
+threads (tasks) that can be created on the system.
+.IP
+Since Linux 4.1,
+.\" commit 230633d109e35b0a24277498e773edeb79b4a331
+the value that can be written to
+.I threads\-max
+is bounded.
+The minimum value that can be written is 20.
+The maximum value that can be written is given by the
+constant
+.B FUTEX_TID_MASK
+(0x3fffffff).
+If a value outside of this range is written to
+.IR threads\-max ,
+the error
+.B EINVAL
+occurs.
+.IP
+The value written is checked against the available RAM pages.
+If the thread structures would occupy too much (more than 1/8th)
+of the available RAM pages,
+.I threads\-max
+is reduced accordingly.
+.TP
+.IR /proc/sys/kernel/yama/ptrace_scope " (since Linux 3.5)"
+See
+.BR ptrace (2).
+.TP
+.IR /proc/sys/kernel/zero\-paged " (PowerPC only)"
+This file
+contains a flag.
+When enabled (nonzero), Linux-PPC will pre-zero pages in
+the idle loop, possibly speeding up get_free_pages.
+.TP
+.I /proc/sys/net
+This directory contains networking stuff.
+Explanations for some of the files under this directory can be found in
+.BR tcp (7)
+and
+.BR ip (7).
+.TP
+.I /proc/sys/net/core/bpf_jit_enable
+See
+.BR bpf (2).
+.TP
+.I /proc/sys/net/core/somaxconn
+This file defines a ceiling value for the
+.I backlog
+argument of
+.BR listen (2);
+see the
+.BR listen (2)
+manual page for details.
+.TP
+.I /proc/sys/proc
+This directory may be empty.
+.TP
+.I /proc/sys/sunrpc
+This directory supports Sun remote procedure call for network filesystem
+(NFS).
+On some systems, it is not present.
+.TP
+.IR /proc/sys/user " (since Linux 4.9)"
+See
+.BR namespaces (7).
+.TP
+.I /proc/sys/vm
+This directory contains files for memory management tuning, buffer, and
+cache management.
+.TP
+.IR /proc/sys/vm/admin_reserve_kbytes " (since Linux 3.10)"
+.\" commit 4eeab4f5580d11bffedc697684b91b0bca0d5009
+This file defines the amount of free memory (in KiB) on the system that
+should be reserved for users with the capability
+.BR CAP_SYS_ADMIN .
+.IP
+The default value in this file is the minimum of [3% of free pages, 8MiB]
+expressed as KiB.
+The default is intended to provide enough for the superuser
+to log in and kill a process, if necessary,
+under the default overcommit 'guess' mode (i.e., 0 in
+.IR /proc/sys/vm/overcommit_memory ).
+.IP
+Systems running in "overcommit never" mode (i.e., 2 in
+.IR /proc/sys/vm/overcommit_memory )
+should increase the value in this file to account
+for the full virtual memory size of the programs used to recover (e.g.,
+.BR login (1)
+.BR ssh (1),
+and
+.BR top (1))
+Otherwise, the superuser may not be able to log in to recover the system.
+For example, on x86-64 a suitable value is 131072 (128MiB reserved).
+.IP
+Changing the value in this file takes effect whenever
+an application requests memory.
+.TP
+.IR /proc/sys/vm/compact_memory " (since Linux 2.6.35)"
+When 1 is written to this file, all zones are compacted such that free
+memory is available in contiguous blocks where possible.
+The effect of this action can be seen by examining
+.IR /proc/buddyinfo .
+.IP
+Present only if the kernel was configured with
+.BR CONFIG_COMPACTION .
+.TP
+.IR /proc/sys/vm/drop_caches " (since Linux 2.6.16)"
+Writing to this file causes the kernel to drop clean caches, dentries, and
+inodes from memory, causing that memory to become free.
+This can be useful for memory management testing and
+performing reproducible filesystem benchmarks.
+Because writing to this file causes the benefits of caching to be lost,
+it can degrade overall system performance.
+.IP
+To free pagecache, use:
+.IP
+.in +4n
+.EX
+echo 1 > /proc/sys/vm/drop_caches
+.EE
+.in
+.IP
+To free dentries and inodes, use:
+.IP
+.in +4n
+.EX
+echo 2 > /proc/sys/vm/drop_caches
+.EE
+.in
+.IP
+To free pagecache, dentries, and inodes, use:
+.IP
+.in +4n
+.EX
+echo 3 > /proc/sys/vm/drop_caches
+.EE
+.in
+.IP
+Because writing to this file is a nondestructive operation and dirty objects
+are not freeable, the
+user should run
+.BR sync (1)
+first.
+.TP
+.IR /proc/sys/vm/sysctl_hugetlb_shm_group " (since Linux 2.6.7)"
+This writable file contains a group ID that is allowed
+to allocate memory using huge pages.
+If a process has a filesystem group ID or any supplementary group ID that
+matches this group ID,
+then it can make huge-page allocations without holding the
+.B CAP_IPC_LOCK
+capability; see
+.BR memfd_create (2),
+.BR mmap (2),
+and
+.BR shmget (2).
+.TP
+.IR /proc/sys/vm/legacy_va_layout " (since Linux 2.6.9)"
+.\" The following is from Documentation/filesystems/proc.txt
+If nonzero, this disables the new 32-bit memory-mapping layout;
+the kernel will use the legacy (2.4) layout for all processes.
+.TP
+.IR /proc/sys/vm/memory_failure_early_kill " (since Linux 2.6.32)"
+.\" The following is based on the text in Documentation/sysctl/vm.txt
+Control how to kill processes when an uncorrected memory error
+(typically a 2-bit error in a memory module)
+that cannot be handled by the kernel
+is detected in the background by hardware.
+In some cases (like the page still having a valid copy on disk),
+the kernel will handle the failure
+transparently without affecting any applications.
+But if there is no other up-to-date copy of the data,
+it will kill processes to prevent any data corruptions from propagating.
+.IP
+The file has one of the following values:
+.RS
+.TP
+.B 1
+Kill all processes that have the corrupted-and-not-reloadable page mapped
+as soon as the corruption is detected.
+Note that this is not supported for a few types of pages,
+such as kernel internally
+allocated data or the swap cache, but works for the majority of user pages.
+.TP
+.B 0
+Unmap the corrupted page from all processes and kill a process
+only if it tries to access the page.
+.RE
+.IP
+The kill is performed using a
+.B SIGBUS
+signal with
+.I si_code
+set to
+.BR BUS_MCEERR_AO .
+Processes can handle this if they want to; see
+.BR sigaction (2)
+for more details.
+.IP
+This feature is active only on architectures/platforms with advanced machine
+check handling and depends on the hardware capabilities.
+.IP
+Applications can override the
+.I memory_failure_early_kill
+setting individually with the
+.BR prctl (2)
+.B PR_MCE_KILL
+operation.
+.IP
+Present only if the kernel was configured with
+.BR CONFIG_MEMORY_FAILURE .
+.TP
+.IR /proc/sys/vm/memory_failure_recovery " (since Linux 2.6.32)"
+.\" The following is based on the text in Documentation/sysctl/vm.txt
+Enable memory failure recovery (when supported by the platform).
+.RS
+.TP
+.B 1
+Attempt recovery.
+.TP
+.B 0
+Always panic on a memory failure.
+.RE
+.IP
+Present only if the kernel was configured with
+.BR CONFIG_MEMORY_FAILURE .
+.TP
+.IR /proc/sys/vm/oom_dump_tasks " (since Linux 2.6.25)"
+.\" The following is from Documentation/sysctl/vm.txt
+Enables a system-wide task dump (excluding kernel threads) to be
+produced when the kernel performs an OOM-killing.
+The dump includes the following information
+for each task (thread, process):
+thread ID, real user ID, thread group ID (process ID),
+virtual memory size, resident set size,
+the CPU that the task is scheduled on,
+oom_adj score (see the description of
+.IR /proc/ pid /oom_adj ),
+and command name.
+This is helpful to determine why the OOM-killer was invoked
+and to identify the rogue task that caused it.
+.IP
+If this contains the value zero, this information is suppressed.
+On very large systems with thousands of tasks,
+it may not be feasible to dump the memory state information for each one.
+Such systems should not be forced to incur a performance penalty in
+OOM situations when the information may not be desired.
+.IP
+If this is set to nonzero, this information is shown whenever the
+OOM-killer actually kills a memory-hogging task.
+.IP
+The default value is 0.
+.TP
+.IR /proc/sys/vm/oom_kill_allocating_task " (since Linux 2.6.24)"
+.\" The following is from Documentation/sysctl/vm.txt
+This enables or disables killing the OOM-triggering task in
+out-of-memory situations.
+.IP
+If this is set to zero, the OOM-killer will scan through the entire
+tasklist and select a task based on heuristics to kill.
+This normally selects a rogue memory-hogging task that
+frees up a large amount of memory when killed.
+.IP
+If this is set to nonzero, the OOM-killer simply kills the task that
+triggered the out-of-memory condition.
+This avoids a possibly expensive tasklist scan.
+.IP
+If
+.I /proc/sys/vm/panic_on_oom
+is nonzero, it takes precedence over whatever value is used in
+.IR /proc/sys/vm/oom_kill_allocating_task .
+.IP
+The default value is 0.
+.TP
+.IR /proc/sys/vm/overcommit_kbytes " (since Linux 3.14)"
+.\" commit 49f0ce5f92321cdcf741e35f385669a421013cb7
+This writable file provides an alternative to
+.I /proc/sys/vm/overcommit_ratio
+for controlling the
+.I CommitLimit
+when
+.I /proc/sys/vm/overcommit_memory
+has the value 2.
+It allows the amount of memory overcommitting to be specified as
+an absolute value (in kB),
+rather than as a percentage, as is done with
+.IR overcommit_ratio .
+This allows for finer-grained control of
+.I CommitLimit
+on systems with extremely large memory sizes.
+.IP
+Only one of
+.I overcommit_kbytes
+or
+.I overcommit_ratio
+can have an effect:
+if
+.I overcommit_kbytes
+has a nonzero value, then it is used to calculate
+.IR CommitLimit ,
+otherwise
+.I overcommit_ratio
+is used.
+Writing a value to either of these files causes the
+value in the other file to be set to zero.
+.TP
+.I /proc/sys/vm/overcommit_memory
+This file contains the kernel virtual memory accounting mode.
+Values are:
+.RS
+.IP
+0: heuristic overcommit (this is the default)
+.br
+1: always overcommit, never check
+.br
+2: always check, never overcommit
+.RE
+.IP
+In mode 0, calls of
+.BR mmap (2)
+with
+.B MAP_NORESERVE
+are not checked, and the default check is very weak,
+leading to the risk of getting a process "OOM-killed".
+.IP
+In mode 1, the kernel pretends there is always enough memory,
+until memory actually runs out.
+One use case for this mode is scientific computing applications
+that employ large sparse arrays.
+Before Linux 2.6.0, any nonzero value implies mode 1.
+.IP
+In mode 2 (available since Linux 2.6), the total virtual address space
+that can be allocated
+.RI ( CommitLimit
+in
+.IR /proc/meminfo )
+is calculated as
+.IP
+.in +4n
+.EX
+CommitLimit = (total_RAM \- total_huge_TLB) *
+ overcommit_ratio / 100 + total_swap
+.EE
+.in
+.IP
+where:
+.RS
+.IP \[bu] 3
+.I total_RAM
+is the total amount of RAM on the system;
+.IP \[bu]
+.I total_huge_TLB
+is the amount of memory set aside for huge pages;
+.IP \[bu]
+.I overcommit_ratio
+is the value in
+.IR /proc/sys/vm/overcommit_ratio ;
+and
+.IP \[bu]
+.I total_swap
+is the amount of swap space.
+.RE
+.IP
+For example, on a system with 16 GB of physical RAM, 16 GB
+of swap, no space dedicated to huge pages, and an
+.I overcommit_ratio
+of 50, this formula yields a
+.I CommitLimit
+of 24 GB.
+.IP
+Since Linux 3.14, if the value in
+.I /proc/sys/vm/overcommit_kbytes
+is nonzero, then
+.I CommitLimit
+is instead calculated as:
+.IP
+.in +4n
+.EX
+CommitLimit = overcommit_kbytes + total_swap
+.EE
+.in
+.IP
+See also the description of
+.I /proc/sys/vm/admin_reserve_kbytes
+and
+.IR /proc/sys/vm/user_reserve_kbytes .
+.TP
+.IR /proc/sys/vm/overcommit_ratio " (since Linux 2.6.0)"
+This writable file defines a percentage by which memory
+can be overcommitted.
+The default value in the file is 50.
+See the description of
+.IR /proc/sys/vm/overcommit_memory .
+.TP
+.IR /proc/sys/vm/panic_on_oom " (since Linux 2.6.18)"
+.\" The following is adapted from Documentation/sysctl/vm.txt
+This enables or disables a kernel panic in
+an out-of-memory situation.
+.IP
+If this file is set to the value 0,
+the kernel's OOM-killer will kill some rogue process.
+Usually, the OOM-killer is able to kill a rogue process and the
+system will survive.
+.IP
+If this file is set to the value 1,
+then the kernel normally panics when out-of-memory happens.
+However, if a process limits allocations to certain nodes
+using memory policies
+.RB ( mbind (2)
+.BR MPOL_BIND )
+or cpusets
+.RB ( cpuset (7))
+and those nodes reach memory exhaustion status,
+one process may be killed by the OOM-killer.
+No panic occurs in this case:
+because other nodes' memory may be free,
+this means the system as a whole may not have reached
+an out-of-memory situation yet.
+.IP
+If this file is set to the value 2,
+the kernel always panics when an out-of-memory condition occurs.
+.IP
+The default value is 0.
+1 and 2 are for failover of clustering.
+Select either according to your policy of failover.
+.TP
+.I /proc/sys/vm/swappiness
+.\" The following is from Documentation/sysctl/vm.txt
+The value in this file controls how aggressively the kernel will swap
+memory pages.
+Higher values increase aggressiveness, lower values
+decrease aggressiveness.
+The default value is 60.
+.TP
+.IR /proc/sys/vm/user_reserve_kbytes " (since Linux 3.10)"
+.\" commit c9b1d0981fcce3d9976d7b7a56e4e0503bc610dd
+Specifies an amount of memory (in KiB) to reserve for user processes.
+This is intended to prevent a user from starting a single memory hogging
+process, such that they cannot recover (kill the hog).
+The value in this file has an effect only when
+.I /proc/sys/vm/overcommit_memory
+is set to 2 ("overcommit never" mode).
+In this case, the system reserves an amount of memory that is the minimum
+of [3% of current process size,
+.IR user_reserve_kbytes ].
+.IP
+The default value in this file is the minimum of [3% of free pages, 128MiB]
+expressed as KiB.
+.IP
+If the value in this file is set to zero,
+then a user will be allowed to allocate all free memory with a single process
+(minus the amount reserved by
+.IR /proc/sys/vm/admin_reserve_kbytes ).
+Any subsequent attempts to execute a command will result in
+"fork: Cannot allocate memory".
+.IP
+Changing the value in this file takes effect whenever
+an application requests memory.
+.TP
+.IR /proc/sys/vm/unprivileged_userfaultfd " (since Linux 5.2)"
+.\" cefdca0a86be517bc390fc4541e3674b8e7803b0
+This (writable) file exposes a flag that controls whether
+unprivileged processes are allowed to employ
+.BR userfaultfd (2).
+If this file has the value 1, then unprivileged processes may use
+.BR userfaultfd (2).
+If this file has the value 0, then only processes that have the
+.B CAP_SYS_PTRACE
+capability may employ
+.BR userfaultfd (2).
+The default value in this file is 1.
+.TP
+.IR /proc/sysrq\-trigger " (since Linux 2.4.21)"
+Writing a character to this file triggers the same SysRq function as
+typing ALT-SysRq-<character> (see the description of
+.IR /proc/sys/kernel/sysrq ).
+This file is normally writable only by
+.IR root .
+For further details see the Linux kernel source file
+.I Documentation/admin\-guide/sysrq.rst
+.\" commit 9d85025b0418163fae079c9ba8f8445212de8568
+(or
+.I Documentation/sysrq.txt
+before Linux 4.10).
+.TP
+.I /proc/sysvipc
+Subdirectory containing the pseudo-files
+.IR msg ", " sem " and " shm "."
+These files list the System V Interprocess Communication (IPC) objects
+(respectively: message queues, semaphores, and shared memory)
+that currently exist on the system,
+providing similar information to that available via
+.BR ipcs (1).
+These files have headers and are formatted (one IPC object per line)
+for easy understanding.
+.BR sysvipc (7)
+provides further background on the information shown by these files.
+.TP
+.IR /proc/thread\-self " (since Linux 3.17)"
+.\" commit 0097875bd41528922fb3bb5f348c53f17e00e2fd
+This directory refers to the thread accessing the
+.I /proc
+filesystem,
+and is identical to the
+.IR /proc/self/task/ tid
+directory named by the process thread ID
+.RI ( tid )
+of the same thread.
+.TP
+.IR /proc/timer_list " (since Linux 2.6.21)"
+.\" commit 289f480af87e45f7a6de6ba9b4c061c2e259fe98
+This read-only file exposes a list of all currently pending
+(high-resolution) timers,
+all clock-event sources, and their parameters in a human-readable form.
+.TP
+.IR /proc/timer_stats " (from Linux 2.6.21 until Linux 4.10)"
+.\" commit 82f67cd9fca8c8762c15ba7ed0d5747588c1e221
+.\" Date: Fri Feb 16 01:28:13 2007 -0800
+.\" Text largely derived from Documentation/timers/timer_stats.txt
+.\" removed in commit dfb4357da6ddbdf57d583ba64361c9d792b0e0b1
+.\" Date: Wed Feb 8 11:26:59 2017 -0800
+This is a debugging facility to make timer (ab)use in a Linux
+system visible to kernel and user-space developers.
+It can be used by kernel and user-space developers to verify that
+their code does not make undue use of timers.
+The goal is to avoid unnecessary wakeups,
+thereby optimizing power consumption.
+.IP
+If enabled in the kernel
+.RB ( CONFIG_TIMER_STATS ),
+but not used,
+it has almost zero run-time overhead and a relatively small
+data-structure overhead.
+Even if collection is enabled at run time, overhead is low:
+all the locking is per-CPU and lookup is hashed.
+.IP
+The
+.I /proc/timer_stats
+file is used both to control sampling facility and to read out the
+sampled information.
+.IP
+The
+.I timer_stats
+functionality is inactive on bootup.
+A sampling period can be started using the following command:
+.IP
+.in +4n
+.EX
+# echo 1 > /proc/timer_stats
+.EE
+.in
+.IP
+The following command stops a sampling period:
+.IP
+.in +4n
+.EX
+# echo 0 > /proc/timer_stats
+.EE
+.in
+.IP
+The statistics can be retrieved by:
+.IP
+.in +4n
+.EX
+$ cat /proc/timer_stats
+.EE
+.in
+.IP
+While sampling is enabled, each readout from
+.I /proc/timer_stats
+will see
+newly updated statistics.
+Once sampling is disabled, the sampled information
+is kept until a new sample period is started.
+This allows multiple readouts.
+.IP
+Sample output from
+.IR /proc/timer_stats :
+.IP
+.in +4n
+.EX
+.RB $ " cat /proc/timer_stats"
+Timer Stats Version: v0.3
+Sample period: 1.764 s
+Collection: active
+ 255, 0 swapper/3 hrtimer_start_range_ns (tick_sched_timer)
+ 71, 0 swapper/1 hrtimer_start_range_ns (tick_sched_timer)
+ 58, 0 swapper/0 hrtimer_start_range_ns (tick_sched_timer)
+ 4, 1694 gnome\-shell mod_delayed_work_on (delayed_work_timer_fn)
+ 17, 7 rcu_sched rcu_gp_kthread (process_timeout)
+\&...
+ 1, 4911 kworker/u16:0 mod_delayed_work_on (delayed_work_timer_fn)
+ 1D, 2522 kworker/0:0 queue_delayed_work_on (delayed_work_timer_fn)
+1029 total events, 583.333 events/sec
+.EE
+.in
+.IP
+The output columns are:
+.RS
+.IP [1] 5
+a count of the number of events,
+optionally (since Linux 2.6.23) followed by the letter \[aq]D\[aq]
+.\" commit c5c061b8f9726bc2c25e19dec227933a13d1e6b7 deferrable timers
+if this is a deferrable timer;
+.IP [2]
+the PID of the process that initialized the timer;
+.IP [3]
+the name of the process that initialized the timer;
+.IP [4]
+the function where the timer was initialized; and
+(in parentheses)
+the callback function that is associated with the timer.
+.RE
+.IP
+During the Linux 4.11 development cycle,
+this file was removed because of security concerns,
+as it exposes information across namespaces.
+Furthermore, it is possible to obtain
+the same information via in-kernel tracing facilities such as ftrace.
+.TP
+.I /proc/tty
+Subdirectory containing the pseudo-files and subdirectories for
+tty drivers and line disciplines.
+.TP
+.I /proc/uptime
+This file contains two numbers (values in seconds): the uptime of the
+system (including time spent in suspend) and the amount of time spent
+in the idle process.
+.TP
+.I /proc/version
+This string identifies the kernel version that is currently running.
+It includes the contents of
+.IR /proc/sys/kernel/ostype ,
+.IR /proc/sys/kernel/osrelease ,
+and
+.IR /proc/sys/kernel/version .
+For example:
+.IP
+.in +4n
+.EX
+Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
+.EE
+.in
+.\" FIXME 2.6.13 seems to have /proc/vmcore implemented; document this
+.\" See Documentation/kdump/kdump.txt
+.\" commit 666bfddbe8b8fd4fd44617d6c55193d5ac7edb29
+.\" Needs CONFIG_VMCORE
+.\"
+.TP
+.IR /proc/vmstat " (since Linux 2.6.0)"
+This file displays various virtual memory statistics.
+Each line of this file contains a single name-value pair,
+delimited by white space.
+Some lines are present only if the kernel was configured with
+suitable options.
+(In some cases, the options required for particular files have changed
+across kernel versions, so they are not listed here.
+Details can be found by consulting the kernel source code.)
+The following fields may be present:
+.\" FIXME We need explanations for each of the following fields...
+.RS
+.TP
+.IR nr_free_pages " (since Linux 2.6.31)"
+.\" commit d23ad42324cc4378132e51f2fc5c9ba6cbe75182
+.TP
+.IR nr_alloc_batch " (since Linux 3.12)"
+.\" commit 81c0a2bb515fd4daae8cab64352877480792b515
+.TP
+.IR nr_inactive_anon " (since Linux 2.6.28)"
+.\" commit 4f98a2fee8acdb4ac84545df98cccecfd130f8db
+.TP
+.IR nr_active_anon " (since Linux 2.6.28)"
+.\" commit 4f98a2fee8acdb4ac84545df98cccecfd130f8db
+.TP
+.IR nr_inactive_file " (since Linux 2.6.28)"
+.\" commit 4f98a2fee8acdb4ac84545df98cccecfd130f8db
+.TP
+.IR nr_active_file " (since Linux 2.6.28)"
+.\" commit 4f98a2fee8acdb4ac84545df98cccecfd130f8db
+.TP
+.IR nr_unevictable " (since Linux 2.6.28)"
+.\" commit 7b854121eb3e5ba0241882ff939e2c485228c9c5
+.TP
+.IR nr_mlock " (since Linux 2.6.28)"
+.\" commit 5344b7e648980cc2ca613ec03a56a8222ff48820
+.TP
+.IR nr_anon_pages " (since Linux 2.6.18)"
+.\" commit f3dbd34460ff54962d3e3244b6bcb7f5295356e6
+.TP
+.IR nr_mapped " (since Linux 2.6.0)"
+.TP
+.IR nr_file_pages " (since Linux 2.6.18)"
+.\" commit 347ce434d57da80fd5809c0c836f206a50999c26
+.TP
+.IR nr_dirty " (since Linux 2.6.0)"
+.TP
+.IR nr_writeback " (since Linux 2.6.0)"
+.TP
+.IR nr_slab_reclaimable " (since Linux 2.6.19)"
+.\" commit 972d1a7b140569084439a81265a0f15b74e924e0
+.\" Linux 2.6.0 had nr_slab
+.TP
+.IR nr_slab_unreclaimable " (since Linux 2.6.19)"
+.\" commit 972d1a7b140569084439a81265a0f15b74e924e0
+.TP
+.IR nr_page_table_pages " (since Linux 2.6.0)"
+.TP
+.IR nr_kernel_stack " (since Linux 2.6.32)"
+.\" commit c6a7f5728a1db45d30df55a01adc130b4ab0327c
+Amount of memory allocated to kernel stacks.
+.TP
+.IR nr_unstable " (since Linux 2.6.0)"
+.TP
+.IR nr_bounce " (since Linux 2.6.12)"
+.\" commit edfbe2b0038723e5699ab22695ccd62b5542a5c1
+.TP
+.IR nr_vmscan_write " (since Linux 2.6.19)"
+.\" commit e129b5c23c2b471d47f1c5d2b8b193fc2034af43
+.TP
+.IR nr_vmscan_immediate_reclaim " (since Linux 3.2)"
+.\" commit 49ea7eb65e7c5060807fb9312b1ad4c3eab82e2c
+.TP
+.IR nr_writeback_temp " (since Linux 2.6.26)"
+.\" commit fc3ba692a4d19019387c5acaea63131f9eab05dd
+.TP
+.IR nr_isolated_anon " (since Linux 2.6.32)"
+.\" commit a731286de62294b63d8ceb3c5914ac52cc17e690
+.TP
+.IR nr_isolated_file " (since Linux 2.6.32)"
+.\" commit a731286de62294b63d8ceb3c5914ac52cc17e690
+.TP
+.IR nr_shmem " (since Linux 2.6.32)"
+.\" commit 4b02108ac1b3354a22b0d83c684797692efdc395
+Pages used by shmem and
+.BR tmpfs (5).
+.TP
+.IR nr_dirtied " (since Linux 2.6.37)"
+.\" commit ea941f0e2a8c02ae876cd73deb4e1557248f258c
+.TP
+.IR nr_written " (since Linux 2.6.37)"
+.\" commit ea941f0e2a8c02ae876cd73deb4e1557248f258c
+.TP
+.IR nr_pages_scanned " (since Linux 3.17)"
+.\" commit 0d5d823ab4e608ec7b52ac4410de4cb74bbe0edd
+.TP
+.IR numa_hit " (since Linux 2.6.18)"
+.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_NUMA .
+.TP
+.IR numa_miss " (since Linux 2.6.18)"
+.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_NUMA .
+.TP
+.IR numa_foreign " (since Linux 2.6.18)"
+.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_NUMA .
+.TP
+.IR numa_interleave " (since Linux 2.6.18)"
+.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_NUMA .
+.TP
+.IR numa_local " (since Linux 2.6.18)"
+.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_NUMA .
+.TP
+.IR numa_other " (since Linux 2.6.18)"
+.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_NUMA .
+.TP
+.IR workingset_refault " (since Linux 3.15)"
+.\" commit a528910e12ec7ee203095eb1711468a66b9b60b0
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR workingset_activate " (since Linux 3.15)"
+.\" commit a528910e12ec7ee203095eb1711468a66b9b60b0
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR workingset_nodereclaim " (since Linux 3.15)"
+.\" commit 449dd6984d0e47643c04c807f609dd56d48d5bcc
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR nr_anon_transparent_hugepages " (since Linux 2.6.38)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR nr_free_cma " (since Linux 3.7)"
+.\" commit d1ce749a0db12202b711d1aba1d29e823034648d
+Number of free CMA (Contiguous Memory Allocator) pages.
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR nr_dirty_threshold " (since Linux 2.6.37)"
+.\" commit 79da826aee6a10902ef411bc65864bd02102fa83
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR nr_dirty_background_threshold " (since Linux 2.6.37)"
+.\" commit 79da826aee6a10902ef411bc65864bd02102fa83
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgpgin " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgpgout " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pswpin " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pswpout " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgalloc_dma " (since Linux 2.6.5)"
+.\" Linux 2.6.0 had pgalloc
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgalloc_dma32 " (since Linux 2.6.16)"
+.\" commit 9328b8faae922e52073785ed6c1eaa8565648a0e
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgalloc_normal " (since Linux 2.6.5)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgalloc_high " (since Linux 2.6.5)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_HIGHMEM .
+.TP
+.IR pgalloc_movable " (since Linux 2.6.23)"
+.\" commit 2a1e274acf0b1c192face19a4be7c12d4503eaaf
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgfree " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgactivate " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgdeactivate " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgfault " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgmajfault " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgrefill_dma " (since Linux 2.6.5)"
+.\" Linux 2.6.0 had pgrefill
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgrefill_dma32 " (since Linux 2.6.16)"
+.\" commit 9328b8faae922e52073785ed6c1eaa8565648a0e
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgrefill_normal " (since Linux 2.6.5)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgrefill_high " (since Linux 2.6.5)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_HIGHMEM .
+.TP
+.IR pgrefill_movable " (since Linux 2.6.23)"
+.\" commit 2a1e274acf0b1c192face19a4be7c12d4503eaaf
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.\" Formerly there were
+.\" pgsteal_high
+.\" pgsteal_normal
+.\" pgsteal_dma32
+.\" pgsteal_dma
+.\" These were split out into pgsteal_kswapd* and pgsteal_direct*
+.\" in commit 904249aa68010c8e223263c922fcbb840a3f42e4
+.TP
+.IR pgsteal_kswapd_dma " (since Linux 3.4)"
+.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
+.\" Linux 2.6.0 had pgsteal
+.\" Present only if the kernel was configured with
+.\" .\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgsteal_kswapd_dma32 " (since Linux 3.4)"
+.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
+.\" commit 9328b8faae922e52073785ed6c1eaa8565648a0e
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgsteal_kswapd_normal " (since Linux 3.4)"
+.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgsteal_kswapd_high " (since Linux 3.4)"
+.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_HIGHMEM .
+.TP
+.IR pgsteal_kswapd_movable " (since Linux 3.4)"
+.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.I pgsteal_direct_dma
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgsteal_direct_dma32 " (since Linux 3.4)"
+.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgsteal_direct_normal " (since Linux 3.4)"
+.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgsteal_direct_high " (since Linux 3.4)"
+.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_HIGHMEM .
+.TP
+.IR pgsteal_direct_movable " (since Linux 2.6.23)"
+.\" commit 2a1e274acf0b1c192face19a4be7c12d4503eaaf
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.I pgscan_kswapd_dma
+.\" Linux 2.6.0 had pgscan
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgscan_kswapd_dma32 " (since Linux 2.6.16)"
+.\" commit 9328b8faae922e52073785ed6c1eaa8565648a0e
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgscan_kswapd_normal " (since Linux 2.6.5)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.I pgscan_kswapd_high
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_HIGHMEM .
+.TP
+.IR pgscan_kswapd_movable " (since Linux 2.6.23)"
+.\" commit 2a1e274acf0b1c192face19a4be7c12d4503eaaf
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.I pgscan_direct_dma
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgscan_direct_dma32 " (since Linux 2.6.16)"
+.\" commit 9328b8faae922e52073785ed6c1eaa8565648a0e
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.I pgscan_direct_normal
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.I pgscan_direct_high
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_HIGHMEM .
+.TP
+.IR pgscan_direct_movable " (since Linux 2.6.23)"
+.\" commit 2a1e274acf0b1c192face19a4be7c12d4503eaaf
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgscan_direct_throttle " (since Linux 3.6)"
+.\" commit 68243e76ee343d63c6cf76978588a885951e2818
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR zone_reclaim_failed " (since linux 2.6.31)"
+.\" commit 24cf72518c79cdcda486ed26074ff8151291cf65
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_NUMA .
+.TP
+.IR pginodesteal " (since linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR slabs_scanned " (since linux 2.6.5)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR kswapd_inodesteal " (since linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR kswapd_low_wmark_hit_quickly " (since Linux 2.6.33)"
+.\" commit bb3ab596832b920c703d1aea1ce76d69c0f71fb7
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR kswapd_high_wmark_hit_quickly " (since Linux 2.6.33)"
+.\" commit bb3ab596832b920c703d1aea1ce76d69c0f71fb7
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pageoutrun " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR allocstall " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR pgrotated " (since Linux 2.6.0)"
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR drop_pagecache " (since Linux 3.15)"
+.\" commit 5509a5d27b971a90b940e148ca9ca53312e4fa7a
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR drop_slab " (since Linux 3.15)"
+.\" commit 5509a5d27b971a90b940e148ca9ca53312e4fa7a
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR numa_pte_updates " (since Linux 3.8)"
+.\" commit 03c5a6e16322c997bf8f264851bfa3f532ad515f
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_NUMA_BALANCING .
+.TP
+.IR numa_huge_pte_updates " (since Linux 3.13)"
+.\" commit 72403b4a0fbdf433c1fe0127e49864658f6f6468
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_NUMA_BALANCING .
+.TP
+.IR numa_hint_faults " (since Linux 3.8)"
+.\" commit 03c5a6e16322c997bf8f264851bfa3f532ad515f
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_NUMA_BALANCING .
+.TP
+.IR numa_hint_faults_local " (since Linux 3.8)"
+.\" commit 03c5a6e16322c997bf8f264851bfa3f532ad515f
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_NUMA_BALANCING .
+.TP
+.IR numa_pages_migrated " (since Linux 3.8)"
+.\" commit 03c5a6e16322c997bf8f264851bfa3f532ad515f
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_NUMA_BALANCING
+.\" and
+.\" .BR CONFIG_NUMA_BALANCING .
+.TP
+.IR pgmigrate_success " (since Linux 3.8)"
+.\" commit 5647bc293ab15f66a7b1cda850c5e9d162a6c7c2
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_MIGRATION .
+.TP
+.IR pgmigrate_fail " (since Linux 3.8)"
+.\" commit 5647bc293ab15f66a7b1cda850c5e9d162a6c7c2
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_MIGRATION .
+.TP
+.IR compact_migrate_scanned " (since Linux 3.8)"
+.\" commit 397487db696cae0b026a474a5cd66f4e372995e6
+.\" Linux 3.8 dropped compact_blocks_moved, compact_pages_moved, and
+.\" compact_pagemigrate_failed
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_COMPACTION .
+.TP
+.IR compact_free_scanned " (since Linux 3.8)"
+.\" commit 397487db696cae0b026a474a5cd66f4e372995e6
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_COMPACTION .
+.TP
+.IR compact_isolated " (since Linux 3.8)"
+.\" commit 397487db696cae0b026a474a5cd66f4e372995e6
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_COMPACTION .
+.TP
+.IR compact_stall " (since Linux 2.6.35)"
+.\" commit 56de7263fcf3eb10c8dcdf8d59a9cec831795f3f
+See the kernel source file
+.IR Documentation/admin\-guide/mm/transhuge.rst .
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_COMPACTION .
+.TP
+.IR compact_fail " (since Linux 2.6.35)"
+.\" commit 56de7263fcf3eb10c8dcdf8d59a9cec831795f3f
+See the kernel source file
+.IR Documentation/admin\-guide/mm/transhuge.rst .
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_COMPACTION .
+.TP
+.IR compact_success " (since Linux 2.6.35)"
+.\" commit 56de7263fcf3eb10c8dcdf8d59a9cec831795f3f
+See the kernel source file
+.IR Documentation/admin\-guide/mm/transhuge.rst .
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_COMPACTION .
+.TP
+.IR htlb_buddy_alloc_success " (since Linux 2.6.26)"
+.\" commit 3b1163006332302117b1b2acf226d4014ff46525
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_HUGETLB_PAGE .
+.TP
+.IR htlb_buddy_alloc_fail " (since Linux 2.6.26)"
+.\" commit 3b1163006332302117b1b2acf226d4014ff46525
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_HUGETLB_PAGE .
+.TP
+.IR unevictable_pgs_culled " (since Linux 2.6.28)"
+.\" commit bbfd28eee9fbd73e780b19beb3dc562befbb94fa
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR unevictable_pgs_scanned " (since Linux 2.6.28)"
+.\" commit bbfd28eee9fbd73e780b19beb3dc562befbb94fa
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR unevictable_pgs_rescued " (since Linux 2.6.28)"
+.\" commit bbfd28eee9fbd73e780b19beb3dc562befbb94fa
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR unevictable_pgs_mlocked " (since Linux 2.6.28)"
+.\" commit 5344b7e648980cc2ca613ec03a56a8222ff48820
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR unevictable_pgs_munlocked " (since Linux 2.6.28)"
+.\" commit 5344b7e648980cc2ca613ec03a56a8222ff48820
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR unevictable_pgs_cleared " (since Linux 2.6.28)"
+.\" commit 5344b7e648980cc2ca613ec03a56a8222ff48820
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.TP
+.IR unevictable_pgs_stranded " (since Linux 2.6.28)"
+.\" commit 5344b7e648980cc2ca613ec03a56a8222ff48820
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS .
+.\" Linux 3.7 removed unevictable_pgs_mlockfreed
+.TP
+.IR thp_fault_alloc " (since Linux 2.6.39)"
+.\" commit 81ab4201fb7d91d6b0cd9ad5b4b16776e4bed145
+See the kernel source file
+.IR Documentation/admin\-guide/mm/transhuge.rst .
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
+.TP
+.IR thp_fault_fallback " (since Linux 2.6.39)"
+.\" commit 81ab4201fb7d91d6b0cd9ad5b4b16776e4bed145
+See the kernel source file
+.IR Documentation/admin\-guide/mm/transhuge.rst .
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
+.TP
+.IR thp_collapse_alloc " (since Linux 2.6.39)"
+.\" commit 81ab4201fb7d91d6b0cd9ad5b4b16776e4bed145
+See the kernel source file
+.IR Documentation/admin\-guide/mm/transhuge.rst .
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
+.TP
+.IR thp_collapse_alloc_failed " (since Linux 2.6.39)"
+.\" commit 81ab4201fb7d91d6b0cd9ad5b4b16776e4bed145
+See the kernel source file
+.IR Documentation/admin\-guide/mm/transhuge.rst .
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
+.TP
+.IR thp_split " (since Linux 2.6.39)"
+.\" commit 81ab4201fb7d91d6b0cd9ad5b4b16776e4bed145
+See the kernel source file
+.IR Documentation/admin\-guide/mm/transhuge.rst .
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
+.TP
+.IR thp_zero_page_alloc " (since Linux 3.8)"
+.\" commit d8a8e1f0da3d29d7268b3300c96a059d63901b76
+See the kernel source file
+.IR Documentation/admin\-guide/mm/transhuge.rst .
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
+.TP
+.IR thp_zero_page_alloc_failed " (since Linux 3.8)"
+.\" commit d8a8e1f0da3d29d7268b3300c96a059d63901b76
+See the kernel source file
+.IR Documentation/admin\-guide/mm/transhuge.rst .
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
+.TP
+.IR balloon_inflate " (since Linux 3.18)"
+.\" commit 09316c09dde33aae14f34489d9e3d243ec0d5938
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_MEMORY_BALLOON .
+.TP
+.IR balloon_deflate " (since Linux 3.18)"
+.\" commit 09316c09dde33aae14f34489d9e3d243ec0d5938
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS
+.\" and
+.\" .BR CONFIG_MEMORY_BALLOON .
+.TP
+.IR balloon_migrate " (since Linux 3.18)"
+.\" commit 09316c09dde33aae14f34489d9e3d243ec0d5938
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_VM_EVENT_COUNTERS ,
+.\" .BR CONFIG_MEMORY_BALLOON ,
+.\" and
+.\" .BR CONFIG_BALLOON_COMPACTION .
+.TP
+.IR nr_tlb_remote_flush " (since Linux 3.12)"
+.\" commit 9824cf9753ecbe8f5b47aa9b2f218207defea211
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_DEBUG_TLBFLUSH
+.\" and
+.\" .BR CONFIG_SMP .
+.TP
+.IR nr_tlb_remote_flush_received " (since Linux 3.12)"
+.\" commit 9824cf9753ecbe8f5b47aa9b2f218207defea211
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_DEBUG_TLBFLUSH
+.\" and
+.\" .BR CONFIG_SMP .
+.TP
+.IR nr_tlb_local_flush_all " (since Linux 3.12)"
+.\" commit 9824cf9753ecbe8f5b47aa9b2f218207defea211
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_DEBUG_TLBFLUSH .
+.TP
+.IR nr_tlb_local_flush_one " (since Linux 3.12)"
+.\" commit 9824cf9753ecbe8f5b47aa9b2f218207defea211
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_DEBUG_TLBFLUSH .
+.TP
+.IR vmacache_find_calls " (since Linux 3.16)"
+.\" commit 4f115147ff802267d0aa41e361c5aa5bd933d896
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_DEBUG_VM_VMACACHE .
+.TP
+.IR vmacache_find_hits " (since Linux 3.16)"
+.\" commit 4f115147ff802267d0aa41e361c5aa5bd933d896
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_DEBUG_VM_VMACACHE .
+.TP
+.IR vmacache_full_flushes " (since Linux 3.19)"
+.\" commit f5f302e21257ebb0c074bbafc37606c26d28cc3d
+.\" Present only if the kernel was configured with
+.\" .BR CONFIG_DEBUG_VM_VMACACHE .
+.RE
+.TP
+.IR /proc/zoneinfo " (since Linux 2.6.13)"
+This file displays information about memory zones.
+This is useful for analyzing virtual memory behavior.
+.\" FIXME more should be said about /proc/zoneinfo
+.SH NOTES
+Many files contain strings (e.g., the environment and command line)
+that are in the internal format,
+with subfields terminated by null bytes (\[aq]\e0\[aq]).
+When inspecting such files, you may find that the results are more readable
+if you use a command of the following form to display them:
+.PP
+.in +4n
+.EX
+.RB "$" " cat \fIfile\fP | tr \[aq]\e000\[aq] \[aq]\en\[aq]"
+.EE
+.in
+.PP
+This manual page is incomplete, possibly inaccurate, and is the kind
+of thing that needs to be updated very often.
+.\" .SH ACKNOWLEDGEMENTS
+.\" The material on /proc/sys/fs and /proc/sys/kernel is closely based on
+.\" kernel source documentation files written by Rik van Riel.
+.SH SEE ALSO
+.BR cat (1),
+.BR dmesg (1),
+.BR find (1),
+.BR free (1),
+.BR htop (1),
+.BR init (1),
+.BR ps (1),
+.BR pstree (1),
+.BR tr (1),
+.BR uptime (1),
+.BR chroot (2),
+.BR mmap (2),
+.BR readlink (2),
+.BR syslog (2),
+.BR slabinfo (5),
+.BR sysfs (5),
+.BR hier (7),
+.BR namespaces (7),
+.BR time (7),
+.BR arp (8),
+.BR hdparm (8),
+.BR ifconfig (8),
+.BR lsmod (8),
+.BR lspci (8),
+.BR mount (8),
+.BR netstat (8),
+.BR procinfo (8),
+.BR route (8),
+.BR sysctl (8)
+.PP
+The Linux kernel source files:
+.IR Documentation/filesystems/proc.rst ,
+.IR Documentation/admin\-guide/sysctl/fs.rst ,
+.IR Documentation/admin\-guide/sysctl/kernel.rst ,
+.IR Documentation/admin\-guide/sysctl/net.rst ,
+and
+.IR Documentation/admin\-guide/sysctl/vm.rst .
diff --git a/man5/procfs.5 b/man5/procfs.5
new file mode 100644
index 0000000..d8be74a
--- /dev/null
+++ b/man5/procfs.5
@@ -0,0 +1 @@
+.so man5/proc.5
diff --git a/man5/protocols.5 b/man5/protocols.5
new file mode 100644
index 0000000..7939407
--- /dev/null
+++ b/man5/protocols.5
@@ -0,0 +1,66 @@
+.\" Copyright (c) 1995 Martin Schulze <joey@infodrom.north.de>
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" 1995-10-18 Martin Schulze <joey@infodrom.north.de>
+.\" * first released
+.\" 2002-09-22 Seth W. Klein <sk@sethwklein.net>
+.\" * protocol numbers are now assigned by the IANA
+.\"
+.TH protocols 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+protocols \- protocols definition file
+.SH DESCRIPTION
+This file is a plain ASCII file, describing the various DARPA internet
+protocols that are available from the TCP/IP subsystem.
+It should be
+consulted instead of using the numbers in the ARPA include files, or,
+even worse, just guessing them.
+These numbers will occur in the
+protocol field of any IP header.
+.PP
+Keep this file untouched since changes would result in incorrect IP
+packages.
+Protocol numbers and names are specified by the IANA
+(Internet Assigned Numbers Authority).
+.\" .. by the DDN Network Information Center.
+.PP
+Each line is of the following format:
+.PP
+.RS
+.I protocol number aliases ...
+.RE
+.PP
+where the fields are delimited by spaces or tabs.
+Empty lines are ignored.
+If a line contains a hash mark (#), the hash mark and the part
+of the line following it are ignored.
+.PP
+The field descriptions are:
+.TP
+.I protocol
+the native name for the protocol.
+For example
+.IR ip ,
+.IR tcp ,
+or
+.IR udp .
+.TP
+.I number
+the official number for this protocol as it will appear within the IP
+header.
+.TP
+.I aliases
+optional aliases for the protocol.
+.PP
+This file might be distributed over a network using a network-wide
+naming service like Yellow Pages/NIS or BIND/Hesiod.
+.SH FILES
+.TP
+.I /etc/protocols
+The protocols definition file.
+.SH SEE ALSO
+.BR getprotoent (3)
+.PP
+.UR http://www.iana.org\:/assignments\:/protocol\-numbers
+.UE
diff --git a/man5/repertoiremap.5 b/man5/repertoiremap.5
new file mode 100644
index 0000000..bf1238d
--- /dev/null
+++ b/man5/repertoiremap.5
@@ -0,0 +1,58 @@
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.TH repertoiremap 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+repertoiremap \- map symbolic character names to Unicode code points
+.SH DESCRIPTION
+A repertoire map defines mappings between symbolic character names
+(mnemonics) and Unicode code points when compiling a locale with
+.BR localedef (1).
+Using a repertoire map is optional, it is needed only when symbolic
+names are used instead of now preferred Unicode code points.
+.SS Syntax
+The repertoiremap file starts with a header that may consist of the
+following keywords:
+.TP
+.I comment_char
+is followed by a character that will be used as the
+comment character for the rest of the file.
+It defaults to the number sign (#).
+.TP
+.I escape_char
+is followed by a character that should be used as the escape character
+for the rest of the file to mark characters that should be interpreted
+in a special way.
+It defaults to the backslash (\e).
+.PP
+The mapping section starts with the keyword
+.I CHARIDS
+in the first column.
+.PP
+The mapping lines have the following form:
+.TP
+.I <symbolic-name> <code-point> comment
+This defines exactly one mapping,
+.I comment
+being optional.
+.PP
+The mapping section ends with the string
+.IR "END CHARIDS" .
+.SH FILES
+.TP
+.I /usr/share/i18n/repertoiremaps
+Usual default repertoire map path.
+.SH STANDARDS
+POSIX.2.
+.SH NOTES
+Repertoire maps are deprecated in favor of Unicode code points.
+.SH EXAMPLES
+A mnemonic for the Euro sign can be defined as follows:
+.PP
+.nf
+<Eu> <U20AC> EURO SIGN
+.fi
+.SH SEE ALSO
+.BR locale (1),
+.BR localedef (1),
+.BR charmap (5),
+.BR locale (5)
diff --git a/man5/resolv.conf.5 b/man5/resolv.conf.5
new file mode 100644
index 0000000..1ea918d
--- /dev/null
+++ b/man5/resolv.conf.5
@@ -0,0 +1,406 @@
+.\" Copyright (c) 1986 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" %%%LICENSE_START(PERMISSIVE_MISC)
+.\" Redistribution and use in source and binary forms are permitted
+.\" provided that the above copyright notice and this paragraph are
+.\" duplicated in all such forms and that any documentation,
+.\" advertising materials, and other materials related to such
+.\" distribution and use acknowledge that the software was developed
+.\" by the University of California, Berkeley. The name of the
+.\" University may not be used to endorse or promote products derived
+.\" from this software without specific prior written permission.
+.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+.\" %%%LICENSE_END
+.\"
+.\" @(#)resolver.5 5.9 (Berkeley) 12/14/89
+.\" $Id: resolver.5,v 8.6 1999/05/21 00:01:02 vixie Exp $
+.\"
+.\" Added ndots remark by Bernhard R. Link - debian bug #182886
+.\"
+.TH resolv.conf 5 2023-05-05 "Linux man-pages 6.05.01"
+.UC 4
+.SH NAME
+resolv.conf \- resolver configuration file
+.SH SYNOPSIS
+.nf
+.B /etc/resolv.conf
+.fi
+.SH DESCRIPTION
+The
+.I resolver
+is a set of routines in the C library
+that provide access to the Internet Domain Name System (DNS).
+The resolver configuration file contains information that is read
+by the resolver routines the first time they are invoked by a process.
+The file is designed to be human readable and contains a list of
+keywords with values that provide various types of resolver information.
+The configuration file is considered a trusted source of DNS information;
+see the
+.B trust-ad
+option below for details.
+.PP
+If this file does not exist, only the name server on the local machine
+will be queried, and the search list contains the local domain name
+determined from the hostname.
+.PP
+The different configuration options are:
+.TP
+\fBnameserver\fP Name server IP address
+Internet address of a name server that the resolver should query,
+either an IPv4 address (in dot notation),
+or an IPv6 address in colon (and possibly dot) notation as per RFC 2373.
+Up to
+.B MAXNS
+(currently 3, see \fI<resolv.h>\fP) name servers may be listed,
+one per keyword.
+If there are multiple servers,
+the resolver library queries them in the order listed.
+If no \fBnameserver\fP entries are present,
+the default is to use the name server on the local machine.
+(The algorithm used is to try a name server, and if the query times out,
+try the next, until out of name servers,
+then repeat trying all the name servers
+until a maximum number of retries are made.)
+.TP
+\fBsearch\fP Search list for host-name lookup.
+By default, the search list contains one entry, the local domain name.
+It is determined from the local hostname returned by
+.BR gethostname (2);
+the local domain name is taken to be everything after the first
+\[aq].\[aq].
+Finally, if the hostname does not contain a \[aq].\[aq], the
+root domain is assumed as the local domain name.
+.IP
+This may be changed by listing the desired domain search path
+following the \fIsearch\fP keyword with spaces or tabs separating
+the names.
+Resolver queries having fewer than
+.I ndots
+dots (default is 1) in them will be attempted using each component
+of the search path in turn until a match is found.
+For environments with multiple subdomains please read
+.BI "options ndots:" n
+below to avoid man-in-the-middle attacks and unnecessary
+traffic for the root-dns-servers.
+.\" When having a resolv.conv with a line
+.\" search subdomain.domain.tld domain.tld
+.\" and doing a hostlookup, for example by
+.\" ping host.anothersubdomain
+.\" it sends dns-requests for
+.\" host.anothersubdomain.
+.\" host.anothersubdomain.subdomain.domain.tld.
+.\" host.anothersubdomain.domain.tld.
+.\" thus not only causing unnecessary traffic for the root-dns-servers
+.\" but broadcasting information to the outside and making man-in-the-middle
+.\" attacks possible.
+Note that this process may be slow and will generate a lot of network
+traffic if the servers for the listed domains are not local,
+and that queries will time out if no server is available
+for one of the domains.
+.IP
+If there are multiple
+.B search
+directives, only the search list from the last instance is used.
+.IP
+In glibc 2.25 and earlier, the search list is limited to six domains
+with a total of 256 characters.
+Since glibc 2.26,
+.\" glibc commit 3f853f22c87f0b671c0366eb290919719fa56c0e
+the search list is unlimited.
+.IP
+The
+.B domain
+directive is an obsolete name for the
+.B search
+directive that handles one search list entry only.
+.TP
+\fBsortlist\fP
+This option allows addresses returned by
+.BR gethostbyname (3)
+to be sorted.
+A sortlist is specified by IP-address-netmask pairs.
+The netmask is
+optional and defaults to the natural netmask of the net.
+The IP address
+and optional network pairs are separated by slashes.
+Up to 10 pairs may
+be specified.
+Here is an example:
+.IP
+.in +4n
+sortlist 130.155.160.0/255.255.240.0 130.155.0.0
+.in
+.TP
+\fBoptions\fP
+Options allows certain internal resolver variables to be modified.
+The syntax is
+.RS
+.IP
+\fBoptions\fP \fIoption\fP \fI...\fP
+.PP
+where \fIoption\fP is one of the following:
+.TP
+\fBdebug\fP
+.\" Since glibc 2.2?
+Sets
+.B RES_DEBUG
+in
+.I _res.options
+(effective only if glibc was built with debug support; see
+.BR resolver (3)).
+.TP
+.BI ndots: n
+.\" Since glibc 2.2
+Sets a threshold for the number of dots which
+must appear in a name given to
+.BR res_query (3)
+(see
+.BR resolver (3))
+before an \fIinitial absolute query\fP will be made.
+The default for
+\fIn\fP is 1, meaning that if there are any dots in a name, the name
+will be tried first as an absolute name before any \fIsearch list\fP
+elements are appended to it.
+The value for this option is silently capped to 15.
+.TP
+.BI timeout: n
+.\" Since glibc 2.2
+Sets the amount of time the resolver will wait for a
+response from a remote name server before retrying the
+query via a different name server.
+This may
+.B not
+be the total time taken by any resolver API call and there is no
+guarantee that a single resolver API call maps to a single timeout.
+Measured in seconds,
+the default is
+.B RES_TIMEOUT
+(currently 5, see \fI<resolv.h>\fP).
+The value for this option is silently capped to 30.
+.TP
+.BI attempts: n
+Sets the number of times the resolver will send a
+query to its name servers before giving up and returning
+an error to the calling application.
+The default is
+.B RES_DFLRETRY
+(currently 2, see \fI<resolv.h>\fP).
+The value for this option is silently capped to 5.
+.TP
+.B rotate
+.\" Since glibc 2.2
+Sets
+.B RES_ROTATE
+in
+.IR _res.options ,
+which causes round-robin selection of name servers from among those listed.
+This has the effect of spreading the query load among all listed servers,
+rather than having all clients try the first listed server first every time.
+.TP
+.B no\-aaaa (since glibc 2.36)
+.\" f282cdbe7f436c75864e5640a409a10485e9abb2
+Sets
+.B RES_NOAAAA
+in
+.IR _res.options ,
+which suppresses AAAA queries made by the stub resolver,
+including AAAA lookups triggered by NSS-based interfaces such as
+.BR getaddrinfo (3).
+Only DNS lookups are affected: IPv6 data in
+.BR hosts (5)
+is still used,
+.BR getaddrinfo (3)
+with
+.B AI_PASSIVE
+will still produce IPv6 addresses,
+and configured IPv6 name servers are still used.
+To produce correct Name Error (NXDOMAIN) results,
+AAAA queries are translated to A queries.
+This option is intended preliminary for diagnostic purposes,
+to rule out that AAAA DNS queries have adverse impact.
+It is incompatible with EDNS0 usage and DNSSEC validation by applications.
+.TP
+.B no\-check\-names
+.\" since glibc 2.2
+Sets
+.B RES_NOCHECKNAME
+in
+.IR _res.options ,
+which disables the modern BIND checking of incoming hostnames and
+mail names for invalid characters such as underscore (_), non-ASCII,
+or control characters.
+.TP
+.B inet6
+.\" Since glibc 2.2
+Sets
+.B RES_USE_INET6
+in
+.IR _res.options .
+This has the effect of trying an AAAA query before an A query inside the
+.BR gethostbyname (3)
+function, and of mapping IPv4 responses in IPv6 "tunneled form"
+if no AAAA records are found but an A record set exists.
+Since glibc 2.25,
+.\" b76e065991ec01299225d9da90a627ebe6c1ac97
+this option is deprecated; applications should use
+.BR getaddrinfo (3),
+rather than
+.BR gethostbyname (3).
+.TP
+.BR ip6\-bytestring " (since glibc 2.3.4 to glibc 2.24)"
+Sets
+.B RES_USEBSTRING
+in
+.IR _res.options .
+This causes reverse IPv6 lookups to be made using the bit-label format
+described in RFC\ 2673;
+if this option is not set (which is the default), then nibble format is used.
+This option was removed in glibc 2.25,
+since it relied on a backward-incompatible
+DNS extension that was never deployed on the Internet.
+.TP
+.BR ip6\-dotint / no\-ip6\-dotint " (glibc 2.3.4 to glibc 2.24)"
+Clear/set
+.B RES_NOIP6DOTINT
+in
+.IR _res.options .
+When this option is clear
+.RB ( ip6\-dotint ),
+reverse IPv6 lookups are made in the (deprecated)
+.I ip6.int
+zone;
+when this option is set
+.RB ( no\-ip6\-dotint ),
+reverse IPv6 lookups are made in the
+.I ip6.arpa
+zone by default.
+These options are available up to glibc 2.24, where
+.B no\-ip6\-dotint
+is the default.
+Since
+.B ip6\-dotint
+support long ago ceased to be available on the Internet,
+these options were removed in glibc 2.25.
+.TP
+.BR edns0 " (since glibc 2.6)"
+Sets
+.B RES_USE_EDNS0
+in
+.IR _res.options .
+This enables support for the DNS extensions described in RFC\ 2671.
+.TP
+.BR single\-request " (since glibc 2.10)"
+Sets
+.B RES_SNGLKUP
+in
+.IR _res.options .
+By default, glibc performs IPv4 and IPv6 lookups in parallel since
+glibc 2.9.
+Some appliance DNS servers
+cannot handle these queries properly and make the requests time out.
+This option disables the behavior and makes glibc perform the IPv6
+and IPv4 requests sequentially (at the cost of some slowdown of the
+resolving process).
+.TP
+.BR single\-request\-reopen " (since glibc 2.9)"
+Sets
+.B RES_SNGLKUPREOP
+in
+.IR _res.options .
+The resolver uses the same socket for the A and AAAA requests.
+Some hardware mistakenly sends back only one reply.
+When that happens the client system will sit and wait for the second reply.
+Turning this option on changes this behavior
+so that if two requests from the same port are not handled correctly it will
+close the socket and open a new one before sending the second request.
+.TP
+.BR no\-tld\-query " (since glibc 2.14)"
+Sets
+.B RES_NOTLDQUERY
+in
+.IR _res.options .
+This option causes
+.BR res_nsearch ()
+to not attempt to resolve an unqualified name
+as if it were a top level domain (TLD).
+This option can cause problems if the site has ``localhost'' as a TLD
+rather than having localhost on one or more elements of the search list.
+This option has no effect if neither RES_DEFNAMES or RES_DNSRCH is set.
+.TP
+.BR use\-vc " (since glibc 2.14)"
+Sets
+.B RES_USEVC
+in
+.IR _res.options .
+This option forces the use of TCP for DNS resolutions.
+.\" aef16cc8a4c670036d45590877d411a97f01e0cd
+.TP
+.BR no\-reload " (since glibc 2.26)"
+Sets
+.B RES_NORELOAD
+in
+.IR _res.options .
+This option disables automatic reloading of a changed configuration file.
+.TP
+.BR trust\-ad " (since glibc 2.31)"
+.\" 446997ff1433d33452b81dfa9e626b8dccf101a4
+Sets
+.B RES_TRUSTAD
+in
+.IR _res.options .
+This option controls the AD bit behavior of the stub resolver.
+If a validating resolver sets the AD bit in a response,
+it indicates that the data in the response was verified according
+to the DNSSEC protocol.
+In order to rely on the AD bit, the local system has to
+trust both the DNSSEC-validating resolver and the network path to it,
+which is why an explicit opt-in is required.
+If the
+.B trust\-ad
+option is active, the stub resolver sets the AD bit in outgoing DNS
+queries (to enable AD bit support), and preserves the AD bit in responses.
+Without this option, the AD bit is not set in queries,
+and it is always removed from responses before they are returned to the
+application.
+This means that applications can trust the AD bit in responses if the
+.B trust\-ad
+option has been set correctly.
+.IP
+In glibc 2.30 and earlier,
+the AD is not set automatically in queries,
+and is passed through unchanged to applications in responses.
+.RE
+.PP
+The \fIsearch\fP keyword of a system's \fIresolv.conf\fP file can be
+overridden on a per-process basis by setting the environment variable
+.B LOCALDOMAIN
+to a space-separated list of search domains.
+.PP
+The \fIoptions\fP keyword of a system's \fIresolv.conf\fP file can be
+amended on a per-process basis by setting the environment variable
+.B RES_OPTIONS
+to a space-separated list of resolver options
+as explained above under \fBoptions\fP.
+.PP
+The keyword and value must appear on a single line, and the keyword
+(e.g., \fBnameserver\fP) must start the line.
+The value follows the keyword, separated by white space.
+.PP
+Lines that contain a semicolon (;) or hash character (#)
+in the first column are treated as comments.
+.SH FILES
+.IR /etc/resolv.conf ,
+.I <resolv.h>
+.SH SEE ALSO
+.BR gethostbyname (3),
+.BR resolver (3),
+.BR host.conf (5),
+.BR hosts (5),
+.BR nsswitch.conf (5),
+.BR hostname (7),
+.BR named (8)
+.PP
+Name Server Operations Guide for BIND
diff --git a/man5/resolver.5 b/man5/resolver.5
new file mode 100644
index 0000000..86104b9
--- /dev/null
+++ b/man5/resolver.5
@@ -0,0 +1 @@
+.so man5/resolv.conf.5
diff --git a/man5/rpc.5 b/man5/rpc.5
new file mode 100644
index 0000000..4f1fe2c
--- /dev/null
+++ b/man5/rpc.5
@@ -0,0 +1,83 @@
+.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
+.\"
+.\" %%%LICENSE_START(BSD_ONELINE_CDROM)
+.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
+.\" %%%LICENSE_END
+.\"
+.\" @(#)rpc.5 2.2 88/08/03 4.0 RPCSRC; from 1.4 87/11/27 SMI;
+.TH rpc 5 2023-02-05 "Linux man-pages 6.05.01"
+.SH NAME
+rpc \- RPC program number data base
+.SH SYNOPSIS
+.nf
+.B /etc/rpc
+.fi
+.SH DESCRIPTION
+The
+.I rpc
+file contains user readable names that
+can be used in place of RPC program numbers.
+Each line has the following information:
+.PP
+.PD 0
+.IP \[bu] 3
+name of server for the RPC program
+.IP \[bu]
+RPC program number
+.IP \[bu]
+aliases
+.PD
+.PP
+Items are separated by any number of blanks and/or
+tab characters.
+A \[aq]#\[aq] indicates the beginning of a comment; characters from
+the \[aq]#\[aq] to the end of the line are not interpreted by routines
+which search the file.
+.PP
+Here is an example of the
+.I /etc/rpc
+file from the Sun RPC Source distribution.
+.PP
+.in +4n
+.EX
+#
+# rpc 88/08/01 4.0 RPCSRC; from 1.12 88/02/07 SMI
+#
+portmapper 100000 portmap sunrpc
+rstatd 100001 rstat rstat_svc rup perfmeter
+rusersd 100002 rusers
+nfs 100003 nfsprog
+ypserv 100004 ypprog
+mountd 100005 mount showmount
+ypbind 100007
+walld 100008 rwall shutdown
+yppasswdd 100009 yppasswd
+etherstatd 100010 etherstat
+rquotad 100011 rquotaprog quota rquota
+sprayd 100012 spray
+3270_mapper 100013
+rje_mapper 100014
+selection_svc 100015 selnsvc
+database_svc 100016
+rexd 100017 rex
+alis 100018
+sched 100019
+llockmgr 100020
+nlockmgr 100021
+x25.inr 100022
+statmon 100023
+status 100024
+bootparam 100026
+ypupdated 100028 ypupdate
+keyserv 100029 keyserver
+tfsd 100037
+nsed 100038
+nsemntd 100039
+.EE
+.in
+.SH FILES
+.TP
+.I /etc/rpc
+RPC program number data base
+.SH SEE ALSO
+.BR getrpcent (3)
diff --git a/man5/securetty.5 b/man5/securetty.5
new file mode 100644
index 0000000..a32db97
--- /dev/null
+++ b/man5/securetty.5
@@ -0,0 +1,35 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified Sun Jul 25 11:06:27 1993 by Rik Faith (faith@cs.unc.edu)
+.TH securetty 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+securetty \- list of terminals on which root is allowed to login
+.SH DESCRIPTION
+The file
+.I /etc/securetty
+contains the names of terminals
+(one per line, without leading
+.IR /dev/ )
+which are considered secure for the transmission of certain authentication
+tokens.
+.PP
+It is used by (some versions of)
+.BR login (1)
+to restrict the terminals
+on which root is allowed to login.
+See
+.BR login.defs (5)
+if you use the shadow suite.
+.PP
+On PAM enabled systems, it is used for the same purpose by
+.BR pam_securetty (8)
+to restrict the terminals on which empty passwords are accepted.
+.SH FILES
+.I /etc/securetty
+.SH SEE ALSO
+.BR login (1),
+.BR login.defs (5),
+.BR pam_securetty (8)
diff --git a/man5/services.5 b/man5/services.5
new file mode 100644
index 0000000..5003f61
--- /dev/null
+++ b/man5/services.5
@@ -0,0 +1,199 @@
+.\" This manpage is Copyright (C) 1996 Austin Donnelly <and1000@cam.ac.uk>,
+.\" with additional material Copyright (c) 1995 Martin Schulze
+.\" <joey@infodrom.north.de>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.\" This manpage was made by merging two independently written manpages,
+.\" one written by Martin Schulze (18 Oct 95), the other written by
+.\" Austin Donnelly, (9 Jan 96).
+.\"
+.\" Thu Jan 11 12:14:41 1996 Austin Donnelly <and1000@cam.ac.uk>
+.\" * Merged two services(5) manpages
+.\"
+.TH services 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+services \- Internet network services list
+.SH DESCRIPTION
+.B services
+is a plain ASCII file providing a mapping between human-friendly textual
+names for internet services, and their underlying assigned port
+numbers and protocol types.
+Every networking program should look into
+this file to get the port number (and protocol) for its service.
+The C library routines
+.BR getservent (3),
+.BR getservbyname (3),
+.BR getservbyport (3),
+.BR setservent (3),
+and
+.BR endservent (3)
+support querying this file from programs.
+.PP
+Port numbers are assigned by the IANA (Internet Assigned Numbers
+Authority), and their current policy is to assign both TCP and UDP
+protocols when assigning a port number.
+Therefore, most entries will
+have two entries, even for TCP-only services.
+.PP
+Port numbers below 1024 (so-called "low numbered" ports) can be
+bound to only by root (see
+.BR bind (2),
+.BR tcp (7),
+and
+.BR udp (7)).
+This is so clients connecting to low numbered ports can trust
+that the service running on the port is the standard implementation,
+and not a rogue service run by a user of the machine.
+Well-known port numbers specified by the IANA are normally
+located in this root-only space.
+.PP
+The presence of an entry for a service in the
+.B services
+file does not necessarily mean that the service is currently running
+on the machine.
+See
+.BR inetd.conf (5)
+for the configuration of Internet services offered.
+Note that not all
+networking services are started by
+.BR inetd (8),
+and so won't appear in
+.BR inetd.conf (5).
+In particular, news (NNTP) and mail (SMTP) servers are often
+initialized from the system boot scripts.
+.PP
+The location of the
+.B services
+file is defined by
+.B _PATH_SERVICES
+in
+.IR <netdb.h> "."
+This is usually set to
+.IR /etc/services "."
+.PP
+Each line describes one service, and is of the form:
+.IP
+\f2service-name\ \ \ port\f3/\f2protocol\ \ \ \f1[\f2aliases ...\f1]
+.TP
+where:
+.TP
+.I service-name
+is the friendly name the service is known by and looked up under.
+It is case sensitive.
+Often, the client program is named after the
+.IR service-name "."
+.TP
+.I port
+is the port number (in decimal) to use for this service.
+.TP
+.I protocol
+is the type of protocol to be used.
+This field should match an entry
+in the
+.BR protocols (5)
+file.
+Typical values include
+.B tcp
+and
+.BR udp .
+.TP
+.I aliases
+is an optional space or tab separated list of other names for this
+service.
+Again, the names are case
+sensitive.
+.PP
+Either spaces or tabs may be used to separate the fields.
+.PP
+Comments are started by the hash sign (#) and continue until the end
+of the line.
+Blank lines are skipped.
+.PP
+The
+.I service-name
+should begin in the first column of the file, since leading spaces are
+not stripped.
+.I service-names
+can be any printable characters excluding space and tab.
+However, a conservative choice of characters should be used to minimize
+compatibility problems.
+For example, a\-z, 0\-9, and hyphen (\-) would seem a
+sensible choice.
+.PP
+Lines not matching this format should not be present in the
+file.
+(Currently, they are silently skipped by
+.BR getservent (3),
+.BR getservbyname (3),
+and
+.BR getservbyport (3).
+However, this behavior should not be relied on.)
+.PP
+.\" The following is not true as at glibc 2.8 (a line with a comma is
+.\" ignored by getservent()); it's not clear if/when it was ever true.
+.\" As a backward compatibility feature, the slash (/) between the
+.\" .I port
+.\" number and
+.\" .I protocol
+.\" name can in fact be either a slash or a comma (,).
+.\" Use of the comma in
+.\" modern installations is deprecated.
+.\"
+This file might be distributed over a network using a network-wide
+naming service like Yellow Pages/NIS or BIND/Hesiod.
+.PP
+A sample
+.B services
+file might look like this:
+.PP
+.in +4n
+.EX
+netstat 15/tcp
+qotd 17/tcp quote
+msp 18/tcp # message send protocol
+msp 18/udp # message send protocol
+chargen 19/tcp ttytst source
+chargen 19/udp ttytst source
+ftp 21/tcp
+# 22 \- unassigned
+telnet 23/tcp
+.EE
+.in
+.SH FILES
+.TP
+.I /etc/services
+The Internet network services list
+.TP
+.I <netdb.h>
+Definition of
+.B _PATH_SERVICES
+.\" .SH BUGS
+.\" It's not clear when/if the following was ever true;
+.\" it isn't true for glibc 2.8:
+.\" There is a maximum of 35 aliases, due to the way the
+.\" .BR getservent (3)
+.\" code is written.
+.\"
+.\" It's not clear when/if the following was ever true;
+.\" it isn't true for glibc 2.8:
+.\" Lines longer than
+.\" .B BUFSIZ
+.\" (currently 1024) characters will be ignored by
+.\" .BR getservent (3),
+.\" .BR getservbyname (3),
+.\" and
+.\" .BR getservbyport (3).
+.\" However, this will also cause the next line to be mis-parsed.
+.SH SEE ALSO
+.BR listen (2),
+.BR endservent (3),
+.BR getservbyname (3),
+.BR getservbyport (3),
+.BR getservent (3),
+.BR setservent (3),
+.BR inetd.conf (5),
+.BR protocols (5),
+.BR inetd (8)
+.PP
+Assigned Numbers RFC, most recently RFC\ 1700, (AKA STD0002).
diff --git a/man5/shells.5 b/man5/shells.5
new file mode 100644
index 0000000..fcbbd22
--- /dev/null
+++ b/man5/shells.5
@@ -0,0 +1,40 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
+.\" Thu May 20 20:45:48 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified Sat Jul 24 17:11:07 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Nov 21 10:49:38 1993 by Michael Haardt
+.\" Modified Sun Feb 26 15:09:15 1995 by Rik Faith (faith@cs.unc.edu)
+.TH shells 5 2022-10-30 "Linux man-pages 6.05.01"
+.SH NAME
+shells \- pathnames of valid login shells
+.SH DESCRIPTION
+.I /etc/shells
+is a text file which contains the full pathnames of valid login shells.
+This file is consulted by
+.BR chsh (1)
+and available to be queried by other programs.
+.PP
+Be aware that there are programs which consult this file to
+find out if a user is a normal user;
+for example,
+FTP daemons traditionally
+disallow access to users with shells not included in this file.
+.SH FILES
+.I /etc/shells
+.SH EXAMPLES
+.I /etc/shells
+may contain the following paths:
+.PP
+.in +4n
+.EX
+.I /bin/sh
+.I /bin/bash
+.I /bin/csh
+.EE
+.in
+.SH SEE ALSO
+.BR chsh (1),
+.BR getusershell (3),
+.BR pam_shells (8)
diff --git a/man5/slabinfo.5 b/man5/slabinfo.5
new file mode 100644
index 0000000..e27ff80
--- /dev/null
+++ b/man5/slabinfo.5
@@ -0,0 +1,220 @@
+.\" Copyright (c) 2001 Andreas Dilger (adilger@turbolinux.com)
+.\" and Copyright (c) 2017 Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH slabinfo 5 2023-02-05 "Linux man-pages 6.05.01"
+.SH NAME
+slabinfo \- kernel slab allocator statistics
+.SH SYNOPSIS
+.nf
+.B cat /proc/slabinfo
+.fi
+.SH DESCRIPTION
+Frequently used objects in the Linux kernel
+(buffer heads, inodes, dentries, etc.)
+have their own cache.
+The file
+.I /proc/slabinfo
+gives statistics on these caches.
+The following (edited) output shows an example of the
+contents of this file:
+.PP
+.EX
+$ \fBsudo cat /proc/slabinfo\fP
+slabinfo \- version: 2.1
+# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> ...
+sigqueue 100 100 160 25 1 : tunables 0 0 0 : slabdata 4 4 0
+sighand_cache 355 405 2112 15 8 : tunables 0 0 0 : slabdata 27 27 0
+kmalloc\-8192 96 96 8192 4 8 : tunables 0 0 0 : slabdata 24 24 0
+\&...
+.EE
+.PP
+The first line of output includes a version number,
+which allows an application that is reading the file to handle changes
+in the file format.
+(See VERSIONS, below.)
+The next line lists the names of the columns in the remaining lines.
+.PP
+Each of the remaining lines displays information about a specified cache.
+Following the cache name,
+the output shown in each line shows three components for each cache:
+.IP \[bu] 3
+statistics
+.IP \[bu]
+tunables
+.IP \[bu]
+slabdata
+.PP
+The statistics are as follows:
+.TP
+.I active_objs
+The number of objects that are currently active (i.e., in use).
+.TP
+.I num_objs
+The total number of allocated objects
+(i.e., objects that are both in use and not in use).
+.TP
+.I objsize
+The size of objects in this slab, in bytes.
+.TP
+.I objperslab
+The number of objects stored in each slab.
+.TP
+.I pagesperslab
+The number of pages allocated for each slab.
+.PP
+The
+.I tunables
+entries in each line show tunable parameters for the corresponding cache.
+When using the default SLUB allocator, there are no tunables, the
+.I /proc/slabinfo
+file is not writable, and the value 0 is shown in these fields.
+When using the older SLAB allocator,
+the tunables for a particular cache can be set by writing
+lines of the following form to
+.IR /proc/slabinfo :
+.PP
+.in +4n
+.EX
+# \fBecho \[aq]name limit batchcount sharedfactor\[aq] > /proc/slabinfo\fP
+.EE
+.in
+.PP
+Here,
+.I name
+is the cache name, and
+.IR limit ,
+.IR batchcount ,
+and
+.I sharedfactor
+are integers defining new values for the corresponding tunables.
+The
+.I limit
+value should be a positive value,
+.I batchcount
+should be a positive value that is less than or equal to
+.IR limit ,
+and
+.I sharedfactor
+should be nonnegative.
+If any of the specified values is invalid,
+the cache settings are left unchanged.
+.PP
+The
+.I tunables
+entries in each line contain the following fields:
+.TP
+.I limit
+The maximum number of objects that will be cached.
+.\" https://lwn.net/Articles/56360/
+.\" This is the limit on the number of free objects that can be stored
+.\" in the per-CPU free list for this slab cache.
+.TP
+.I batchcount
+On SMP systems, this specifies the number of objects to transfer at one time
+when refilling the available object list.
+.\" https://lwn.net/Articles/56360/
+.\" On SMP systems, when we refill the available object list, instead
+.\" of doing one object at a time, we do batch-count objects at a time.
+.TP
+.I sharedfactor
+[To be documented]
+.\"
+.PP
+The
+.I slabdata
+entries in each line contain the following fields:
+.TP
+.I active_slabs
+The number of active slabs.
+.TP
+.I nums_slabs
+The total number of slabs.
+.TP
+.I sharedavail
+[To be documented]
+.PP
+Note that because of object alignment and slab cache overhead,
+objects are not normally packed tightly into pages.
+Pages with even one in-use object are considered in-use and cannot be
+freed.
+.PP
+Kernels configured with
+.B CONFIG_DEBUG_SLAB
+will also have additional statistics fields in each line,
+and the first line of the file will contain the string "(statistics)".
+The statistics field include : the high water mark of active
+objects; the number of times objects have been allocated;
+the number of times the cache has grown (new pages added
+to this cache); the number of times the cache has been
+reaped (unused pages removed from this cache); and the
+number of times there was an error allocating new pages
+to this cache.
+.\"
+.\" SMP systems will also have "(SMP)" in the first line of
+.\" output, and will have two additional columns for each slab,
+.\" reporting the slab allocation policy for the CPU-local
+.\" cache (to reduce the need for inter-CPU synchronization
+.\" when allocating objects from the cache).
+.\" The first column is the per-CPU limit: the maximum number of objects that
+.\" will be cached for each CPU.
+.\" The second column is the
+.\" batchcount: the maximum number of free objects in the
+.\" global cache that will be transferred to the per-CPU cache
+.\" if it is empty, or the number of objects to be returned
+.\" to the global cache if the per-CPU cache is full.
+.\"
+.\" If both slab cache statistics and SMP are defined, there
+.\" will be four additional columns, reporting the per-CPU
+.\" cache statistics.
+.\" The first two are the per-CPU cache
+.\" allocation hit and miss counts: the number of times an
+.\" object was or was not available in the per-CPU cache
+.\" for allocation.
+.\" The next two are the per-CPU cache free
+.\" hit and miss counts: the number of times a freed object
+.\" could or could not fit within the per-CPU cache limit,
+.\" before flushing objects to the global cache.
+.SH VERSIONS
+The
+.I /proc/slabinfo
+file first appeared in Linux 2.1.23.
+The file is versioned,
+and over time there have been a number of versions with different layouts:
+.TP
+1.0
+Present throughout the Linux 2.2.x kernel series.
+.TP
+1.1
+Present in the Linux 2.4.x kernel series.
+.\" First appeared in Linux 2.4.0-test3
+.TP
+1.2
+A format that was briefly present in the Linux 2.5 development series.
+.\" from Linux 2.5.45 to Linux 2.5.70
+.TP
+2.0
+Present in Linux 2.6.x kernels up to and including Linux 2.6.9.
+.\" First appeared in Linux 2.5.71
+.TP
+2.1
+The current format, which first appeared in Linux 2.6.10.
+.SH NOTES
+Only root can read and (if the kernel was configured with
+.BR CONFIG_SLAB )
+write the
+.I /proc/slabinfo
+file.
+.PP
+The total amount of memory allocated to the SLAB/SLUB cache is shown in the
+.I Slab
+field of
+.IR /proc/meminfo .
+.SH SEE ALSO
+.BR slabtop (1)
+.PP
+The kernel source file
+.I Documentation/vm/slub.txt
+and
+.IR tools/vm/slabinfo.c .
diff --git a/man5/sysfs.5 b/man5/sysfs.5
new file mode 100644
index 0000000..2edd582
--- /dev/null
+++ b/man5/sysfs.5
@@ -0,0 +1,275 @@
+.\" Copyright (c) 2017 by Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH sysfs 5 2023-03-30 "Linux man-pages 6.05.01"
+.SH NAME
+sysfs \- a filesystem for exporting kernel objects
+.SH DESCRIPTION
+The
+.B sysfs
+filesystem is a pseudo-filesystem which provides an interface to
+kernel data structures.
+(More precisely, the files and directories in
+.B sysfs
+provide a view of the
+.I kobject
+structures defined internally within the kernel.)
+The files under
+.B sysfs
+provide information about devices, kernel modules, filesystems,
+and other kernel components.
+.PP
+The
+.B sysfs
+filesystem is commonly mounted at
+.IR /sys .
+Typically, it is mounted automatically by the system,
+but it can also be mounted manually using a command such as:
+.PP
+.in +4n
+.EX
+mount \-t sysfs sysfs /sys
+.EE
+.in
+.PP
+Many of the files in the
+.B sysfs
+filesystem are read-only,
+but some files are writable, allowing kernel variables to be changed.
+To avoid redundancy,
+symbolic links are heavily used to connect entries across the filesystem tree.
+.\"
+.SS Files and directories
+The following list describes some of the files and directories under the
+.I /sys
+hierarchy.
+.TP
+.I /sys/block
+This subdirectory contains one symbolic link for each block device
+that has been discovered on the system.
+The symbolic links point to corresponding directories under
+.IR /sys/devices .
+.TP
+.I /sys/bus
+This directory contains one subdirectory for each of the bus types
+in the kernel.
+Inside each of these directories are two subdirectories:
+.RS
+.TP
+.I devices
+This subdirectory contains symbolic links to entries in
+.I /sys/devices
+that correspond to the devices discovered on this bus.
+.TP
+.I drivers
+This subdirectory contains one subdirectory for each device driver
+that is loaded on this bus.
+.RE
+.TP
+.I /sys/class
+This subdirectory contains a single layer of further subdirectories
+for each of the device classes that have been registered on the system
+(e.g., terminals, network devices, block devices, graphics devices,
+sound devices, and so on).
+Inside each of these subdirectories are symbolic links for each of the
+devices in this class.
+These symbolic links refer to entries in the
+.I /sys/devices
+directory.
+.TP
+.I /sys/class/net
+Each of the entries in this directory is a symbolic link
+representing one of the real or virtual networking devices
+that are visible in the network namespace of the process
+that is accessing the directory.
+Each of these symbolic links refers to entries in the
+.I /sys/devices
+directory.
+.TP
+.I /sys/dev
+This directory contains two subdirectories
+.I block/
+and
+.IR char/ ,
+corresponding, respectively,
+to the block and character devices on the system.
+Inside each of these subdirectories are symbolic links with names of the form
+.IR major-ID : minor-ID ,
+where the ID values correspond to the major and minor ID of a specific device.
+Each symbolic link points to the
+.B sysfs
+directory for a device.
+The symbolic links inside
+.I /sys/dev
+thus provide an easy way to look up the
+.B sysfs
+interface using the device IDs returned by a call to
+.BR stat (2)
+(or similar).
+.IP
+The following shell session shows an example from
+.IR /sys/dev :
+.IP
+.in +4n
+.EX
+$ \fBstat \-c "%t %T" /dev/null\fP
+1 3
+$ \fBreadlink /sys/dev/char/1\e:3\fP
+\&../../devices/virtual/mem/null
+$ \fBls \-Fd /sys/devices/virtual/mem/null\fP
+/sys/devices/virtual/mem/null/
+$ \fBls \-d1 /sys/devices/virtual/mem/null/*\fP
+/sys/devices/virtual/mem/null/dev
+/sys/devices/virtual/mem/null/power/
+/sys/devices/virtual/mem/null/subsystem@
+/sys/devices/virtual/mem/null/uevent
+.EE
+.in
+.TP
+.I /sys/devices
+This is a directory that contains a filesystem representation of
+the kernel device tree,
+which is a hierarchy of
+.I device
+structures within the kernel.
+.TP
+.I /sys/firmware
+This subdirectory contains interfaces for viewing and manipulating
+firmware-specific objects and attributes.
+.TP
+.I /sys/fs
+This directory contains subdirectories for some filesystems.
+A filesystem will have a subdirectory here only if it chose
+to explicitly create the subdirectory.
+.TP
+.I /sys/fs/cgroup
+This directory conventionally is used as a mount point for a
+.BR tmpfs (5)
+filesystem containing mount points for
+.BR cgroups (7)
+filesystems.
+.TP
+.I /sys/fs/smackfs
+The directory contains configuration files for the SMACK LSM.
+See the kernel source file
+.IR Documentation/admin\-guide/LSM/Smack.rst .
+.TP
+.I /sys/hypervisor
+[To be documented]
+.TP
+.I /sys/kernel
+This subdirectory contains various files and subdirectories that provide
+information about the running kernel.
+.TP
+.I /sys/kernel/cgroup/
+For information about the files in this directory, see
+.BR cgroups (7).
+.TP
+.I /sys/kernel/debug/tracing
+Mount point for the
+.I tracefs
+filesystem used by the kernel's
+.I ftrace
+facility.
+(For information on
+.IR ftrace ,
+see the kernel source file
+.IR Documentation/trace/ftrace.txt .)
+.TP
+.I /sys/kernel/mm
+This subdirectory contains various files and subdirectories that provide
+information about the kernel's memory management subsystem.
+.TP
+.I /sys/kernel/mm/hugepages
+This subdirectory contains one subdirectory for each of the
+huge page sizes that the system supports.
+The subdirectory name indicates the huge page size (e.g.,
+.IR hugepages\-2048kB ).
+Within each of these subdirectories is a set of files
+that can be used to view and (in some cases) change settings
+associated with that huge page size.
+For further information, see the kernel source file
+.IR Documentation/admin\-guide/mm/hugetlbpage.rst .
+.TP
+.I /sys/module
+This subdirectory contains one subdirectory
+for each module that is loaded into the kernel.
+The name of each directory is the name of the module.
+In each of the subdirectories, there may be following files:
+.RS
+.TP
+.I coresize
+[to be documented]
+.TP
+.I initsize
+[to be documented]
+.TP
+.I initstate
+[to be documented]
+.TP
+.I refcnt
+[to be documented]
+.TP
+.I srcversion
+[to be documented]
+.TP
+.I taint
+[to be documented]
+.TP
+.I uevent
+[to be documented]
+.TP
+.I version
+[to be documented]
+.RE
+.IP
+In each of the subdirectories, there may be following subdirectories:
+.RS
+.TP
+.I drivers
+[To be documented]
+.TP
+.I holders
+[To be documented]
+.TP
+.I notes
+[To be documented]
+.TP
+.I parameters
+This directory contains one file for each module parameter,
+with each file containing the value of the corresponding parameter.
+Some of these files are writable, allowing the
+.TP
+.I sections
+This subdirectories contains files with information about module sections.
+This information is mainly used for debugging.
+.TP
+.I
+[To be documented]
+.RE
+.TP
+.I /sys/power
+[To be documented]
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.6.0.
+.SH NOTES
+This manual page is incomplete, possibly inaccurate, and is the kind
+of thing that needs to be updated very often.
+.SH SEE ALSO
+.BR proc (5),
+.BR udev (7)
+.PP
+P.\& Mochel. (2005).
+.IR "The sysfs filesystem" .
+Proceedings of the 2005 Ottawa Linux Symposium.
+.\" https://www.kernel.org/pub/linux/kernel/people/mochel/doc/papers/ols-2005/mochel.pdf
+.PP
+The kernel source file
+.I Documentation/filesystems/sysfs.txt
+and various other files in
+.I Documentation/ABI
+and
+.I Documentation/*/sysfs.txt
diff --git a/man5/termcap.5 b/man5/termcap.5
new file mode 100644
index 0000000..880c957
--- /dev/null
+++ b/man5/termcap.5
@@ -0,0 +1,466 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified formatting Sat Jul 24 17:13:38 1993, Rik Faith (faith@cs.unc.edu)
+.\" Modified (extensions and corrections)
+.\" Sun May 1 14:21:25 MET DST 1994 Michael Haardt
+.\" If mistakes in the capabilities are found, please send a bug report to:
+.\" michael@moria.de
+.\" Modified Mon Oct 21 17:47:19 EDT 1996 by Eric S. Raymond (esr@thyrsus.com)
+.TH termcap 5 2023-03-08 "Linux man-pages 6.05.01"
+.SH NAME
+termcap \- terminal capability database
+.SH DESCRIPTION
+The termcap database is an obsolete facility for describing the
+capabilities of character-cell terminals and printers.
+It is retained only for compatibility with old programs;
+new programs should use the
+.BR terminfo (5)
+database and associated libraries.
+.PP
+.I /etc/termcap
+is an ASCII file (the database master) that lists the capabilities of
+many different types of terminals.
+Programs can read termcap to find
+the particular escape codes needed to control the visual attributes of
+the terminal actually in use.
+(Other aspects of the terminal are
+handled by
+.BR stty (1).)
+The termcap database is indexed on the
+.B TERM
+environment variable.
+.PP
+Termcap entries must be defined on a single logical line, with \[aq]\e\[aq]
+used to suppress the newline.
+Fields are separated by \[aq]:\[aq].
+The first field of each entry starts at the left-hand margin,
+and contains a list of names for the terminal, separated by \[aq]|\[aq].
+.PP
+The first subfield may (in BSD termcap entries from 4.3BSD and
+earlier) contain a short name consisting of two characters.
+This short name may consist of capital or small letters.
+In 4.4BSD, termcap entries this field is omitted.
+.PP
+The second subfield (first, in the newer 4.4BSD format) contains the
+name used by the environment variable
+.BR TERM .
+It should be spelled in lowercase letters.
+Selectable hardware capabilities should be marked
+by appending a hyphen and a suffix to this name.
+See below for an example.
+Usual suffixes are w (more than 80 characters wide), am
+(automatic margins), nam (no automatic margins), and rv (reverse video
+display).
+The third subfield contains a long and descriptive name for
+this termcap entry.
+.PP
+Subsequent fields contain the terminal capabilities; any continued
+capability lines must be indented one tab from the left margin.
+.PP
+Although there is no defined order, it is suggested to write first
+boolean, then numeric, and then string capabilities, each sorted
+alphabetically without looking at lower or upper spelling.
+Capabilities of similar functions can be written in one line.
+.PP
+Example for:
+.nf
+.PP
+Head line: vt|vt101|DEC VT 101 terminal in 80 character mode:\e
+Head line: Vt|vt101-w|DEC VT 101 terminal in (wide) 132 character mode:\e
+Boolean: :bs:\e
+Numeric: :co#80:\e
+String: :sr=\eE[H:\e
+.fi
+.SS Boolean capabilities
+.nf
+5i Printer will not echo on screen
+am Automatic margins which means automatic line wrap
+bs Control-H (8 dec.) performs a backspace
+bw Backspace on left margin wraps to previous line and right margin
+da Display retained above screen
+db Display retained below screen
+eo A space erases all characters at cursor position
+es Escape sequences and special characters work in status line
+gn Generic device
+hc This is a hardcopy terminal
+HC The cursor is hard to see when not on bottom line
+hs Has a status line
+hz Hazeltine bug, the terminal can not print tilde characters
+in Terminal inserts null bytes, not spaces, to fill whitespace
+km Terminal has a meta key
+mi Cursor movement works in insert mode
+ms Cursor movement works in standout/underline mode
+NP No pad character
+NR ti does not reverse te
+nx No padding, must use XON/XOFF
+os Terminal can overstrike
+ul Terminal underlines although it can not overstrike
+xb Beehive glitch, f1 sends ESCAPE, f2 sends \fB\[ha]C\fP
+xn Newline/wraparound glitch
+xo Terminal uses xon/xoff protocol
+xs Text typed over standout text will be displayed in standout
+xt Teleray glitch, destructive tabs and odd standout mode
+.fi
+.SS Numeric capabilities
+.nf
+co Number of columns
+dB Delay in milliseconds for backspace on hardcopy terminals
+dC Delay in milliseconds for carriage return on hardcopy terminals
+dF Delay in milliseconds for form feed on hardcopy terminals
+dN Delay in milliseconds for new line on hardcopy terminals
+dT Delay in milliseconds for tabulator stop on hardcopy terminals
+dV Delay in milliseconds for vertical tabulator stop on
+ hardcopy terminals
+it Difference between tab positions
+lh Height of soft labels
+lm Lines of memory
+lw Width of soft labels
+li Number of lines
+Nl Number of soft labels
+pb Lowest baud rate which needs padding
+sg Standout glitch
+ug Underline glitch
+vt virtual terminal number
+ws Width of status line if different from screen width
+.fi
+.SS String capabilities
+.nf
+!1 shifted save key
+!2 shifted suspend key
+!3 shifted undo key
+#1 shifted help key
+#2 shifted home key
+#3 shifted input key
+#4 shifted cursor left key
+%0 redo key
+%1 help key
+%2 mark key
+%3 message key
+%4 move key
+%5 next-object key
+%6 open key
+%7 options key
+%8 previous-object key
+%9 print key
+%a shifted message key
+%b shifted move key
+%c shifted next key
+%d shifted options key
+%e shifted previous key
+%f shifted print key
+%g shifted redo key
+%h shifted replace key
+%i shifted cursor right key
+%j shifted resume key
+&0 shifted cancel key
+&1 reference key
+&2 refresh key
+&3 replace key
+&4 restart key
+&5 resume key
+&6 save key
+&7 suspend key
+&8 undo key
+&9 shifted begin key
+*0 shifted find key
+*1 shifted command key
+*2 shifted copy key
+*3 shifted create key
+*4 shifted delete character
+*5 shifted delete line
+*6 select key
+*7 shifted end key
+*8 shifted clear line key
+*9 shifted exit key
+@0 find key
+@1 begin key
+@2 cancel key
+@3 close key
+@4 command key
+@5 copy key
+@6 create key
+@7 end key
+@8 enter/send key
+@9 exit key
+al Insert one line
+AL Insert %1 lines
+ac Pairs of block graphic characters to map alternate character set
+ae End alternative character set
+as Start alternative character set for block graphic characters
+bc Backspace, if not \fB\[ha]H\fP
+bl Audio bell
+bt Move to previous tab stop
+cb Clear from beginning of line to cursor
+cc Dummy command character
+cd Clear to end of screen
+ce Clear to end of line
+ch Move cursor horizontally only to column %1
+cl Clear screen and cursor home
+cm Cursor move to row %1 and column %2 (on screen)
+CM Move cursor to row %1 and column %2 (in memory)
+cr Carriage return
+cs Scroll region from line %1 to %2
+ct Clear tabs
+cv Move cursor vertically only to line %1
+dc Delete one character
+DC Delete %1 characters
+dl Delete one line
+DL Delete %1 lines
+dm Begin delete mode
+do Cursor down one line
+DO Cursor down #1 lines
+ds Disable status line
+eA Enable alternate character set
+ec Erase %1 characters starting at cursor
+ed End delete mode
+ei End insert mode
+ff Formfeed character on hardcopy terminals
+fs Return character to its position before going to status line
+F1 The string sent by function key f11
+F2 The string sent by function key f12
+F3 The string sent by function key f13
+\&... \&...
+F9 The string sent by function key f19
+FA The string sent by function key f20
+FB The string sent by function key f21
+\&... \&...
+FZ The string sent by function key f45
+Fa The string sent by function key f46
+Fb The string sent by function key f47
+\&... \&...
+Fr The string sent by function key f63
+hd Move cursor a half line down
+ho Cursor home
+hu Move cursor a half line up
+i1 Initialization string 1 at login
+i3 Initialization string 3 at login
+is Initialization string 2 at login
+ic Insert one character
+IC Insert %1 characters
+if Initialization file
+im Begin insert mode
+ip Insert pad time and needed special characters after insert
+iP Initialization program
+K1 upper left key on keypad
+K2 center key on keypad
+K3 upper right key on keypad
+K4 bottom left key on keypad
+K5 bottom right key on keypad
+k0 Function key 0
+k1 Function key 1
+k2 Function key 2
+k3 Function key 3
+k4 Function key 4
+k5 Function key 5
+k6 Function key 6
+k7 Function key 7
+k8 Function key 8
+k9 Function key 9
+k; Function key 10
+ka Clear all tabs key
+kA Insert line key
+kb Backspace key
+kB Back tab stop
+kC Clear screen key
+kd Cursor down key
+kD Key for delete character under cursor
+ke turn keypad off
+kE Key for clear to end of line
+kF Key for scrolling forward/down
+kh Cursor home key
+kH Cursor hown down key
+kI Insert character/Insert mode key
+kl Cursor left key
+kL Key for delete line
+kM Key for exit insert mode
+kN Key for next page
+kP Key for previous page
+kr Cursor right key
+kR Key for scrolling backward/up
+ks Turn keypad on
+kS Clear to end of screen key
+kt Clear this tab key
+kT Set tab here key
+ku Cursor up key
+l0 Label of zeroth function key, if not f0
+l1 Label of first function key, if not f1
+l2 Label of first function key, if not f2
+\&... \&...
+la Label of tenth function key, if not f10
+le Cursor left one character
+ll Move cursor to lower left corner
+LE Cursor left %1 characters
+LF Turn soft labels off
+LO Turn soft labels on
+mb Start blinking
+MC Clear soft margins
+md Start bold mode
+me End all mode like so, us, mb, md, and mr
+mh Start half bright mode
+mk Dark mode (Characters invisible)
+ML Set left soft margin
+mm Put terminal in meta mode
+mo Put terminal out of meta mode
+mp Turn on protected attribute
+mr Start reverse mode
+MR Set right soft margin
+nd Cursor right one character
+nw Carriage return command
+pc Padding character
+pf Turn printer off
+pk Program key %1 to send string %2 as if typed by user
+pl Program key %1 to execute string %2 in local mode
+pn Program soft label %1 to show string %2
+po Turn the printer on
+pO Turn the printer on for %1 (<256) bytes
+ps Print screen contents on printer
+px Program key %1 to send string %2 to computer
+r1 Reset string 1 to set terminal to sane modes
+r2 Reset string 2 to set terminal to sane modes
+r3 Reset string 3 to set terminal to sane modes
+RA disable automatic margins
+rc Restore saved cursor position
+rf Reset string filename
+RF Request for input from terminal
+RI Cursor right %1 characters
+rp Repeat character %1 for %2 times
+rP Padding after character sent in replace mode
+rs Reset string
+RX Turn off XON/XOFF flow control
+sa Set %1 %2 %3 %4 %5 %6 %7 %8 %9 attributes
+SA enable automatic margins
+sc Save cursor position
+se End standout mode
+sf Normal scroll one line
+SF Normal scroll %1 lines
+so Start standout mode
+sr Reverse scroll
+SR scroll back %1 lines
+st Set tabulator stop in all rows at current column
+SX Turn on XON/XOFF flow control
+ta move to next hardware tab
+tc Read in terminal description from another entry
+te End program that uses cursor motion
+ti Begin program that uses cursor motion
+ts Move cursor to column %1 of status line
+uc Underline character under cursor and move cursor right
+ue End underlining
+up Cursor up one line
+UP Cursor up %1 lines
+us Start underlining
+vb Visible bell
+ve Normal cursor visible
+vi Cursor invisible
+vs Standout cursor
+wi Set window from line %1 to %2 and column %3 to %4
+XF XOFF character if not \fB\[ha]S\fP
+.fi
+.PP
+There are several ways of defining the control codes for string capabilities:
+.PP
+Every normal character represents itself,
+except \[aq]\[ha]\[aq], \[aq]\e\[aq], and \[aq]%\[aq].
+.PP
+A \fB\[ha]x\fP means Control-x.
+Control-A equals 1 decimal.
+.PP
+\ex means a special code.
+x can be one of the following characters:
+.RS
+E Escape (27)
+.br
+n Linefeed (10)
+.br
+r Carriage return (13)
+.br
+t Tabulation (9)
+.br
+b Backspace (8)
+.br
+f Form feed (12)
+.br
+0 Null character.
+A \exxx specifies the octal character xxx.
+.RE
+.TP
+i
+Increments parameters by one.
+.TP
+r
+Single parameter capability
+.TP
++
+Add value of next character to this parameter and do binary output
+.TP
+2
+Do ASCII output of this parameter with a field with of 2
+.TP
+d
+Do ASCII output of this parameter with a field with of 3
+.TP
+%
+Print a \[aq]%\[aq]
+.PP
+If you use binary output,
+then you should avoid the null character (\[aq]\e0\[aq])
+because it terminates the string.
+You should reset tabulator expansion
+if a tabulator can be the binary output of a parameter.
+.TP
+Warning:
+The above metacharacters for parameters may be wrong: they document Minix
+termcap which may not be compatible with Linux termcap.
+.PP
+The block graphic characters can be specified by three string capabilities:
+.TP
+as
+start the alternative charset
+.TP
+ae
+end the alternative charset
+.TP
+ac
+pairs of characters.
+The first character is the name of the block graphic
+symbol and the second characters is its definition.
+.PP
+The following names are available:
+.PP
+.nf
++ right arrow (>)
+, left arrow (<)
+\&. down arrow (v)
+0 full square (#)
+I lantern (#)
+- upper arrow (\[ha])
+\&' rhombus (+)
+a chess board (:)
+f degree (')
+g plus-minus (#)
+h square (#)
+j right bottom corner (+)
+k right upper corner (+)
+l left upper corner (+)
+m left bottom corner (+)
+n cross (+)
+o upper horizontal line (-)
+q middle horizontal line (-)
+s bottom horizontal line (_)
+t left tee (+)
+u right tee (+)
+v bottom tee (+)
+w normal tee (+)
+x vertical line (|)
+\[ti] paragraph (???)
+.fi
+.PP
+The values in parentheses are suggested defaults which are used by the
+.I curses
+library, if the capabilities are missing.
+.SH SEE ALSO
+.BR ncurses (3),
+.BR termcap (3),
+.BR terminfo (5)
diff --git a/man5/tmpfs.5 b/man5/tmpfs.5
new file mode 100644
index 0000000..8e4d063
--- /dev/null
+++ b/man5/tmpfs.5
@@ -0,0 +1,271 @@
+.\" Copyright (c) 2016 by Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH tmpfs 5 2023-07-28 "Linux man-pages 6.05.01"
+.SH NAME
+tmpfs \- a virtual memory filesystem
+.SH DESCRIPTION
+The
+.B tmpfs
+facility allows the creation of filesystems whose contents reside
+in virtual memory.
+Since the files on such filesystems typically reside in RAM,
+file access is extremely fast.
+.PP
+The filesystem is automatically created when mounting
+a filesystem with the type
+.B tmpfs
+via a command such as the following:
+.PP
+.in +4n
+.EX
+$ sudo mount \-t tmpfs \-o size=10M tmpfs /mnt/mytmpfs
+.EE
+.in
+.PP
+A
+.B tmpfs
+filesystem has the following properties:
+.IP \[bu] 3
+The filesystem can employ swap space when physical memory pressure
+demands it.
+.IP \[bu]
+The filesystem consumes only as much physical memory and swap space
+as is required to store the current contents of the filesystem.
+.IP \[bu]
+During a remount operation
+.RI ( "mount\ \-o\ remount" ),
+the filesystem size can be changed
+(without losing the existing contents of the filesystem).
+.PP
+If a
+.B tmpfs
+filesystem is unmounted, its contents are discarded (lost).
+.\" See mm/shmem.c:shmem_parse_options for options it supports.
+.SS Mount options
+The
+.B tmpfs
+filesystem supports the following mount options:
+.TP
+.BR size "=\fIbytes\fP"
+Specify an upper limit on the size of the filesystem.
+The size is given in bytes, and rounded up to entire pages.
+.IP
+The size may have a
+.BR k ,
+.BR m ,
+or
+.B g
+suffix for Ki, Mi, Gi (binary kilo (kibi), binary mega (mebi), and binary giga
+(gibi)).
+.IP
+The size may also have a % suffix to limit this instance to a percentage of
+physical RAM.
+.IP
+The default, when neither
+.B size
+nor
+.B nr_blocks
+is specified, is
+.IR size=50% .
+.TP
+.BR nr_blocks "=\fIblocks\fP"
+The same as
+.BR size ,
+but in blocks of
+.BR PAGE_CACHE_SIZE .
+.IP
+Blocks may be specified with
+.BR k ,
+.BR m ,
+or
+.B g
+suffixes like
+.BR size ,
+but not a % suffix.
+.TP
+.BR nr_inodes "=\fIinodes\fP"
+The maximum number of inodes for this instance.
+The default is half of the number of your physical RAM pages, or (on a
+machine with highmem) the number of lowmem RAM pages, whichever is smaller.
+.IP
+Inodes may be specified with
+.BR k ,
+.BR m ,
+or
+.B g
+suffixes like
+.BR size ,
+but not a % suffix.
+.TP
+.BR mode "=\fImode\fP"
+Set initial permissions of the root directory.
+.TP
+.BR gid "=\fIgid\fP (since Linux 2.5.7)"
+.\" Technically this is also in some version of Linux 2.4.
+.\" commit 099445b489625b80b1d6687c9b6072dbeaca4096
+Set the initial group ID of the root directory.
+.TP
+.BR uid "=\fIuid\fP (since Linux 2.5.7)"
+.\" Technically this is also in some version of Linux 2.4.
+.\" commit 099445b489625b80b1d6687c9b6072dbeaca4096
+Set the initial user ID of the root directory.
+.TP
+.BR huge "=\fIhuge_option\fR (since Linux 4.7.0)"
+.\" commit 5a6e75f8110c97e2a5488894d4e922187e6cb343
+Set the huge table memory allocation policy for all files in this instance (if
+.B CONFIG_TRANSPARENT_HUGEPAGE
+is enabled).
+.IP
+The
+.I huge_option
+value is one of the following:
+.RS
+.TP
+.B never
+Do not allocate huge pages.
+This is the default.
+.TP
+.B always
+Attempt to allocate huge pages every time a new page is needed.
+.TP
+.B within_size
+Only allocate huge page if it will be fully within
+.IR i_size .
+Also respect
+.BR fadvise (2)
+and
+.BR madvise (2)
+hints
+.TP
+.B advise
+Only allocate huge pages if requested with
+.BR fadvise (2)
+or
+.BR madvise (2).
+.TP
+.B deny
+For use in emergencies, to force the huge option off from all mounts.
+.TP
+.B force
+Force the huge option on for all mounts; useful for testing.
+.RE
+.TP
+.BR mpol "=\fImpol_option\fR (since Linux 2.6.15)"
+.\" commit 7339ff8302fd70aabf5f1ae26e0c4905fa74a495
+Set the NUMA memory allocation policy for all files in this instance (if
+.B CONFIG_NUMA
+is enabled).
+.IP
+The
+.I mpol_option
+value is one of the following:
+.RS
+.TP
+.B default
+Use the process allocation policy (see
+.BR set_mempolicy (2)).
+.TP
+.BR prefer ":\fInode\fP"
+Preferably allocate memory from the given
+.IR node .
+.TP
+.BR bind ":\fInodelist\fP"
+Allocate memory only from nodes in
+.IR nodelist .
+.TP
+.B interleave
+Allocate from each node in turn.
+.TP
+.BR interleave ":\fInodelist\fP"
+Allocate from each node of
+.I in
+turn.
+.TP
+.B local
+Preferably allocate memory from the local node.
+.RE
+.IP
+In the above,
+.I nodelist
+is a comma-separated list of decimal numbers and ranges
+that specify NUMA nodes.
+A range is a pair of hyphen-separated decimal numbers,
+the smallest and largest node numbers in the range.
+For example,
+.IR mpol=bind:0\-3,5,7,9\-15 .
+.SH VERSIONS
+The
+.B tmpfs
+facility was added in Linux 2.4, as a successor to the older
+.B ramfs
+facility, which did not provide limit checking or
+allow for the use of swap space.
+.SH NOTES
+In order for user-space tools and applications to create
+.B tmpfs
+filesystems, the kernel must be configured with the
+.B CONFIG_TMPFS
+option.
+.PP
+The
+.B tmpfs
+filesystem supports extended attributes (see
+.BR xattr (7)),
+but
+.I user
+extended attributes are not permitted.
+.PP
+An internal shared memory filesystem is used for
+System V shared memory
+.RB ( shmget (2))
+and shared anonymous mappings
+.RB ( mmap (2)
+with the
+.B MAP_SHARED
+and
+.B MAP_ANONYMOUS
+flags).
+This filesystem is available regardless of whether
+the kernel was configured with the
+.B CONFIG_TMPFS
+option.
+.PP
+A
+.B tmpfs
+filesystem mounted at
+.I /dev/shm
+is used for the implementation of POSIX shared memory
+.RB ( shm_overview (7))
+and POSIX semaphores
+.RB ( sem_overview (7)).
+.PP
+The amount of memory consumed by all
+.B tmpfs
+filesystems is shown in the
+.I Shmem
+field of
+.I /proc/meminfo
+and in the
+.I shared
+field displayed by
+.BR free (1).
+.PP
+The
+.B tmpfs
+facility was formerly called
+.BR shmfs .
+.SH SEE ALSO
+.BR df (1),
+.BR du (1),
+.BR memfd_create (2),
+.BR mmap (2),
+.BR set_mempolicy (2),
+.BR shm_open (3),
+.BR mount (8)
+.PP
+The kernel source files
+.I Documentation/filesystems/tmpfs.txt
+and
+.IR Documentation/admin\-guide/mm/transhuge.rst .
diff --git a/man5/ttytype.5 b/man5/ttytype.5
new file mode 100644
index 0000000..94030e8
--- /dev/null
+++ b/man5/ttytype.5
@@ -0,0 +1,56 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified Sat Jul 24 17:17:50 1993 by Rik Faith <faith@cs.unc.edu>
+.\" Modified Thu Oct 19 21:25:21 MET 1995 by Martin Schulze <joey@infodrom.north.de>
+.\" Modified Mon Oct 21 17:47:19 EDT 1996 by Eric S. Raymond
+.\" <esr@thyrsus.com>xk
+.TH ttytype 5 2023-01-22 "Linux man-pages 6.05.01"
+.SH NAME
+ttytype \- terminal device to default terminal type mapping
+.SH DESCRIPTION
+The
+.I /etc/ttytype
+file associates
+.BR termcap (5)
+and
+.BR terminfo (5)
+terminal type names
+with tty lines.
+Each line consists of a terminal type, followed by
+whitespace, followed by a tty name (a device name without the
+.I /dev/
+prefix).
+.PP
+This association is used by the program
+.BR tset (1)
+to set the environment variable
+.B TERM
+to the default terminal name for
+the user's current tty.
+.PP
+This facility was designed for a traditional time-sharing environment
+featuring character-cell terminals hardwired to a UNIX minicomputer.
+It is little used on modern workstation and personal UNIX systems.
+.SH FILES
+.TP
+.I /etc/ttytype
+the tty definitions file.
+.SH EXAMPLES
+A typical
+.I /etc/ttytype
+is:
+.PP
+.in +4n
+.EX
+con80x25 tty1
+vt320 ttys0
+.EE
+.in
+.SH SEE ALSO
+.BR termcap (5),
+.BR terminfo (5),
+.BR agetty (8),
+.BR mingetty (8)
diff --git a/man5/tzfile.5 b/man5/tzfile.5
new file mode 100644
index 0000000..59d9f6b
--- /dev/null
+++ b/man5/tzfile.5
@@ -0,0 +1,496 @@
+.\" This file is in the public domain, so clarified as of
+.\" 1996-06-05 by Arthur David Olson.
+.TH tzfile 5 "" "Time Zone Database"
+.SH NAME
+tzfile \- timezone information
+.SH DESCRIPTION
+.ie '\(lq'' .ds lq \&"\"
+.el .ds lq \(lq\"
+.ie '\(rq'' .ds rq \&"\"
+.el .ds rq \(rq\"
+.de q
+\\$3\*(lq\\$1\*(rq\\$2
+..
+.ie \n(.g .ds - \f(CR-\fP
+.el .ds - \-
+The timezone information files used by
+.BR tzset (3)
+are typically found under a directory with a name like
+.IR /usr/share/zoneinfo .
+These files use the format described in Internet RFC 8536.
+Each file is a sequence of 8-bit bytes.
+In a file, a binary integer is represented by a sequence of one or
+more bytes in network order (bigendian, or high-order byte first),
+with all bits significant,
+a signed binary integer is represented using two's complement,
+and a boolean is represented by a one-byte binary integer that is
+either 0 (false) or 1 (true).
+The format begins with a 44-byte header containing the following fields:
+.IP * 2
+The magic four-byte ASCII sequence
+.q "TZif"
+identifies the file as a timezone information file.
+.IP *
+A byte identifying the version of the file's format
+(as of 2021, either an ASCII NUL,
+.q "2",
+.q "3",
+or
+.q "4" ).
+.IP *
+Fifteen bytes containing zeros reserved for future use.
+.IP *
+Six four-byte integer values, in the following order:
+.RS
+.TP
+.B tzh_ttisutcnt
+The number of UT/local indicators stored in the file.
+(UT is Universal Time.)
+.TP
+.B tzh_ttisstdcnt
+The number of standard/wall indicators stored in the file.
+.TP
+.B tzh_leapcnt
+The number of leap seconds for which data entries are stored in the file.
+.TP
+.B tzh_timecnt
+The number of transition times for which data entries are stored
+in the file.
+.TP
+.B tzh_typecnt
+The number of local time types for which data entries are stored
+in the file (must not be zero).
+.TP
+.B tzh_charcnt
+The number of bytes of time zone abbreviation strings
+stored in the file.
+.RE
+.PP
+The above header is followed by the following fields, whose lengths
+depend on the contents of the header:
+.IP * 2
+.B tzh_timecnt
+four-byte signed integer values sorted in ascending order.
+These values are written in network byte order.
+Each is used as a transition time (as returned by
+.BR time (2))
+at which the rules for computing local time change.
+.IP *
+.B tzh_timecnt
+one-byte unsigned integer values;
+each one but the last tells which of the different types of local time types
+described in the file is associated with the time period
+starting with the same-indexed transition time
+and continuing up to but not including the next transition time.
+(The last time type is present only for consistency checking with the
+POSIX-style TZ string described below.)
+These values serve as indices into the next field.
+.IP *
+.B tzh_typecnt
+.B ttinfo
+entries, each defined as follows:
+.in +.5i
+.sp
+.nf
+.ta .5i +\w'unsigned char\0\0'u
+struct ttinfo {
+ int32_t tt_utoff;
+ unsigned char tt_isdst;
+ unsigned char tt_desigidx;
+};
+.in -.5i
+.fi
+.sp
+Each structure is written as a four-byte signed integer value for
+.BR tt_utoff ,
+in network byte order, followed by a one-byte boolean for
+.B tt_isdst
+and a one-byte value for
+.BR tt_desigidx .
+In each structure,
+.B tt_utoff
+gives the number of seconds to be added to UT,
+.B tt_isdst
+tells whether
+.B tm_isdst
+should be set by
+.BR localtime (3)
+and
+.B tt_desigidx
+serves as an index into the array of time zone abbreviation bytes
+that follow the
+.B ttinfo
+entries in the file; if the designated string is "\*-00", the
+.B ttinfo
+entry is a placeholder indicating that local time is unspecified.
+The
+.B tt_utoff
+value is never equal to \-2**31, to let 32-bit clients negate it without
+overflow.
+Also, in realistic applications
+.B tt_utoff
+is in the range [\-89999, 93599] (i.e., more than \-25 hours and less
+than 26 hours); this allows easy support by implementations that
+already support the POSIX-required range [\-24:59:59, 25:59:59].
+.IP *
+.B tzh_charcnt
+bytes that represent time zone designations,
+which are null-terminated byte strings, each indexed by the
+.B tt_desigidx
+values mentioned above.
+The byte strings can overlap if one is a suffix of the other.
+The encoding of these strings is not specified.
+.IP *
+.B tzh_leapcnt
+pairs of four-byte values, written in network byte order;
+the first value of each pair gives the nonnegative time
+(as returned by
+.BR time (2))
+at which a leap second occurs or at which the leap second table expires;
+the second is a signed integer specifying the correction, which is the
+.I total
+number of leap seconds to be applied during the time period
+starting at the given time.
+The pairs of values are sorted in strictly ascending order by time.
+Each pair denotes one leap second, either positive or negative,
+except that if the last pair has the same correction as the previous one,
+the last pair denotes the leap second table's expiration time.
+Each leap second is at the end of a UTC calendar month.
+The first leap second has a nonnegative occurrence time,
+and is a positive leap second if and only if its correction is positive;
+the correction for each leap second after the first differs
+from the previous leap second by either 1 for a positive leap second,
+or \-1 for a negative leap second.
+If the leap second table is empty, the leap-second correction is zero
+for all timestamps;
+otherwise, for timestamps before the first occurrence time,
+the leap-second correction is zero if the first pair's correction is 1 or \-1,
+and is unspecified otherwise (which can happen only in files
+truncated at the start).
+.IP *
+.B tzh_ttisstdcnt
+standard/wall indicators, each stored as a one-byte boolean;
+they tell whether the transition times associated with local time types
+were specified as standard time or local (wall clock) time.
+.IP *
+.B tzh_ttisutcnt
+UT/local indicators, each stored as a one-byte boolean;
+they tell whether the transition times associated with local time types
+were specified as UT or local time.
+If a UT/local indicator is set, the corresponding standard/wall indicator
+must also be set.
+.PP
+The standard/wall and UT/local indicators were designed for
+transforming a TZif file's transition times into transitions appropriate
+for another time zone specified via a POSIX-style TZ string that lacks rules.
+For example, when TZ="EET\*-2EEST" and there is no TZif file "EET\*-2EEST",
+the idea was to adapt the transition times from a TZif file with the
+well-known name "posixrules" that is present only for this purpose and
+is a copy of the file "Europe/Brussels", a file with a different UT offset.
+POSIX does not specify this obsolete transformational behavior,
+the default rules are installation-dependent, and no implementation
+is known to support this feature for timestamps past 2037,
+so users desiring (say) Greek time should instead specify
+TZ="Europe/Athens" for better historical coverage, falling back on
+TZ="EET\*-2EEST,M3.5.0/3,M10.5.0/4" if POSIX conformance is required
+and older timestamps need not be handled accurately.
+.PP
+The
+.BR localtime (3)
+function
+normally uses the first
+.B ttinfo
+structure in the file
+if either
+.B tzh_timecnt
+is zero or the time argument is less than the first transition time recorded
+in the file.
+.SS Version 2 format
+For version-2-format timezone files,
+the above header and data are followed by a second header and data,
+identical in format except that
+eight bytes are used for each transition time or leap second time.
+(Leap second counts remain four bytes.)
+After the second header and data comes a newline-enclosed,
+POSIX-TZ-environment-variable-style string for use in handling instants
+after the last transition time stored in the file
+or for all instants if the file has no transitions.
+The POSIX-style TZ string is empty (i.e., nothing between the newlines)
+if there is no POSIX-style representation for such instants.
+If nonempty, the POSIX-style TZ string must agree with the local time
+type after the last transition time if present in the eight-byte data;
+for example, given the string
+.q "WET0WEST,M3.5.0/1,M10.5.0"
+then if a last transition time is in July, the transition's local time
+type must specify a daylight-saving time abbreviated
+.q "WEST"
+that is one hour east of UT.
+Also, if there is at least one transition, time type 0 is associated
+with the time period from the indefinite past up to but not including
+the earliest transition time.
+.SS Version 3 format
+For version-3-format timezone files, the POSIX-TZ-style string may
+use two minor extensions to the POSIX TZ format, as described in
+.BR newtzset (3).
+First, the hours part of its transition times may be signed and range from
+\-167 through 167 instead of the POSIX-required unsigned values
+from 0 through 24.
+Second, DST is in effect all year if it starts
+January 1 at 00:00 and ends December 31 at 24:00 plus the difference
+between daylight saving and standard time.
+.SS Version 4 format
+For version-4-format TZif files,
+the first leap second record can have a correction that is neither
++1 nor \-1, to represent truncation of the TZif file at the start.
+Also, if two or more leap second transitions are present and the last
+entry's correction equals the previous one, the last entry
+denotes the expiration of the leap second table instead of a leap second;
+timestamps after this expiration are unreliable in that future
+releases will likely add leap second entries after the expiration, and
+the added leap seconds will change how post-expiration timestamps are treated.
+.SS Interoperability considerations
+Future changes to the format may append more data.
+.PP
+Version 1 files are considered a legacy format and
+should not be generated, as they do not support transition
+times after the year 2038.
+Readers that understand only Version 1 must ignore
+any data that extends beyond the calculated end of the version
+1 data block.
+.PP
+Other than version 1, writers should generate
+the lowest version number needed by a file's data.
+For example, a writer should generate a version 4 file
+only if its leap second table either expires or is truncated at the start.
+Likewise, a writer not generating a version 4 file
+should generate a version 3 file only if
+TZ string extensions are necessary to accurately
+model transition times.
+.PP
+The sequence of time changes defined by the version 1
+header and data block should be a contiguous sub-sequence
+of the time changes defined by the version 2+ header and data
+block, and by the footer.
+This guideline helps obsolescent version 1 readers
+agree with current readers about timestamps within the
+contiguous sub-sequence. It also lets writers not
+supporting obsolescent readers use a
+.B tzh_timecnt
+of zero
+in the version 1 data block to save space.
+.PP
+When a TZif file contains a leap second table expiration
+time, TZif readers should either refuse to process
+post-expiration timestamps, or process them as if the expiration
+time did not exist (possibly with an error indication).
+.PP
+Time zone designations should consist of at least three (3)
+and no more than six (6) ASCII characters from the set of
+alphanumerics,
+.q "\*-",
+and
+.q "+".
+This is for compatibility with POSIX requirements for
+time zone abbreviations.
+.PP
+When reading a version 2 or higher file, readers
+should ignore the version 1 header and data block except for
+the purpose of skipping over them.
+.PP
+Readers should calculate the total lengths of the
+headers and data blocks and check that they all fit within
+the actual file size, as part of a validity check for the file.
+.PP
+When a positive leap second occurs, readers should append an extra
+second to the local minute containing the second just before the leap
+second. If this occurs when the UTC offset is not a multiple of 60
+seconds, the leap second occurs earlier than the last second of the
+local minute and the minute's remaining local seconds are numbered
+through 60 instead of the usual 59; the UTC offset is unaffected.
+.SS Common interoperability issues
+This section documents common problems in reading or writing TZif files.
+Most of these are problems in generating TZif files for use by
+older readers.
+The goals of this section are:
+.IP * 2
+to help TZif writers output files that avoid common
+pitfalls in older or buggy TZif readers,
+.IP *
+to help TZif readers avoid common pitfalls when reading
+files generated by future TZif writers, and
+.IP *
+to help any future specification authors see what sort of
+problems arise when the TZif format is changed.
+.PP
+When new versions of the TZif format have been defined, a
+design goal has been that a reader can successfully use a TZif
+file even if the file is of a later TZif version than what the
+reader was designed for.
+When complete compatibility was not achieved, an attempt was
+made to limit glitches to rarely used timestamps and allow
+simple partial workarounds in writers designed to generate
+new-version data useful even for older-version readers.
+This section attempts to document these compatibility issues and
+workarounds, as well as to document other common bugs in
+readers.
+.PP
+Interoperability problems with TZif include the following:
+.IP * 2
+Some readers examine only version 1 data.
+As a partial workaround, a writer can output as much version 1
+data as possible.
+However, a reader should ignore version 1 data, and should use
+version 2+ data even if the reader's native timestamps have only
+32 bits.
+.IP *
+Some readers designed for version 2 might mishandle
+timestamps after a version 3 or higher file's last transition, because
+they cannot parse extensions to POSIX in the TZ-like string.
+As a partial workaround, a writer can output more transitions
+than necessary, so that only far-future timestamps are
+mishandled by version 2 readers.
+.IP *
+Some readers designed for version 2 do not support
+permanent daylight saving time with transitions after 24:00
+\(en e.g., a TZ string
+.q "EST5EDT,0/0,J365/25"
+denoting permanent Eastern Daylight Time
+(\-04).
+As a workaround, a writer can substitute standard time
+for two time zones east, e.g.,
+.q "XXX3EDT4,0/0,J365/23"
+for a time zone with a never-used standard time (XXX, \-03)
+and negative daylight saving time (EDT, \-04) all year.
+Alternatively,
+as a partial workaround a writer can substitute standard time
+for the next time zone east \(en e.g.,
+.q "AST4"
+for permanent
+Atlantic Standard Time (\-04).
+.IP *
+Some readers designed for version 2 or 3, and that require strict
+conformance to RFC 8536, reject version 4 files whose leap second
+tables are truncated at the start or that end in expiration times.
+.IP *
+Some readers ignore the footer, and instead predict future
+timestamps from the time type of the last transition.
+As a partial workaround, a writer can output more transitions
+than necessary.
+.IP *
+Some readers do not use time type 0 for timestamps before
+the first transition, in that they infer a time type using a
+heuristic that does not always select time type 0.
+As a partial workaround, a writer can output a dummy (no-op)
+first transition at an early time.
+.IP *
+Some readers mishandle timestamps before the first
+transition that has a timestamp not less than \-2**31.
+Readers that support only 32-bit timestamps are likely to be
+more prone to this problem, for example, when they process
+64-bit transitions only some of which are representable in 32
+bits.
+As a partial workaround, a writer can output a dummy
+transition at timestamp \-2**31.
+.IP *
+Some readers mishandle a transition if its timestamp has
+the minimum possible signed 64-bit value.
+Timestamps less than \-2**59 are not recommended.
+.IP *
+Some readers mishandle POSIX-style TZ strings that
+contain
+.q "<"
+or
+.q ">".
+As a partial workaround, a writer can avoid using
+.q "<"
+or
+.q ">"
+for time zone abbreviations containing only alphabetic
+characters.
+.IP *
+Many readers mishandle time zone abbreviations that contain
+non-ASCII characters.
+These characters are not recommended.
+.IP *
+Some readers may mishandle time zone abbreviations that
+contain fewer than 3 or more than 6 characters, or that
+contain ASCII characters other than alphanumerics,
+.q "\*-",
+and
+.q "+".
+These abbreviations are not recommended.
+.IP *
+Some readers mishandle TZif files that specify
+daylight-saving time UT offsets that are less than the UT
+offsets for the corresponding standard time.
+These readers do not support locations like Ireland, which
+uses the equivalent of the POSIX TZ string
+.q "IST\*-1GMT0,M10.5.0,M3.5.0/1",
+observing standard time
+(IST, +01) in summer and daylight saving time (GMT, +00) in winter.
+As a partial workaround, a writer can output data for the
+equivalent of the POSIX TZ string
+.q "GMT0IST,M3.5.0/1,M10.5.0",
+thus swapping standard and daylight saving time.
+Although this workaround misidentifies which part of the year
+uses daylight saving time, it records UT offsets and time zone
+abbreviations correctly.
+.IP *
+Some readers generate ambiguous timestamps for positive leap seconds
+that occur when the UTC offset is not a multiple of 60 seconds.
+For example, in a timezone with UTC offset +01:23:45 and with
+a positive leap second 78796801 (1972-06-30 23:59:60 UTC), some readers will
+map both 78796800 and 78796801 to 01:23:45 local time the next day
+instead of mapping the latter to 01:23:46, and they will map 78796815 to
+01:23:59 instead of to 01:23:60.
+This has not yet been a practical problem, since no civil authority
+has observed such UTC offsets since leap seconds were
+introduced in 1972.
+.PP
+Some interoperability problems are reader bugs that
+are listed here mostly as warnings to developers of readers.
+.IP * 2
+Some readers do not support negative timestamps.
+Developers of distributed applications should keep this
+in mind if they need to deal with pre-1970 data.
+.IP *
+Some readers mishandle timestamps before the first
+transition that has a nonnegative timestamp.
+Readers that do not support negative timestamps are likely to
+be more prone to this problem.
+.IP *
+Some readers mishandle time zone abbreviations like
+.q "\*-08"
+that contain
+.q "+",
+.q "\*-",
+or digits.
+.IP *
+Some readers mishandle UT offsets that are out of the
+traditional range of \-12 through +12 hours, and so do not
+support locations like Kiritimati that are outside this
+range.
+.IP *
+Some readers mishandle UT offsets in the range [\-3599, \-1]
+seconds from UT, because they integer-divide the offset by
+3600 to get 0 and then display the hour part as
+.q "+00".
+.IP *
+Some readers mishandle UT offsets that are not a multiple
+of one hour, or of 15 minutes, or of 1 minute.
+.SH SEE ALSO
+.BR time (2),
+.BR localtime (3),
+.BR tzset (3),
+.BR tzselect (8),
+.BR zdump (8),
+.BR zic (8).
+.PP
+Olson A, Eggert P, Murchison K. The Time Zone Information Format (TZif).
+2019 Feb.
+.UR https://\:datatracker.ietf.org/\:doc/\:html/\:rfc8536
+Internet RFC 8536
+.UE
+.UR https://\:doi.org/\:10.17487/\:RFC8536
+doi:10.17487/RFC8536
+.UE .
diff --git a/man5/utmp.5 b/man5/utmp.5
new file mode 100644
index 0000000..4a02964
--- /dev/null
+++ b/man5/utmp.5
@@ -0,0 +1,348 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@cantor.informatik.rwth-aachen.de),
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" SPDX-License-Identifier: GPL-2.0-or-later
+.\"
+.\" Modified 1993-07-25 by Rik Faith (faith@cs.unc.edu)
+.\" Modified 1995-02-26 by Michael Haardt
+.\" Modified 1996-07-20 by Michael Haardt
+.\" Modified 1997-07-02 by Nicolás Lichtmaier <nick@debian.org>
+.\" Modified 2004-10-31 by aeb, following Gwenole Beauchesne
+.TH utmp 5 2023-05-03 "Linux man-pages 6.05.01"
+.SH NAME
+utmp, wtmp \- login records
+.SH SYNOPSIS
+.nf
+.B #include <utmp.h>
+.fi
+.SH DESCRIPTION
+The
+.I utmp
+file allows one to discover information about who is currently using the
+system.
+There may be more users currently using the system, because not
+all programs use utmp logging.
+.PP
+.B Warning:
+.I utmp
+must not be writable by the user class "other",
+because many system programs (foolishly)
+depend on its integrity.
+You risk faked system logfiles and
+modifications of system files if you leave
+.I utmp
+writable to any user other than the owner and group owner of the file.
+.PP
+The file is a sequence of
+.I utmp
+structures,
+declared as follows in
+.I <utmp.h>
+(note that this is only one of several definitions
+around; details depend on the version of libc):
+.PP
+.in +4n
+.EX
+/* Values for ut_type field, below */
+\&
+#define EMPTY 0 /* Record does not contain valid info
+ (formerly known as UT_UNKNOWN on Linux) */
+#define RUN_LVL 1 /* Change in system run\-level (see
+ \fBinit\fP(1)) */
+#define BOOT_TIME 2 /* Time of system boot (in \fIut_tv\fP) */
+#define NEW_TIME 3 /* Time after system clock change
+ (in \fIut_tv\fP) */
+#define OLD_TIME 4 /* Time before system clock change
+ (in \fIut_tv\fP) */
+#define INIT_PROCESS 5 /* Process spawned by \fBinit\fP(1) */
+#define LOGIN_PROCESS 6 /* Session leader process for user login */
+#define USER_PROCESS 7 /* Normal process */
+#define DEAD_PROCESS 8 /* Terminated process */
+#define ACCOUNTING 9 /* Not implemented */
+\&
+#define UT_LINESIZE 32
+#define UT_NAMESIZE 32
+#define UT_HOSTSIZE 256
+\&
+struct exit_status { /* Type for ut_exit, below */
+ short e_termination; /* Process termination status */
+ short e_exit; /* Process exit status */
+};
+\&
+struct utmp {
+ short ut_type; /* Type of record */
+ pid_t ut_pid; /* PID of login process */
+ char ut_line[UT_LINESIZE]; /* Device name of tty \- "/dev/" */
+ char ut_id[4]; /* Terminal name suffix,
+ or inittab(5) ID */
+ char ut_user[UT_NAMESIZE]; /* Username */
+ char ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or
+ kernel version for run\-level
+ messages */
+ struct exit_status ut_exit; /* Exit status of a process
+ marked as DEAD_PROCESS; not
+ used by Linux init(1) */
+ /* The ut_session and ut_tv fields must be the same size when
+ compiled 32\- and 64\-bit. This allows data files and shared
+ memory to be shared between 32\- and 64\-bit applications. */
+#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
+ int32_t ut_session; /* Session ID (\fBgetsid\fP(2)),
+ used for windowing */
+ struct {
+ int32_t tv_sec; /* Seconds */
+ int32_t tv_usec; /* Microseconds */
+ } ut_tv; /* Time entry was made */
+#else
+ long ut_session; /* Session ID */
+ struct timeval ut_tv; /* Time entry was made */
+#endif
+\&
+ int32_t ut_addr_v6[4]; /* Internet address of remote
+ host; IPv4 address uses
+ just ut_addr_v6[0] */
+ char __unused[20]; /* Reserved for future use */
+};
+\&
+/* Backward compatibility hacks */
+#define ut_name ut_user
+#ifndef _NO_UT_TIME
+#define ut_time ut_tv.tv_sec
+#endif
+#define ut_xtime ut_tv.tv_sec
+#define ut_addr ut_addr_v6[0]
+.EE
+.in
+.PP
+This structure gives the name of the special file associated with the
+user's terminal, the user's login name, and the time of login in the form
+of
+.BR time (2).
+String fields are terminated by a null byte (\[aq]\e0\[aq])
+if they are shorter than the size
+of the field.
+.PP
+The first entries ever created result from
+.BR init (1)
+processing
+.BR inittab (5).
+Before an entry is processed, though,
+.BR init (1)
+cleans up utmp by setting \fIut_type\fP to \fBDEAD_PROCESS\fP, clearing
+\fIut_user\fP, \fIut_host\fP, and \fIut_time\fP with null bytes for each
+record which \fIut_type\fP is not \fBDEAD_PROCESS\fP or \fBRUN_LVL\fP
+and where no process with PID \fIut_pid\fP exists.
+If no empty record
+with the needed \fIut_id\fP can be found,
+.BR init (1)
+creates a new one.
+It sets \fIut_id\fP from the inittab, \fIut_pid\fP and \fIut_time\fP to the
+current values, and \fIut_type\fP to \fBINIT_PROCESS\fP.
+.PP
+.BR mingetty (8)
+(or
+.BR agetty (8))
+locates the entry by the PID, changes \fIut_type\fP to
+\fBLOGIN_PROCESS\fP, changes \fIut_time\fP, sets \fIut_line\fP, and waits
+for connection to be established.
+.BR login (1),
+after a user has been
+authenticated, changes \fIut_type\fP to \fBUSER_PROCESS\fP, changes
+\fIut_time\fP, and sets \fIut_host\fP and \fIut_addr\fP.
+Depending on
+.BR mingetty (8)
+(or
+.BR agetty (8))
+and
+.BR login (1),
+records may be located by
+\fIut_line\fP instead of the preferable \fIut_pid\fP.
+.PP
+When
+.BR init (1)
+finds that a process has exited, it locates its utmp entry by
+.IR ut_pid ,
+sets
+.I ut_type
+to
+.BR DEAD_PROCESS ,
+and clears
+.IR ut_user ,
+.IR ut_host ,
+and
+.I ut_time
+with null bytes.
+.PP
+.BR xterm (1)
+and other terminal emulators directly create a
+\fBUSER_PROCESS\fP record and generate the \fIut_id\fP by using the
+string that suffix part of the terminal name (the characters
+following
+.IR /dev/ [pt] ty ).
+If they find a \fBDEAD_PROCESS\fP for this ID,
+they recycle it, otherwise they create a new entry.
+If they can, they
+will mark it as \fBDEAD_PROCESS\fP on exiting and it is advised that
+they null \fIut_line\fP, \fIut_time\fP, \fIut_user\fP, and \fIut_host\fP
+as well.
+.PP
+.BR telnetd (8)
+sets up a \fBLOGIN_PROCESS\fP entry and leaves the rest to
+.BR login (1)
+as usual.
+After the telnet session ends,
+.BR telnetd (8)
+cleans up utmp in the described way.
+.PP
+The \fIwtmp\fP file records all logins and logouts.
+Its format is exactly like \fIutmp\fP except that a null username
+indicates a logout
+on the associated terminal.
+Furthermore, the terminal name \fB\[ti]\fP
+with username \fBshutdown\fP or \fBreboot\fP indicates a system
+shutdown or reboot and the pair of terminal names \fB|\fP/\fB}\fP
+logs the old/new system time when
+.BR date (1)
+changes it.
+\fIwtmp\fP is maintained by
+.BR login (1),
+.BR init (1),
+and some versions of
+.BR getty (8)
+(e.g.,
+.BR mingetty (8)
+or
+.BR agetty (8)).
+None of these programs creates the file, so if it is
+removed, record-keeping is turned off.
+.SH FILES
+.I /var/run/utmp
+.br
+.I /var/log/wtmp
+.SH VERSIONS
+POSIX.1 does not specify a
+.I utmp
+structure, but rather one named
+.I utmpx
+(as part of the XSI extension),
+with specifications for the fields
+.IR ut_type ,
+.IR ut_pid ,
+.IR ut_line ,
+.IR ut_id ,
+.IR ut_user ,
+and
+.IR ut_tv .
+POSIX.1 does not specify the lengths of the
+.I ut_line
+and
+.I ut_user
+fields.
+.PP
+Linux defines the
+.I utmpx
+structure to be the same as the
+.I utmp
+structure.
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux utmp entries conform neither to v7/BSD nor to System V; they are a
+mix of the two.
+.PP
+v7/BSD has fewer fields; most importantly it lacks
+\fIut_type\fP, which causes native v7/BSD-like programs to display (for
+example) dead or login entries.
+Further, there is no configuration file
+which allocates slots to sessions.
+BSD does so because it lacks \fIut_id\fP fields.
+.PP
+In Linux (as in System V), the \fIut_id\fP field of a
+record will never change once it has been set, which reserves that slot
+without needing a configuration file.
+Clearing \fIut_id\fP may result
+in race conditions leading to corrupted utmp entries and potential
+security holes.
+Clearing the abovementioned fields by filling them
+with null bytes is not required by System V semantics,
+but makes it possible to run
+many programs which assume BSD semantics and which do not modify utmp.
+Linux uses the BSD conventions for line contents, as documented above.
+.PP
+.\" mtk: What is the referrent of "them" in the following sentence?
+.\" System V only uses the type field to mark them and logs
+.\" informative messages such as \fB"new time"\fP in the line field.
+System V has no \fIut_host\fP or \fIut_addr_v6\fP fields.
+.SH NOTES
+Unlike various other
+systems, where utmp logging can be disabled by removing the file, utmp
+must always exist on Linux.
+If you want to disable
+.BR who (1),
+then do not make utmp world readable.
+.PP
+The file format is machine-dependent, so it is recommended that it be
+processed only on the machine architecture where it was created.
+.PP
+Note that on \fIbiarch\fP platforms, that is, systems which can run both
+32-bit and 64-bit applications (x86-64, ppc64, s390x, etc.),
+\fIut_tv\fP is the same size in 32-bit mode as in 64-bit mode.
+The same goes for \fIut_session\fP and \fIut_time\fP if they are present.
+This allows data files and shared memory to be shared between
+32-bit and 64-bit applications.
+This is achieved by changing the type of
+.I ut_session
+to
+.IR int32_t ,
+and that of
+.I ut_tv
+to a struct with two
+.I int32_t
+fields
+.I tv_sec
+and
+.IR tv_usec .
+Since \fIut_tv\fP may not be the same as \fIstruct timeval\fP,
+then instead of the call:
+.PP
+.in +4n
+.EX
+gettimeofday((struct timeval *) &ut.ut_tv, NULL);
+.EE
+.in
+.PP
+the following method of setting this field is recommended:
+.PP
+.in +4n
+.EX
+struct utmp ut;
+struct timeval tv;
+\&
+gettimeofday(&tv, NULL);
+ut.ut_tv.tv_sec = tv.tv_sec;
+ut.ut_tv.tv_usec = tv.tv_usec;
+.EE
+.in
+.\" .PP
+.\" Note that the \fIutmp\fP struct from libc5 has changed in libc6.
+.\" Because of this,
+.\" binaries using the old libc5 struct will corrupt
+.\" .IR /var/run/utmp " and/or " /var/log/wtmp .
+.\" .SH BUGS
+.\" This man page is based on the libc5 one, things may work differently now.
+.SH SEE ALSO
+.BR ac (1),
+.BR date (1),
+.BR init (1),
+.BR last (1),
+.BR login (1),
+.BR logname (1),
+.BR lslogins (1),
+.BR users (1),
+.BR utmpdump (1),
+.BR who (1),
+.BR getutent (3),
+.BR getutmp (3),
+.BR login (3),
+.BR logout (3),
+.BR logwtmp (3),
+.BR updwtmp (3)
diff --git a/man5/utmpx.5 b/man5/utmpx.5
new file mode 100644
index 0000000..1fa9e5a
--- /dev/null
+++ b/man5/utmpx.5
@@ -0,0 +1 @@
+.so man5/utmp.5
diff --git a/man5/wtmp.5 b/man5/wtmp.5
new file mode 100644
index 0000000..1fa9e5a
--- /dev/null
+++ b/man5/wtmp.5
@@ -0,0 +1 @@
+.so man5/utmp.5