# CommandSection

title: MUTATION SCORE INDICATOR (MSI)
content:
MSI is a key metric reported by <I>Infection</I>, representing the percentage of 'killed' mutants relative to the total number of detectable mutants. A higher MSI indicates a more robust and effective test suite, as it means more mutations (potential bugs) were caught by existing tests.


title: HISTORY
content:
PHP's Infection framework was initially created by Hannes Van De Vreken and has evolved as an open-source project within the PHP community. It gained popularity as a vital tool for developers aiming to achieve higher quality test suites and improve software reliability by rigorously testing the effectiveness of their unit tests.


title: SYNOPSIS
content:
<pre><code>influx <I>command</I> [<I>options</I>] [<I>arguments</I>]</code></pre><br>The <b>influx</b> command operates using a subcommand pattern. Users specify a primary operation (e.g., <b>query</b>, <b>write</b>, <b>bucket</b>, <b>auth</b>) followed by its specific options and arguments. The <b>influx</b> command itself also accepts global options that affect its overall behavior, such as connection parameters. For InfluxDB 1.x compatibility, it can also launch an InfluxQL shell directly.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help information for the command or subcommand.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the current version of the InfluxDB CLI.<br><br><b><b>-t</b>, <b>--token</b> <i>&lt;token&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the InfluxDB API token for authentication (primarily InfluxDB 2.x).<br><br><b><b>-u</b>, <b>--host</b> <i>&lt;url&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the URL of the InfluxDB instance (e.g., http://localhost:8086).<br><br><b><b>-o</b>, <b>--org</b> <i>&lt;name|id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the organization name or ID to interact with (primarily InfluxDB 2.x).<br><br><b><b>--active-config</b> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the active configuration profile for the CLI, managing multiple connections.<br><br><b><b>query</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Execute Flux or InfluxQL queries against an InfluxDB instance. Accepts <b>-q</b> for a query string or <b>-f</b> for a query file.<br><br><b><b>write</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write data into an InfluxDB bucket. Supports Line Protocol directly or via files using <b>-f</b>.<br><br><b><b>bucket</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manage InfluxDB buckets (create, list, delete, update).<br><br><b><b>auth</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manage InfluxDB API tokens and authentication for InfluxDB 2.x.<br><br><b><b>setup</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Walk through the initial setup process for a fresh InfluxDB 2.x instance.<br><br><b><b>config</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manage CLI configurations, allowing multiple InfluxDB connections to be saved and activated.<br><br><b><b>shell</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launch an interactive InfluxQL shell for InfluxDB 1.x compatibility or direct 1.x queries.<br><br>


title: DESCRIPTION
content:
The <b>influx</b> command is the official command-line interface (CLI) for InfluxDB, a powerful open-source time-series database. It enables users to interact directly with InfluxDB instances, whether local or remote, to perform a wide range of operations. Through <b>influx</b>, administrators and developers can execute InfluxQL or Flux queries to retrieve and analyze time-series data, write new data points, and manage various database components like organizations, buckets, tasks, and API tokens in InfluxDB 2.x. For InfluxDB 1.x compatibility, it also supports managing databases, users, retention policies, and continuous queries. It's an essential tool for both ad-hoc data exploration and scripting database administration tasks, providing a robust textual interface for managing and interacting with your time-series data. It acts as a client to the InfluxDB HTTP API, offering a convenient way to perform operations that would otherwise require direct API calls.


title: CAVEATS
content:
The <b>influx</b> command is a client-side tool and requires an active InfluxDB server instance to function. It is crucial to ensure compatibility between the <b>influx</b> CLI version and the InfluxDB server version, particularly when dealing with InfluxDB 1.x versus 2.x, as the CLI's functionalities and default behaviors differ significantly between major versions. Proper authentication (API tokens for InfluxDB 2.x, or user credentials for InfluxDB 1.x) and network connectivity to the InfluxDB host are prerequisites for successful interaction. While powerful, complex data transformations or extensive scripting often benefit from client libraries in programming languages rather than relying solely on the CLI.


title: INTERACTIVE SHELL (INFLUXQL)
content:
For InfluxDB 1.x or for direct InfluxQL interaction with InfluxDB 2.x (if the 1.x compatibility API is enabled), the <b>influx shell</b> subcommand provides an interactive prompt where users can type and execute InfluxQL queries directly, similar to traditional SQL clients. This mode is particularly useful for ad-hoc data exploration and debugging specific InfluxQL queries.


title: CONFIGURATION MANAGEMENT
content:
The <b>influx config</b> subcommand allows users to manage multiple connection profiles to different InfluxDB instances. This is especially useful in environments with multiple InfluxDB servers, different user accounts, or varying connection parameters, enabling quick switching between configurations without retyping connection details for each operation.


title: HISTORY
content:
The <b>influx</b> command-line interface originated alongside the InfluxDB time-series database itself, primarily supporting InfluxDB 1.x versions with an interactive InfluxQL shell and administrative commands. With the advent of InfluxDB 2.x, the CLI underwent a significant re-architecture to adopt a more modular, subcommand-based structure, align with the new organization and bucket concepts, and fully integrate support for the Flux data scripting language. This evolution reflects InfluxData's continuous development of the InfluxDB ecosystem, providing a consistent and powerful tool for managing and interacting with the database across its versions.


title: SEE ALSO
content:
curl(1) (for direct HTTP API interaction with InfluxDB), psql(1) (PostgreSQL CLI, for comparison of database command-line clients), mysql(1) (MySQL CLI, for comparison of database command-line clients)


title: SYNOPSIS
content:
<b>info</b> [<I>OPTION</I>...] [<I>MENU-ITEM</I>...] <br><b>info</b> [<I>OPTION</I>...] <I>TOPIC</I>...


title: PARAMETERS
content:
<b>-f, --file <I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Texinfo file to display.<br><br><b>-n, --node <I>NODE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts browsing at the specified node within the document.<br><br><b>-o, --output <I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs formatted Texinfo to a file instead of displaying it interactively.<br><br><b>-k, --key <I>KEYWORD</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches the `info` index for a specific keyword.<br><br><b>-d, --directory <I>DIR</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a directory to the INFOPATH search list for `info` files.<br><br><b>--subnodes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When outputting, include all subnodes of the specified node.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br>


title: DESCRIPTION
content:
The `info` command is the primary documentation browser for GNU software. Unlike the traditional `man` command which displays simple manual pages, `info` is designed to navigate highly structured documents written in the <I>Texinfo</I> format. <br><br>Texinfo is a documentation system used by the GNU project to produce both online documentation (viewable with `info`) and print-ready manuals from a single source. This allows for rich, hyperlinked documentation organized into a tree-like structure of 'nodes.' <br><br>Users can interactively browse these nodes, follow cross-references, search for specific text, and move seamlessly between different sections of a document. It provides a more comprehensive and often more up-to-date resource for GNU tools compared to their corresponding man pages, offering an integrated and navigable experience for complex software documentation.


title: CAVEATS
content:
The `info` command primarily serves documentation for GNU software; non-GNU utilities might not have corresponding `info` pages. <br>Its reliance on the <I>Texinfo</I> format means documentation must be specifically prepared for it, unlike the more widely adopted `man` page format. <br>New users might find its interactive navigation and keybindings less intuitive initially compared to simpler pagers.


title: TEXINFO FORMAT
content:
`info` specifically reads files in the <I>Texinfo</I> format, a robust typesetting language designed to produce both comprehensive online documentation with hyperlinking and well-formatted printed manuals from a single source file. This allows for rich, hierarchical documentation structures with extensive cross-references.


title: NODES AND NAVIGATION
content:
Documentation in `info` is organized into 'nodes,' which are logical sections of information. These nodes are interconnected via hyperlinks, allowing users to navigate between related topics. Common navigation keys include <b>n</b> (next node), <b>p</b> (previous node), <b>u</b> (up to parent node), <b>l</b> (last visited node), and <b>q</b> (quit). Users can also search for text within documents using <b>s</b>.


title: HISTORY
content:
The `info` command is a cornerstone of the GNU Project, conceived by Richard Stallman to provide a more advanced and structured documentation system than traditional UNIX manual pages. It was developed alongside the growth of GNU software as the primary method to access their comprehensive documentation. <br><br>By leveraging the <I>Texinfo</I> format, `info` enables the creation of both online, hyperlinked documentation and traditional printed manuals from a single source, fostering consistency and ease of maintenance across the vast GNU software ecosystem. Its design reflects the GNU philosophy of providing complete and freely available documentation.


title: PARAMETERS
content:
<b><b>-A</b> <i>term</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the primary terminal entry for comparison. If two entries are given without <b>-A</b> or <b>-B</b>, the first is used as <b>-A</b>.<br><br><b><b>-B</b> <i>term</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the secondary terminal entry for comparison. This is the entry against which the primary one is compared.<br><br><b><b>-C</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the <i>terminfo</i> entry in <i>termcap</i> (<b>capinfo</b>) format. This format is older and less capable than <i>terminfo</i> but may be useful for compatibility.<br><br><b><b>-I</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the <i>terminfo</i> entry in <i>terminfo</i> source format, suitable for input to the <i>tic</i> compiler. This is the default output format when printing a single entry.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When comparing two entries, dumps only those capabilities that are different between the two entries.<br><br><b><b>-n</b> <i>num</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of columns for the formatted output, making the output more readable for wide terminals. Default is 60 columns.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables quiet mode. This option suppresses comments and reduces output, primarily useful when comparing entries in scripts for automated checking.<br><br><b><b>-s</b> [<i>d</i>|<i>l</i>|<i>s</i>|<i>c</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sorts the output. Options include by default (<i>d</i>), by long capability names (<i>l</i>), by short capability names (<i>s</i>), or by capability type (<i>c</i>).<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases verbosity of the output. Can be specified multiple times (e.g., <b>-vv</b>) for even more detailed information, including comments and debugging info.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version number of the <i>ncurses</i> library that <i>infocmp</i> is part of, then exits.<br><br>


title: DESCRIPTION
content:
The <i>infocmp</i> command is a utility from the <i>ncurses</i> library that allows users to compare or print entries from the <i>terminfo</i> database. The <i>terminfo</i> database is a comprehensive collection of descriptions for various terminal types, detailing their capabilities and behaviors (e.g., how to clear the screen, move the cursor, or set colors).<br><br>When used for comparison, <i>infocmp</i> can highlight the differences between two or more specified terminal entries, which is incredibly useful for debugging terminal issues, verifying new <i>terminfo</i> entries, or understanding variations between terminals. It can display these differences in a human-readable format, or specifically show capabilities that exist in one entry but not another.<br><br>As a printing utility, <i>infocmp</i> can output a <i>terminfo</i> entry in a source format suitable for compilation by the <i>tic</i> compiler, or in a format compatible with the older <i>termcap</i> system (known as <i>capinfo</i> format). This functionality aids in porting, documenting, or simply inspecting the raw capabilities of a terminal as defined in the database. It's an essential tool for system administrators and developers working with terminal applications and behaviors.


title: CAVEATS
content:
<i>infocmp</i>'s output can be very detailed and complex, especially when dealing with obscure capabilities or when comparing many entries. It relies on the <i>terminfo</i> database, which must be correctly installed and accessible (typically in <i>/usr/share/terminfo</i> or defined by the <b>TERMINFO</b> environment variable). Interpreting differences requires a good understanding of <i>terminfo</i> syntax and capabilities. The <b>-C</b> (<i>termcap</i>) output option generates an obsolete format that may not fully represent modern <i>terminfo</i> capabilities.


title: ENVIRONMENT VARIABLES
content:
The <b>TERMINFO</b> environment variable can be set to override the default location of the <i>terminfo</i> database. If not set, <i>infocmp</i> typically looks in <i>/usr/share/terminfo</i> or a similar system-dependent path. The <b>TERM</b> variable specifies the type of terminal to be used, but <i>infocmp</i> generally takes terminal names as explicit arguments.


title: EXIT STATUS
content:
<i>infocmp</i> exits with 0 on success, 1 if usage or parameter errors occur, and 2 if a specified terminal entry is not found in the database. When comparing entries, a non-zero exit status may also indicate differences found, depending on the options used (e.g., with <b>-q</b>).


title: HISTORY
content:
<i>infocmp</i> is a component of the <i>ncurses</i> (new curses) project, which is a free software emulation of the System V Release 4.0 (SVr4) curses library. The <i>terminfo</i> database and its associated utilities like <i>infocmp</i> and <i>tic</i> were developed as part of AT&T System V Unix, succeeding the older <i>termcap</i> system. <i>ncurses</i> aims to be fully compatible with SVr4 curses, ensuring that tools like <i>infocmp</i> provide robust and consistent functionality for managing terminal capabilities across various Unix-like systems. Its development has focused on maintaining compatibility while also introducing enhancements and bug fixes.


title: SEE ALSO
content:
<b>tic</b>(1), <b>captoinfo</b>(1), <b>ncurses</b>(3), <b>terminfo</b>(5), <b>tput</b>(1), <b>tset</b>(1)


title: PARAMETERS
content:
<b><b>-h</b>, <b>--header</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces a C header file containing definitions for <i>info</i> key bindings. This is the default output format if no other format option is specified.<br><br><b><b>-s</b>, <b>--sed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs a <i>sed</i> script, designed to help convert or update old <i>info</i> key binding configurations to a newer format.<br><br><b><b>-o</b> <i>FILE</i>, <b>--output=</b><i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs the generated output to the specified <i>FILE</i> instead of standard output.<br><br><b><b>-k</b> <i>KEY</i>, <b>--key-name=</b><i>KEY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the internal name that corresponds to the given <i>KEY</i> sequence. This is useful for understanding <i>info</i>'s internal key mapping or for debugging.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information for <i>infokey</i> and then exits.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a detailed help message, listing all available options, and then exits.<br><br>


title: DESCRIPTION
content:
<i>infokey</i> is a specialized utility included with the GNU Info documentation system. Its core function is to process and output key binding definitions used by the <i>info</i> reader. By default, it generates a C header file that defines symbolic constants for <i>info</i>'s key sequences and their associated commands. Alternatively, it can produce a <i>sed</i> script, which is useful for transforming or migrating key binding configurations. While <i>infokey</i> is vital for the development, maintenance, and customization of the <i>info</i> program itself, it is generally <b>not</b> a command intended for regular end-user interaction. Its output serves primarily as input for other compilation steps or for debugging key mapping issues within the <i>info</i> environment.


title: CAVEATS
content:
<i>infokey</i> is primarily a developer-oriented tool for the GNU Info system. It is <b>not</b> typically used by general users as its output formats (C header, <i>sed</i> script) are specific to the <i>info</i> program's build and customization processes.


title: HISTORY
content:
<i>infokey</i> is an integral component of the GNU Texinfo distribution, which underpins the GNU Info documentation system. Texinfo itself was initiated by the GNU Project in the 1980s. <i>infokey</i>'s specific role is to manage and compile the key binding information crucial for the <i>info</i> reader, highlighting the system's design for customizable keyboard navigation and interactive documentation.


title: PARAMETERS
content:
<b>-s, --status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a high-level overview of overall system health and critical statuses.<br><br><b>-m, --metrics</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows detailed performance metrics for various system components (e.g., CPU, memory, I/O).<br><br><b>-a, --alert</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks for and reports on any detected system alerts or threshold breaches.<br><br><b>-f, --format <type></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format for the report (e.g., <I>json</I>, <I>text</I>, <I>csv</I>).<br><br><b>-l, --log-level <level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the verbosity level for internal logging and diagnostic messages.<br><br><b>-t, --type <subject></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters the report to a specific subject or category (e.g., <I>cpu</I>, <I>mem</I>, <I>disk</I>, <I>net</I>, <I>processes</I>).<br><br><b>--daemon</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the `informant` utility as a background service for continuous monitoring.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br>


title: DESCRIPTION
content:
The `informant` command is <I>not a standard, universally available Linux utility</I> found in most common distributions. However, if such a command were to exist, or if it refers to a specific, custom-developed tool often named 'informant', its primary purpose would typically be to <B>collect, analyze, and report on various system metrics and statuses</B>. This could include CPU usage, memory consumption, disk space, network activity, service health, and log events.<br><br>A hypothetical `informant` tool would likely serve as a system monitoring agent, providing real-time insights or generating periodic reports. It might be used for proactive problem detection, performance tuning, or compliance auditing. Its functionality could range from simple data display to complex alerting mechanisms and integration with external monitoring systems. Such tools are frequently implemented as custom scripts or applications within specific IT environments or IoT deployments, rather than being part of the core Linux operating system.


title: CAVEATS
content:
The `informant` command is <B>not a standard Linux utility</B> found in most distributions or official repositories. The information provided herein is based on a <I>hypothetical</I> or <I>example</I> tool that might share this name, commonly custom-developed for specific system monitoring or reporting tasks. Its actual existence, functionality, and parameters would depend entirely on its specific implementation within a given environment. Users should verify its presence and documentation in their specific system.


title: TYPICAL USE CASES
content:
A custom `informant` tool would be invaluable for tasks such as <B>remote server health checks</B>, <B>IoT device status monitoring</B>, <B>collecting performance data</B> for dashboards, or triggering automated alerts based on predefined thresholds. It acts as an abstraction layer to simplify the retrieval and interpretation of complex system data for specific operational needs.


title: IMPLEMENTATION VARIETIES
content:
Such a command is often implemented as a <I>shell script</I> (bash, zsh), a <I>Python script</I>, or a compiled binary written in languages like <I>Go</I> or <I>Rust</I>. The choice of implementation language typically depends on factors like performance requirements, ease of deployment, and available development resources within the specific project that created it.


title: HISTORY
content:
As `informant` is <B>not a standard, universally distributed command</B>, it lacks a widely documented history within the Linux kernel or core utilities development. Tools bearing this name typically emerge as custom solutions for specific IT infrastructure monitoring, IoT device reporting, or specialized data collection requirements. Their evolution is tied to the unique needs and technological stacks of individual projects, organizations, or niche use cases, rather than a general open-source development trajectory.


title: SEE ALSO
content:
top(1), htop(1), free(1), df(1), ps(1), netstat(8), ss(8), journalctl(1), dmesg(1), systemctl(1), info(1)


title: PARAMETERS
content:
<b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more information about the conversion process.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information for the <i>infotocap</i> command and exits.<br><br>


title: DESCRIPTION
content:
<i>infotocap</i> is a utility included with the <i>ncurses</i> library, designed to facilitate compatibility between modern terminal capability descriptions and older systems. Its primary function is to translate terminal descriptions from the <i>terminfo</i> source format into the <i>termcap</i> source format.<br><br><i>Terminfo</i> is the more advanced and flexible standard for describing terminal capabilities, allowing for detailed specifications of a terminal's features, including cursor movement, color support, key definitions, and special modes. Each terminal type typically has its own compiled <i>terminfo</i> entry. In contrast, <i>termcap</i> is an older, simpler format that usually stores all terminal descriptions within a single file (historically <i>/etc/termcap</i>). While simpler, <i>termcap</i> has limitations in expressiveness and capacity compared to <i>terminfo</i>.<br><br>Users typically employ <i>infotocap</i> when they need to provide terminal capability information to legacy applications or environments that only understand the <i>termcap</i> format. The command reads a specified <i>terminfo</i> source file (often containing multiple terminal descriptions) and attempts to generate an equivalent <i>termcap</i> source file. It handles most common translations, but due to the inherent differences in the two formats, some complex or <i>terminfo</i>-specific capabilities may not have direct <i>termcap</i> equivalents and might be lost or approximated in the conversion. The output is a human-readable <i>termcap</i> source file, which can then be used by systems requiring that format.


title: CAVEATS
content:
<i>Terminfo</i> is a richer and more expressive format than <i>termcap</i>. Consequently, not all <i>terminfo</i> capabilities have direct equivalents in <i>termcap</i>. Complex features, certain string parameters, or highly specific terminal controls described in <i>terminfo</i> may be omitted or imperfectly translated when converted to <i>termcap</i>.<br><br>The <i>termcap</i> format also has limitations on the size of individual entries, which can sometimes be exceeded by detailed <i>terminfo</i> descriptions. This command is primarily for backward compatibility with older systems; for modern applications, <i>terminfo</i> is the preferred and more robust standard.


title: PURPOSE AND USAGE CONTEXT
content:
The primary use case for <i>infotocap</i> is to generate <i>termcap</i> source files from <i>terminfo</i> descriptions for systems or applications that have not yet migrated to the <i>terminfo</i> standard. While <i>terminfo</i> is the contemporary and preferred method for describing terminal capabilities, some older Unix-like systems, embedded devices, or specific legacy software may still require a <i>termcap</i> database. <i>infotocap</i> provides the necessary translation step to ensure such environments can correctly interpret and utilize terminal features described in the more modern <i>terminfo</i> format.


title: OUTPUT STRUCTURE
content:
The output of <i>infotocap</i> is a human-readable text file formatted according to the <i>termcap</i> syntax. Each terminal description typically starts with a line containing various terminal names separated by '|', followed by a series of colon-separated capability definitions. These capabilities include Boolean flags, numeric values, and string sequences that define how a terminal behaves. The generated file is intended to be used as a source for building a <i>termcap</i> database or for direct consumption by applications that parse the <i>termcap</i> format.


title: HISTORY
content:
<i>infotocap</i> is part of the <i>ncurses</i> (new curses) project, a free software emulation of the System V Release 4.0 (SVr4) <i>curses</i> library. The original <i>curses</i> library and its associated tools were developed to provide a portable way for applications to interact with different types of text-based terminals.<br><br>The terminal capability database evolved from <i>termcap</i> (prevalent in BSD systems) to the more powerful and structured <i>terminfo</i> (from System V). As <i>terminfo</i> became the standard, tools like <i>infotocap</i> were developed to bridge the gap, allowing <i>terminfo</i> source files to be utilized by systems or applications still relying on the older <i>termcap</i> format. This ensured backward compatibility and facilitated migration paths for software environments transitioning between these two standards. Its development reflects the ongoing need to support legacy systems while leveraging modern terminal capabilities.


title: SYNOPSIS
content:
<B>init</B> [ <I>RUNLEVEL</I> ]<br><B>init</B> [ <I>OPTIONS</I> ] (as a symlink to modern init systems)


title: PARAMETERS
content:
<b>RUNLEVEL (0-6, s/S)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specifies the desired system runlevel. On modern systems, these are mapped to <B>systemd</B> targets.</I><br><br><b>0</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Halts the system (poweroff.target).</I><br><br><b>1, s, or S</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Enters single-user mode for maintenance (rescue.target).</I><br><br><b>2</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Multiuser mode without network filesystems (SysVinit specific, typically multi-user.target).</I><br><br><b>3</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Full multiuser mode with text-based login (multi-user.target).</I><br><br><b>4</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Not typically used; user-definable.</I><br><br><b>5</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Full multiuser mode with graphical login (graphical.target).</I><br><br><b>6</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Reboots the system (reboot.target).</I><br><br>


title: DESCRIPTION
content:
<I>The <B>init</B> command, short for initialization, is the very first process launched by the kernel during a Unix-like operating system's boot sequence, always assigned Process ID (PID) 1. Historically, it was responsible for reading the <B>/etc/inittab</B> file to determine the system's runlevel and then launching all necessary services and processes based on that configuration. It acted as the parent of all other processes, supervising them and cleaning up after orphaned processes. If <B>init</B> were to terminate, the system would typically panic and halt.<br><br>In modern Linux distributions, the traditional SysVinit implementation has largely been superseded by more advanced init systems like <B>systemd</B> (the de-facto standard) or Upstart. On these systems, the <B>init</B> command itself is often a symbolic link to the newer init system's executable (e.g., <B>/sbin/init</B> -> <B>/lib/systemd/systemd</B>). While it retains its PID 1 status and core responsibility for system initialization and service management, the underlying mechanisms and configuration files have evolved. <B>systemd</B> manages system startup, services, logging, device management, and more in a highly parallelized and efficient manner, using "targets" instead of numerical runlevels.</I>


title: CAVEATS
content:
<I>On most contemporary Linux distributions, <B>init</B> is a symbolic link to <B>systemd</B>. Direct invocation of <B>init</B> with runlevel arguments will typically trigger <B>systemd</B>'s corresponding target switch. Executing <B>init</B> directly after system boot (e.g., <B>init 6</B>) requires root privileges and will initiate a system-wide action (like rebooting), potentially disrupting user sessions or ongoing processes. Exercise caution.</I>


title: PID 1
content:
<I>The <B>init</B> process is unique in that it is always assigned Process ID (PID) 1. This special status means it is the first user-space process and serves as the parent of all other processes. If any process becomes orphaned (its parent terminates), <B>init</B> inherits it.</I>


title: RUNLEVELS VS. TARGETS
content:
<I>Historically, <B>init</B> systems like <B>SysVinit</B> used numerical "runlevels" (0-6) to define distinct system states (e.g., single-user, multi-user, graphical). Modern <B>systemd</B> replaces these with named "targets" (e.g., <B>rescue.target</B>, <B>multi-user.target</B>, <B>graphical.target</B>). For backward compatibility, <B>init</B> often still accepts runlevel numbers, which <B>systemd</B> then maps to the appropriate target.</I>


title: HISTORY
content:
<I>The concept of <B>init</B> originates from early Unix systems developed at Bell Labs, designed to be the first process after the kernel boots. The most widely adopted implementation for many decades was <B>SysVinit</B> (System V init), which relied on the <B>/etc/inittab</B> file and the concept of runlevels to manage services sequentially. While robust, <B>SysVinit</B>'s sequential nature could lead to slower boot times.<br><br>Starting in the late 2000s, new init systems emerged to address perceived limitations, notably <B>Upstart</B> (developed by Ubuntu) and <B>systemd</B> (primarily by Red Hat). <B>systemd</B>, with its parallelization, cgroups integration, and comprehensive suite of tools, rapidly gained traction and became the default init system for the majority of mainstream Linux distributions (including Fedora, Debian, Ubuntu, CentOS, RHEL, Arch Linux) by the mid-2010s, largely replacing <B>SysVinit</B> and <B>Upstart</B>.</I>


title: DESCRIPTION
content:
The <b>init-checkconf</b> command is a utility primarily found on Linux systems utilizing the <i>SysVinit</i> initialization system. Its main purpose is to perform a syntax check on the <i>/etc/inittab</i> file, which defines the processes to be started at various runlevels.<br><br>By validating this crucial configuration file, <b>init-checkconf</b> helps prevent potential boot failures or unexpected system behavior caused by malformed entries. It parses the <i>inittab</i> file, checking for correct syntax, valid runlevel definitions, and proper command arguments. If errors are detected, it typically reports the line number where the issue occurred, making debugging easier. This command is a valuable tool for system administrators maintaining older systems or specific environments where SysVinit is still in use, ensuring the integrity of the system's core boot configuration.


title: CAVEATS
content:
This command is largely obsolete on modern Linux distributions that use <i>systemd</i>, <i>Upstart</i>, or other contemporary init systems. It is primarily relevant for systems still running <i>SysVinit</i>. Its presence and behavior can vary slightly between different distributions or specific <i>SysVinit</i> implementations.


title: DEFAULT BEHAVIOR
content:
When invoked without the optional <i>FILE</i> argument, <b>init-checkconf</b> defaults to checking the syntax of the system's primary <i>SysVinit</i> configuration file, <i>/etc/inittab</i>.


title: EXIT STATUS
content:
The command typically exits with a status of <b>0</b> upon successful validation of the configuration file. A non-zero exit status indicates that syntax errors were found or that the specified file could not be accessed.


title: HISTORY
content:
<b>init-checkconf</b> emerged as a supporting utility alongside the widespread adoption of the <i>SysVinit</i> system in Linux and Unix-like operating systems. Its development was driven by the need to ensure the robustness of the boot process by validating the critical <i>/etc/inittab</i> configuration file. With the transition to modern init systems like <i>systemd</i> starting in the early 2010s, its relevance has significantly diminished, although it remains a component in distributions that maintain <i>SysVinit</i> compatibility or as part of legacy system management.


title: SYNOPSIS
content:
<b>initctl</b> [<i>OPTIONS</i>] <i>COMMAND</i> [<i>JOB</i>|<i>EVENT</i>] [<i>KEY=VALUE...</i>]<br><b>initctl</b> <i>status</i> [<i>JOB</i>]<br><b>initctl</b> <i>list</i>


title: PARAMETERS
content:
<b><b>--system</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect to the system <b>Upstart</b> init daemon (default).<br><br><b><b>--user</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect to the user <b>Upstart</b> init daemon, managing user-specific jobs.<br><br><b><b>--session</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect to the D-Bus session bus instead of the system or user bus.<br><br><b><b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress most output from the command.<br><br><b><b>--no-wait</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not wait for job start/stop/restart/reload to complete before exiting. The command returns immediately.<br><br><b><b>start <i>JOB</i> [<i>KEY=VALUE...</i>]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the specified <i>JOB</i>. Optional <i>KEY=VALUE</i> pairs are passed as environment variables to the job process.<br><br><b><b>stop <i>JOB</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stops the specified <i>JOB</i> gracefully.<br><br><b><b>restart <i>JOB</i> [<i>KEY=VALUE...</i>]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restarts the specified <i>JOB</i>, effectively stopping it if running and then starting it again. Optional <i>KEY=VALUE</i> pairs are passed to the restarted job.<br><br><b><b>reload <i>JOB</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends a <i>SIGHUP</i> signal to the main process of the specified <i>JOB</i>. This is typically used to make a service reload its configuration without fully restarting.<br><br><b><b>status [<i>JOB</i>]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current status of the specified <i>JOB</i> (e.g., 'running', 'stopped', 'waiting'). If no <i>JOB</i> is provided, it lists the status of all known <b>Upstart</b> jobs.<br><br><b><b>list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all known <b>Upstart</b> jobs along with their current state (e.g., 'start/running', 'stop/waiting').<br><br><b><b>show-config <i>JOB</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the configuration details for the specified <i>JOB</i>, as defined in its <i>.conf</i> file in <i>/etc/init/</i>.<br><br><b><b>emit <i>EVENT</i> [<i>KEY=VALUE...</i>]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Emits a custom <i>EVENT</i> to the <b>Upstart</b> init daemon. This can trigger other jobs that are configured to respond to this event. Optional <i>KEY=VALUE</i> pairs are passed as event arguments.<br><br><b><b>version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version of the <b>Upstart</b> init system and the <i><b>initctl</b></i> utility.<br><br><b><b>log-priority <i>PRIORITY</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the minimum log priority for messages output by the <b>Upstart</b> init daemon. <i>PRIORITY</i> can be one of 'debug', 'info', 'warn', 'error', 'fatal', 'none'.<br><br><b><b>check-config</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks all <b>Upstart</b> job configuration files (<i>.conf</i>) for syntax errors and potential issues without modifying any services.<br><br><b><b>help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available commands and options for <i><b>initctl</b></i>.<br><br>


title: DESCRIPTION
content:
<i><b>initctl</b></i> is a command-line utility used to interact with the <b>Upstart</b> init system. It provides an interface to control and query the state of services and jobs managed by <b>Upstart</b>. Users can start, stop, restart, and check the status of specific jobs, or list all configured jobs.<br><br>While <b>Upstart</b> was primarily used in Ubuntu and some other distributions as an event-based replacement for the traditional System V init, it has largely been superseded by <b>systemd</b> in modern Linux distributions. However, <i><b>initctl</b></i> remains relevant for legacy systems still running <b>Upstart</b>.<br><br>It communicates with the <b>Upstart</b> init daemon (<i><b>init(8)</b></i>) via D-Bus to perform its operations, allowing for robust and dynamic service management based on system events.


title: CAVEATS
content:
<i><b>initctl</b></i> is specific to the <b>Upstart</b> init system. It will not function on systems that use <b>systemd</b> (like modern Ubuntu, Fedora, Debian) or traditional System V init for service management. Operations affecting system services typically require root privileges (e.g., using <i>sudo</i> or being logged in as root). The behavior of <i><b>initctl</b></i> commands depends entirely on the definitions within the <b>Upstart</b> job configuration files (e.g., <i>/etc/init/apache2.conf</i>).


title: JOB CONFIGURATION
content:
<b>Upstart</b> jobs are defined in plain text files with a <i>.conf</i> extension, typically located in the <i>/etc/init/</i> directory. These configuration files specify a job's behavior, including when it should start (on which events), what command to execute, how to stop it, and how to handle respawning or pre-start/post-stop tasks. <i><b>initctl</b></i> interprets and acts upon these definitions, making the <i>.conf</i> files central to <b>Upstart</b> service management.


title: EVENT-DRIVEN SYSTEM
content:
The core of <b>Upstart</b>'s design is its event-driven nature. Instead of relying solely on runlevels, <b>Upstart</b> responds to events generated by the system, kernel, or even other jobs. For example, a job might be configured to start <i>on filesystem and started networking</i>. <i><b>initctl emit</b></i> allows administrators to manually generate these events, providing flexible control over service orchestration and custom workflows.


title: HISTORY
content:
<b>Upstart</b> was developed by Canonical Ltd. for the Ubuntu distribution, first appearing as the default init system in Ubuntu 6.10 (Edgy Eft) released in 2006. It aimed to provide a more dynamic, event-driven replacement for the traditional System V init system, addressing shortcomings such as slow boot times and inability to handle asynchronous hardware events (e.g., hotplugging USB devices).<br><br><i><b>initctl</b></i> served as the primary command-line interface to interact with the <b>Upstart</b> daemon throughout its tenure. <b>Upstart</b> was also adopted by other distributions, including RHEL/CentOS 6.x. However, with the rise of <b>systemd</b>, which offered similar and often more comprehensive features, <b>Upstart</b>'s adoption waned. Ubuntu transitioned from <b>Upstart</b> to <b>systemd</b> starting with version 15.04 (Vivid Vervet) in 2015, marking the end of its widespread use as a default init system.


title: PARAMETERS
content:
<b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include all Upstart jobs in the graph, even those without explicit 'start on' or 'stop on' event dependencies recorded by the tool. By default, it only includes jobs directly involved in events.<br><br><b><b>-n</b>, <b>--no-sessions</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude session jobs (jobs located in <i>/usr/share/upstart/sessions</i>) from the generated graph. These jobs are typically user-specific or desktop environment-related.<br><br><b><b>-o</b> <I>FILE</I>, <b>--output</b> <I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the generated DOT graph to the specified <I>FILE</I> instead of printing it to standard output (stdout). This is useful for saving the graph description directly.<br><br><b><b>-d</b> <I>DIRECTORY</I>, <b>--directory</b> <I>DIRECTORY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an additional <I>DIRECTORY</I> to scan for Upstart job configuration files. This option can be used multiple times to include jobs from various custom locations.<br><br>


title: DESCRIPTION
content:
The <b>initctl2dot</b> command is a utility for generating a graphical representation of Upstart job dependencies. It parses Upstart job configuration files (typically found in <i>/etc/init</i>, <i>/etc/init.d</i>, and <i>/usr/share/upstart/sessions</i>) to identify 'start on' and 'stop on' conditions and construct a directed graph showing how jobs relate to each other.<br><br>The output is in the <I>DOT language</I>, a plain text graph description language, which can then be processed by graph visualization software like <I>Graphviz</I> (specifically the <b>dot</b> command) to render various image formats (e.g., PNG, SVG). This tool is invaluable for system administrators and developers to understand, analyze, and troubleshoot the boot sequence and service interdependencies on systems using the Upstart init system.


title: CAVEATS
content:
<b>initctl2dot</b> is part of the Upstart init system, which has largely been superseded by <I>systemd</I> in most modern Linux distributions (e.g., Debian, Ubuntu from 15.04 onwards, Fedora, CentOS, RHEL). Consequently, this command is primarily useful on older systems or distributions that still utilize Upstart. It only generates the graph description; external tools like <I>Graphviz</I> (specifically the <b>dot</b> command) are required to render the visual graph.


title: TYPICAL USAGE
content:
The most common way to use <b>initctl2dot</b> is to pipe its output directly to the <b>dot</b> command from the <I>Graphviz</I> package to generate an image file:<br><br><code><b>initctl2dot</b> | <b>dot</b> -Tpng -o upstart_dependencies.png</code><br><br>This command will generate a PNG image named <i>upstart_dependencies.png</i> showing the job dependencies. You can replace 'png' with 'svg' for a scalable vector graphics output.


title: HISTORY
content:
<b>initctl2dot</b> was developed as a diagnostic and visualization tool within the Upstart project by Canonical Ltd. Upstart served as the default init system for Ubuntu from version 6.10 (Edgy Eft) until 14.10 (Utopic Unicorn). During this period, <b>initctl2dot</b> was a valuable utility for understanding the complex boot processes and service dependencies. Its prominence declined as Linux distributions, including Ubuntu, transitioned to <I>systemd</I> as their primary init system, rendering Upstart-specific tools less relevant on newer installations.


title: SYNOPSIS
content:
<b>update-initramfs</b> <b>-c</b> | <b>-u</b> | <b>-d</b> [<b>-k</b> <i>kernel_version</i>] [<b>-b</b> <i>boot_directory</i>] [<b>-t</b> <i>temp_directory</i>] [<b>-v</b>] [<b>-h</b>]


title: PARAMETERS
content:
<b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new initramfs image for the specified kernel version.<br><br><b><b>-u</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Update an existing initramfs image for the specified kernel version.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete an initramfs image for the specified kernel version.<br><br><b><b>-k</b> <i>kernel_version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the kernel version for which the initramfs image should be created, updated, or deleted. If omitted, the currently running kernel version is used.<br><br><b><b>-b</b> <i>boot_directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative boot directory where the initramfs images are stored (defaults to <i>/boot</i>).<br><br><b><b>-t</b> <i>temp_directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative temporary directory for image generation.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing detailed progress during image generation.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br>


title: DESCRIPTION
content:
<i>initramfs-tools</i> is a suite of scripts and utilities primarily used on Debian-based Linux systems to create, update, and manage initial RAM filesystem (initramfs) images. An initramfs is a compressed cpio archive containing a minimal root filesystem, which is loaded into memory during the early stages of the Linux boot process.<br><br>Its purpose is to perform essential boot tasks, such as loading necessary kernel modules (e.g., for disk controllers or filesystems), detecting hardware, and locating the actual root filesystem. Once these tasks are complete, the system "switches root" to the real filesystem. The main user-facing command provided by this package is <b>update-initramfs</b>, which automatically generates or modifies the initramfs image whenever a new kernel is installed or its configuration changes, ensuring the system can successfully boot. This mechanism allows for flexible and modular kernel configurations, enabling the use of a generic kernel image across diverse hardware while still providing necessary device support early in the boot sequence.


title: CAVEATS
content:
Improper configuration of <i>initramfs-tools</i> or its hooks can lead to an unbootable system. Manually modifying the initramfs without understanding its internal structure can cause boot failures.<br><br>Custom hooks or configurations might require rebuilding the initramfs image using <b>update-initramfs</b> after changes to take effect.


title: INITRAMFS HOOKS
content:
<i>initramfs-tools</i> uses a system of 'hooks' – scripts executed during image creation – to include specific modules, binaries, or configuration files into the initramfs. These hooks are located in <i>/etc/initramfs-tools/hooks</i> and <i>/usr/share/initramfs-tools/hooks</i>. They allow system administrators and package maintainers to customize the early boot environment to support specific hardware, encryption setups (e.g., LUKS), or network boot scenarios.


title: <I>MKINITRAMFS</I> VS <I>UPDATE-INITRAMFS</I>
content:
While <i>initramfs-tools</i> is the package, the primary command for users is <b>update-initramfs</b>. This command acts as a wrapper around the lower-level <b>mkinitramfs</b> script. <b>mkinitramfs</b> is directly responsible for building the initramfs image, but <b>update-initramfs</b> provides a more convenient interface, handling versioning, default paths, and integration with kernel package management. In most cases, users should use <b>update-initramfs</b>.


title: HISTORY
content:
The concept of an initial RAM disk (<i>initrd</i>) was introduced in Linux to provide a way to load necessary modules before the root filesystem was mounted. <i>initramfs-tools</i> emerged primarily in the Debian/Ubuntu ecosystem as a successor and an improvement upon the <i>initrd</i> mechanism, leveraging the <i>cpio</i> format and the kernel's <i>initramfs</i> support. This shift allowed for a more flexible and robust early boot environment, moving from a block device emulation to a more integrated filesystem image directly loaded by the kernel.<br><br>Its development has focused on automating the creation of these images, especially during kernel package installations and upgrades, ensuring system bootability across various hardware configurations.


title: PARAMETERS
content:
<b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <I>Inkscape</I> version and exits.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with command-line options.<br><br><b>-f, --file=<i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the specified SVG <I>FILE</I>. Multiple files can be specified for batch processing.<br><br><b>-o, --export-filename=<i>FILENAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output <I>FILENAME</I> for exported documents. This is used in conjunction with export options like <B>--export-type</B>.<br><br><b>-e, --export-png=<i>FILENAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports the document or selected objects to a PNG image file with the specified <I>FILENAME</I>.<br><br><b>--export-type=<i>TYPE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the export format, such as <B>png</B>, <B>pdf</B>, <B>ps</B>, <B>eps</B>, <B>svg</B>, <B>plain-svg</B>, <B>optimized-svg</B>, <B>webp</B>, or <B>jpg</B>.<br><br><b>--export-area-drawing</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports the area defined by the drawing content (bounding box of all objects), rather than the page boundaries.<br><br><b>--export-id=<i>OBJECT_ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports only the object with the specified <I>OBJECT_ID</I>. Useful for exporting individual elements from a complex SVG.<br><br><b>--actions=<i>ACTIONS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a semicolon-separated list of <I>ACTIONS</I> on the document and then exits. This is a powerful feature for scripting complex operations and transformations.<br><br><b>--shell</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enters an interactive shell mode, allowing multiple commands to be executed without restarting <I>Inkscape</I> for each operation, ideal for complex scripting.<br><br><b>--without-gui</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs <I>Inkscape</I> in a headless mode, without displaying the graphical user interface. Ideal for batch processing and server-side operations.<br><br>


title: DESCRIPTION
content:
<i>Inkscape</i> is a powerful free and open-source vector graphics editor. It uses <B>Scalable Vector Graphics (SVG)</B> as its native format, supporting many advanced SVG features like markers, clones, and alpha blending. It offers a rich set of tools for creating and editing vector artwork, including tools for drawing, shape creation, text manipulation, path operations, and various transformations.<br><br>While primarily known for its graphical user interface, <I>Inkscape</I> also provides a robust command-line interface, making it suitable for scripting, batch processing, and automated tasks such as converting SVG files to other formats (PNG, PDF, EPS, etc.) or applying modifications without opening the GUI. It is widely used by designers, illustrators, and web developers for creating illustrations, logos, diagrams, icons, and web graphics.


title: CAVEATS
content:
Complex or very large SVG files can be resource-intensive, potentially leading to slow performance or high memory consumption. The command-line interface, while powerful, requires familiarity with internal object IDs and a specific action syntax for advanced scripting, which can have a learning curve. SVG rendering can sometimes vary subtly across different browsers or viewers due to varying levels of SVG standard implementation.


title: KEY FEATURES
content:
Native <B>Scalable Vector Graphics (SVG)</B> format support, comprehensive object creation and manipulation tools (paths, shapes, text), extensive text support, powerful alpha blending, gradients, patterns, and filters. It also supports <B>extensibility</B> through Python scripts and a rich set of command-line actions for custom functionalities.


title: COMMON USE CASES
content:
Creation of <B>logos</B>, <B>icons</B>, <B>web graphics</B>, <B>illustrations</B>, <B>diagrams</B>, and <B>technical drawings</B>. Its robust command-line capabilities make it invaluable for <B>batch image conversion</B>, <B>SVG optimization</B>, and <B>automated design workflows</B> in scripting environments.


title: HISTORY
content:
<i>Inkscape</i> was originally forked from the <B>Sodipodi</B> project in 2003, with the goal of creating a vector graphics editor fully compliant with the SVG standard and focusing on a user-friendly interface. The project emphasizes adherence to W3C SVG standards, usability, and extensibility. Over the years, it has grown significantly, gaining a large community of users and developers, and becoming a leading open-source alternative to commercial vector graphics software.


title: PARAMETERS
content:
<b><i>-h</i>, <i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a usage message and exits.<br><br><b><i>-t</i>, <i>--test</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a test query for ink levels without updating the levels stored in CUPS.<br><br><b><i>-s</i>, <i>--status</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Queries and displays ink levels. This is the default behavior if no other action option is specified.<br><br><b><i>-u</i>, <i>--update</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Queries the printer for ink levels and updates the information within the CUPS system. This is useful for refreshing stored levels.<br><br><b><i>-v</i>, <i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version information for the <i>cups-inkview</i> utility.<br><br><b><i>printer_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the specific printer to query. If omitted, the command attempts to query all configured printers.<br><br>


title: DESCRIPTION
content:
The <i>inkview</i> command, typically implemented as <i>cups-inkview</i>, is a command-line utility designed to query and display the current ink levels of printers configured with the Common Unix Printing System (CUPS). It can retrieve the ink status for a specific printer by name or iterate through all configured printers. This tool is often utilized by graphical user interfaces or system monitoring applications to present up-to-date printer status information. Beyond mere display, <i>inkview</i> can also update the stored ink levels within CUPS, which is particularly useful for printers that do not automatically report or refresh their status, ensuring CUPS has the most accurate information.


title: CAVEATS
content:
<b>Limitations:</b><br>1. <i>inkview</i> (specifically <i>cups-inkview</i>) relies on the printer's CUPS backend to report ink levels. If the backend or the printer itself does not support this functionality, the command may not return accurate or any data.<br>2. The reported ink levels might not always be perfectly real-time or accurate for all printer models, depending on how frequently the printer updates its internal status or how the backend interprets it.<br>3. This command primarily focuses on CUPS-managed printers. For specific printer brands like HP, <i>hp-inkview</i> (part of HPLIP) might offer more detailed or reliable information, especially if the <i>cups-inkview</i> backend integration is limited.<br>4. Requires CUPS to be running and printers to be properly configured.


title: USAGE EXAMPLES
content:
<b>inkview MyPrinter</b><br>This command will display the ink levels for the printer named "MyPrinter".<br><br><b>inkview --update MyPrinter</b><br>This command will query the printer "MyPrinter" for its current ink levels and update the information stored in CUPS, refreshing its status.


title: HISTORY
content:
The <i>cups-inkview</i> utility is part of the <i>cups-filters</i> project, which originated from a split from the main CUPS project. <i>cups-filters</i> provides various backends, filters, and utilities for CUPS, aiming to support a wider range of printers and functionalities. <i>cups-inkview</i> was developed to standardize and simplify the process of retrieving ink levels for printers managed by CUPS, leveraging common CUPS APIs and printer drivers. Its development is ongoing, adapting to new printer technologies and improving compatibility across diverse printer models.


title: SYNOPSIS
content:
<br><b>inotifywait</b> [<i>OPTIONS</i>] <i>FILE</i>...<br><b>inotifywait</b> [<i>OPTIONS</i>] <b>--fromfile</b> <i>FILE</i>


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information and exits.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints more verbose information about the events. This includes cookie numbers for move events.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses output to standard output, only exit status is significant.<br><br><b>-m, --monitor</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keeps monitoring for events indefinitely rather than exiting after the first event. Requires an explicit signal to terminate.<br><br><b>-r, --recursive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors directories recursively. This adds all subdirectories to the watch list.<br><br><b>-t <seconds>, --timeout <seconds></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a timeout in seconds. If no event occurs within this period, the command exits with a non-zero status. A value of 0 means no timeout.<br><br><b>-e <event1>,<event2>,..., --event <event1>,<event2>,...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a comma-separated list of events to watch for. If omitted, all events are watched. Common events include: access, modify, attrib, close_write, open, create, delete, move, delete_self.<br><br><b>-o <file>, --outfile <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints events to the specified file instead of standard output.<br><br><b>--csv</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs events in CSV (Comma Separated Values) format, suitable for parsing by other programs.<br><br><b>--fromfile <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads files and directories to watch from the specified file, one path per line. Ignores other paths on the command line.<br><br><b>--format <format_string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format for events using a format string. Supported format specifiers include: %w (watched path), %f (filename), %e (event names), %T (time stamp), %Xe (event codes). Default: '%w %f %e'.<br><br><b>--timefmt <format_string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the format for the %T time specifier in --format. Uses strftime(3) format codes.<br><br><b>--exclude <pattern></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes events for files matching the given shell-style glob pattern. The pattern is applied to the filename part of the path.<br><br><b>--excludei <pattern></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to --exclude, but the pattern matching is case-insensitive.<br><br>


title: DESCRIPTION
content:
<br><i>inotifywait</i> is a command-line utility that waits for specified filesystem events to occur within a directory or a set of files. It leverages the Linux kernel's <I>inotify</I> interface, which provides a mechanism to monitor filesystem events like file creation, deletion, modification, access, moving, and attribute changes. When an event occurs, <I>inotifywait</I> prints the event details (e.g., the watched path, event type, and filename) to standard output and then exits, unless the <b>--monitor</b> option is used, in which case it continues watching. This makes it particularly useful for scripting, allowing other commands or scripts to react automatically to changes in the filesystem. It's part of the <I>inotify-tools</I> package.


title: CAVEATS
content:
<br>1. <I>Kernel Limits</I>: The number of inotify watches and user file descriptors are limited by kernel parameters (e.g., <B>fs.inotify.max_user_watches</B>, <B>fs.inotify.max_user_instances</B>, <B>fs.inotify.max_queued_events</B>). Monitoring a very large number of files or directories recursively can exceed these limits.<br>2. <I>Event Atomicity</I>: Inotify events are not necessarily atomic. For example, a single file copy operation might generate multiple <B>create</B>, <B>modify</B>, and <B>close_write</B> events.<br>3. <I>Recursive Monitoring</I>: When using <B>-r</B>, all new subdirectories created within a watched directory are automatically watched. However, moving a directory from outside into a watched tree might not trigger watches for its contents immediately, depending on the kernel version and specific operation.<br>4. <I>Temporary Files</I>: Many applications save files by writing to a temporary file and then moving it over the original. This often results in <B>create</B> and <B>moved_to</B> events rather accurate than <B>modify</B> events on the original file.


title: COMMON EVENT TYPES:
content:
<br><i>access</i>: A file was read.<br><i>modify</i>: A file was written to.<br><i>attrib</i>: Metadata changed (permissions, timestamps, etc.).<br><i>close_write</i>: A file opened for writing was closed.<br><i>close_nowrite</i>: A file not opened for writing was closed.<br><i>open</i>: A file was opened.<br><i>moved_from</i>: A file/directory was moved from the watched directory.<br><i>moved_to</i>: A file/directory was moved into the watched directory.<br><i>create</i>: A file/directory was created within the watched directory.<br><i>delete</i>: A file/directory was deleted within the watched directory.<br><i>delete_self</i>: The watched file/directory itself was deleted.<br><i>unmount</i>: The filesystem containing the watched file/directory was unmounted.


title: EXIT STATUS:
content:
<br><i>0</i>: An event was received, or the command was terminated normally while monitoring (e.g., via SIGINT).<br><i>1</i>: An error occurred (e.g., invalid arguments, cannot open file, kernel limits reached).<br><i>2</i>: A timeout occurred before any event was received (only when <B>--timeout</B> is used).


title: HISTORY
content:
<br>The inotify API was introduced into the Linux kernel in version 2.6.13, released in 2005. The <I>inotify-tools</I> package, which includes <B>inotifywait</B> and <B>inotifywatch</B>, was developed shortly after to provide user-space utilities to interact with this new kernel feature, making it accessible for scripting and system monitoring tasks. Its development was driven by the need for more efficient and robust real-time filesystem monitoring than older methods like polling or kernel hacks.


title: PARAMETERS
content:
<b><b>-m, --monitor</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continuously monitor for events; don't exit after the first event occurs.<br><br><b><b>-r, --recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor directories recursively. Events are reported for files and directories inside the monitored path, as well as the path itself.<br><br><b><b>-q, --quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output less information, primarily for scripting. Does not output event details but reports errors.<br><br><b><b>-e <I>event</I>, --event <I>event</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify event(s) to watch for. If omitted, all events are monitored. Multiple events can be specified using multiple <b>-e</b> options. Examples include <i>create</i>, <i>modify</i>, <i>delete</i>, <i>access</i>, <i>open</i>, <i>close_write</i>, <i>moved_from</i>, <i>moved_to</i>.<br><br><b><b>-t <I>seconds</I>, --timeout <I>seconds</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit after specified time if no events occur. A timeout of 0 will cause <b>inotifywait</b> to exit immediately if no events are pending.<br><br><b><b>--format <I>format_string</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output format for events using printf-like format specifiers (e.g., %w for watched path, %f for filename, %e for events).<br><br><b><b>--timefmt <I>format_string</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the time format for the %T format specifier when using <b>--format</b>. Uses <i>strftime(3)</i> syntax.<br><br><b><b>-o <I>file</I>, --outfile <I>file</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print events to a specified file instead of standard output.<br><br><b><b>--fromfile <I>file</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read paths to watch from a file, one path per line. Useful for watching many paths simultaneously.<br><br>


title: DESCRIPTION
content:
<b>inotifywait</b> is a command-line utility from the <i>inotify-tools</i> package that provides a convenient interface to the Linux kernel's inotify API. It effectively allows a script or user to wait for and respond to specific filesystem events occurring on designated files or directories. When executed, <b>inotifywait</b> blocks until one of the specified events (such as creation, modification, deletion, or movement of files) happens.<br><br>This <i>real-time monitoring</i> capability makes it invaluable for various automated tasks, including triggering backups when files are saved, synchronizing content across different locations upon changes, or analyzing log files as new entries are written. It can monitor multiple paths simultaneously and provides options to filter events by type, output information in a custom format, and operate in a recursive or continuous monitoring mode. By leveraging the efficient inotify kernel subsystem, <b>inotifywait</b> offers a performant way to react to filesystem changes without constant polling.


title: CAVEATS
content:
<b>inotifywait</b> does not report events from network filesystems (e.g., NFS, SMB, AFS) as the underlying inotify kernel API only monitors local filesystems.<br><br>There are kernel limits on the number of watches that can be active simultaneously, which might be hit when recursively monitoring very large directory trees.<br><br>Recursive monitoring (<b>-r</b>) on extremely large or busy directory structures can be resource-intensive and potentially impact system performance.


title: COMMON USE CASES
content:
<b>inotifywait</b> is frequently used for scripting automated tasks such as: triggering website deployments when source files change, initiating backups or synchronization scripts upon file modifications, monitoring log files for specific patterns as new entries are added, and auditing file access or changes for security purposes.


title: EVENT TYPES
content:
Some of the most commonly monitored event types include: <i>create</i> (file/directory created), <i>modify</i> (file content modified), <i>delete</i> (file/directory deleted), <i>access</i> (file read), <i>open</i> (file opened), <i>close_write</i> (file closed after being opened for writing), <i>moved_from</i> (file/directory moved from), and <i>moved_to</i> (file/directory moved to).


title: HISTORY
content:
The inotify API, which <b>inotifywait</b> leverages, was introduced into the Linux kernel in version 2.6.13 (2005). The <i>inotify-tools</i> package, including <b>inotifywait</b> and <b>inotifywatch</b>, was subsequently developed to provide convenient user-space utilities for interacting with this new kernel feature, making filesystem event monitoring accessible for scripting and automation.


title: PARAMETERS
content:
<b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information and exits.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows version information and exits.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs <b>inputattach</b> to attempt to reopen the serial device if it encounters a hangup or becomes unavailable.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <b>inputattach</b> from daemonizing (forking into the background). It will remain in the foreground.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output, providing detailed information about the data being read and processed.<br><br><b>-o <I>speed</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overrides the default baud rate for the serial port. <I>speed</I> should be a numerical value like <i>9600</i> or <i>19200</i>.<br><br><b>-s <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a PID file at the specified <I>file</I> path when daemonizing. This file contains the process ID of the daemon.<br><br><b><I>protocol</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the input device protocol to be used for interpreting serial data. Examples include <i>microsoft</i>, <i>logitech</i>, <i>ps2</i>, <i>elo</i>, <i>wacom</i>, <i>keyboard</i>, <i>spaceorb</i>, <i>magellan</i>, <i>usbtouchscreen</i>, etc.<br><br><b><I>device</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the serial device file (e.g., <i>/dev/ttyS0</i>, <i>/dev/ttyUSB0</i> for USB-to-serial adapters, or <i>/dev/ser1</i>).<br><br>


title: DESCRIPTION
content:
The <b>inputattach</b> command is a crucial utility designed to connect various serial input devices to the Linux kernel's robust input subsystem. It operates by reading raw data from a specified serial port (e.g., <i>/dev/ttyS0</i>), interpreting this data according to a predefined input protocol (such as <i>microsoft</i>, <i>logitech</i>, <i>wacom</i>, or <i>elo</i>), and subsequently injecting corresponding input events into the system. This process allows traditional serial devices, which lack direct kernel support via generic serial drivers, to function seamlessly as standard input devices. These devices then become accessible to user-space applications like X servers, desktop environments, or custom industrial control software. Primarily beneficial for integrating older hardware or specialized industrial equipment, <b>inputattach</b> typically runs in the foreground unless daemonized, continuously monitoring the serial port for input.


title: CAVEATS
content:
Requires <b>root privileges</b> to open serial devices and create input devices.<br>Can conflict with other processes attempting to access the same serial port.<br>Must be running for the attached device to function; often integrated as a system service.<br>Modern USB devices typically use kernel modules, making <b>inputattach</b> unnecessary or conflicting.<br>Some protocols might already be handled by kernel modules (e.g., PS/2 mice via <i>psmouse</i>), potentially leading to duplicate input events if both are active.


title: SUPPORTED PROTOCOLS
content:
<b>inputattach</b> supports a diverse range of serial input protocols, enabling compatibility with various types of devices. This includes numerous serial mouse protocols (e.g., <i>Microsoft</i>, <i>Logitech</i>, <i>PS/2</i>), touchscreen protocols (e.g., <i>ELO</i>, <i>Wacom</i>, <i>MicroTouch</i>), specialized joysticks (e.g., <i>SpaceOrb</i>, <i>Magellan</i>), and custom serial keyboard interfaces. The specific list can usually be found by running <b>inputattach -h</b>.


title: INTERACTION WITH THE INPUT LAYER
content:
The primary function of <b>inputattach</b> is to convert serial data streams into standardized input events that conform to the Linux kernel's <i>evdev</i> (event device) interface. <i>evdev</i> is the unified interface for all input devices, allowing applications like Xorg, Wayland compositors, and other desktop environments to automatically detect, configure, and utilize the attached device as if it were a native kernel-supported input device. This abstraction simplifies the development of user-space applications by providing a consistent input event stream.


title: HISTORY
content:
Part of the <i>input-tools</i> package, <b>inputattach</b> was developed to provide crucial support for legacy or specialized serial input devices in the evolving Linux environment. Its role has been to bridge the gap between these older peripherals and the modern Linux input subsystem, particularly the <i>evdev</i> interface. While the widespread adoption of USB and native kernel drivers has reduced its necessity for common peripherals, it remains an indispensable tool for integrating specific industrial, embedded, or vintage hardware systems where serial connectivity is paramount.


title: PARAMETERS
content:
<b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads the module even if it fails integrity verification, is tainted, or was built for a different kernel version. Use with extreme caution as this can lead to system instability.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints detailed messages to syslog during module insertion, providing more information about the loading process.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all non-critical error messages and warnings. Useful for scripting where only the command's exit code is checked.<br><br><b><b>-L</b>, <b>--lock</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Acquires an exclusive lock during the module insertion process. This is mainly used by higher-level utilities to prevent race conditions.<br><br><b><i>module</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The full path to the kernel module file (e.g., <i>/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/e1000/e1000.ko</i>). Unlike <b>modprobe</b>, <b>insmod</b> does not search default module paths.<br><br><b><i>module_parameters</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional parameters passed to the module during loading, typically in the format <i>param=value</i>. Multiple parameters can be provided space-separated.<br><br>


title: DESCRIPTION
content:
<b>insmod</b> is a low-level utility used to load a specified kernel module into the Linux kernel. Unlike <b>modprobe</b>, <b>insmod</b> does not resolve dependencies or handle module aliases; it requires the exact path to the <i>.ko</i> (kernel object) file.<br><br>It's typically used by system administrators or during development to test new modules or load specific modules directly without the overhead of dependency resolution. When <b>insmod</b> loads a module, the module's code and data are integrated into the kernel's address space, making its functionalities available to the system.<br><br>It's a fundamental tool for managing kernel functionalities, but for general system operation, <b>modprobe</b> is often the preferred choice due to its advanced features. Using <b>insmod</b> requires root privileges and careful attention, as loading an unstable or incompatible module can lead to system instability or crashes.


title: CAVEATS
content:
<b>insmod</b> is a low-level tool. It does not resolve module dependencies; if a module requires another, you must load the dependencies manually beforehand. It also does not handle module aliases, so you must provide the exact path to the module file. For general use, <b>modprobe</b> is recommended as it automates dependency resolution and alias handling.<br><br>Loading an unstable or incorrectly compiled module can lead to kernel panics or system instability. Always ensure the module is compatible with your kernel version. Root privileges are required to use <b>insmod</b>.


title: MODULE PARAMETERS
content:
Many kernel modules accept parameters to modify their behavior at load time. These are passed directly after the module path, for example: <i>insmod mymodule.ko myparam=value anotherparam=1</i>. You can inspect a module's supported parameters and their descriptions using the <b>modinfo -p <i><module_path></i></b> command.


title: ERROR HANDLING
content:
If <b>insmod</b> fails, it typically prints an error message to <i>stderr</i> and returns a non-zero exit code. Common failures include an incorrect module path, missing dependencies (which <b>insmod</b> won't resolve), an incompatible kernel version, or permission issues. Checking <i>dmesg</i> or <i>syslog</i> often provides more detailed error information.


title: SECURITY CONSIDERATIONS
content:
Loading arbitrary kernel modules can introduce significant security risks, as kernel modules run in a highly privileged context within the kernel itself. A malicious or poorly written module can compromise system integrity, stability, and security. Always only load modules from trusted sources and ensure they are necessary for your system's operation.


title: HISTORY
content:
<b>insmod</b> has been a fundamental part of Linux's module management utilities since early kernel versions. It is part of the <i>module-init-tools</i> (or <i>kmod</i> on newer systems) package, which provides various utilities for loading, unloading, and managing kernel modules. Its role remains largely unchanged as a direct interface for module loading, even as higher-level tools like <b>modprobe</b> gained prominence for handling complex module interactions and dependencies, automating dependency resolution and alias handling.


title: SYNOPSIS
content:
<b>insserv</b> [<i>OPTIONS</i>] [<i>SCRIPT</i>...]<br><b>insserv</b> <i>-r</i> [<i>OPTIONS</i>] <i>SCRIPT</i>...


title: PARAMETERS
content:
<b>SCRIPT...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name(s) of the <i>init.d</i> script(s) to process. If no script is specified, <b>insserv</b> processes all scripts in the configured <i>init.d</i> directory.<br><br><b><i>-c, --config=runlevels</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the runlevels where the script should be configured. This overrides the <i>Default-Start</i> and <i>Default-Stop</i> LSB headers.<br><br><b><i>-d, --default</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use default runlevels for scripts lacking LSB headers, typically adding them to the startup sequence.<br><br><b><i>-D, --force-default</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the use of default runlevels, even if LSB headers are present in the script. Useful for overriding existing configurations.<br><br><b><i>-e, --enable</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly enable a specific script by creating the necessary links. This is the LSB-compliant way to enable a service.<br><br><b><i>-f, --force</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force installation or removal, ignoring some checks (e.g., missing LSB headers or dependency issues). Use with caution.<br><br><b><i>-F, --force-stop</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the stopping order for all scripts, ignoring LSB headers. Less commonly used.<br><br><b><i>-h, --help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a short help message and exit.<br><br><b><i>-k, --keep</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keep existing links for a script when reinstalling. New links are added, but old ones are not removed.<br><br><b><i>-p, --path=path</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative path to the <i>init.d</i> scripts directory, overriding the default system path.<br><br><b><i>-r, --remove</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove the specified script(s) from all runlevels, deleting the corresponding symbolic links.<br><br><b><i>-s, --show-script</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the LSB headers for a given script, useful for debugging or verifying compliance.<br><br><b><i>-v, --version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
The <b>insserv</b> command is a crucial utility within the <i>SysVinit</i> system, designed to manage and order initialization scripts. It automates the process of creating and maintaining the symbolic links found in the <i>rcX.d</i> directories (e.g., <i>rc0.d</i>, <i>rcS.d</i>, <i>rc2.d</i>). <b>insserv</b> parses the <i>Required</i>, <i>Provides</i>, <i>Should-Start</i>, <i>Should-Stop</i>, <i>Default-Start</i>, and <i>Default-Stop</i> LSB (Linux Standard Base) compliant headers within <i>init.d</i> scripts.<br><br>Based on these dependencies and runlevel information, it calculates the correct boot and shutdown order for services. This ensures that services start only after their prerequisites are available and stop gracefully before their dependencies are removed, maintaining system stability during boot-up and shutdown processes. It simplifies the administration of runlevel configurations by enforcing a consistent and dependency-aware service startup order.


title: CAVEATS
content:
The effectiveness of <b>insserv</b> heavily relies on the correct and compliant implementation of <i>LSB (Linux Standard Base)</i> headers within the <i>init.d</i> scripts. Scripts lacking these headers, or having incorrect ones, may not be processed correctly, leading to unexpected service startup or shutdown behavior. It is primarily designed for systems using <i>SysVinit</i> and is not directly used on systems that have adopted more modern init systems like <i>systemd</i> or <i>Upstart</i> for service management.


title: LSB HEADERS IN INIT SCRIPTS
content:
For <b>insserv</b> to function correctly, <i>init.d</i> scripts must contain specific LSB-compliant headers within a <code>### BEGIN INIT INFO</code> and <code>### END INIT INFO</code> block. These headers provide crucial metadata for dependency resolution and runlevel configuration. Key headers include:<br><b><i>Required</i></b>: Specifies services that must be running before this script starts.<br><b><i>Provides</i></b>: Declares the service name provided by this script.<br><b><i>Should-Start</i></b> / <b><i>Should-Stop</i></b>: Lists services that ideally should be started/stopped in conjunction with this script.<br><b><i>Default-Start</i></b> / <b><i>Default-Stop</i></b>: Defines the default runlevels where the service should automatically start/stop.<br><b><i>Short-Description</i></b> / <b><i>Description</i></b>: Provides a brief and long description of the service.


title: HISTORY
content:
<i>insserv</i> emerged as a response to the need for a more standardized and robust way to manage <i>SysVinit</i> scripts, particularly focusing on <i>LSB (Linux Standard Base)</i> compliance. While older tools like <i>update-rc.d</i> and <i>chkconfig</i> offered similar functionality, <i>insserv</i> specifically leverages the LSB headers within scripts (<i>Required</i>, <i>Provides</i>, etc.) to ensure proper dependency resolution and ordering. It gained significant traction in distributions that aimed for strict LSB adherence for their init systems. However, with the widespread adoption of <i>systemd</i> as the default init system in many modern Linux distributions, the direct usage and relevance of <i>insserv</i> have gradually decreased, though it remains a fundamental tool for systems still relying on <i>SysVinit</i>.


title: SYNOPSIS
content:
<b>install</b> [<i>OPTION</i>]... <i>SOURCE</i>... <i>DIRECTORY</i><br><b>install</b> [<i>OPTION</i>]... <i>SOURCE</i> <i>DEST</i><br><b>install</b> [<i>OPTION</i>]... -<i>t</i> <i>DIRECTORY</i> <i>SOURCE</i>...<br><b>install</b> [<i>OPTION</i>]... -<i>d</i> <i>DIRECTORY</i>...


title: PARAMETERS
content:
<b>-d, --directory</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create all leading components of <i>DIRECTORY</i>s, then create <i>DIRECTORY</i>s themselves.<br><br><b>-m, --mode=MODE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set file permissions (mode) to <i>MODE</i>, similar to <b>chmod</b>.<br><br><b>-o, --owner=OWNER</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set ownership to <i>OWNER</i> (username or UID).<br><br><b>-g, --group=GROUP</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set group ownership to <i>GROUP</i> (group name or GID).<br><br><b>-s, --strip</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip symbol tables from installed executables, reducing their size.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the name of each directory and file as it is installed.<br><br><b>-b, --backup</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Make a backup of the existing destination file before overwriting.<br><br><b>-C, --compare</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compare source and destination files; only update if different.<br><br><b>-D</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create all leading components of <i>DEST</i>, but not <i>DEST</i> itself (when copying a file).<br><br><b>-t, --target-directory=DIRECTORY</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Copy all <i>SOURCE</i> arguments into <i>DIRECTORY</i>.<br><br>


title: DESCRIPTION
content:
The <b>install</b> command is used to copy files and set their attributes (permissions, ownership, and SELinux context) for installation purposes. Unlike <b>cp</b>, which primarily copies files, <b>install</b> is specifically designed for the software installation process, often invoked by build systems like <i>Makefiles</i>.<br><br>It can create parent directories if they don't exist, set precise file modes (permissions), and assign specific owners and groups. This makes it ideal for placing executables, libraries, and configuration files into system directories with the correct access rights. <b>install</b> often performs its operations atomically by copying to a temporary file and then renaming, ensuring system consistency even during unexpected interruptions. It is a fundamental utility for deploying software on Unix-like systems.


title: CAVEATS
content:
While powerful for installation, <b>install</b> primarily focuses on file and directory attributes. It doesn't manage package dependencies or perform complex system-wide configuration. Its primary role is to correctly place and permission files as part of a build process. Misuse of permissions or ownership can lead to security vulnerabilities or system instability.


title: ATOMIC OPERATIONS
content:
<b>install</b> often uses a temporary file during copying and then atomically renames it to the final destination. This ensures that the destination file is always either the old version or the completely new version, preventing corrupted files if the process is interrupted.


title: USAGE IN BUILD SYSTEMS
content:
It is commonly found in the 'install' targets of <i>Makefiles</i> (e.g., '<i>make install</i>') to place compiled binaries, libraries, and configuration files into their appropriate system-wide locations with the correct permissions.


title: HISTORY
content:
The <b>install</b> command is a standard utility included in GNU Core Utilities, building upon the functionality of earlier Unix versions. Its enhanced features, such as atomic operations and comprehensive attribute setting, make it indispensable for modern software compilation and installation processes, particularly within <i>Makefiles</i>.


title: SYNOPSIS
content:
<b>install-docs</b> [<i>options</i>] <i>&lt;action&gt; &lt;doc-id&gt;</i><br><b>install-docs</b> [<i>options</i>] {<b>--check-all</b>|<b>--update-all</b>|<b>--remove-all</b>|<b>--report-broken</b>}


title: PARAMETERS
content:
<b><b>--verbose</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show more verbose output during execution.<br><br><b><b>--check-all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check the integrity and correctness of all currently registered documentation files.<br><br><b><b>--update-all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Re-process and update the registration for all documentation files that are already registered.<br><br><b><b>--remove-all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unregister and remove all documentation entries from the system's <b>doc-base</b> database.<br><br><b><b>--report-broken</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan and report any broken or invalid <b>doc-base</b> files found on the system.<br><br><b><b>--root=<i>&lt;dir&gt;</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operate on a different root directory, useful for chroot environments or system restoration.<br><br><b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message and exit.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the program's version number and exit.<br><br>


title: DESCRIPTION
content:
The <b>install-docs</b> command is a crucial part of the Debian documentation system, primarily utilized by the <b>doc-base</b> package. Its main function is to register and manage documentation provided by installed software packages. When a package is installed, its post-installation scripts often invoke <b>install-docs</b> to process its <b>doc-base</b> control file, typically located in <i>/usr/share/doc-base/</i>.<br><br>These control files contain metadata about the documentation, such as its location, format, and categorization. By processing these files, <b>install-docs</b> updates a central database (e.g., <i>/var/lib/doc-base/documents</i>), making the documentation discoverable and accessible through various system tools like <b>dhelp</b> or <b>dwww</b>.<br><br>It ensures that all documentation is properly indexed and can be easily navigated by users or other system utilities, facilitating a unified and organized documentation experience across the Debian ecosystem. While typically invoked automatically by package managers, it can also be run manually for specific operations.


title: CAVEATS
content:
This command is primarily used on Debian-based systems (like Ubuntu) as part of their specific documentation management infrastructure (<b>doc-base</b>).<br><br>It's generally invoked by package managers (<b>dpkg</b>) during package installation, upgrade, or removal, rather than directly by end-users. Manual invocation is typically for debugging or system maintenance.


title: COMMON ACTIONS
content:
These subcommands define the primary operations <b>install-docs</b> performs on individual document entries:<br><ul><li><b>install</b> <i>&lt;doc-id&gt;</i>: Registers a new document defined by the control file <i>&lt;doc-id&gt;.doc-base</i>.</li><li><b>remove</b> <i>&lt;doc-id&gt;</i>: Unregisters a document previously installed with <i>&lt;doc-id&gt;</i>.</li><li><b>update</b> <i>&lt;doc-id&gt;</i>: Re-registers an existing document, useful after changes to its control file.</li><li><b>check</b> <i>&lt;doc-id&gt;</i>: Verifies the integrity and correctness of a specified document's registration.</li></ul>


title: HISTORY
content:
<b>install-docs</b> has been an integral part of Debian's approach to centralized documentation management since the early days of the <b>doc-base</b> package. Its development was driven by the need to provide a consistent and easily navigable system for accessing documentation from various software packages. It automates the process of integrating package-specific documentation into a unified system, ensuring that users can find relevant information regardless of its originating package. This command, along with <b>doc-base</b> and tools like <b>dhelp</b> and <b>dwww</b>, forms the backbone of Debian's user documentation infrastructure.


title: SYNOPSIS
content:
<pre>install-info [<i>OPTION</i>]... <i>INFO_FILE</i> [<i>DIR_FILE</i>]<br>install-info [<i>OPTION</i>]... <b>--delete</b> <i>INFO_FILE</i> [<i>DIR_FILE</i>]</pre>


title: PARAMETERS
content:
<b>--add</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Default behavior)</i> Adds an entry for <i>INFO_FILE</i> to <i>DIR_FILE</i>. This is implicitly used when neither <b>--add</b> nor <b>--delete</b> is specified.<br><br><b>--delete, --remove</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes an entry for <i>INFO_FILE</i> from <i>DIR_FILE</i>. If the entry is not found, a warning is issued but the command generally succeeds.<br><br><b>--dir-file=<i>DIR_FILE</i>, -d <i>DIR_FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>Info</i> directory file to update. If not specified, `install-info` searches for a default <i>dir</i> file in common <i>Info</i> directories (e.g., `/usr/share/info/dir`).<br><br><b>--info-dir=<i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where the <i>Info</i> files are located. This option helps `install-info` resolve relative paths if <i>INFO_FILE</i> is not an absolute path. It's often used by package managers to specify the installed <i>Info</i> directory.<br><br><b>--entry=<i>ENTRY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the exact menu entry string to add or delete. This is the text that will appear in the <i>Info</i> directory menu for the documentation.<br><br><b>--section=<i>SECTION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the section under which the entry should appear in the <i>Info</i> directory menu. Examples include 'Texinfo', 'GNU', 'Programming', etc. This helps organize documentation within the <i>Info</i> reader.<br><br><b>--description=<i>DESCRIPTION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a one-line description for the menu entry. This descriptive text is displayed alongside the menu entry in the <i>Info</i> directory.<br><br><b>--item=<i>ITEM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to <b>--entry</b>, but typically used for more specific sub-items or when adding an entry that isn't a top-level document.<br><br><b>--max-width=<i>NUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum width of the output when processing data read from standard input. This is less commonly used for typical `install-info` operations.<br><br><b>--no-chdir</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents `install-info` from changing its current working directory before processing. This can be relevant when dealing with complex path configurations.<br><br><b>--quiet, -q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most output messages, making the command run silently unless an error occurs.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints more information about what `install-info` is doing, useful for debugging or understanding its operations.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information for `install-info` and exits.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with usage instructions and available options, then exits.<br><br>


title: DESCRIPTION
content:
The `install-info` command is a utility used to manage the <i>dir</i> file, which serves as the central index for the GNU <i>Info</i> system documentation. When new <i>Info</i> format documentation files are installed on a system, `install-info` adds entries for these files into the main <i>Info</i> directory file (usually `/usr/share/info/dir` or `/usr/info/dir`). This allows the <i>Info</i> reader program to easily locate and display the new documentation.<br><br>Conversely, when <i>Info</i> files are removed, `install-info` can delete their corresponding entries from the <i>dir</i> file, ensuring the index remains accurate and free of broken links. It plays a crucial role in keeping the system's documentation organized and accessible to users through the <i>Info</i> navigation tool, automating what would otherwise be a tedious manual process.


title: CAVEATS
content:
Using `install-info` requires appropriate permissions to write to the specified <i>Info</i> directory file (<i>DIR_FILE</i>), which often resides in a system-wide location like `/usr/share/info/dir`. Therefore, it's frequently invoked with `sudo` or by package managers as part of software installation or removal processes.<br><br>Incorrect usage, especially specifying an incorrect <i>INFO_FILE</i> or <i>DIR_FILE</i>, can lead to orphaned entries in the <i>Info</i> directory or failure to correctly register new documentation. It's generally best practice to let package managers handle `install-info` calls during software installation/uninstallation.<br><br>Manually editing the <i>Info</i> `dir` file directly is highly discouraged as it can lead to corruption or inconsistencies that `install-info` might not be able to resolve automatically.


title: DEFAULT INFO DIRECTORY
content:
By default, `install-info` attempts to update the <i>Info</i> directory file located at `/usr/share/info/dir`. On some older systems or specific distributions, it might default to `/usr/info/dir`. This path can be explicitly overridden using the <b>--dir-file</b> option if a different central <i>Info</i> index needs to be managed.


title: INTEGRATION WITH PACKAGE MANAGERS
content:
In most Linux distributions, `install-info` is primarily called by package managers (e.g., `dpkg` on Debian/Ubuntu, `rpm` on Red Hat/Fedora, `pacman` on Arch Linux) as part of their post-installation or pre-uninstallation scripts. This ensures that the system's <i>Info</i> index is automatically updated whenever new software with <i>Info</i> documentation is installed or removed, providing a seamless user experience for accessing documentation via the `info` command.


title: HISTORY
content:
`install-info` is an integral part of the <i>GNU Texinfo</i> documentation system, which has been the standard for creating and distributing GNU project documentation for many years. It was developed as a crucial component to automate the process of keeping the central <i>Info</i> directory index up-to-date.<br><br>Its design reflects the need for a robust, scriptable utility to manage the complex interconnections within the <i>Info</i> file hierarchy. It has been maintained by the GNU project as part of the <i>Texinfo</i> distribution since its early days, evolving alongside the <i>Info</i> system itself and ensuring consistent documentation management across GNU/Linux systems.


title: PARAMETERS
content:
<b><I>version</I> | <I>alias</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific Node.js version string (e.g., '16.14.0', 'v18') or an alias (e.g., 'lts' for Long Term Support, 'latest' for the newest stable release) to install.<br><br><b>--global</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs the Node.js version to a system-wide location, making it available to all users (often requires appropriate permissions).<br><br><b>--path <directory></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative installation directory for the Node.js runtime instead of the script's default location.<br><br><b>--force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the installation, potentially overwriting an existing Node.js version or installation directory.<br><br><b>--clean</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes any previous Node.js installations in the target directory before performing the new installation.<br><br><b>--no-npm</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs only the Node.js runtime, skipping the bundled npm (Node Package Manager).<br><br>


title: DESCRIPTION
content:
The command <code>install-nodeversion</code> is not a standard, globally distributed Linux utility. Instead, it typically refers to a custom shell script or a utility bundled within a specific project or environment designed to manage Node.js installations. Its primary purpose is to download, extract, and configure a specified version of the Node.js runtime and its associated npm (Node Package Manager).<br><br>While its exact behavior and available options depend entirely on the script's implementation, such a utility commonly automates steps like fetching the Node.js tarball from an official mirror, verifying its integrity, placing it in a designated installation directory (e.g., <i>/usr/local/bin</i> or a user-specific directory), and updating necessary environment variables like <I>PATH</I> to make the newly installed Node.js version accessible.<br><br>Users might encounter this command in a project's <i>Makefile</i>, <i>package.json</i> scripts, CI/CD pipelines, or as part of a custom development environment setup script, where it streamlines the process of ensuring the correct Node.js version is available for a given application.


title: CAVEATS
content:
The <I>install-nodeversion</I> command is not a standard part of most Linux distributions or a globally recognized Node.js version manager. Its behavior and availability are entirely dependent on whether a specific custom script with this name exists in your environment and how it has been implemented.<br><br>Potential caveats include:<br><i>• Script Reliance:</i> Functionality, options, and robustness vary greatly depending on the script's author and implementation.<br><i>• PATH Management:</i> It may or may not correctly update your system's <I>PATH</I> environment variable, potentially requiring manual configuration for the installed Node.js version to be recognized.<br><i>• Security:</i> Custom scripts might download binaries from untrusted sources, posing security risks. Always verify the script's source and integrity.<br><i>• Dependencies:</i> The script might rely on external tools like <I>curl</I>, <I>wget</I>, <I>tar</I>, or <I>unzip</I> being present on the system.<br><i>• Permissions:</i> Global installations often require root or <I>sudo</I> privileges.


title: TYPICAL INSTALLATION PATHS
content:
Custom <I>install-nodeversion</I> scripts commonly install Node.js binaries into a user's home directory (e.g., <I>~/.nodeversions</I> or <I>~/.nvm/versions/node</I> if mimicking <I>nvm</I>) for user-specific installations, or into system-wide locations like <I>/usr/local</I> (e.g., <I>/usr/local/bin</I>, <I>/usr/local/include</I>, <I>/usr/local/lib</I>, <I>/usr/local/share</I>) for global availability. The choice of path depends on the script's design and user permissions.


title: ENVIRONMENT VARIABLES
content:
For the installed Node.js version to be executable from any directory, the script typically modifies the <I>PATH</I> environment variable. This is often done by adding the Node.js installation's <I>bin</I> directory to the <I>PATH</I> in a shell configuration file (e.g., <I>~/.bashrc</I>, <I>~/.zshrc</I>, <I>~/.profile</I>). Users might need to source their shell configuration or restart their terminal session for changes to take effect.


title: HISTORY
content:
The need to manage multiple Node.js versions arose early in Node.js's development cycle due to rapid releases and breaking changes between versions. While dedicated version managers like <I>nvm</I> and <I>n</I> became popular, many development teams and system administrators created custom shell scripts, often named generically like <I>install-nodeversion</I>, to automate the installation of specific Node.js versions required for their projects. These custom scripts provided a lightweight, project-specific way to enforce version consistency before, or as an alternative to, installing full-fledged version managers.


title: SYNOPSIS
content:
<b>install-sgmlcatalog</b> [<i>options</i>] <b>--add</b> | <b>--remove</b> <i>catalog_path</i>...<br><b>install-sgmlcatalog</b> <b>--show</b><br><b>install-sgmlcatalog</b> <b>--help</b><br><b>install-sgmlcatalog</b> <b>--version</b>


title: PARAMETERS
content:
<b><i>catalog_path</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to SGML or XML catalog files to be added or removed from the system catalog.<br><br><b><b>--add</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds the specified <i>catalog_path</i>(s) to the system SGML/XML catalog.<br><br><b><b>--remove</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the specified <i>catalog_path</i>(s) from the system SGML/XML catalog.<br><br><b><b>--show</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current contents of the system SGML/XML catalog, indicating which catalog files are included.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides more detailed output during execution, showing actions taken.<br><br><b><b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses normal output, showing only errors.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information for the command and exits.<br><br>


title: DESCRIPTION
content:
The <b>install-sgmlcatalog</b> command is a utility for managing system-wide SGML and XML catalogs. It allows administrators to register SGML or XML document types, DTDs (Document Type Definitions), entities, and other related resources so that SGML/XML parsers and tools can locate them automatically. This command is particularly useful in environments where multiple SGML/XML applications or documents share common DTDs or schemas. By adding entries to the system catalog (typically <i>/etc/sgml/catalog</i> or <i>/etc/xml/catalog</i>), <b>install-sgmlcatalog</b> streamlines the process of resolving external identifiers, improving portability and simplifying document processing. It handles the inclusion of specified catalog files into the main system catalog, ensuring that new or updated resources are properly recognized by SGML/XML-aware applications. This command simplifies the complex task of maintaining consistent and searchable resource mappings across a system.


title: CAVEATS
content:
Modifying system-wide catalogs typically requires root privileges. Incorrect catalog entries can disrupt SGML/XML processing for applications relying on them. This command is primarily found on Debian-based systems as part of the <i>sgml-base</i> package. While SGML catalogs are still used, modern XML processing often relies on alternative schema validation mechanisms or direct URI resolution.


title: CATALOG LOCATIONS
content:
The system-wide SGML and XML catalogs managed by this command are typically located at <i>/etc/sgml/catalog</i> and <i>/etc/xml/catalog</i>, respectively. These are master catalog files that include references to other specific catalog files.


title: PURPOSE OF CATALOGS
content:
SGML/XML catalogs provide a mapping mechanism to resolve public identifiers or URIs to local file paths. This allows SGML/XML parsers to find DTDs, external entities, and other resources without requiring network access, making processing faster, more robust, and enabling offline validation and transformation.


title: HISTORY
content:
The <b>install-sgmlcatalog</b> command is part of the <i>sgml-base</i> package, which originated in Debian to provide a standardized way for managing SGML/XML resources across various packages. It automates the setup and maintenance of the SGML/XML “Open Catalog” system, ensuring that SGML/XML tools and applications can consistently locate required DTDs, entities, and other resources. It has been a stable component of Debian's infrastructure for many years, facilitating consistent document processing.


title: SYNOPSIS
content:
<i><b>installkernel</b></i> is primarily an internal helper script, making a universal, user-invoked synopsis impractical. Its invocation pattern is highly distribution and implementation specific.<br><br>Conceptually, when used as a script (e.g., <I>/usr/sbin/installkernel</I> on Debian/Ubuntu), it often follows a pattern similar to:<br><br><I><b>installkernel KERNEL_VERSION KERNEL_IMAGE [INITRAMFS_PATH] [MAP_FILE]...</b></I><br><br>This pattern reflects the core information needed for installation, but actual usage involves context-specific arguments and environment variables.


title: PARAMETERS
content:
<b><I>KERNEL_VERSION</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The full version string of the kernel being installed (e.g., <I>6.5.0-14-generic</I>). This is crucial for naming files and bootloader entries.<br><br><b><I>KERNEL_IMAGE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The absolute path to the kernel image file (e.g., <I>/usr/src/linux-headers-6.5.0-14/vmlinuz</I> or an already built <I>vmlinuz</I>).<br><br><b><I>INITRAMFS_PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Optional, highly dependent on script) The path to the pre-built initial RAM filesystem image. If not provided, the script might generate one.<br><br><b><I>MAP_FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Optional) The path to the <I>System.map</I> file corresponding to the kernel image, used for debugging and symbol resolution.<br><br><b>Other positional arguments/environment variables</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Depending on the distribution's implementation, additional arguments or environment variables may be used to specify architecture, module paths, or control specific behaviors (e.g., update bootloader, clean old kernels). These are rarely documented for end-user invocation.<br><br>


title: DESCRIPTION
content:
<i><b>installkernel</b></i> is not a single, universally standardized Linux command with a dedicated man page. Instead, it refers to a <I>helper script</I> or a collection of scripts used by Linux distributions, typically during kernel package installation or upgrades. Its primary purpose is to automate the process of installing a new Linux kernel image (<I>vmlinuz</I>), its corresponding initial RAM filesystem (<I>initramfs</I> or <I>initrd</I>), and updating the bootloader configuration.<br><br>When a new kernel version is installed via a package manager (e.g., <I>apt</I> on Debian/Ubuntu, <I>dnf</I> on Fedora), <i><b>installkernel</b></i> is commonly invoked by the package manager's post-installation scripts. It handles critical tasks such as:<br><ul><li>Copying the kernel image and initramfs to the appropriate boot partition (usually <I>/boot</I>).</li><li>Creating or updating symbolic links (e.g., <I>/vmlinuz</I>, <I>/initrd.img</I>).</li><li>Generating the initramfs if not already provided.</li><li>Triggering bootloader updates (e.g., <I>update-grub</I> or <I>grub-mkconfig</I>) to ensure the new kernel is added to the boot menu.</li><li>Managing old kernel versions, sometimes removing them to free up space.</li></ul><br>Because its implementation varies significantly between distributions (e.g., using scripts like <I>/usr/sbin/installkernel</I> on Debian/Ubuntu or being part of the <I>kernel-install</I> framework on Fedora/RHEL), direct manual invocation with common parameters is rare. It primarily acts as an internal utility for automated kernel management.


title: CAVEATS
content:
<I><b>Distribution Specificity</b></I>: The behavior, arguments, and even existence of an <i><b>installkernel</b></i> script vary drastically across Linux distributions. What works on Debian/Ubuntu will likely differ from Fedora/RHEL or Arch Linux.<br><br><I><b>Internal Utility</b></I>: It is primarily an internal script called by package managers (e.g., APT, DNF) during kernel package installation or by bootloader configuration tools. Direct manual invocation by end-users is uncommon and generally not recommended, as it can bypass critical pre-checks and post-installation steps handled by the package manager.<br><br><I><b>Debugging Complexity</b></I>: If a kernel installation fails, debugging often requires examining the specific <i><b>installkernel</b></i> script and related hooks on the system, as its logic is not standardized. Issues are frequently related to the kernel build process, initramfs generation, or bootloader configuration rather than the <i><b>installkernel</b></i> script itself.


title: ROLE IN INITRAMFS GENERATION
content:
A crucial function of <i><b>installkernel</b></i> (or its equivalent) is to ensure that an appropriate <I>initramfs</I> (initial RAM filesystem) is generated or copied for the new kernel. The initramfs contains essential modules and scripts needed to mount the root filesystem and prepare the system for the full boot process. Incorrect or missing initramfs can lead to a non-bootable system.


title: BOOTLOADER INTEGRATION
content:
After placing the kernel image and initramfs in <I>/boot</I>, the <i><b>installkernel</b></i> process is responsible for updating the bootloader's configuration. This typically involves invoking a bootloader-specific command (e.g., <I>update-grub</I> for GRUB, <I>bootctl</I> for systemd-boot) to add the new kernel to the boot menu and set it as the default, if desired.


title: KERNEL VERSION MANAGEMENT
content:
Beyond installing the new kernel, these scripts often handle the removal of older kernel versions to free up disk space in the <I>/boot</I> partition. They typically keep a few recent stable kernels as a fallback option in case the newest kernel encounters issues, preventing a system from becoming unbootable due to a single faulty update.


title: HISTORY
content:
The concept behind <i><b>installkernel</b></i> emerged from the necessity to automate the complex and error-prone process of updating Linux kernels. In the early days of Linux, installing a new kernel often involved manual steps such as compiling the kernel, copying the <I>vmlinuz</I> and <I>System.map</I> files to the <I>/boot</I> directory, generating an initial RAM disk (<I>initrd</I>), and then manually editing bootloader configuration files (like <I>lilo.conf</I> or <I>grub.conf</I>).<br><br>As Linux distributions matured and package managers became sophisticated, the need for automated kernel installation routines became paramount. <i><b>installkernel</b></i> scripts were developed by various distributions to encapsulate these steps, allowing package managers (like Debian's APT or Red Hat's RPM/DNF) to reliably upgrade kernels without user intervention. These scripts abstract away the details of copying files, updating symbolic links, generating <I>initramfs</I> images (often using tools like <I>mkinitramfs</I> or <I>dracut</I>), and invoking bootloader update commands (like <I>update-grub</I>).<br><br>While the name <i><b>installkernel</b></i> might refer to a specific script in some distributions (e.g., <I>/usr/sbin/installkernel</I> on Debian/Ubuntu), other distributions have evolved more formalized frameworks, such as Fedora's <I>kernel-install</I> utility, which manages a directory of hook scripts (<I>/usr/lib/kernel/install.d/</I>) that perform the various kernel installation steps. Regardless of the specific implementation, the underlying goal remains the same: to provide a robust, automated mechanism for integrating new kernel versions into a running system.


title: SYNOPSIS
content:
Since `<b>instmodsh</b>` is an internal utility, its synopsis reflects how it's invoked by `<b>modprobe</b>` rather than a user:<br><br><code><b>instmodsh</b> <i>&lt;kernel_version&gt; &lt;modprobe_path&gt; &lt;modprobe_args...&gt; -- &lt;module_name&gt; &lt;module_args...&gt;</i></code><br><br>The `<i>--</i>` separator is crucial, distinguishing `<b>modprobe</b>`'s options from the module's arguments. Users generally do not execute this command directly.


title: PARAMETERS
content:
<b><i>kernel_version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific Linux kernel version (e.g., 5.15.0-86-generic) for which the module operation is being performed.<br><br><b><i>modprobe_path</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The full path to the `<b>modprobe</b>` binary that invoked `<b>instmodsh</b>`.<br><br><b><i>modprobe_args...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Additional arguments originally passed to the `<b>modprobe</b>` command, which are then passed on to the module's installation script.<br><br><b><i>--</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A mandatory separator indicating the end of `<b>modprobe</b>`-specific arguments and the beginning of module-specific arguments.<br><br><b><i>module_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the kernel module being installed or operated upon.<br><br><b><i>module_args...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Any arguments specifically intended for the kernel module itself, passed to its installation command.<br><br>


title: DESCRIPTION
content:
<i>instmodsh</i> is an <i>internal helper script</i> used by the `<b>modprobe</b>` utility, which is part of the `<b>kmod</b>` package. It is <b>not intended for direct user invocation</b>.<br><br>Its primary role is to prepare and manage the shell environment for the execution of kernel module installation scripts. When `<b>modprobe</b>` needs to load a module, especially one with complex dependencies or `install`/`remove` commands defined in `/etc/modprobe.d/` configuration files, `<b>instmodsh</b>` is invoked.<br><br>It sets up crucial environment variables and passes the necessary arguments, such as the kernel version, the path to `<b>modprobe</b>` itself, and arguments intended for the module's installation or removal commands. Essentially, `<b>instmodsh</b>` acts as an intermediary, ensuring that the module's `install` or `remove` commands (often `<b>insmod</b>` or `<b>rmmod</b>`) are executed within the correct context, allowing `<b>modprobe</b>` to handle complex module loading scenarios, including module stacking and custom installation routines. It plays a vital role in the robust and dependency-aware management of Linux kernel modules.


title: CAVEATS
content:
`<b>instmodsh</b>` is an <i>internal utility</i> of the `<b>kmod</b>` package (which includes `<b>modprobe</b>`). It is <b>not designed for direct user interaction</b> and its behavior or arguments might change between `<b>kmod</b>` versions without backward compatibility guarantees for direct use.<br><br>Debugging issues related to module loading often involves tracing the execution flow of `<b>modprobe</b>` and its helper scripts, rather than directly invoking `<b>instmodsh</b>`. Its primary function is to provide a controlled environment for `<b>modprobe</b>`'s operations, making it an essential but hidden part of the Linux kernel module management system.


title: <I>ROLE IN KERNEL MODULE MANAGEMENT</I>
content:
`<b>instmodsh</b>` serves as a crucial component within the `<b>kmod</b>` utilities, acting as a bridge between the high-level `<b>modprobe</b>` command and the low-level execution of module installation or removal scripts. It ensures that the correct environment, including paths and arguments, is set up, allowing for the proper handling of module dependencies and custom configuration directives (e.g., `<b>install</b>` and `<b>remove</b>` commands in `<b>modprobe.d</b>` files). It is a testament to the modular and extensible design of Linux kernel module handling.


title: HISTORY
content:
The functionality encapsulated by `<b>instmodsh</b>` originated as part of the `<b>module-init-tools</b>` package, which was responsible for managing Linux kernel modules. With the transition to the `<b>kmod</b>` project, `<b>instmodsh</b>` was integrated into this new, unified framework for kernel module tools.<br><br>Its development has focused on providing a robust and flexible environment for executing module installation and removal scripts, particularly as kernel module dependencies and custom loading procedures became more complex. It ensures that `<b>modprobe</b>` can effectively handle various configuration directives and dependencies defined for modules.


title: SYNOPSIS
content:
<b>intel_audio_dump</b> [<b>-d</b> <i>DEVICE</i>] [<b>-s</b> <i>STREAM_ID</i>] [<b>-o</b> <i>FILE</i>] [<b>-v</b>] [<b>-h</b>]


title: PARAMETERS
content:
<b><b>-d</b> <i>DEVICE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the DRI device path to dump. Defaults to <i>/dev/dri/card0</i> if not specified.<br><br><b><b>-s</b> <i>STREAM_ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific audio stream ID to dump. Useful when multiple streams are active.<br><br><b><b>-o</b> <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the dump content to the specified file instead of standard output.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br>


title: DESCRIPTION
content:
The <i>intel_audio_dump</i> command is a specialized diagnostic utility from the <i>igt-gpu-tools</i> suite. It's designed to assist developers and advanced users in debugging audio issues on Intel graphics hardware, particularly those related to HDMI or DisplayPort audio output. This tool works by reading and displaying the raw register values of the audio processing unit (Codec) and associated stream information on the Intel graphics card. It provides insight into the current state of the audio stream, including active channels, sample rates, and various status bits, which can be crucial for identifying problems with audio initialization, playback, or display synchronization. It is primarily used by developers working on Intel graphics drivers or multimedia frameworks.


title: CAVEATS
content:
This command requires root privileges or appropriate permissions to access DRI devices (e.g., <i>/dev/dri/card0</i>). <br>It is a low-level debugging tool and its output is primarily intended for driver developers or those familiar with Intel audio hardware architecture. <br>The output format can be cryptic without knowledge of Intel's register specifications.


title: PURPOSE
content:
The primary purpose of <i>intel_audio_dump</i> is to provide a snapshot of the audio engine's state directly from hardware registers. This information is invaluable for debugging issues such as no audio output, incorrect audio formats, audio stuttering, or synchronization problems, by verifying the expected hardware configuration against the actual state.


title: OUTPUT FORMAT
content:
The output typically consists of register addresses and their hexadecimal values, often accompanied by decoded interpretations of certain bits or fields relevant to audio stream status, codec configuration, and link status. The exact format can vary based on the specific Intel GPU generation and driver version.


title: HISTORY
content:
The <i>intel_audio_dump</i> command is part of the <i>igt-gpu-tools</i> (Intel GPU Tools) suite, which has evolved alongside Intel's open-source graphics drivers. It was developed to provide specific diagnostic capabilities for audio pathways within the graphics hardware, addressing the increasing complexity of multimedia output via interfaces like HDMI and DisplayPort.


title: PARAMETERS
content:
<b><I>device_path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. Specifies the path to the DRM device (e.g., <i>/dev/dri/card0</i>) from which to read the VBT. If omitted, the tool attempts to autodetect the primary Intel graphics device available on the system.<br><br>


title: DESCRIPTION
content:
<i>intel_bios_reader</i> is a specialized command-line utility provided as part of the <i>intel-gpu-tools</i> suite. Its primary function is to read and display the contents of the Video BIOS Table (VBT) from Intel integrated graphics hardware. The VBT is a crucial data structure embedded within the graphics firmware (VBIOS) that contains essential configuration information for display outputs, panel timings, power management, and other display-related parameters.<br><br>This tool is invaluable for debugging display issues, analyzing hardware configurations, and assisting in the development and validation of graphics drivers for Intel platforms. It provides low-level insights into how the graphics hardware initializes and manages its display capabilities, making it a critical asset for hardware engineers and driver developers.


title: CAVEATS
content:
This command:<br><ul><li>Requires an Intel integrated graphics card to function.</li><li>Often requires <b>root</b> privileges to access hardware registers or debugfs entries.</li><li>Is typically part of the <i>intel-gpu-tools</i> package, which might not be installed by default on all Linux distributions.</li><li>Is primarily a developer/debugger tool; it is not intended for general system monitoring or everyday end-user use.</li><li>The output can be highly technical and requires specific knowledge of VBT structures and Intel graphics hardware to interpret effectively.</li></ul>


title: VIDEO BIOS TABLE (VBT)
content:
The VBT is a firmware data structure located within the graphics card's BIOS (or VBIOS). It contains detailed configuration data specific to the display hardware, such as timings for various resolutions, panel specifications, backlight control methods, display output connector definitions, and power management settings. The i915 kernel driver relies heavily on the information within the VBT during display initialization and mode setting. <i>intel_bios_reader</i> provides a means to inspect this low-level configuration directly, which is vital for troubleshooting display issues and understanding hardware-specific behavior.


title: HISTORY
content:
<i>intel_bios_reader</i> is a component of the <i>intel-gpu-tools</i> project, an open-source suite of utilities developed by Intel and the broader open-source community. These tools are crucial for the development, testing, and debugging of the open-source Intel graphics drivers (specifically the i915 kernel driver and Mesa userspace drivers). Its development tracks closely with new Intel integrated graphics architectures, display technologies, and the evolving needs of driver development and validation.


title: PARAMETERS
content:
<b>MCi_STATUS_VALUE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The 64-bit hexadecimal value from the MCi_STATUS register. This value contains the primary error code and status flags.<br><br><b>MCi_MISC_VALUE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Optional)</i> The 64-bit hexadecimal value from the MCi_MISC register. This register provides additional, often CPU-specific, information about the error.<br><br>


title: DESCRIPTION
content:
<b>intel_error_decode</b> is a specialized Linux utility used to decode machine check error (MCE) register values reported by Intel CPUs. When a CPU encounters a severe hardware error, it logs details into specific Model-Specific Registers (MSRs), primarily the MCi_STATUS and MCi_MISC registers.<br><br>This command takes the raw hexadecimal values from these registers and translates them into a human-readable format, providing insights into the type, scope, and severity of the error. It's an invaluable tool for system administrators and hardware engineers to diagnose CPU-related issues, such as cache errors, bus errors, or TLB errors, which are critical for system reliability and stability. It typically works in conjunction with systems that collect MCE data, like the <b>rasdaemon</b> utility.


title: CAVEATS
content:
The output of <b>intel_error_decode</b> can be highly technical and requires a strong understanding of Intel CPU architecture and machine check error terminology. The exact interpretation of some fields might vary slightly between different Intel CPU generations or families.<br><br>This utility typically decodes raw register values; for automated collection and parsing of MCE logs, tools like <b>rasdaemon</b> and <b>ras-mc_decode</b> are more commonly used as wrappers.


title: HISTORY
content:
<b>intel_error_decode</b> is often associated with the <b>rasdaemon</b> project, which was developed to provide a modern, more robust alternative to the older <b>mcelog</b> utility for handling Reliability, Availability, and Serviceability (RAS) features on Linux systems. It specifically focuses on Intel CPU error decoding, leveraging detailed Intel documentation for accurate error interpretation. Its development is ongoing as new CPU architectures are introduced.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help message and exit.<br><br><b>-s <N>, --sleep=<N></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set delay in seconds between updates (default: 1).<br><br><b>-l, --log</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable logging output to stdout; non-interactive mode.<br><br><b>-o <FILE>, --output=<FILE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write output to specified FILE (implies -l).<br><br><b>-J, --json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output metrics in JSON format (implies -l).<br><br><b>-d, --dump</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dump metrics once and exit immediately.<br><br><b>-r, --ring</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show legacy per-ring utilization.<br><br><b>-e, --engine</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show per-engine (Render, Blitter, Video, etc.) utilization.<br><br><b>-m, --memory</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show GT (Graphics Technology) memory statistics.<br><br><b>-n, --frequency</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show GT frequency information.<br><br><b>-c, --power</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show GT power consumption information.<br><br><b>-p, --process</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show per-process GPU usage statistics.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output (useful with -p).<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print version information and exit.<br><br><b>-t, --timestamp</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add timestamp to log/JSON output.<br><br><b>-b, --bandwidth</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show PCI bandwidth information.<br><br><b>-P, --pmu-events</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show PMU (Performance Monitoring Unit) events.<br><br><b>-R, --raw-pmu</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show raw PMU event data.<br><br><b>-f, --full-pmu</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show full PMU event names.<br><br><b>-x, --exit-on-error</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit immediately if an error occurs.<br><br><b>-A, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show all available metrics (implies -e, -m, -n, -c, -p, -b).<br><br>


title: DESCRIPTION
content:
<i>intel_gpu_top</i> is a powerful command-line utility for real-time monitoring of Intel integrated graphics processing units (GPUs) on Linux systems. It provides a "top"-like interface displaying various GPU metrics, including overall GPU busy percentage, per-engine utilization (Render/3D, Blitter, Video Decode, Video Encode, Media Engine), GPU frequency, memory statistics, and even per-process GPU usage. This tool is invaluable for diagnosing performance bottlenecks, understanding GPU workload distribution, and debugging graphics-intensive applications. It leverages the <i>i915</i> kernel driver to expose low-level hardware counters, offering deep insights into the GPU's operational state.


title: CAVEATS
content:
Requires the <i>i915</i> kernel module. <br> Full functionality, especially PMU event monitoring, may require root privileges or specific capabilities (e.g., CAP_PERFMON) and enabling kernel parameters like <i>i915.enable_pmu=1</i>. <br> The available metrics and their interpretation can vary slightly depending on the specific Intel GPU generation.


title: INSTALLATION
content:
Typically installed via the <i>intel-gpu-tools</i> package available in most Linux distribution repositories (e.g., <i>sudo apt install intel-gpu-tools</i> on Debian/Ubuntu or <i>sudo dnf install intel-gpu-tools</i> on Fedora).


title: PERMISSIONS
content:
Running <i>intel_gpu_top</i> generally requires root privileges or being part of a group with sufficient access to performance counters (e.g., 'render' or 'video' group, or having the CAP_PERFMON capability). Without proper permissions, some metrics might not be displayed or the tool might fail to run.


title: KEY METRICS EXPLAINED
content:
<ul><li><b>GPU Busy:</b> Overall GPU utilization.</li><li><b>Render/3D:</b> Activity on the 3D rendering engine.</li><li><b>Blitter:</b> Activity on the blitter engine (for 2D graphics operations like copying/filling).</li><li><b>Video Decode/Encode:</b> Utilization of dedicated media decode/encode engines.</li><li><b>GT Freq:</b> Current GPU core frequency and maximum/minimum allowed frequencies.</li><li><b>GT Power:</b> Estimated power consumption of the GPU.</li></ul>


title: HISTORY
content:
<i>intel_gpu_top</i> is part of the <i>intel-gpu-tools</i> suite, a collection of utilities developed by Intel for testing, debugging, and monitoring their integrated graphics hardware on Linux. It emerged as a crucial tool to provide visibility into the complex operations of the <i>i915</i> kernel driver and the underlying GPU hardware, evolving over time to support new generations of Intel GPUs and their expanded feature sets, such as dedicated media engines and advanced power management.


title: PARAMETERS
content:
<b><i>&lt;register_address_or_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The hexadecimal memory-mapped I/O (MMIO) address of the register to read (e.g., <i>0x70000</i>), or a well-known symbolic name for a specific register (e.g., <i>MI_MODE</i>, <i>RCS_RING_HEAD</i>). The symbolic names are typically defined within the <b>intel-gpu-tools</b> source code.<br><br><b><i>all</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A special keyword argument to read and display the values of a common set of important Intel GPU registers. This provides a quick overview of critical hardware states without needing to specify individual addresses.<br><br>


title: DESCRIPTION
content:
<i>intel_reg_read</i> is a specialized command line utility from the <b>intel-gpu-tools</b> suite. It enables direct reading of memory-mapped I/O (MMIO) registers on Intel integrated graphics processing units (GPUs). This tool is primarily used by graphics driver developers, debuggers, and advanced users for low-level diagnostics, hardware introspection, and understanding the GPU's current state. It provides a direct window into the GPU's configuration and status, allowing for granular examination of various hardware blocks, registers, and their values. This granular access is crucial for troubleshooting specific hardware issues, analyzing performance bottlenecks at a deep level, and verifying driver behavior against hardware specifications.


title: CAVEATS
content:
<i>&#8226;</i> Requires an Intel GPU and the <b>intel-gpu-tools</b> package to be installed.<br><i>&#8226;</i> Typically requires <i>root</i> privileges (e.g., using <b>sudo</b>) to directly access the hardware registers, or appropriate <i>CAP_SYS_RAWIO</i> capabilities.<br><i>&#8226;</i> Primarily a debugging and development tool; not intended for general user interaction or modification of GPU state. Misinterpretation of register values without deep hardware knowledge can be misleading and potentially diagnostic only.


title: PERMISSIONS
content:
<i>intel_reg_read</i> requires privileged access to interact directly with hardware registers. This typically means running the command as <i>root</i> (e.g., using <b>sudo intel_reg_read ...</b>). Without sufficient permissions, the command will fail with an "Operation not permitted" or similar error.


title: INSTALLATION
content:
This command is not part of a standard Linux distribution's core utilities. It needs to be installed via the <b>intel-gpu-tools</b> package, which is usually available in distribution repositories (e.g., <b>sudo apt install intel-gpu-tools</b> on Debian/Ubuntu, <b>sudo dnf install intel-gpu-tools</b> on Fedora, <b>sudo pacman -S intel-gpu-tools</b> on Arch Linux).


title: HISTORY
content:
The <b>intel_reg_read</b> command is a core component of the <b>intel-gpu-tools</b> project, which was developed to assist in the development, debugging, and testing of Intel's open-source graphics drivers for Linux. Its inception and continued usage are intrinsically tied to the ongoing evolution of these drivers, providing a critical low-level access point for diagnostics and hardware validation.


title: SYNOPSIS
content:
<b>intel_reg_write</b> [<i>OPTIONS</i>] <i>REGISTER</i> <i>VALUE</i><br><i>(Writes a 32-bit VALUE to the specified REGISTER.)</i><br><b>intel_reg_write</b> [<i>OPTIONS</i>] <i>REGISTER</i> <i>MASK</i> <i>VALUE</i><br><i>(Performs a masked write: (current_value &amp; ~MASK) | (VALUE &amp; MASK).)</i><br><b>intel_reg_write</b> [<i>OPTIONS</i>] <i>REGISTER</i> <i>OFFSET</i> <i>VALUE</i><br><i>(Writes VALUE to an indexed REGISTER at the given OFFSET, e.g., GTT entries.)</i>


title: PARAMETERS
content:
<b><b>REGISTER</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name or hexadecimal address of the hardware register to write. Can be a known register name (e.g., 'RING_HEAD') or a raw hexadecimal address (e.g., '0x2000').<br><br><b><b>VALUE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The 32-bit hexadecimal value to write to the register. For masked writes, this is the value to be applied after masking.<br><br><b><b>MASK</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A 32-bit hexadecimal mask used in conjunction with VALUE for masked writes. Only bits set in MASK will be affected by VALUE.<br><br><b><b>OFFSET</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional hexadecimal offset for indexed registers, such as entries in the Graphics Translation Table (GTT). This argument is used when interacting with arrays of registers.<br><br><b><b>-d</b>, <b>--device</b> <i>DEVICE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the DRM device to interact with (e.g., <i>/dev/dri/card0</i>). Defaults to the first available DRM device.<br><br><b><b>-r</b>, <b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat the <i>REGISTER</i> argument as a raw hexadecimal address instead of attempting to resolve it as a known register name.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the write operation, potentially bypassing some internal checks or warnings. Use with extreme caution.<br><br><b><b>-p</b>, <b>--pci-device</b> <i>PCI_ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the PCI device ID (e.g., '0000:00:02.0') if multiple Intel GPUs are present.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, providing more details about the operation being performed.<br><br><b><b>-s</b>, <b>--i915-sysfs</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to use the i915 sysfs interface for register access instead of direct MMIO, if available. This is often used for newer kernels.<br><br><b><b>-l</b>, <b>--list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all known Intel GPU register names and their addresses. This option prevents a write operation and simply prints the register database.<br><br>


title: DESCRIPTION
content:
<b>intel_reg_write</b> is a specialized Linux command-line utility designed for advanced users and developers to directly manipulate hardware registers on Intel Graphics Processing Units (GPUs). It is part of the <i>intel-gpu-tools</i> suite, which provides low-level debugging and diagnostic capabilities for Intel graphics hardware and drivers.<br><br>This command allows writing specific 32-bit values to MMIO (Memory-Mapped I/O) registers, GTT (Graphics Translation Table) registers, or other hardware registers by their symbolic name or hexadecimal address. It's an indispensable tool for debugging graphics driver issues, reverse-engineering hardware behavior, or conducting performance experiments at a very granular level. Due to its direct interaction with hardware, <b>intel_reg_write</b> requires root privileges and should be used with extreme caution, as incorrect usage can lead to system instability, crashes, or even potential hardware damage.


title: CAVEATS
content:
Using <b>intel_reg_write</b> involves direct low-level hardware manipulation and carries significant risks:<br><ul><li>It requires root privileges (<code>sudo</code>).</li><li>Incorrect usage can lead to immediate system instability, kernel panics, or system freezes.</li><li>There is a potential, albeit rare, risk of permanent hardware damage if values are written to critical registers incorrectly or repeatedly.</li><li>This tool is specific to Intel GPUs and will not work on systems with other graphics hardware.</li><li>It is primarily a diagnostic and development tool; casual users should avoid using it.</li></ul>


title: USAGE WITH REGISTER NAMES VS. RAW ADDRESSES
content:
The <b>intel_reg_write</b> command can interpret the <i>REGISTER</i> argument as either a symbolic name (e.g., 'MI_MODE') or a raw hexadecimal address (e.g., '0x2000'). When using a name, the tool looks up its corresponding address in an internal database. If the name is not found, or if the <b>-r</b> option is used, the argument is treated as a raw hexadecimal address. It's recommended to use symbolic names when possible for clarity, but raw addresses are necessary for undocumented or newly discovered registers.


title: PERMISSIONS AND SAFETY
content:
Due to its direct interaction with kernel-level components and hardware, <b>intel_reg_write</b> invariably requires elevated privileges (root). Users should exercise extreme caution. It's often recommended to test commands in a controlled environment or with a backup of important data, as erroneous writes can corrupt system state or data.


title: HISTORY
content:
The <b>intel_reg_write</b> utility is part of the <i>intel-gpu-tools</i> project, a collection of open-source utilities developed primarily by Intel engineers and the Linux graphics community. These tools were created to aid in debugging, testing, and optimizing Intel graphics drivers and hardware. <b>intel_reg_write</b> itself provides a fundamental capability for inspecting and altering the GPU state at a very granular level, reflecting the ongoing development and evolution of Intel's graphics architectures and their Linux drivers.


title: SYNOPSIS
content:
<code>intel_stepping [<I>options</I>]</code><br>This command is typically invoked without arguments for its primary function. Some implementations may offer limited options for specific output formats or verbose details.


title: PARAMETERS
content:
<b><I>None</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The command typically operates without requiring any specific parameters, directly outputting the stepping information. Some implementations may offer standard options like <I><b>-h</b></I> (help) or <I><b>-v</b></I> (verbose) but these are not universally present for a dedicated `intel_stepping` utility.<br><br>


title: DESCRIPTION
content:
The `intel_stepping` command is a specialized utility designed to extract and display detailed stepping information for <I>Intel Central Processing Units</I> (CPUs). CPU stepping refers to a specific revision of a processor within the same family and model. This information is crucial for identifying microcode updates, understanding potential errata, and tracking architectural improvements made during the processor's lifecycle.<br><br>The command typically queries the CPUID instruction (specifically function EAX=1) to retrieve the <I>Family</I>, <I>Model</I>, and <I>Stepping ID</I> from the CPU's signature. While not a universally pre-installed command across all Linux distributions, it serves a vital role for system administrators, developers, and hardware enthusiasts who need precise CPU revision data for compatibility, performance tuning, or debugging purposes specific to Intel architectures. It often provides a concise output detailing the processor's exact silicon revision.


title: CAVEATS
content:
<ul><li>This command is primarily designed for <b>Intel CPUs only</b> and will not provide meaningful information for AMD or other processor architectures.</li><li>It may require <b>root privileges</b> on some systems to access low-level CPU information registers (MSRs), though basic stepping info from CPUID usually doesn't.</li><li>The exact implementation and availability of `intel_stepping` can vary; it might be a standalone script, part of a larger utility like <I>cpuid</I> or <I>x86info</I>, or not present by default on many Linux distributions.</li><li>Interpretation of the stepping ID requires reference to <b>Intel's official documentation</b> (e.g., Intel ARK) for specific errata or features associated with that revision.</li></ul>


title: UNDERSTANDING STEPPING ID
content:
The Stepping ID, alongside Family and Model numbers, forms the <I>Extended Family/Model/Stepping</I> (EFS) signature of an Intel CPU. This signature is critical for identifying the precise silicon revision. For example, an Intel Core i7-8700K might have a stepping ID of 'B0' or 'U0', indicating different production revisions which could have varying errata fixes or minor performance tweaks. This information is vital for applying correct microcode updates, diagnosing hardware-specific issues, or verifying platform compatibility. Users often cross-reference this ID with Intel's official product documentation (like the Intel ARK database or errata sheets) to gain full context.


title: HISTORY
content:
The concept of CPU stepping has existed since the early days of processor manufacturing to denote silicon revisions. Tools to expose this information on Linux emerged with the growing need for precise hardware identification. While a specific `intel_stepping` utility might be a relatively modern or custom script, the underlying CPUID instruction it utilizes has been a fundamental part of x86 architecture for decades. Early methods like parsing `/proc/cpuinfo` provided basic stepping, but more specialized tools like `cpuid` and `x86info` were developed to offer detailed insights, from which `intel_stepping` functionality often derives or is a simplified wrapper for a specific purpose.


title: SYNOPSIS
content:
<B>intel_upload_blit_large</B> is not a user-executable command. It is an internal function or tracepoint within the Linux kernel's <I>i915</I> (Intel Graphics) driver. Therefore, it does not have a standard command-line synopsis with options and arguments.


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;As <I>intel_upload_blit_large</I> is not a user-executable command, it does not accept command-line parameters or options.<br><br>


title: DESCRIPTION
content:
The term <I>intel_upload_blit_large</I> refers to an internal function or a tracepoint within the Linux kernel's <I>i915</I> driver, which is the official open-source graphics driver for Intel GPUs. It is not a user-executable command-line utility. Instead, it represents an operation performed by the GPU driver, specifically related to 'blit' (block transfer) operations, which involve moving blocks of pixel data from one memory location to another, often within the GPU's memory or between system memory and GPU memory. The '_large' suffix likely indicates this specific blit operation is optimized for or invoked for larger data transfers, crucial for rendering, video playback, and other graphics-intensive tasks. As a tracepoint, it allows kernel developers and advanced users to monitor the driver's internal activities, performance, and diagnose issues using tools like <I>perf</I> or <I>ftrace</I>.


title: CAVEATS
content:
This is not a standalone command that users can run from the terminal. Attempting to execute it directly will result in a 'command not found' error. Its existence is primarily within the kernel's source code and as potential tracepoints for debugging and performance analysis. Interaction with this internal operation is typically indirect, through applications that use the Intel graphics driver, or directly via kernel tracing tools for diagnostic purposes. It is part of the low-level graphics stack and not intended for general user interaction.


title: KERNEL TRACEPOINTS
content:
Kernel tracepoints are static instrumentation points within the Linux kernel code that allow developers to gain insight into the kernel's behavior without modifying the kernel itself. Tools like <I>perf</I> and <I>ftrace</I> can be used to enable and read data from these tracepoints, providing detailed logs of events like function calls, scheduling decisions, I/O operations, and, in this case, specific graphics driver operations like large blits. These are invaluable for debugging complex issues and optimizing kernel performance.


title: BLITTING (BLOCK TRANSFER)
content:
Blitting is a fundamental operation in computer graphics, short for 'block image transfer'. It involves rapidly copying a rectangular block of pixel data from one memory location to another. This is a common operation in 2D and 3D graphics for various tasks such as drawing sprites, updating textures, compositing layers, or copying framebuffer contents. Graphics drivers often have highly optimized blit routines, sometimes implemented directly on the GPU hardware, to achieve high performance.


title: HISTORY
content:
The underlying blitting operations and their optimizations have been an integral part of graphics driver development for decades. Specific functions like <I>intel_upload_blit_large</I> are created and refined as part of the ongoing development of the Intel <I>i915</I> kernel module, adapting to new Intel GPU architectures and performance requirements. Its exposure as a potential tracepoint reflects the continuous effort to improve driver debuggability and performance profiling capabilities within the Linux kernel.


title: SYNOPSIS
content:
<I>This is not a standalone Linux command executable from the user space terminal. Therefore, it does not have a conventional command synopsis with options or arguments. Instead, "intel_upload_blit_large_gtt" is an internal kernel-level identifier, possibly a function name or a tracepoint, within the Intel i915 kernel graphics driver. It's part of the kernel's internal logic for managing graphics memory and operations.</I>


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>As "intel_upload_blit_large_gtt" is an internal kernel identifier and not a user-executable command, it does not accept any user-facing parameters or options. Its behavior is dictated by the internal logic of the Intel graphics driver within the Linux kernel.</I><br><br>


title: DESCRIPTION
content:
<I>The string "intel_upload_blit_large_gtt" is not a direct Linux command but rather an internal identifier likely referring to a function, tracepoint, or event within the Linux kernel's Intel graphics driver (i915 module). It signifies a specific operation involving the upload of data and a "blit" (block image transfer) operation, specifically utilizing a "large" allocation or region of the Graphics Translation Table (GTT). The GTT is crucial for managing memory access between the CPU and the Intel integrated graphics processor. This identifier would typically be encountered in kernel source code, kernel logs, or when using kernel tracing tools to monitor graphics driver behavior, especially concerning large memory transfers or rendering operations.</I>


title: CAVEATS
content:
<I>This identifier is <b>not</b> a user-space command. Attempting to execute it directly in a shell will result in a "command not found" error. It's a kernel internal symbol or event name, primarily relevant for kernel developers, debuggers, or those analyzing graphics driver performance using tools like ftrace or perf.</I>


title: GRAPHICS TRANSLATION TABLE (GTT)
content:
<I>The GTT is a memory management unit within Intel graphics hardware that translates graphics virtual addresses into physical memory addresses. It's analogous to a CPU's page tables but specialized for GPU memory access. "Large GTT" implies operations involving significant portions of this address space.</I>


title: BLITTING
content:
<I>Blitting (Block Image Transfer) is a common graphics operation where a rectangular block of pixels from one memory location (source) is rapidly copied to another memory location (destination). It's a fundamental building block for rendering, used for moving textures, updating frame buffers, or composing images.</I>


title: KERNEL TRACING
content:
<I>Kernel tracing tools like ftrace and perf allow developers to monitor the execution of kernel functions and events. Identifiers like "intel_upload_blit_large_gtt" can appear in trace logs, providing insights into how the i915 driver performs memory uploads and blit operations, especially when diagnosing performance issues or memory usage patterns.</I>


title: HISTORY
content:
<I>The Intel graphics driver (i915) in the Linux kernel has undergone continuous development for decades, adapting to new Intel GPU architectures and optimizing performance. Functions and identifiers like "intel_upload_blit_large_gtt" reflect the evolution of efficient memory management techniques (like GTT usage) and rendering path optimizations (like blitting) that are crucial for modern graphics workloads. Such detailed internal symbols became more visible with advanced kernel tracing capabilities, allowing deeper insights into driver behavior.</I>


title: SEE ALSO
content:
<I><b>i915 module:</b> The primary Linux kernel module for Intel integrated graphics.</I>, <I><b>perf(1):</b> Linux profiling tool, can trace kernel functions/events.</I>, <I><b>ftrace:</b> Linux kernel tracing framework, can monitor specific kernel functions or tracepoints.</I>, <I><b>debugfs:</b> A virtual filesystem in Linux often used by drivers (like i915) to expose debug information.</I>


title: PARAMETERS
content:
<b>This specific test (<I>gem_blt@upload_blit_large_map</I>) does not accept direct command-line parameters of its own.</b><br>&nbsp;&nbsp;&nbsp;&nbsp;It is invoked as part of the <I>igt</I> test runner framework. Its behavior can be influenced by the global options provided to the <I>igt</I> command itself.<br><br><b>--run-tests <I>"<test_name>"</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs <I>igt</I> to execute only the specified test(s). In this case, <I>"gem_blt@upload_blit_large_map"</I> selects the relevant test.<br><br><b>--list-tests</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available tests within the <I>igt</I> suite, which can be useful to find the exact name for this test.<br><br><b>--device <I>device_path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Intel GPU device to test (e.g., <I>/dev/dri/renderD128</I>). If not specified, <I>igt</I> typically selects the primary Intel GPU.<br><br><b>--loops <I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the selected test <I>N</I> times, useful for stress testing and finding intermittent issues.<br><br>


title: DESCRIPTION
content:
The <B>intel_upload_blit_large_map</B> is not a standalone Linux command in the traditional sense, but rather a specific test case within the <I>igt-gpu-tools</I> (Intel Graphics Tools) suite. This suite is a collection of utilities and tests primarily used by Intel graphics driver developers and testers to validate the correctness, performance, and robustness of Intel's integrated graphics hardware and its Linux kernel driver (i915).<br><br>Specifically, the <B>intel_upload_blit_large_map</B> test focuses on evaluating the driver's capability to efficiently handle and blit (block transfer) large memory maps within the GPU's addressable memory space. It verifies the proper functioning of memory management, including GTT (Graphics Translation Table) mappings, and ensures that large memory objects can be correctly uploaded to and blitted by the GPU's blitter engine without errors or performance regressions. This test is crucial for identifying potential issues with large texture handling, framebuffer operations, and general GPU memory concurrency under heavy load.


title: CAVEATS
content:
The <B>intel_upload_blit_large_map</B> test is part of a developer tool suite and is not intended for typical end-user interaction. Running it requires an Intel GPU and the <I>igt-gpu-tools</I> package installed, which is usually part of development or testing environments. It can stress the GPU and driver, potentially leading to system instability if issues are present. Results are primarily relevant to driver developers and quality assurance engineers.


title: TECHNICAL FOCUS
content:
This test primarily targets the <I>GEM (Graphics Execution Manager)</I> subsystem within the <I>i915</I> kernel driver. It specifically tests large object mapping using <I>DRM_IOCTL_I915_GEM_MMAP_GTT</I> and subsequent blitting operations, ensuring that GTT mappings for large memory regions are correctly established and utilized by the GPU's blitter engine for high-performance memory transfers.


title: USE CASES
content:
It is primarily used in continuous integration (CI) environments, pre-release validation, and during development of new Intel graphics hardware or driver features. It helps in catching regressions related to memory fragmentation, address space limitations, or performance bottlenecks in the blitter hardware/driver interaction when dealing with large graphical assets.


title: HISTORY
content:
The <I>igt-gpu-tools</I> suite, which includes the <B>intel_upload_blit_large_map</B> test, has evolved alongside Intel's Linux graphics drivers. Its development began as part of the broader effort to ensure the stability, performance, and feature compliance of the open-source Intel graphics stack. As Intel GPUs and their capabilities advanced, so did the complexity of driver interactions, particularly concerning memory management and efficient data transfer. Tests like <B>intel_upload_blit_large_map</B> were introduced to specifically validate the driver's ability to handle large memory allocations and GPU-accelerated blitting operations, which are fundamental to modern graphics applications and desktop environments.


title: SEE ALSO
content:
igt(1): Intel Graphics Tools test runner utility., igt-gpu-tools(7): Man page for the Intel GPU Tools suite (if available on your system)., drm(7): Direct Rendering Manager, the kernel interface for graphics hardware., i915(4): Linux kernel module for Intel graphics devices.


title: SYNOPSIS
content:
<b>'intel_upload_blit_small' is not a direct Linux command-line utility.</b> Therefore, it does not have a user-executable synopsis or syntax. It represents an internal function call or operation within the Intel graphics driver stack.


title: DESCRIPTION
content:
The string 'intel_upload_blit_small' refers to an internal function or operation within the Linux kernel's <I>i915</I> (Intel graphics) driver or related user-space graphics libraries (like <I>Mesa</I>).<br><br>It is <B>not a Linux command-line utility</B> that users can execute directly. Instead, it describes a specific low-level graphics operation: the efficient uploading or blitting of small chunks of data (e.g., textures, buffers) from system memory to GPU memory (Video RAM or GTT). This operation is critical for rendering performance, especially for frequently updated small elements on the screen.<br><br>You might encounter this string in kernel logs (<I>dmesg</I>), performance traces (<I>perf</I>), or driver debug output, indicating that this particular graphics primitive is being utilized by applications or the display server.


title: CAVEATS
content:
This string is a specific identifier for an internal driver operation. Its presence or exact behavior is dependent on the version of the Linux kernel, the <I>i915</I> driver, and the graphics stack (e.g., <I>Mesa</I>, Xorg/Wayland compositor). It is not something a user directly interacts with or configures via command-line arguments. Attempting to execute it as a command will result in a 'command not found' error.


title: ENCOUNTERING INTEL_UPLOAD_BLIT_SMALL
content:
While not a command, this function name may appear in system logs or debugging output. For example, if you run <I>dmesg | grep intel_upload_blit_small</I>, you might see messages related to its execution if the driver logs such events. Similarly, advanced profiling tools like <I>perf</I> can trace kernel function calls, potentially showing calls to <I>intel_upload_blit_small</I> during graphics-intensive operations, providing insights into driver behavior and performance bottlenecks.


title: HISTORY
content:
The concept of efficient graphics data transfers like blitting has been fundamental to graphics hardware and software development since the early days of GPUs. Specific optimizations like 'small blit' uploads are part of the continuous refinement of graphics drivers. The <I>i915</I> driver module in the Linux kernel has been under active development for decades, adapting to new Intel integrated graphics architectures (Gen, Xe) and improving performance for various workloads, including desktop rendering, video playback, and gaming. Functions like `intel_upload_blit_small` represent low-level optimizations that have evolved alongside these driver improvements to handle specific common rendering patterns efficiently.


title: PARAMETERS
content:
<b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses diagnostic messages and non-essential output, only showing the final diff.<br><br><b><b>-z</b>, <b>--gunzip</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Decompresses the input patch files using <b>gunzip</b> before processing. Useful if patches are compressed (e.g., <b>.gz</b> files).<br><br><b><b>--no-timestamps</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Omits timestamp information from the output diff header lines.<br><br><b><b>--strip-comments</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes any comment lines (typically starting with <b>#</b> or specific patch-related syntax) from the output diff.<br><br><b><b>--no-headers</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the output of header lines (e.g., <b>--- a/file</b>, <b>+++ b/file</b>) for the files that are not changed by the *interdiff* itself.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of the <b>interdiff</b> utility and exits.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints a summary of command-line options and exits.<br><br>


title: DESCRIPTION
content:
The <b>interdiff</b> command is a powerful utility from the <i>patchutils</i> suite designed to compute and display the difference between two existing patch files. Instead of comparing two source files, <b>interdiff</b> compares two <i>diffs</i> (patches).<br><br>When you have a base file, and two different patches (say, <b>patch_v1.diff</b> and <b>patch_v2.diff</b>) that apply to it, <b>interdiff</b> can generate a new patch that, when applied to <b>patch_v1.diff</b>, would result in <b>patch_v2.diff</b>. In essence, it shows you what changes were made *between* the two patch versions.<br><br>This is incredibly useful in development workflows, especially when maintaining or reviewing a series of patches. It allows developers to quickly see what modifications were introduced or removed in an updated version of a patch, without having to manually compare the contents of the patch files line by line.


title: CAVEATS
content:
<b>interdiff</b> primarily expects and works best with unified diff format. While it might attempt to process other formats, its accuracy and reliability are highest with unified diffs. It operates on the changes described within the diffs, not directly on the original source files, meaning the input files <i>must</i> be valid diffs.


title: COMMON USE CASE
content:
A typical scenario involves comparing two versions of a patch. For example, if you have <b>patch_v1.diff</b> and an updated version <b>patch_v2.diff</b>, you can see the exact changes between them by running: <br><code><b>interdiff patch_v1.diff patch_v2.diff > changes_v1_to_v2.diff</b></code><br>The resulting <b>changes_v1_to_v2.diff</b> can then be reviewed or applied to <b>patch_v1.diff</b> to transform it into <b>patch_v2.diff</b>.


title: OUTPUT FORMAT
content:
The output of <b>interdiff</b> is itself a unified diff, making it easy to pipe to other diff-processing tools or apply with the <b>patch(1)</b> command to another diff file.


title: HISTORY
content:
<b>interdiff</b> is part of the <i>patchutils</i> project, a collection of utilities for manipulating patches, developed by Andreas Gruenbacher. The <i>patchutils</i> suite has been a staple in Linux and open-source development environments for many years, providing essential tools for managing the creation, application, and comparison of patches, especially critical in large projects like the Linux kernel where patch submission and review workflows are extensive.


title: SYNOPSIS
content:
To access the introductory manual page, use the <B>man</B> command:<br><br><B>man intro</B><br><br>Optional parameters apply to the <B>man</B> command itself, not to 'intro'.


title: PARAMETERS
content:
<b><I>-k</I>, <I>--apropos</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches the short descriptions of man pages for keywords.<br><br><b><I>-f</I>, <I>--whatis</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a short description of manual pages by name.<br><br><b><I>-s</I>, <I>--sections</I> <I>list</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a colon-separated list of sections to search.<br><br><b><I>-a</I>, <I>--all</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all matching manual pages instead of just the first found.<br><br><b><I>--help</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message for the <B>man</B> command.<br><br><b><I>--version</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information for the <B>man</B> command.<br><br>


title: DESCRIPTION
content:
The "intro" command, strictly speaking, is not an executable program but rather a specific <I>manual page</I> entry that serves as an introduction to the Linux manual system. When you execute <B>man intro</B>, you are typically viewing the <B>man(1)</B> manual page itself, or a similar introductory document. This page is designed to provide new users with a fundamental understanding of how to use and interpret the vast collection of online reference manuals (man pages). It explains the structure of manual pages, the different sections (like commands, system calls, library functions), common conventions, and how to effectively search for and read documentation on a Unix-like system. It acts as a crucial starting point for anyone learning to navigate the Linux command-line environment and its extensive self-documentation.<br><br>While not a command in the conventional sense, <B>intro</B> is a vital resource for understanding the man page hierarchy and usage.


title: CAVEATS
content:
It is crucial to understand that <I>intro</I> is <B>not an executable Linux command</B> like <B>ls</B> or <B>grep</B>. It is an entry within the manual page system. Attempting to run 'intro' directly in the shell will result in a "command not found" error. Its content and the specific manual page it refers to (<B>man(1)</B> or a system-specific introduction) can vary slightly across different Linux distributions and manual page implementations.


title: TYPICAL CONTENT OF THE INTRO MANUAL PAGE
content:
The <B>intro</B> manual page usually covers the following key areas:<br><br><B>Manual Page Structure</B>: Explains the standard layout of a man page (NAME, SYNOPSIS, DESCRIPTION, OPTIONS, EXAMPLES, SEE ALSO, BUGS, etc.).<br><br><B>Manual Page Sections</B>: Describes the numbered sections (e.g., 1 for commands, 2 for system calls, 3 for library functions, 4 for special files, 5 for file formats, 6 for games, 7 for miscellaneous, 8 for administration commands) and what type of information each contains.<br><br><B>Conventions</B>: Clarifies common typographical conventions used in man pages (e.g., bold for literal text, italics for variables, square brackets for optional arguments).<br><br><B>Using the Man Command</B>: Provides basic instructions on how to use the <B>man</B> command itself to search for and display pages, including common options and search methods.


title: HISTORY
content:
The concept of an "intro" manual page has been a foundational element of the Unix and later Linux documentation system since its inception. From early AT&T Unix versions, the manual pages were designed to be a comprehensive self-documenting system. An introductory page, often found in section 1 (commands), was included to orient new users to the structure and conventions of these manuals. Its purpose has remained consistent: to serve as the first point of contact for users wishing to understand how to navigate and utilize the extensive on-line documentation provided by the system, ensuring that even complex systems remain accessible to self-learners.


title: SYNOPSIS
content:
<b>invoke-rc.d</b> [<i>--force</i>] [<i>--quiet</i>] [<i>--try-restart</i>] [<i>--no-stop</i>] [<i>--skip-default-on</i>] <i>service_name</i> <i>action</i> [<i>param ...</i>]


title: PARAMETERS
content:
<b><i>service_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the service's init script, typically found in <i>/etc/init.d/</i> (e.g., <b>apache2</b>, <b>ssh</b>).<br><br><b><i>action</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The desired operation to perform on the service (e.g., <b>start</b>, <b>stop</b>, <b>restart</b>, <b>reload</b>, <b>force-reload</b>, <b>status</b>).<br><br><b>[<i>param ...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional additional arguments to pass directly to the service script.<br><br><b><i>--force</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the execution of the action, overriding checks that might otherwise suppress it (e.g., incorrect runlevel, disabled service).<br><br><b><i>--quiet</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress informational output from <i>invoke-rc.d</i> itself. Output from the service script may still be displayed.<br><br><b><i>--try-restart</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If the service is currently running, restart it. If it's not running, do nothing. This is a more graceful alternative to <b>restart</b> in some scenarios.<br><br><b><i>--no-stop</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent the <b>stop</b> action from being executed, even if the service would normally be stopped during reconfiguration (e.g., package upgrade).<br><br><b><i>--skip-default-on</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent the script from performing the default 'start' action if the service isn't explicitly configured to run in the current runlevel. This is useful for packages that ship a service but don't want it enabled by default.<br><br>


title: DESCRIPTION
content:
<i>invoke-rc.d</i> is a Debian-specific utility designed to safely and robustly execute System V style init scripts or delegate to <i>systemctl</i> on systems using <i>systemd</i>.<br><br>It serves as a crucial wrapper for package maintainer scripts (e.g., <b>postinst</b>, <b>prerm</b>) during package installation, upgrade, or removal. Instead of directly calling init scripts or <i>systemctl</i>, packages should use <i>invoke-rc.d</i>. This ensures that service actions adhere to Debian policy, considering factors like current runlevel, package status, and whether the service should actually be started or stopped.<br><br>It prevents unintended service operations, especially during critical system states (like boot or shutdown) or when a package is not fully configured. All actions performed by <i>invoke-rc.d</i> are logged to <i>/var/log/invoke-rc.d.log</i>, aiding in debugging and auditing service management during package lifecycle events.


title: CAVEATS
content:
This command is specific to Debian-based distributions (like Ubuntu, Mint) and is not available on Red Hat/CentOS/Fedora systems. While users can run it manually, its primary design purpose is for use within Debian package maintainer scripts (e.g., <i>postinst</i>) to ensure correct service handling during package lifecycle events. Its behavior can be complex due to interactions with runlevels, package states, and the underlying init system (SysVinit or systemd).


title: USAGE IN PACKAGE MAINTAINER SCRIPTS
content:
For Debian packaging policy, <i>invoke-rc.d</i> is the preferred and often required command for package maintainer scripts to manage services. This ensures that services are handled according to system policies, respecting runlevels, package configuration status, and logging conventions. Directly calling <b>service</b> or <b>systemctl</b> within these scripts is generally discouraged.


title: LOGGING
content:
Every action performed by <i>invoke-rc.d</i> is meticulously logged to <i>/var/log/invoke-rc.d.log</i>. This log file is invaluable for debugging issues related to service startup, shutdown, or restarts during package installation, upgrades, or removals, providing a clear audit trail of service management operations.


title: HISTORY
content:
<i>invoke-rc.d</i> originated in Debian to provide a robust and policy-compliant method for package maintainer scripts to manage system services. Before the widespread adoption of <i>systemd</i>, it served as a wrapper around SysVinit scripts in <i>/etc/init.d/</i>.<br><br>With the transition of many Linux distributions, including Debian, to <i>systemd</i> as the default init system, <i>invoke-rc.d</i> was adapted to detect the active init system. If <i>systemd</i> is in use, it intelligently delegates service actions to <i>systemctl</i>, otherwise, it continues to interact with traditional SysVinit scripts. This evolution has allowed <i>invoke-rc.d</i> to remain a vital abstraction layer, ensuring backward compatibility and consistent service management for packages across different init environments.


title: SYNOPSIS
content:
<b>inxi</b> [<i>options</i>]<br><br>Examples:<br><b>inxi</b> <b>-F</b><br><b>inxi</b> <b>-S</b> <b>-C</b> <b>-G</b> <b>-N</b><br><b>inxi</b> <b>-t</b> <b>c</b> <b>-t</b> <b>m


title: PARAMETERS
content:
<b>-F</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs a full system report, including system, CPU, graphics, drives, network, and other common information.<br><br><b>-S</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays system information, including host, kernel, distro, uptime, and desktop environment.<br><br><b>-C</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows CPU information, such as model, core count, speed, and CPU flags.<br><br><b>-G</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides detailed graphics information, including graphics card model, display server, and driver details.<br><br><b>-M</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs motherboard information, including manufacturer, model, and BIOS/UEFI version.<br><br><b>-D</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists disk drives, their sizes, models, and partition usage.<br><br><b>-N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays network card information, including device, driver, and MAC address.<br><br><b>-A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows audio device information and drivers.<br><br><b>-R</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists repository information for supported distributions (e.g., APT, RPM).<br><br><b>-t <type><num></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reports temperatures. Use 'c' for CPU, 'g' for GPU, 'd' for disks. Optional number specifies verbosity or top processes.<br><br><b>-v <level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets verbosity level (0-8). Higher levels provide more detailed output for various sections.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message with available options.<br><br>


title: DESCRIPTION
content:
<i>inxi</i> is a powerful and versatile command-line script designed to provide comprehensive system information in an easy-to-read format. It gathers data from various sources, including system utilities and kernel files, to present detailed insights into hardware, software, and system health.<br><br>Users can quickly retrieve information about their CPU, GPU, motherboard, memory, storage devices, network interfaces, audio devices, kernel, running processes, temperatures, and much more. It's an invaluable tool for system diagnostics, troubleshooting, reporting bugs, or simply understanding your system's configuration. Its output is designed to be easily shareable, making it popular in support forums and IRC channels for quick system specification sharing.


title: CAVEATS
content:
<i>inxi</i> relies on various underlying system utilities (e.g., <i>lm_sensors</i>, <i>pciutils</i>, <i>usbutils</i>). If these are not installed or correctly configured, some information might be missing or incomplete.<br><br>While highly informative, sharing the full output of <b>inxi -F</b> publicly should be done with care, as it contains detailed system specifications which could potentially be used for targeted attacks, though generally, it's considered safe for support contexts.


title: USAGE IN SUPPORT AND DEBUGGING
content:
Due to its comprehensive and human-readable output, <i>inxi</i> is frequently requested in technical support forums, bug reports, and IRC channels. The <b>-F</b> option is particularly useful for providing a quick, all-encompassing snapshot of a system, which greatly aids in diagnosing issues.


title: DEPENDENCIES AND ACCURACY
content:
The accuracy and completeness of <i>inxi</i>'s output often depend on the presence of optional dependencies like <i>lm_sensors</i> for temperature readings, <i>pciutils</i> for PCI device details, and <i>usbutils</i> for USB device enumeration. Ensuring these are installed can enhance the depth of information provided.


title: HISTORY
content:
<i>inxi</i> originated in 2007, created by <b>locsmif</b> for an IRC channel to quickly get system information for support purposes. It was designed as a simple Bash script but rapidly evolved into a sophisticated diagnostic tool. Its development focused on readability, portability across various Linux distributions, and extensive data gathering capabilities, making it a widely adopted standard for system information reporting in the Linux community.


title: PARAMETERS
content:
<b>--version, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the Ionic CLI version.<br><br><b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help for the command or a specific subcommand.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details during execution.<br><br><b>--no-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable colored output in the terminal.<br><br><b>--confirm</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prompt for confirmation before executing potentially destructive actions.<br><br><b>start <name> <template> [--type=<framework>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new Ionic project with a specified <i>name</i> and <i>template</i> (e.g., 'tabs', 'blank', 'sidemenu'). The <i>--type</i> flag specifies the framework (angular, react, vue).<br><br><b>serve [--port=<port>] [--external] [--lab]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Serve the Ionic application in the browser for development. <i>--port</i> specifies the port number, <i>--external</i> allows access from other devices on the network, and <i>--lab</i> opens a multi-platform view.<br><br><b>build [--prod] [--configuration=<config>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Build the Ionic application for production or testing. <i>--prod</i> optimizes for production, and <i>--configuration</i> specifies a build configuration.<br><br><b>capacitor add <platform></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a native platform (e.g., 'ios', 'android') to the project using Capacitor, enabling native builds.<br><br><b>capacitor sync <platform></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sync web assets and plugin code to the native project directory for the specified platform.<br><br><b>cordova add <platform></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a native platform (e.g., 'ios', 'android') to the project using Cordova (legacy method).<br><br><b>generate <type> <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate a new Ionic artifact like a page, component, service, provider, or module.<br><br>


title: DESCRIPTION
content:
The <b><i>ionic</i></b> command is the official command-line interface (CLI) for the Ionic Framework, an open-source UI toolkit for building high-quality, cross-platform mobile, desktop, and web applications. It leverages standard web technologies like HTML, CSS, and JavaScript, integrating seamlessly with popular frontend frameworks such as Angular, React, and Vue. The CLI provides a powerful set of tools to streamline the entire application development lifecycle. Developers use it to scaffold new projects, serve applications locally for testing, build production-ready packages, integrate with native runtime layers like Capacitor or Cordova, generate components, pages, and services, and manage various aspects of their Ionic projects. Its primary goal is to accelerate development by providing sensible defaults and automation for common tasks, enabling web developers to target multiple platforms from a single codebase.


title: CAVEATS
content:
The <b><i>ionic</i></b> command is not a native Linux utility but a Node.js package installed via npm. It requires Node.js and npm to be pre-installed on the system. Its functionality heavily relies on a working Node.js environment and various JavaScript dependencies. It's primarily used for web and hybrid mobile application development and doesn't perform typical system-level operations.


title: INSTALLATION
content:
To use the <b><i>ionic</i></b> command, you must first install Node.js and npm. Then, install the Ionic CLI globally using npm: <br><i>npm install -g @ionic/cli</i>


title: PROJECT STRUCTURE
content:
An Ionic project typically consists of a standard web application structure (HTML, CSS, JavaScript/TypeScript) along with configuration files specific to Ionic, Capacitor, or Cordova. The CLI manages these files and integrates them with native platform projects.


title: HISTORY
content:
The Ionic Framework and its CLI were first released in 2013 by Drifty Co. (later acquired by Roposo, then part of the Congruent Group). Initially, Ionic was built on top of AngularJS and Apache Cordova. Over the years, it evolved to support other popular frontend frameworks like React and Vue.js, and introduced Capacitor as its preferred native runtime, offering a more modern alternative to Cordova. The <b><i>ionic</i></b> CLI has continuously been updated to reflect these changes, providing tools that integrate with the latest web technologies and native platform capabilities, solidifying its position as a leading tool for cross-platform app development.


title: SEE ALSO
content:
<i>npm</i>: Node Package Manager for installing JavaScript packages., <i>node</i>: Node.js runtime environment., <i>capacitor</i>: Cross-platform native runtime for web apps., <i>cordova</i>: Platform for building native mobile apps with web technologies., <i>ng</i> (Angular CLI): Command-line interface for Angular applications., <i>react-scripts</i>: Configuration and scripts for React apps., <i>vue-cli-service</i>: Command-line interface for Vue.js applications.


title: PARAMETERS
content:
<b>-c, --class <i>class</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the I/O scheduling class. <i>class</i> can be <b>idle</b>, <b>best-effort</b>, or <b>realtime</b>.<br><br><b>-n, --classdata <i>level</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the I/O scheduling priority level (0-7). Lower numbers indicate higher priority.<br><br><b>-p, --pid <i>pid...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operate on specified process IDs instead of a new command.<br><br><b>-t, --show-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the I/O scheduling class and priority for all running processes (requires root).<br><br><b>-u, --uid <i>uid</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the command as a specified user ID.<br><br><b>-g, --gid <i>gid</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the command as a specified group ID.<br><br><b>-P, --process</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Act on the specific process (PID) rather than its entire process group when combined with <b>-p</b> and a <i>command</i>.<br><br><b>-A, --action</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for <b>--process</b>, setting I/O priority for a specific process rather than its group.<br><br><b>-T, --no-prefix</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When showing all processes (with <b>-t</b>), suppress the "I/O scheduling class for..." prefix.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br>


title: DESCRIPTION
content:
The <b>ionice</b> command allows users to get or set the I/O scheduling class and priority for a program. It is an essential tool for managing disk I/O contention, ensuring that critical applications receive sufficient bandwidth while background tasks don't monopolize disk access. <br><br>Linux I/O schedulers, particularly CFQ (Completely Fair Queuing) and BFQ (Budget Fair Queuing), categorize I/O requests into different classes. <b>ionice</b> supports three main classes: <i>idle</i>, <i>best-effort</i>, and <i>realtime</i>. The <i>idle</i> class provides the lowest priority, allowing I/O only when no other requests are pending. The <i>best-effort</i> class is the default for most processes and can be assigned a priority level from 0 (highest) to 7 (lowest). The <i>realtime</i> class offers the highest priority, guaranteeing a certain amount of I/O bandwidth, also with levels from 0 to 7. <br><br>By appropriately assigning I/O priorities, administrators and users can prevent "I/O starvation" for interactive applications and ensure smooth system performance, especially on systems with heavy disk activity or multiple competing processes.


title: CAVEATS
content:
The effectiveness of <b>ionice</b> depends on the underlying Linux I/O scheduler. It primarily works with CFQ (Completely Fair Queuing) and BFQ (Budget Fair Queuing) schedulers. Other schedulers (like NOOP or Deadline) may not fully respect I/O priorities. <br><br>Using the <i>realtime</i> I/O class improperly can lead to I/O starvation for other processes, potentially making the system unresponsive. Setting <i>realtime</i> priority often requires root privileges. <br><br><b>ionice</b> controls disk I/O, not network I/O or CPU scheduling; for CPU scheduling, use <b>nice</b> or <b>renice</b>.


title: I/O SCHEDULING CLASSES EXPLAINED
content:
<b><i>Idle Class:</i></b> Processes in this class only get disk I/O time when no other process is requesting I/O. This is suitable for very low-priority background tasks like file indexing or backups that should not interfere with interactive usage. <br><br><b><i>Best-Effort Class:</i></b> This is the default class. Processes in this class share I/O bandwidth based on their assigned priority level (0-7). A process with priority 0 gets more I/O bandwidth than a process with priority 7. Most user applications fall into this category. <br><br><b><i>Realtime Class:</i></b> Processes in this class are given guaranteed I/O bandwidth and are largely unaffected by other I/O requests. This is for critical applications where I/O latency and throughput are paramount, such as multimedia streaming or real-time data acquisition. Use with caution as it can starve other processes.


title: CHECKING I/O SCHEDULER
content:
To determine the active I/O scheduler for a device, you can inspect <i>/sys/block/&lt;device&gt;/queue/scheduler</i>. For example, to check <i>sda</i>: <br><i>cat /sys/block/sda/queue/scheduler</i>. The output will typically show the active scheduler in square brackets, e.g., <i>[bfq] mq-deadline none</i>.


title: HISTORY
content:
<b>ionice</b> is part of the <b>util-linux</b> project, a collection of essential Linux utilities. It was introduced to provide user-space control over the kernel's I/O scheduling capabilities, which became more sophisticated with the development of I/O schedulers like CFQ. Its usage became more widespread as multi-user systems and I/O-intensive applications demanded finer-grained control over disk resource allocation.


title: PARAMETERS
content:
<b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the CPU utilization report.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the device utilization report.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display statistics in a human-readable format (e.g., kB, MB, GB).<br><br><b>-k, -m, -g</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display statistics in kilobytes, megabytes, or gigabytes per second, respectively.<br><br><b>-p [ { <I>device</I> [,...] | <b>ALL</b> } ]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display statistics for disks and partitions. Specify specific devices or 'ALL'.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display extended statistics, including average queue length, service time, and I/O utilization.<br><br><b>-y</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Omit the first report, which covers the period since system boot.<br><br><b>-z</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress lines for devices or CPU states with zero activity.<br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the time of each report.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information.<br><br><b><I>INTERVAL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Time in seconds between each successive report.<br><br><b><I>COUNT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The number of reports to generate. If not specified with an INTERVAL, only one report is generated.<br><br>


title: DESCRIPTION
content:
<i>iostat</i> is a command-line utility used to monitor and report CPU utilization and I/O statistics for devices, partitions, and network filesystems (NFS). It is a fundamental tool for system administrators and performance analysts to diagnose performance bottlenecks related to disk I/O or CPU contention. Part of the <i>sysstat</i> package, <i>iostat</i> provides valuable insights into how much CPU time is spent on various tasks (user, system, idle, I/O wait) and the throughput, operations per second, and latency of storage devices. By observing metrics like reads/writes per second, kilobyte transfer rates, average queue lengths, and I/O utilization, users can identify devices that are heavily loaded or experiencing high latency, which might indicate a bottleneck in the storage subsystem. It helps in understanding the workload distribution across the system and optimizing resource allocation and capacity planning.


title: CAVEATS
content:
<i>iostat</i> relies on data from the `/proc` and `/sys` filesystems, which provide kernel statistics. The first report, by default, provides averages since system boot, which may not reflect current activity; use the `-y` option to skip it. Interpreting the output requires a solid understanding of disk I/O metrics and their implications for performance. For example, high `%util` combined with high `await` times typically indicates a disk bottleneck. While useful for ad-hoc snapshots, for continuous, long-term monitoring or historical trending, `sar` (also part of `sysstat`) or other dedicated monitoring systems are generally more appropriate.


title: KEY METRICS EXPLAINED
content:
<i>iostat</i> reports various metrics crucial for performance analysis. For CPU, these include <b>%user</b> (percentage of CPU utilization in user-level applications), <b>%system</b> (percentage of CPU utilization in the kernel), <b>%iowait</b> (percentage of time CPU was idle with pending disk I/O requests), and <b>%idle</b> (percentage of time CPU was idle with no pending disk I/O requests).<br><br>For devices, common metrics include <b>r/s</b> (reads per second), <b>w/s</b> (writes per second), <b>rkB/s</b> (kilobytes read per second), <b>wkB/s</b> (kilobytes written per second), <b>await</b> (the average time, in milliseconds, for I/O requests issued to the device to be served), and <b>%util</b> (percentage of time during which I/O requests were issued to the device). Understanding these metrics is vital for diagnosing performance issues and identifying bottlenecks.


title: HISTORY
content:
<i>iostat</i> is a long-standing utility, originating from the Unix world and later adapted for Linux. It is a core component of the <i>sysstat</i> package, which has been actively maintained for decades by Sebastien Godard. The <i>sysstat</i> project aims to provide comprehensive system monitoring tools for Linux. Over its history, <i>iostat</i> has evolved to include more detailed metrics and options to better reflect modern storage technologies and diverse workloads, enhancing its utility for performance analysis and troubleshooting in complex Linux environments.


title: PARAMETERS
content:
<b><b>-o</b>, <b>--only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only show processes or threads that are actually doing I/O, instead of all processes/threads.<br><br><b><b>-b</b>, <b>--batch</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Non-interactive mode. Print the output and exit. Useful for scripting or logging.<br><br><b><b>-n <I>NUM</I></b>, <b>--iter=<I>NUM</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of iterations to print in batch mode before exiting. Requires <b>-b</b>.<br><br><b><b>-d <I>SEC</I></b>, <b>--delay=<I>SEC</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delay between updates in seconds (can be a float).<br><br><b><b>-p <I>PID</I></b>, <b>--pid=<I>PID</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor specific process ID(s). Multiple PIDs can be comma-separated.<br><br><b><b>-u <I>USER</I></b>, <b>--user=<I>USER</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor I/O for processes owned by specific user(s). Multiple users can be comma-separated.<br><br><b><b>-P</b>, <b>--processes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show only processes, not all threads. This aggregates I/O for all threads of a process.<br><br><b><b>-a</b>, <b>--accumulated</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show accumulated I/O since <i>iotop</i> started, rather than current rates.<br><br><b><b>-k</b>, <b>--kilobytes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use kilobytes as the unit for I/O rates instead of automatically chosen units (e.g., KB, MB, GB).<br><br><b><b>-t</b>, <b>--time</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a timestamp to each line in batch mode output.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress some header lines in batch mode. Can be specified up to three times (e.g., <b>-qqq</b>) for increasingly quiet output.<br><br><b><b>-B</b>, <b>--background</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run <i>iotop</i> in the background. Requires <b>-n</b>.<br><br><b><b>-r</b>, <b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use raw bytes for I/O rates (disables automatic unit scaling).<br><br><b><b>-c</b>, <b>--comm</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the command name (executable path) instead of the process command line.<br><br><b><b>-m</b>, <b>--merged</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Merge I/O for multiple devices to a single value per process.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's version number and exit.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a help message and exit.<br><br>


title: DESCRIPTION
content:
<i>iotop</i> is a free top-like utility for monitoring disk I/O activity on Linux systems. It provides a real-time, interactive view of which processes or threads are actively performing disk reads and writes, and at what rates. By utilizing the Linux kernel's <I>taskstats</I> interface and <I>netlink</I> protocol, <i>iotop</i> collects and displays per-process I/O statistics, including total disk read/write bandwidth usage, and individual read/write rates for each process or thread. <br><br>This tool is invaluable for system administrators and developers alike to identify I/O bottlenecks, diagnose slow system performance caused by excessive disk activity, or pinpoint specific applications or users consuming disproportionate I/O resources. It can operate in interactive mode, similar to <I>top</I>, updating regularly, or in batch mode for logging purposes. It typically requires root privileges to access the necessary kernel information.


title: CAVEATS
content:
<i>iotop</i> primarily relies on the Linux kernel's <I>taskstats</I> interface, which means it requires a relatively recent kernel version (2.6.20 or newer, though better support is in 2.6.32+). It typically requires root privileges or the <I>CAP_SYS_ADMIN</I> capability to access the necessary kernel data. The I/O reported is primarily disk I/O, not network I/O. While <i>iotop</i> can identify processes causing high I/O, it does not detail which specific files are being accessed, requiring other tools like <I>lsof</I> for that information.


title: INTERACTIVE KEYS
content:
When running in interactive mode (default), <i>iotop</i> responds to several key presses:<br><b>r</b>: Toggle reverse sort order.<br><b>o</b>: Toggle <b>--only</b> (show only processes with I/O).<br><b>p</b>: Toggle <b>--processes</b> (show processes only, not threads).<br><b>a</b>: Toggle <b>--accumulated</b> (show accumulated I/O).<br><b>k</b>: Toggle <b>--kilobytes</b> (use kilobytes as units).<br><b>i</b>: Change I/O priority for a selected process (requires root and <I>ionice</I> support).<br><b>q</b>: Quit <i>iotop</i>.


title: OUTPUT COLUMNS EXPLAINED
content:
<i>iotop</i>'s default interactive display includes several key columns:<br><b>TID/PID</b>: The thread or process ID.<br><b>USER</b>: The user owning the process.<br><b>DISK READ</b>: The current disk read rate for the process.<br><b>DISK WRITE</b>: The current disk write rate for the process.<br><b>SWAPIN</b>: The percentage of time spent swapping in.<br><b>IO%</b>: The percentage of time the process spent doing I/O.<br><b>COMMAND</b>: The command line or name of the process.


title: HISTORY
content:
<i>iotop</i> was developed by Guillaume Chazarain, inspired by the popular <I>top</I> command. It emerged around 2008 as a specialized tool to address the need for real-time, per-process disk I/O monitoring on Linux systems. Its core functionality is built upon the <I>taskstats</I> interface, a Netlink-based API in the Linux kernel that provides aggregated per-task statistics, including disk I/O. This allowed <i>iotop</i> to fill a crucial gap in system monitoring, quickly becoming a go-to utility for diagnosing performance issues related to disk activity.


title: SYNOPSIS
content:
<i>ip</i> [ <i>OPTIONS</i> ] <i>OBJECT</i> { <i>COMMAND</i> | help }<br><br>Common Usage Examples:<br><i>ip link show</i><br><i>ip addr add 192.168.1.100/24 dev eth0</i><br><i>ip route show</i><br><i>ip neigh show</i>


title: PARAMETERS
content:
<b><b>-V, -version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version of the <i>ip</i> utility.<br><br><b><b>-s, -stats, -statistics</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows statistics for the object, such as packet counts or errors. Can be specified multiple times for more details.<br><br><b><b>-d, -details</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows more detailed information about the object.<br><br><b><b>-n, -numeric</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <i>ip</i> from resolving hostnames, user names, or service names to their numeric representations.<br><br><b><b>-o, -oneline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs each record on a single line, useful for scripting.<br><br><b><b>-t, -timestamp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a timestamp in front of each line of output.<br><br><b><b>-r, -resolve</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resolves hostnames and service names, opposite of <i>-n</i>.<br><br><b><b>-4, -6</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters output to only show IPv4 or IPv6 addresses/routes, respectively.<br><br><b><b>-f, -family</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the protocol family to use (e.g., <i>inet</i> for IPv4, <i>inet6</i> for IPv6, <i>bridge</i>, <i>link</i>).<br><br><b><b>-netns <NAMESPACE></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the command within the specified network namespace.<br><br><b><b>OBJECT</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The type of networking object to manage. Common objects include <i>link</i> (network interfaces), <i>addr</i> (IP addresses), <i>route</i> (routing table entries), <i>neigh</i> (ARP/NDP cache entries), <i>netns</i> (network namespaces), <i>tunnel</i> (IP tunnels), etc.<br><br><b><b>COMMAND</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The action to perform on the specified <i>OBJECT</i>. Common commands include <i>add</i> (create), <i>del</i> (delete), <i>show</i> (display), <i>set</i> (modify), <i>get</i> (retrieve specific information), <i>flush</i> (clear).<br><br>


title: DESCRIPTION
content:
The <i>ip</i> command is a powerful, modern utility for configuring and managing network interfaces, routing tables, ARP entries, IP tunnels, and more on Linux systems. It is part of the <i>iproute2</i> suite, which was developed to replace the older, less capable <i>net-tools</i> utilities like <i>ifconfig</i>, <i>route</i>, <i>arp</i>, and <i>netstat</i>. The <i>ip</i> command provides a unified and consistent interface for network configuration, addressing limitations of traditional tools, especially in handling advanced networking features such as policy routing, network namespaces, and traffic control.<br><br>Unlike its predecessors, <i>ip</i> operates on various "objects" (e.g., <i>link</i> for network interfaces, <i>addr</i> for IP addresses, <i>route</i> for routing tables) and performs specific "commands" (e.g., <i>add</i>, <i>del</i>, <i>show</i>, <i>set</i>) on them. This object-oriented approach makes it more versatile and scalable for complex network setups, making it the standard tool for network management in modern Linux distributions.


title: CAVEATS
content:
Most operations with the <i>ip</i> command require root privileges to execute. Its comprehensive and object-oriented syntax can be complex for new users compared to older tools. The output, especially with detailed options, can be verbose and may require filtering with utilities like <i>grep</i> or <i>awk</i> to extract specific information.


title: KEY OBJECTS OF THE <I>IP</I> COMMAND
content:
The <i>ip</i> command's power comes from its ability to interact with various network objects. The most frequently used objects are: <i><b>link</b></i> (manages network interfaces like adding/deleting virtual interfaces, changing interface state), <i><b>addr</b></i> (assigns/removes IP addresses to/from interfaces), <i><b>route</b></i> (manages the kernel's routing table, defining how packets are forwarded), and <i><b>neigh</b></i> (manages the ARP/NDP cache, mapping IP addresses to MAC addresses). Understanding these core objects is fundamental to using <i>ip</i> effectively.


title: NETWORK NAMESPACES (NETNS)
content:
<i>ip</i> is instrumental in managing Linux network namespaces, a powerful virtualization feature that allows multiple independent network stacks to exist within a single Linux kernel instance. Each namespace has its own network interfaces, routing tables, and IP addresses, enabling containerization technologies like Docker and LXC. The <i>ip netns</i> command allows creation, deletion, and execution of commands within specific namespaces, making it crucial for network isolation and multi-tenant environments.


title: HISTORY
content:
The <i>iproute2</i> suite, which includes the <i>ip</i> command, was primarily developed by Alexey Kuznetsov, starting in the late 1990s. Its creation was driven by the need for more advanced networking capabilities in the Linux kernel that the traditional <i>net-tools</i> (<i>ifconfig</i>, <i>route</i>, <i>arp</i>, <i>netstat</i>) could not support effectively. These new capabilities included policy routing, Quality of Service (QoS), network namespaces, and more sophisticated interface management. Over the past two decades, <i>iproute2</i> has become the standard and recommended way for Linux network configuration, replacing the older tools in most modern distributions.


title: SYNOPSIS
content:
<i>ip</i> <b>[</b> <i>OPTIONS</i> <b>]</b> <i>OBJECT</i> <b>{</b> <i>COMMAND</i> <b>|</b> <i>help</i> <b>}</b><br><br><b>Common <i>OBJECTS</i>:</b><br><i>link</i>: Network device configuration (e.g., up/down, MAC address).<br><i>addr</i>: IP address configuration (e.g., add/delete IP addresses).<br><i>route</i>: IP routing table management (e.g., add/delete routes).<br><i>neigh</i>: Neighbor table (ARP/NDP cache) management.<br><i>rule</i>: Routing policy database rules.<br><i>netns</i>: Network namespaces.<br><br><b>Common <i>COMMANDS</i> (depend on <i>OBJECT</i>):</b><br><i>show</i> (or <i>list</i>): Display information.<br><i>add</i>: Add a new entry.<br><i>del</i>: Delete an existing entry.<br><i>set</i>: Modify an existing entry.<br><i>get</i>: Retrieve specific information.


title: PARAMETERS
content:
<b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version of the <i>ip</i> utility.<br><br><b>-s, --stats, --statistics</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs more verbose information, especially statistics for objects like network links.<br><br><b>-d, --details</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs even more detailed information than <i>-s</i>.<br><br><b>-r, --resolve</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to resolve hostnames instead of displaying raw IP addresses where applicable.<br><br><b>-o, --oneline</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs each record on a single line, replacing linefeeds with \ characters.<br><br><b>-f, --family {inet | inet6 | bridge | link}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the protocol family to use (e.g., IPv4, IPv6). If not specified, the default is <i>inet</i> (IPv4) or determined by the object.<br><br><b>-N, --netns {NAME | PID}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Switches to the specified network namespace before executing the command. This allows managing network configurations within isolated environments.<br><br><b>-a, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies the command to all objects of the specified type (e.g., all interfaces, all addresses).<br><br><b>-t, --timestamp</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current time before the output, useful for scripting or logging.<br><br><b>-p, --pretty</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the information in a more human-readable or machine-parsable format (e.g., JSON if supported by the <i>iproute2</i> version).<br><br>


title: DESCRIPTION
content:
The <i>ip</i> command is the fundamental utility for configuring and managing network interfaces, IP addresses, routing tables, and various other networking parameters on Linux systems. It is part of the <i>iproute2</i> suite, a modern replacement for older, less capable tools like <i>ifconfig</i>, <i>route</i>, and <i>arp</i>. <i>ip</i> provides a unified and powerful interface for almost all network-related operations, offering richer functionality, better performance, and a more consistent syntax than its predecessors. It is essential for tasks ranging from displaying network statistics to setting up complex routing rules, managing network namespaces, and configuring tunnels.


title: CAVEATS
content:
<i>ip</i> requires root privileges (or <i>sudo</i>) for most configuration changes and some display operations.<br><br>Its comprehensive functionality results in a hierarchical and sometimes complex syntax, which can have a steeper learning curve compared to older tools.<br><br>Specific syntax and available commands can vary slightly between different versions of the <i>iproute2</i> package.


title: COMMON USE CASES
content:
Here are some common examples of how the <i>ip</i> command is used:<br><br><b>Display all IP addresses:</b><br><i>ip addr show</i><br><br><b>Bring a network interface up:</b><br><i>ip link set eth0 up</i><br><br><b>Add an IP address to an interface:</b><br><i>ip addr add 192.168.1.10/24 dev eth0</i><br><br><b>Delete an IP address from an interface:</b><br><i>ip addr del 192.168.1.10/24 dev eth0</i><br><br><b>Show the default route:</b><br><i>ip route show default</i><br><br><b>Add a default route via a gateway:</b><br><i>ip route add default via 192.168.1.1 dev eth0</i><br><br><b>Display neighbor (ARP) cache:</b><br><i>ip neigh show</i><br><br><b>Show statistics for all links:</b><br><i>ip -s link show</i>


title: HIERARCHICAL STRUCTURE
content:
The <i>ip</i> command follows a hierarchical structure where an <i>OBJECT</i> is specified first, followed by a <i>COMMAND</i> specific to that object. For example, to manage IP addresses, you use <i>ip addr</i>, and then subcommands like <i>add</i>, <i>del</i>, or <i>show</i> apply to addresses. This design allows for a consistent and extensible syntax across diverse networking functionalities.


title: HISTORY
content:
The <i>ip</i> command is the flagship utility of the <i>iproute2</i> suite, which was primarily developed by Alexey Kuznetsov starting in the late 1990s. Its creation was motivated by the limitations of the existing <i>net-tools</i> package (which included <i>ifconfig</i>, <i>route</i>, <i>netstat</i>, etc.) in fully leveraging modern Linux kernel networking features. <i>iproute2</i> was designed to support advanced functionalities like policy routing, multiple routing tables, network namespaces, and sophisticated Quality of Service (QoS) mechanisms. It has gradually superseded <i>net-tools</i> as the standard and recommended way to manage networking on Linux, offering a unified, powerful, and more efficient approach.


title: SYNOPSIS
content:
<b><tt>ip addrlabel { add | del } SELECTOR label NUMBER</tt></b><br><b><tt>ip addrlabel { list | flush } [ SELECTOR ] [ label NUMBER ] [ dev NAME ]</tt></b>


title: PARAMETERS
content:
<b>add</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br><i>Adds</i> a new address label entry. This command associates an IP prefix (<b><tt>SELECTOR</tt></b>) with a specified numeric <b><tt>label NUMBER</tt></b>.<br><br><b>del</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br><i>Deletes</i> an existing address label entry that matches the specified <b><tt>SELECTOR</tt></b> and <b><tt>label NUMBER</tt></b>.<br><br><b>list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br><i>Lists</i> all configured address label entries. The output can be filtered by specifying a <b><tt>SELECTOR</tt></b>, a <b><tt>label NUMBER</tt></b>, or a network <b><tt>dev NAME</tt></b>.<br><br><b>flush</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br><i>Removes</i> all or a subset of address label entries. This command is powerful and should be used with caution, as it can clear all configured labels if no filters are applied. It can be filtered by <b><tt>SELECTOR</tt></b>, <b><tt>label NUMBER</tt></b>, or <b><tt>dev NAME</tt></b>.<br><br><b>SELECTOR</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>An IP address prefix in <b><tt>PREFIX/LENGTH</tt></b> format (e.g., <b><tt>192.168.1.0/24</tt></b> for IPv4 or <b><tt>2001:db8::/32</tt></b> for IPv6). This defines the range of addresses that will receive the associated label.<br><br><b>label NUMBER</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>The numeric label (an integer from <b><tt>0</tt></b> to <b><tt>4294967295</tt></b>) to be assigned to the <b><tt>SELECTOR</tt></b>. This label is used as a criterion in policy routing rules (e.g., <b><tt>ip rule add from LABEL ...</tt></b>).<br><br><b>dev NAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Specifies the network device name (e.g., <b><tt>eth0</tt></b>, <b><tt>lo</tt></b>). This option is used exclusively to filter the output or scope of <b><tt>list</tt></b> and <b><tt>flush</tt></b> operations.<br><br>


title: DESCRIPTION
content:
<i><br>ip-addrlabel</i> is a specialized utility within the <b><tt>iproute2</tt></b> suite, designed to manage address labels used by the Linux kernel's policy routing subsystem. It allows system administrators to associate IP address prefixes (both IPv4 and IPv6) with arbitrary numeric labels. These labels effectively classify IP addresses into logical "zones" or categories.<br><br>When a packet's source or destination IP address matches a configured prefix, it is assigned the corresponding label. This label can then be utilized by <b><tt>ip rule</tt></b> commands to make routing decisions based on the address's label, providing a more granular and flexible approach to routing than simple prefix matching. It's particularly useful in complex network environments, such as multi-homed systems or virtual routing and forwarding (VRF) setups, where different traffic flows originating from or destined to specific address ranges need distinct routing treatment.


title: CAVEATS
content:
Address labels defined by <i><br>ip-addrlabel</i> only become active when used in conjunction with <b><tt>ip rule</tt></b> commands. Without corresponding policy routing rules that reference these labels, the labels themselves have no effect on how traffic is routed. The <b><tt>flush</tt></b> operation can lead to unexpected routing behavior if not used carefully, as it can remove all configured address labels.


title: USAGE CONTEXT WITH POLICY ROUTING
content:
Address labels define 'zones' or categories for IP addresses. These labels are then referenced by <b><tt>ip rule</tt></b> commands to direct traffic. For instance, an <b><tt>ip rule</tt></b> can specify to use a different routing table (e.g., <b><tt>lookup 200</tt></b>) if the source address of a packet has a specific label (e.g., <b><tt>from LABEL_X</tt></b>). This separation allows for very fine-grained control over routing decisions based on the origin or destination characteristics of IP addresses.


title: LABEL VALUES
content:
Labels are 32-bit unsigned integers. While any valid integer can be used, it's common practice to use distinct, easily recognizable numbers for different logical zones or purposes to improve readability and maintainability of routing configurations.


title: HISTORY
content:
The <i><br>ip-addrlabel</i> command is an integral part of the <b><tt>iproute2</tt></b> suite, which was developed by Alexey Kuznetsov starting in the late 1990s as a modern replacement for older network configuration tools like <b><tt>ifconfig</tt></b> and <b><tt>route</tt></b>. <b><tt>iproute2</tt></b> was designed to fully expose and leverage the advanced networking capabilities of the Linux kernel, including policy routing and traffic control. The address labeling feature specifically enhances the flexibility of policy routing, allowing administrators to define more sophisticated and context-aware routing policies.


title: SYNOPSIS
content:
<b>ip fou</b> { <i>add</i> | <i>del</i> | <i>show</i> }<br><b>ip fou add</b> <b>port</b> <I>PORT</I> [ <b>ipproto</b> <I>IPPROTO</I> ] [ <b>encap_type</b> <I>TYPE</I> ] [ <b>encap_sport</b> <I>SPORT</I> ] [ <b>encap_dport</b> <I>DPORT</I> ] [ <b>encap_csum</b> ] [ <b>encap_csum_zero_csum6_tx</b> ] [ <b>encap_zero_csum6_rx</b> ]<br><b>ip fou del</b> <b>port</b> <I>PORT</I><br><b>ip fou show</b>


title: PARAMETERS
content:
<b>add</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Adds a Foo Over UDP (FOU) encapsulation port definition to the kernel.</I><br><br><b>del</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Deletes a FOU encapsulation port definition from the kernel.</I><br><br><b>show</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Displays all currently configured FOU encapsulation port definitions.</I><br><br><b>port <I>PORT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specifies the UDP port number for FOU encapsulation. This is the port the kernel listens on for incoming FOU packets. It is a mandatory parameter for 'add' and 'del' operations.</I><br><br><b>ipproto <I>IPPROTO</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Defines the inner IP protocol number (e.g., 4 for IPIP, 47 for GRE, 50 for ESP) that is expected after the UDP header. This tells the kernel how to interpret the payload after UDP decapsulation. If omitted, the kernel may attempt to derive the inner protocol, especially with 'gue' type.</I><br><br><b>encap_type <I>TYPE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Sets the specific encapsulation type. Valid types are 'fou' (the default, a simpler generic UDP encapsulation) or 'gue' for Generic UDP Encapsulation. GUE includes its own header with an inner protocol field and flags, offering more flexibility.</I><br><br><b>encap_sport <I>SPORT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specifies the UDP source port that will be used for the outer FOU encapsulation when sending packets. This can be useful for symmetric firewall rules or load balancing.</I><br><br><b>encap_dport <I>DPORT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specifies the UDP destination port that will be used for the outer FOU encapsulation when sending packets. This is distinct from the 'port' parameter which defines the listening port.</I><br><br><b>encap_csum</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Enables UDP checksum calculation for encapsulated packets being transmitted. This provides integrity checking but adds a small CPU overhead.</I><br><br><b>encap_csum_zero_csum6_tx</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Enables UDP checksum but explicitly forces a zero checksum value for IPv6 transmit packets. This is often used for specific hardware offloading or compatibility with certain network devices that expect zero checksums for IPv6.</I><br><br><b>encap_zero_csum6_rx</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Allows the system to accept incoming IPv6 packets with a zero UDP checksum. This can be necessary for compatibility with devices that do not generate or send UDP checksums for IPv6 traffic.</I><br><br>


title: DESCRIPTION
content:
The <b>ip-fou</b> command, a part of the <b>iproute2</b> utility suite, is used to manage Foo Over UDP (FOU) encapsulation ports on a Linux system.<br><br>FOU is a generic encapsulation protocol that allows arbitrary IP protocols (like GRE, IPIP, or even raw IP) to be encapsulated directly within a UDP header. This approach provides several key benefits:<br>1.  <b>NAT/Firewall Traversal:</b> UDP is generally more permissive through NAT devices and firewalls compared to other IP protocols (like GRE, which uses IP protocol 47). FOU enables tunneling through such network obstacles.<br>2.  <b>ECMP Hashing:</b> By encapsulating traffic in UDP, network devices can leverage UDP port numbers for Equal-Cost Multi-Path (ECMP) hashing, allowing for more granular load balancing across multiple paths.<br>3.  <b>Generic Encapsulation:</b> It provides a flexible way to tunnel various protocols without needing specific kernel modules for each. For instance, an `ipproto 47` (GRE) packet can be wrapped in UDP via FOU, even if the underlying network doesn't natively support GRE.<br><br><b>ip-fou</b> allows administrators to define FOU 'ports' which are essentially mappings between a specific UDP port and an inner IP protocol. When packets arrive on that UDP port, the kernel automatically decapsulates them, treating the inner payload as the specified IP protocol. This configuration is crucial for setting up advanced overlay networks and VPN solutions.


title: CAVEATS
content:
Using <b>ip-fou</b> requires a Linux kernel with FOU support compiled in (typically available in modern kernels, version 3.10+).<br>Proper network configuration, including routing tables and firewall rules (e.g., with <b>iptables</b> or <b>nftables</b>), is essential for FOU traffic to flow correctly. Misconfiguration can lead to dropped packets or unexpected routing.<br>MTU (Maximum Transmission Unit) considerations are important. Encapsulation adds overhead, potentially requiring adjustments to interface MTU or enabling Path MTU Discovery (PMTUD) to avoid fragmentation issues.<br>Debugging encapsulated traffic can be more complex, often requiring tools like <b>tcpdump</b> with appropriate decapsulation support.


title: FOU VS. GUE
content:
While <b>ip-fou</b> manages both, there's a distinction between FOU (Foo Over UDP) and GUE (Generic UDP Encapsulation). FOU is a simpler, header-less encapsulation where only the UDP port specifies the inner protocol. GUE, however, introduces a small header after the UDP header that includes an inner IP protocol field, flags, and an optional checksum. This makes GUE more self-describing and flexible, especially for supporting multiple inner protocols on a single UDP port. The <b>encap_type</b> parameter allows choosing between these two modes.


title: ROLE OF IPPROTO
content:
The <b>ipproto</b> parameter is crucial for FOU decapsulation. It tells the Linux kernel which IP protocol to expect as the payload after the UDP header. For example, if you set <b>ipproto 47</b> for UDP port X, any packet arriving on port X will have its UDP header removed, and the remaining payload will be treated as a GRE packet. This allows standard network stack processing for the inner protocol. Without it, the kernel wouldn't know how to correctly process the decapsulated data.


title: HISTORY
content:
Foo Over UDP (FOU) and Generic UDP Encapsulation (GUE) were introduced into the Linux kernel around version 3.10-3.11. Their development was primarily driven by the need for more flexible tunneling mechanisms in cloud and data center environments, specifically to address limitations of traditional tunnels like GRE in scenarios involving NAT, firewalls, and the desire for better load balancing via ECMP hashing of UDP traffic. <b>ip-fou</b>, as part of the <b>iproute2</b> utility, became the standard command-line tool for managing these kernel features, evolving alongside their development to support features like GUE and checksum options.


title: PARAMETERS
content:
<b><b>tunnel</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages L2TPv3 tunnels in the kernel. Used with <b>add</b>, <b>show</b>, or <b>del</b> commands.<br><br><b><b>session</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages L2TPv3 sessions within an existing tunnel. Used with <b>add</b>, <b>show</b>, or <b>del</b> commands.<br><br><b><b>add</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new L2TPv3 tunnel or session. Requires specific options to define its properties.<br><br><b><b>show</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays details of configured L2TPv3 tunnels or sessions. Can be filtered by ID.<br><br><b><b>del</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes an existing L2TPv3 tunnel or session. Requires its unique identifier(s).<br><br><b><b>tunnel_id</b> <i>ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A unique, locally assigned identifier for the L2TPv3 tunnel.<br><br><b><b>peer_tunnel_id</b> <i>ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The identifier used by the remote peer for this tunnel.<br><br><b><b>encap</b> { <b>ip</b> | <b>udp</b> }</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the encapsulation type for the tunnel: direct IP or UDP. Default is usually UDP.<br><br><b><b>src_addr</b> <i>ADDR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The local source IP address for the tunnel endpoint.<br><br><b><b>dst_addr</b> <i>ADDR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The destination IP address of the remote tunnel endpoint.<br><br><b><b>cookie</b> <i>HEX_STR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional local cookie value (hexadecimal string) for tunnel or session authentication/identification.<br><br><b><b>peer_cookie</b> <i>HEX_STR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional cookie value expected from the remote peer for tunnel or session.<br><br><b><b>udp_dport</b> <i>PORT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The UDP destination port number for UDP encapsulated tunnels (default is 1701).<br><br><b><b>udp_sport</b> <i>PORT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The UDP source port number for UDP encapsulated tunnels.<br><br><b><b>vlan_id</b> <i>ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with Ethernet pseudowires, specifies the VLAN ID to associate with the tunnel.<br><br><b><b>dev</b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The network device (interface) to which the tunnel's source IP address is bound.<br><br><b><b>l2tp_session_id</b> <i>ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A unique, locally assigned identifier for the L2TPv3 session within a tunnel.<br><br><b><b>peer_l2tp_session_id</b> <i>ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The identifier used by the remote peer for this session.<br><br><b><b>pw_type</b> { <b>eth</b> | <b>vlan</b> | <b>ppp</b> }</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The pseudowire type, specifying the Layer 2 protocol being tunneled (e.g., Ethernet, VLAN-aware Ethernet, PPP).<br><br><b><b>offset</b> <i>OFFSET</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an offset for cookie matching, useful for partial cookie checks.<br><br><b><b>data_size</b> <i>SIZE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the size of data for cookie matching, used with <i>offset</i>.<br><br><b><b>mtu</b> <i>MTU</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Maximum Transmission Unit for the virtual network interface created for the session.<br><br><b><b>interface</b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a name for the virtual network interface created for the session (e.g., for Ethernet pseudowire).<br><br>


title: DESCRIPTION
content:
The <b>ip-l2tp</b> command is a utility within the <b>iproute2</b> suite, used for configuring and managing Layer 2 Tunneling Protocol version 3 (L2TPv3) tunnels and sessions in the Linux kernel.<br><br>L2TPv3 provides a mechanism for tunneling arbitrary Layer 2 protocols (like Ethernet, PPP, etc.) over IP networks. Unlike L2TPv2, L2TPv3 focuses on generic Layer 2 tunneling and is not tied to PPP. It can be used for various purposes, including extending Layer 2 networks over IP, creating virtual private LAN services (VPLS), or backhauling traffic.<br><br>This command allows administrators to add, display, and delete L2TPv3 tunnels and individual L2TPv3 sessions associated with these tunnels, providing control over the tunnel endpoints, encapsulation type (e.g., UDP, IP), and session identifiers.


title: CAVEATS
content:
Requires the <b>l2tp_v3</b> kernel module and specific pseudowire modules (e.g., <b>l2tp_eth</b>, <b>l2tp_ppp</b>) to be loaded. Proper network configuration (e.g., routing, firewall rules) is essential for tunnel functionality. This command primarily configures the L2TPv3 data plane in the kernel; the control plane (session establishment, keepalives) typically needs an external L2TP daemon or user-space application.


title: L2TPV3 VS. L2TPV2
content:
L2TPv3 is a significant evolution from L2TPv2. While L2TPv2 primarily focused on tunneling PPP over IP, L2TPv3 is a more generic Layer 2 tunneling mechanism, capable of encapsulating various Layer 2 protocols (e.g., Ethernet, PPP, ATM, Frame Relay) using the concept of 'pseudowires.' It also introduces 64-bit tunnel and session IDs and optional session cookies for improved multiplexing and security.


title: PSEUDOWIRE TYPES
content:
The <b>pw_type</b> option, used during session creation, is crucial as it defines the specific Layer 2 frame type being encapsulated and tunneled. Common types include <b>eth</b> for raw Ethernet frames (creating a <b>l2tpeth<i>X</i></b> interface), <b>vlan</b> for VLAN-tagged Ethernet frames, and <b>ppp</b> for PPP frames, each leading to different network interface behaviors and requirements.


title: HISTORY
content:
The <b>ip-l2tp</b> command was integrated into the <b>iproute2</b> suite to provide native kernel control over L2TPv3 tunnels and sessions. Its development aligns with the evolving L2TPv3 kernel support, enabling direct configuration of Layer 2 tunneling without sole reliance on user-space daemons for data forwarding. This has significantly enhanced the flexibility for network extension and virtualization use cases in Linux.


title: SYNOPSIS
content:
<b>ip link show</b> [<I>DEV</I>] [<I>OPTIONS</I>]<br><b>ip link set</b> <I>DEV</I> { <I>up</I> | <I>down</I> | <I>mtu</I> <I>NUMBER</I> | <I>name</I> <I>NEWNAME</I> | <I>alias</I> <I>NAME</I> | <I>qlen</I> <I>NUMBER</I> | <I>address</I> <I>LLADDR</I> | <I>master</I> <I>DEV</I> | <I>nomaster</I> | <I>netns</I> { <I>PID</I> | <I>NAME</I> } | <I>promisc</I> { <I>on</I> | <I>off</I> } | ... }<br><b>ip link add</b> <I>NAME</I> <b>type</b> <I>TYPE</I> [<I>OPTIONS</I>]<br><b>ip link delete</b> <I>DEV</I> [<I>OPTIONS</I>]


title: PARAMETERS
content:
<b><b>show</b> <I>DEV</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display information for a specific network device. If <I>DEV</I> is omitted, all network devices are shown.<br><br><b><b>show up</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only display interfaces that are currently in an 'up' state.<br><br><b><b>show -s</b>, <b>-stats</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display detailed statistics for each interface, including byte counts, packet counts, and error rates.<br><br><b><b>set</b> <I>DEV</I> <b>up</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Administratively bring the specified network interface to an 'up' (active) state.<br><br><b><b>set</b> <I>DEV</I> <b>down</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Administratively bring the specified network interface to a 'down' (inactive) state.<br><br><b><b>set</b> <I>DEV</I> <b>mtu</b> <I>NUMBER</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the Maximum Transmission Unit (MTU) for the specified interface to <I>NUMBER</I> bytes.<br><br><b><b>set</b> <I>DEV</I> <b>name</b> <I>NEWNAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rename the network interface <I>DEV</I> to <I>NEWNAME</I>.<br><br><b><b>set</b> <I>DEV</I> <b>address</b> <I>LLADDR</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the link-layer (MAC) address of the interface <I>DEV</I> to <I>LLADDR</I>.<br><br><b><b>set</b> <I>DEV</I> <b>master</b> <I>MASTER_DEV</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enslave the interface <I>DEV</I> to a master device like a bridge or bond interface.<br><br><b><b>set</b> <I>DEV</I> <b>netns</b> {<I>PID</I> | <I>NAME</I>}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Move the interface <I>DEV</I> into a different network namespace identified by its process ID (<I>PID</I>) or name (<I>NAME</I>).<br><br><b><b>set</b> <I>DEV</I> <b>promisc</b> {<b>on</b> | <b>off</b>}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable or disable promiscuous mode for the interface, allowing it to receive all network traffic, regardless of destination MAC address.<br><br><b><b>add</b> <I>NAME</I> <b>type</b> <I>TYPE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new network link named <I>NAME</I> of a specified <I>TYPE</I> (e.g., `vlan`, `bridge`, `veth`, `dummy`).<br><br><b><b>add type vlan link</b> <I>DEV</I> <b>id</b> <I>VLAN_ID</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new VLAN interface on parent device <I>DEV</I> with the specified VLAN tag <I>VLAN_ID</I>.<br><br><b><b>add type veth name</b> <I>DEV1</I> <b>peer name</b> <I>DEV2</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new virtual Ethernet (veth) pair, with one end named <I>DEV1</I> and the other <I>DEV2</I>.<br><br><b><b>delete</b> <I>DEV</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete the specified network device <I>DEV</I>.<br><br>


title: DESCRIPTION
content:
The `ip link` command is a fundamental subcommand of the `ip` utility in Linux, part of the `iproute2` suite, designed for comprehensive management of network interfaces, also known as network links or devices. It supersedes older tools like `ifconfig` by offering a more robust, flexible, and feature-rich interface to the kernel's networking subsystem via Netlink sockets. This command allows administrators to inspect the status of network devices, bring them up or down, set their Maximum Transmission Unit (MTU), change their MAC address, rename them, and assign them to specific network namespaces. Beyond basic configuration, `ip link` is pivotal for creating and configuring various virtual network devices, including VLANs, bridges, bonding interfaces, virtual Ethernet (veth) pairs, and different types of tunnels. Its object-oriented design and deep integration with the Linux kernel make it an indispensable tool for modern network administration, troubleshooting, and for building complex network setups, especially in virtualized and containerized environments.


title: CAVEATS
content:
Most `ip link` operations that modify network configuration require root privileges. Changing interface names or other critical parameters can temporarily disrupt network services. By default, changes made with `ip link` are not persistent across system reboots; system-specific configuration files (e.g., in `/etc/network/interfaces`, `/etc/sysconfig/network-scripts`, or via `systemd-networkd`) must be used to make changes permanent.


title: LINK TYPES
content:
`ip link add` supports numerous link types, enabling the creation of various virtual interfaces. Some common types include:<br><ul><li><I>vlan</I>: Creates a Virtual LAN interface with a specific ID, typically on a parent physical interface.</li><li><I>bridge</I>: Creates a software bridge, allowing multiple network segments to be connected and act as a single network.</li><li><I>bond</I>: Creates a bonding interface for link aggregation (NIC teaming), combining multiple physical interfaces for redundancy or increased throughput.</li><li><I>dummy</I>: Creates a simple loopback-like interface, useful for testing or providing a stable interface for IP addresses.</li><li><I>veth</I>: Creates a virtual Ethernet pair, commonly used to connect network namespaces or containers to the host network.</li><li><I>macvlan</I>, <I>macvtap</I>: Create virtual interfaces that share a single physical interface, each with its own MAC address, providing a way to isolate network traffic.</li><li><I>tun</I>, <I>tap</I>: Tunnel devices that provide a network interface for user-space programs, often used for VPNs.</li></ul>Each type often has its own set of specific parameters required during creation.


title: NETWORK NAMESPACES INTEGRATION
content:
`ip link` is crucial for managing network interfaces within different network namespaces, which provide isolated network environments. The command `<b>ip link set DEV netns {PID | NAME}</b>` is used to move an existing interface into a specified network namespace. This functionality is fundamental for containerization technologies like Docker and LXC, allowing each container to have its own isolated network stack and interfaces without interfering with the host or other containers.


title: HISTORY
content:
The `ip` utility, including `ip link`, was developed as part of the `iproute2` suite in the late 1990s. It was designed to replace older, less capable tools like `ifconfig`, `route`, and `arp`, which were part of the `net-tools` package. `iproute2` leverages the Linux kernel's Netlink socket interface, providing a more robust, extensible, and efficient way to manage networking. `ip link` specifically addresses the limitations of `ifconfig` by offering better support for modern networking features like network namespaces, VLAN tagging, bonding, and a more consistent object-oriented approach to network configuration. It has become the standard command-line tool for network interface management in modern Linux distributions.


title: SYNOPSIS
content:
<b>ip</b> <b>maddress</b> { <b>add</b> | <b>del</b> } <i>IFADDR</i> <b>dev</b> <i>DEVICE</i><br><b>ip</b> <b>maddress</b> { <b>show</b> | <b>ls</b> } [ <b>dev</b> <i>DEVICE</i> ] [ <b>to</b> <i>PREFIX</i> ] [ <b>scope</b> <i>SCOPE</i> ]<br><b>ip</b> <b>maddress</b> <b>flush</b> [ <b>dev</b> <i>DEVICE</i> ] [ <b>to</b> <i>PREFIX</i> ]


title: PARAMETERS
content:
<b>add</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a multicast address to the specified network device.<br><br><b>del</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes a multicast address from the specified network device.<br><br><b>show | ls</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the multicast addresses currently configured on network devices. 'ls' is an alias for 'show'.<br><br><b>flush</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes all multicast addresses from a specified device, or from all devices if none is specified.<br><br><b>dev <i>DEVICE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the network interface (e.g., 'eth0', 'enp0s3') to which the command applies. This option is mandatory for 'add' and 'del' and optional for 'show' and 'flush'.<br><br><b><i>IFADDR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The multicast IP address (IPv4 or IPv6, e.g., '224.0.0.1', 'ff02::1') to be added or deleted. Required for 'add' and 'del' commands.<br><br><b>to <i>PREFIX</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters the displayed or flushed addresses to only those matching the given IP prefix. Used with 'show' and 'flush'.<br><br><b>scope <i>SCOPE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the 'show' command output to addresses belonging to a specific scope (e.g., 'link', 'site', 'global', 'host').<br><br>


title: DESCRIPTION
content:
The <b>ip maddress</b> command is a subcommand of the <b>ip</b> utility, part of the <i>iproute2</i> suite. It provides a powerful interface for manipulating multicast addresses associated with network devices. Multicast communication is essential for efficiently sending data to a group of recipients simultaneously, commonly used in applications like streaming media, network discovery protocols (e.g., Bonjour, mDNS), and routing protocols (e.g., OSPF, PIM).<br><br>This command allows administrators to add, delete, display, and flush multicast group memberships for specific network interfaces. By managing these memberships, an interface can be configured to listen for and receive traffic destined for particular multicast groups. This is crucial for systems that need to statically join or leave multicast groups, independent of dynamic protocols like IGMP (for IPv4) or MLD (for IPv6). The command operates at both Layer 2 (MAC multicast addresses) and Layer 3 (IP multicast addresses), enabling fine-grained control over how a system participates in multicast communication within its network.


title: CAVEATS
content:
Using <b>ip maddress</b> requires root privileges or appropriate sudo permissions. Incorrect manipulation of multicast addresses can disrupt network services that rely on multicast communication, such as service discovery or routing protocols. This command primarily manages static multicast group memberships; dynamic memberships are typically handled by IGMP (IPv4) or MLD (IPv6) protocols.


title: USAGE EXAMPLES
content:
Here are some common usage examples of the <b>ip maddress</b> command:<br><br><b><i>Display all multicast addresses on 'eth0':</i></b><br>ip maddress show dev eth0<br><br><b><i>Add an IPv4 multicast address to 'eth0':</i></b><br>ip maddress add 239.1.1.1 dev eth0<br><br><b><i>Add an IPv6 link-local multicast address to 'eth0':</i></b><br>ip maddress add ff02::1:2:3 dev eth0<br><br><b><i>Delete a multicast address from 'eth0':</i></b><br>ip maddress del 239.1.1.1 dev eth0<br><br><b><i>Flush all multicast addresses from 'eth0':</i></b><br>ip maddress flush dev eth0


title: MULTICAST COMMUNICATION OVERVIEW
content:
Multicast is a network addressing method where data is delivered to a group of destination computers simultaneously using a single transmission from the source. Instead of sending separate copies to each recipient (unicast) or sending to all devices on the network (broadcast), multicast allows efficient one-to-many communication. Network interfaces join specific multicast groups, signaling their interest in receiving traffic destined for those groups. The <b>ip maddress</b> command facilitates this joining and leaving of groups at a static level, which is fundamental for many network services and applications.


title: HISTORY
content:
The <b>ip</b> command, including its <b>maddress</b> subcommand, is part of the <i>iproute2</i> utility suite. <i>iproute2</i> was developed to replace older <i>net-tools</i> utilities (like <b>ifconfig</b>, <b>route</b>, and <b>netstat</b>) on Linux, offering more advanced and consistent network configuration capabilities. Development began in the late 1990s, with Alexey Kuznetsov as a primary contributor. The <b>ip maddress</b> command provides a modern and robust way to manage multicast group memberships directly through the kernel's netlink interface, which has been critical for managing network configurations in various Linux-based systems, from servers to embedded devices.


title: SYNOPSIS
content:
<b>ip</b> <i>[ OPTIONS ]</i> <b>mroute</b> { <b>COMMAND</b> | <b>help</b> }<br><b>COMMAND</b> := { <b>add</b> | <b>del</b> | <b>show</b> | <b>get</b> | <b>flush</b> }<br><b>ip mroute add</b> <i><IncomingIf> <SourceAddress> <GroupAddress> <OutgoingIf> [ <OutgoingIf> ... ]</i><br><b>ip mroute del</b> <i><IncomingIf> <SourceAddress> <GroupAddress></i><br><b>ip mroute show</b> <i>[ <SourceAddress> ] [ <GroupAddress> ] [ dev <Device> ] [ iif <Device> ]</i><br><b>ip mroute get</b> <i><IncomingIf> <SourceAddress> <GroupAddress></i><br><b>ip mroute flush</b> <i>[ <SourceAddress> ] [ <GroupAddress> ] [ dev <Device> ] [ iif <Device> ]</i>


title: PARAMETERS
content:
<b><b>add</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a multicast routing entry to the kernel's FIB. It requires:<br>- <i><IncomingIf></i>: The index or name of the interface on which multicast traffic for this route is expected to arrive.<br>- <i><SourceAddress></i>: The source IP address of the multicast stream. Use <i>0.0.0.0</i>, <i>*</i>, or <i>ANY</i> for <i>(*,G)</i> (any source, specific group) entries.<br>- <i><GroupAddress></i>: The multicast group IP address.<br>- <i><OutgoingIf> [ <OutgoingIf> ... ]</i>: One or more indices or names of interfaces to which the multicast traffic should be forwarded.<br><br><b><b>del</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes a specific multicast routing entry. It requires the same parameters as <b>add</b> (<i><IncomingIf> <SourceAddress> <GroupAddress></i>) to uniquely identify the entry to remove.<br><br><b><b>show</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current multicast routing cache entries. Optional filters include:<br>- <i><SourceAddress></i>: Filter by source IP.<br>- <i><GroupAddress></i>: Filter by multicast group IP.<br>- <b>dev</b> <i><Device></i>: Filter by outgoing device.<br>- <b>iif</b> <i><Device></i>: Filter by incoming interface.<br><br><b><b>get</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retrieves and displays a specific multicast routing entry matching the provided <i><IncomingIf></i>, <i><SourceAddress></i>, and <i><GroupAddress></i>.<br><br><b><b>flush</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes all or selected multicast routing entries. Optional filters are the same as for <b>show</b> (<i><SourceAddress></i>, <i><GroupAddress></i>, <b>dev</b> <i><Device></i>, <b>iif</b> <i><Device></i>) to specify which entries to flush.<br><br><b><i><IncomingIf></i> / <i><OutgoingIf></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Refers to the network interface. Can be specified by its numerical <i>ifindex</i> or by its name (e.g., <i>eth0</i>, <i>enp0s3</i>). Use <b>ip link show</b> to find interface names and indices.<br><br><b><i><SourceAddress></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The IP address of the multicast source. Use <i>0.0.0.0</i>, <i>*</i>, or <i>ANY</i> for <i>(*,G)</i> entries.<br><br><b><i><GroupAddress></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The multicast group IP address (e.g., <i>224.0.0.1</i>).<br><br>


title: DESCRIPTION
content:
The <b>ip mroute</b> command is part of the <b>iproute2</b> utility suite, used to manipulate the Linux kernel's multicast routing cache (FIB - Forwarding Information Base) entries. Unlike <b>ip route</b>, which manages unicast routes, <b>ip mroute</b> specifically handles forwarding rules for multicast packets. It allows administrators or multicast routing daemons to define how multicast traffic for a specific <i>(Source, Group)</i> or <i>(*, Group)</i> pair should be forwarded from an incoming interface to a list of outgoing interfaces.<br><br>While it can be used for manual configuration, its primary role is to provide a programmatic interface for user-space multicast routing protocols (like PIM, DVMRP, or static routing via <b>smcroute</b>) to populate and maintain the kernel's multicast forwarding state. This command is crucial for understanding and debugging multicast packet flow within a Linux system, offering insights into the kernel's active multicast forwarding decisions.


title: CAVEATS
content:
<b>ip mroute</b> directly manipulates the kernel's multicast FIB. For complex multicast routing scenarios, it is generally recommended to use a user-space multicast routing daemon (like <b>pimd</b> or <b>smcroute</b>) that implements a multicast routing protocol. Manual entries added with <b>ip mroute</b> can conflict with a running daemon or be overwritten by it. Entries created using this command are not persistent across system reboots and will need to be re-added.


title: MULTICAST ROUTING CONCEPTS
content:
Multicast routing differs from unicast routing by delivering packets to a group of recipients simultaneously. Kernel multicast routing entries specify an incoming interface (IIF), a source address (S), a group address (G), and a list of outgoing interfaces (OIFs). The kernel performs a Reverse Path Forwarding (RPF) check to ensure multicast packets arrive on the expected interface, preventing loops. Entries can be (S,G) for specific sources or (*,G) for any source to a given group.


title: INTERACTION WITH MULTICAST DAEMONS
content:
While <b>ip mroute</b> allows direct manipulation, in production environments, multicast routing is typically managed by a daemon that implements a multicast routing protocol (e.g., PIM - Protocol Independent Multicast). These daemons dynamically create and manage the multicast routes in the kernel's FIB based on network topology and group memberships. <b>ip mroute show</b> is invaluable for verifying the state that these daemons have established.


title: HISTORY
content:
The <b>iproute2</b> utility suite, which includes <b>ip mroute</b>, was developed primarily by Alexey Kuznetsov. It was designed to replace older, less efficient, and fragmented network configuration tools like <b>ifconfig</b>, <b>route</b>, and <b>netstat</b>. Leveraging the Netlink socket API, <b>iproute2</b> provides a unified, powerful, and modern interface for managing various aspects of networking in Linux, including advanced routing, traffic control, and multicast capabilities, making it a standard component of modern Linux distributions.


title: SYNOPSIS
content:
<b>ip</b> [ <i>OPTIONS</i> ] <b>neigh</b> { <b>add</b> | <b>del</b> | <b>change</b> | <b>replace</b> | <b>set</b> } <i>ADDR</i> <b>dev</b> <i>DEV</i> [ <b>lladdr</b> <i>LLADDR</i> ] [ <b>nud</b> { <i>permanent</i> | <i>reachable</i> | <i>stale</i> | <i>delay</i> | <i>probe</i> | <i>failed</i> } ] [ <b>expires</b> <i>TIME</i> ] [ <b>proxy</b> ] [ <b>router</b> ] ...<br><b>ip</b> [ <i>OPTIONS</i> ] <b>neigh</b> { <b>show</b> | <b>flush</b> } [ <b>dev</b> <i>DEV</i> ] [ <b>to</b> <i>PREFIX</i> ] [ <b>nud</b> <i>STATE</i> ] [ <b>proxy</b> ] ...


title: PARAMETERS
content:
<b><b>dev</b> <i>DEV</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the network device (e.g., eth0, wlan0) on which to operate or filter.<br><br><b><b>to</b> <i>PREFIX</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters or specifies the IP address or network prefix for the neighbor entry.<br><br><b><b>lladdr</b> <i>LLADDR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the link-layer (MAC) address to be associated with an IP address. Used with <b>add</b>, <b>change</b>, etc.<br><br><b><b>nud</b> { <i>STATE</i> }</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets or filters by the Neighbor Unreachability Detection (NUD) state for the entry. Possible states include <b>permanent</b> (static, never expires), <b>reachable</b> (recently confirmed), <b>stale</b> (valid but old), <b>delay</b> (waiting validation), <b>probe</b> (actively probing), and <b>failed</b> (resolution failed).<br><br><b><b>add</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new neighbor cache entry.<br><br><b><b>del</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes an existing neighbor cache entry.<br><br><b><b>change</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modifies an existing neighbor cache entry. Fails if the entry doesn't exist.<br><br><b><b>replace</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replaces an existing entry or adds it if it doesn't exist.<br><br><b><b>set</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for the <b>replace</b> command.<br><br><b><b>show</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays neighbor cache entries. This is the default command if no action is specified.<br><br><b><b>flush</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clears neighbor cache entries matching specified criteria. Useful for clearing stale or failed entries.<br><br><b><b>expires</b> <i>TIME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the expiration time for the neighbor entry, in seconds. Ignored if <b>permanent</b> is set.<br><br><b><b>proxy</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <b>add</b>, marks the entry as a proxy ARP/NDP entry, allowing the host to answer ARP/NDP requests for this address. When used with <b>show</b>, filters for proxy entries.<br><br>


title: DESCRIPTION
content:
The <b>ip neigh</b> command, a subcommand of the <b>iproute2</b> utility, is used for managing the kernel's neighbor cache. This cache, also known as the ARP cache for IPv4 or the NDISC (Neighbor Discovery Protocol) cache for IPv6, stores mappings between IP addresses and hardware (MAC) addresses for devices on the local network segment. These mappings are fundamental for Layer 2 communication, allowing a host to determine the correct MAC address to send data frames to a specific IP address.<br><br><b>ip neigh</b> provides functionalities to view, add, delete, change, or replace neighbor entries. It's an indispensable tool for network administrators and users for troubleshooting connectivity issues, understanding local network topology, and manually configuring static neighbor entries. The command can display various states of neighbor entries, such as <b>REACHABLE</b>, <b>STALE</b>, <b>FAILED</b>, <b>PERMANENT</b>, or <b>PROBE</b>, which indicate the current status of the address resolution process and reachability of the neighbor.


title: CAVEATS
content:
Modifying neighbor cache entries (e.g., using <b>add</b>, <b>del</b>, <b>change</b>) typically requires root privileges. <br>The kernel dynamically manages neighbor cache entries; manually added entries (unless marked <b>permanent</b>) can still be superseded or aged out if the kernel's Neighbor Unreachability Detection (NUD) mechanism finds a discrepancy or determines the neighbor is no longer reachable. <br>Interpreting the NUD states (e.g., <b>stale</b>, <b>failed</b>) is crucial for accurate network troubleshooting, as they indicate the current status of reachability.


title: NEIGHBOR UNREACHABILITY DETECTION (NUD)
content:
NUD is a crucial part of IP's neighbor management. It's a kernel mechanism that continuously tracks the reachability of neighbors, ensuring that the cache entries are up-to-date. When a neighbor becomes unreachable, NUD detects this and updates the entry's state, preventing data from being sent to a non-existent or moved MAC address. The <b>nud</b> parameter in <b>ip neigh</b> allows for manual control or filtering based on these states, which are vital for network diagnostics.


title: IPV4 ARP AND IPV6 NDISC
content:
The <b>ip neigh</b> command effectively consolidates the management of both IPv4's Address Resolution Protocol (ARP) cache and IPv6's Neighbor Discovery Protocol (NDP) cache. While the underlying protocols and their mechanisms differ, <b>ip neigh</b> provides a unified interface to view and manipulate these critical mappings between IP addresses and link-layer addresses (MAC addresses), making network management consistent regardless of the IP version in use.


title: COMMON USE CASES
content:
Common uses include troubleshooting connectivity issues by inspecting <b>failed</b> or <b>stale</b> entries, clearing specific entries (e.g., <b>ip neigh flush all</b>) to force re-resolution, adding <b>permanent</b> entries for critical devices or specific network configurations, or setting up <b>proxy</b> ARP/NDP. The default command, when no subcommand is specified, is <b>show</b>, making <b>ip neigh</b> a quick way to list all current neighbor entries and their states.


title: HISTORY
content:
The <b>ip</b> command, including its <b>neigh</b> subcommand, is part of the <b>iproute2</b> utility suite. This suite was developed by Alexey Kuznetsov starting in the late 1990s as a modern replacement for older network configuration tools like <b>ifconfig</b>, <b>route</b>, <b>netstat</b>, <b>arp</b>, and <b>ndp</b>. <b>iproute2</b> was designed to be more powerful, flexible, and better suited for advanced Linux networking, supporting features like policy routing, traffic control, and comprehensive IPv6 management. The <b>ip neigh</b> command specifically unified the management of IPv4 ARP and IPv6 NDISC caches, providing a consistent interface for neighbor resolution across both protocols, which was a significant improvement over separate, protocol-specific utilities.


title: SYNOPSIS
content:
As <I>ip-netconf</I> is not a specific command, its 'synopsis' refers to the general syntax of the <I>ip</I> utility, which is used for IP network configuration:<br><br><b>ip</b> [ <I>OPTIONS</I> ] <I>OBJECT</I> { <I>COMMAND</I> | <I>help</I> }<br><br>Where:<br><I>OBJECT</I> is one of the network components being managed, such as <b>link</b> (network interfaces), <b>address</b> (IP addresses), <b>route</b> (routing table entries), <b>neigh</b> (neighbor/ARP table), <b>netns</b> (network namespaces), etc.<br><I>COMMAND</I> is the action to perform on the <I>OBJECT</I>, like <b>add</b>, <b>delete</b>, <b>show</b>, <b>set</b>, <b>flush</b>.


title: PARAMETERS
content:
<b><b>-4</b>, <b>-6</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Filter by IP protocol version</I>.<br>Specify whether to operate on IPv4 or IPv6 addresses and routes. If omitted, both are typically considered.<br><br><b><b>-s</b>, <b>--statistics</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Display extended statistics</I>.<br>Shows additional statistics for objects like network interfaces or routes.<br><br><b><b>-d</b>, <b>--details</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Show more details</I>.<br>Provides a more verbose output for the queried objects.<br><br><b><b>-h</b>, <b>--human</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Human-readable output</I>.<br>Displays values in a more human-friendly format, e.g., byte sizes with units.<br><br><b><b>-o</b>, <b>--oneline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Single-line output</I>.<br>Formats the output of multiple entries onto a single line per entry, useful for scripting.<br><br><b><b>-r</b>, <b>--resolve</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Resolve hostnames</I>.<br>Attempts to resolve IP addresses to hostnames.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Display version information</I>.<br>Shows the version of the <I>iproute2</I> utility suite.<br><br><b><b>-f</b>, <b>--family</b> <I>FAMILY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specify address family</I>.<br>Forces the command to operate only on the specified address family (e.g., <b>inet</b> for IPv4, <b>inet6</b> for IPv6, <b>link</b> for layer 2).<br><br><b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Operate on all objects</I>.<br>Used with commands like <b>ip addr flush</b> to clear all addresses.<br><br>


title: DESCRIPTION
content:
The term <I>ip-netconf</I> does not refer to a standalone Linux command or a specific subcommand within the <I>iproute2</I> suite. Instead, it conceptually represents the broad range of functionalities for <b>IP network configuration</b> provided by the versatile <I>ip</I> command. The <I>ip</I> utility is the primary tool in modern Linux distributions for managing various aspects of the networking subsystem. It allows administrators to configure network interfaces, assign IP addresses, manipulate routing tables, manage ARP/neighbor entries, control network namespaces, set up tunnels, and much more. Unlike older utilities like <I>ifconfig</I> and <I>route</I>, which fragmented network management tasks, <I>ip</I> adopts an object-oriented syntax (e.g., <I>ip link</I>, <I>ip addr</I>, <I>ip route</I>) that provides a unified and powerful interface for comprehensive network stack management. Its capabilities extend from basic interface setup to complex routing policies and advanced network virtualization. Therefore, <I>ip-netconf</I> can be understood as the collective actions performed using the <I>ip</I> command for configuring the network.


title: CAVEATS
content:
<ul><li><b>Conceptual Term</b>: <I>ip-netconf</I> is not an actual command; it represents the broad utility of the <I>ip</I> command for network configuration.</li><li><b>Root Privileges</b>: Most operations with the <I>ip</I> command require root or superuser privileges to modify network settings. Displaying information often does not require root.</li><li><b>Syntax Complexity</b>: The <I>ip</I> command has a rich, object-oriented syntax that can be complex for beginners, differing significantly from older tools like <I>ifconfig</I> and <I>route</I>.</li><li><b>Non-Persistent Changes</b>: Changes made directly with the <I>ip</I> command are often temporary and do not persist across system reboots. Persistent network configuration typically requires editing distribution-specific configuration files (e.g., <I>/etc/network/interfaces</I> on Debian/Ubuntu, <I>/etc/sysconfig/network-scripts/</I> on RHEL/CentOS, or using NetworkManager).</li></ul>


title: OBJECT-ORIENTED NATURE
content:
The <I>ip</I> command employs an object-oriented paradigm where network components are treated as 'objects' (e.g., <b>link</b>, <b>address</b>, <b>route</b>). Users specify the object type followed by a command (e.g., <b>show</b>, <b>add</b>, <b>del</b>) and parameters specific to that object. This unified structure makes network management more logical and powerful compared to the fragmented approach of older utilities.


title: HISTORY
content:
The <I>ip</I> utility, which is the core of 'IP network configuration' on modern Linux systems, is part of the <I>iproute2</I> utility suite. This suite was developed by Alexey Kuznetsov to address the limitations and lack of integration found in older, disparate networking tools like <I>ifconfig</I>, <I>route</I>, and <I>arp</I>. <I>iproute2</I> emerged to provide a unified, consistent, and powerful interface for managing the Linux kernel's networking subsystem, especially with the advent of advanced features like policy routing, network namespaces, and various tunneling protocols. It has gradually replaced the older net-tools commands as the standard for configuring and monitoring network interfaces and routing. Its design reflects the complexities of modern network infrastructures, offering granular control and better performance.


title: SEE ALSO
content:
ip(8), ip-link(8), ip-address(8), ip-route(8), ip-neigh(8), ip-netns(8), ss(8), ifconfig(8), route(8)


title: SYNOPSIS
content:
<b><I>ip</I></b> [ <i>OPTIONS</i> ] <b><I>netns</I></b> { <i>COMMAND</i> | <b><I>help</I></b> }<br><br><i>COMMON COMMANDS</i>:<br>&nbsp;&nbsp;<b><I>ip netns add</I></b> <i>NAME</i><br>&nbsp;&nbsp;<b><I>ip netns attach</I></b> <i>NAME PID</i><br>&nbsp;&nbsp;<b><I>ip netns delete</I></b> <i>NAME</i><br>&nbsp;&nbsp;<b><I>ip netns exec</I></b> <i>NAME COMMAND</i> [ <i>ARGUMENTS</i> ]...<br>&nbsp;&nbsp;<b><I>ip netns identify</I></b> <i>PID</i><br>&nbsp;&nbsp;<b><I>ip netns list</I></b> [ <b><I>all</I></b> ]<br>&nbsp;&nbsp;<b><I>ip netns monitor</I></b><br>&nbsp;&nbsp;<b><I>ip netns pids</I></b> <i>NAME</i><br>&nbsp;&nbsp;<b><I>ip netns rename</I></b> <i>OLDNAME NEWNAME</i><br>&nbsp;&nbsp;<b><I>ip netns set</I></b> <i>NAME</i> { <b><I>up</I></b> | <b><I>down</I></b> }


title: PARAMETERS
content:
<b><b><I>add</I></b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new network namespace named <i>NAME</i>. This namespace will initially be empty of devices.<br><br><b><b><I>delete</I></b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes the specified network namespace <i>NAME</i>. The namespace will only be fully removed by the kernel when all processes inside it have exited and its filesystem reference (e.g., <i>/var/run/netns/NAME</i>) is unmounted/removed.<br><br><b><b><I>list</I></b> [ <b><I>all</I></b> ]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all currently active network namespaces discovered by <b><I>ip</I></b>. The optional <b><I>all</I></b> argument also shows associated process IDs (PIDs) that have entered the namespace.<br><br><b><b><I>exec</I></b> <i>NAME COMMAND</i> [ <i>ARGUMENTS</i> ]...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the specified <i>COMMAND</i> with its <i>ARGUMENTS</i> within the network namespace <i>NAME</i>. This is commonly used to configure network interfaces, run applications, or inspect the network configuration inside the isolated environment.<br><br><b><b><I>identify</I></b> <i>PID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Identifies and reports the network namespace that the process with <i>PID</i> belongs to. This is useful for debugging or verifying process isolation.<br><br><b><b><I>pids</I></b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all process IDs (PIDs) currently residing within the network namespace <i>NAME</i>. This command helps in understanding which processes are using a specific namespace.<br><br><b><b><I>monitor</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors and reports network namespace events as they occur in real-time, such as the creation or deletion of namespaces.<br><br><b><b><I>attach</I></b> <i>NAME PID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attaches an existing process, identified by <i>PID</i>, to the network namespace <i>NAME</i>. This modifies the process's network context to the specified namespace.<br><br><b><b><I>set</I></b> <i>NAME</i> { <b><I>up</I></b> | <b><I>down</I></b> }</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Marks the network namespace <i>NAME</i> as 'up' or 'down'. This is primarily for administrative metadata and does not directly affect network device state within the namespace.<br><br><b><b><I>rename</I></b> <i>OLDNAME NEWNAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Renames an existing network namespace from <i>OLDNAME</i> to <i>NEWNAME</i>. This operation updates its filesystem reference.<br><br>


title: DESCRIPTION
content:
The <b><I>ip netns</I></b> command is a powerful sub-command of the <b><I>ip</I></b> utility used to manage network namespaces in Linux. Network namespaces provide a lightweight, isolated network stack for a group of processes. This means each namespace has its own network devices, IP addresses, routing tables, firewall rules, and more, completely separate from the host system's network configuration or other namespaces.<br><br>Network namespaces are a fundamental technology underpinning containerization platforms like Docker and LXC, enabling multiple applications to run on the same host while having distinct and isolated network environments.<br><br>The <b><I>ip netns</I></b> command allows users to create, delete, list, and execute commands within these isolated network environments, making it an essential tool for network virtualization and container management.


title: CAVEATS
content:
<ul><li><b><I>Root Privileges:</I></b> Most <b><I>ip netns</I></b> operations require root privileges (or specific Linux capabilities like <i>CAP_SYS_ADMIN</i> and <i>CAP_NET_ADMIN</i>).</li><li><b><I>Namespace Persistence:</I></b> A network namespace persists as long as there is at least one process referencing it, or as long as its corresponding bind-mounted file under <i>/var/run/netns/</i> (or <i>/run/netns/</i>) exists. Simply using <b><I>ip netns delete</I></b> removes the reference, but the namespace object itself may not be fully garbage collected until all associated processes exit.</li><li><b><I>Resource Management:</I></b> Creating many network namespaces can consume kernel resources. Proper cleanup is essential to prevent resource leaks.</li></ul>


title: NAMESPACE FILESYSTEM REPRESENTATION
content:
When a network namespace is created using <b><I>ip netns add NAME</I></b>, <b><I>iproute2</I></b> typically creates a bind mount at <i>/var/run/netns/NAME</i> (or <i>/run/netns/NAME</i>). This file serves as a persistent reference to the network namespace object in the kernel. As long as this file exists and is mounted, the namespace object remains available. Deleting this file manually (e.g., with <b><I>rm</I></b>) without first using <b><I>ip netns delete NAME</I></b> can sometimes lead to an inconsistent state or orphaned namespaces, although the kernel will eventually clean up unreferenced namespaces once all processes within them have exited.


title: NETWORK NAMESPACE CONFIGURATION
content:
After creating a network namespace with <b><I>ip netns add</I></b>, it's typically an empty environment with no network interfaces (except for the loopback interface, which is usually brought up automatically within the namespace). To make the namespace functional, you must add and configure network interfaces, such as virtual Ethernet (veth) pairs to connect it to the host or other namespaces, or by moving physical interfaces into it. All configuration of interfaces, IP addresses, and routes within the namespace is done using <b><I>ip</I></b> commands run via <b><I>ip netns exec</I></b>.


title: HISTORY
content:
Network namespaces were introduced into the Linux kernel starting around version 2.6.24, significantly enhancing the kernel's capability for network virtualization and isolation. The <b><I>ip</I></b> command, including the <b><I>netns</I></b> sub-command, is part of the <i>iproute2</i> suite. This modern networking utility collection superseded the older <i>net-tools</i> package (which included commands like <i>ifconfig</i> and <i>route</i>) due to its more robust design, consistent syntax, and superior support for advanced Linux networking features like namespaces, policy routing, and tunnels. The <b><I>ip netns</I></b> command quickly became an indispensable tool for managing network isolation, particularly with the rise of container technologies like Docker and LXC.


title: SEE ALSO
content:
<b><I>ip</I></b>(8), <b><I>netns</I></b>(7), <b><I>unshare</I></b>(1), <b><I>nsenter</I></b>(1), <b><I>mount</I></b>(8), <b><I>clone</I></b>(2), <b><I>setns</I></b>(2)


title: SYNOPSIS
content:
<b>ip</b> <b>ntable</b> { <i>show</i> | <i>get</i> | <i>set</i> | <i>flush</i> | <i>add</i> | <i>change</i> | <i>delete</i> } [ <i>options</i> ]


title: PARAMETERS
content:
<b>show</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays neighbour table entries, optionally filtered by device, address, or state.<br><br><b>get</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retrieves detailed information for a specific neighbour table entry by address.<br><br><b>set</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modifies global parameters of the neighbour cache, such as timeouts and garbage collection settings.<br><br><b>add</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new static neighbour table entry for a given IP address and hardware address.<br><br><b>change</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modifies an existing neighbour table entry's properties.<br><br><b>delete</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes a specific neighbour table entry.<br><br><b>flush</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes neighbour table entries, often used to clear stale entries or for troubleshooting.<br><br>


title: DESCRIPTION
content:
<b>ip-ntable</b> (or <b>ip ntable</b>) is a sub-command of the <b>ip</b> utility in Linux, part of the <i>iproute2</i> package. It is used to examine and manage the kernel's neighbour cache (often referred to as the ARP table for IPv4 or NDP cache for IPv6). This cache stores mappings between IP addresses and hardware (MAC) addresses for directly connected hosts.<br>The command allows administrators to inspect existing neighbour table entries, define global parameters for the neighbour cache, and manage specific entries. It provides fine-grained control over various aspects like entry timeouts, garbage collection, and state transitions, which are crucial for network performance and stability. It's a powerful tool for diagnosing network connectivity issues at Layer 2.


title: CAVEATS
content:
Requires root privileges (<i>CAP_NET_ADMIN</i> capability). <br>Improper use of <b>ip ntable set</b> can severely impact network performance or connectivity. <br>Many of the parameters configured via <b>ip ntable set</b> correspond to <b>sysctl</b> entries under <i>net.ipv[4|6].neigh.*</i>.


title: COMMON GLOBAL PARAMETERS (IP NTABLE SET)
content:
When using <b>ip ntable set</b>, several important global parameters can be configured to tune the neighbour cache's behavior. Key parameters include: <br><b>base_reachable_time</b>: Controls the base for how long a neighbour entry is considered valid (reachable). <br><b>retrans_time</b>: Influences the retransmission timeout for neighbour solicitations. <br><b>gc_stale_time</b>: Defines how long entries can stay in a 'stale' state before garbage collection considers them for removal. Adjusting these values is crucial for network performance, especially in environments with dynamic network topologies or specific connectivity requirements.


title: DISTINCTION FROM IP NEIGHBOR
content:
While both <b>ip ntable</b> and <b>ip neighbor</b> (or <b>ip neigh</b>) deal with the kernel's neighbour cache, they serve slightly different primary purposes. <b>ip neighbor</b> is primarily used for managing individual neighbour entries (e.g., adding or deleting static ARP entries for specific hosts). In contrast, <b>ip ntable</b> offers more extensive control over the global parameters and behavior of the <i>entire</i> neighbour table, allowing for tuning of timeouts, garbage collection, and other system-wide neighbour caching mechanisms. There is some functional overlap, particularly for adding/deleting entries, but their core focus differs.


title: HISTORY
content:
The <b>ip-ntable</b> command is an integral part of the <i>iproute2</i> utility suite, developed primarily by Alexey Kuznetsov. This suite was created to provide a unified and more powerful interface for controlling TCP/IP networking on Linux, replacing older, disparate tools like <b>ifconfig</b> and <b>arp</b>. <b>ip-ntable</b> specifically addresses the need for detailed management of the kernel's neighbour cache, offering granular control over its parameters and entries, which was not comprehensively available in previous tools.


title: SYNOPSIS
content:
<b>ip route</b> { <i>add</i> | <i>change</i> | <i>replace</i> | <i>delete</i> | <i>show</i> | <i>get</i> | <i>flush</i> | <i>save</i> | <i>restore</i> | <i>monitor</i> } { <i>SELECTOR</i> | <i>ARGUMENTS</i> }<br><br>Common usage examples:<br><b>ip route add</b> { <b>default</b> | <i>PREFIX</i> } [ <b>via</b> <i>ADDRESS</i> ] [ <b>dev</b> <i>NAME</i> ] [ <b>metric</b> <i>METRIC</i> ] ...<br><b>ip route delete</b> { <b>default</b> | <i>PREFIX</i> } ...<br><b>ip route show</b> [ <b>dev</b> <i>NAME</i> ] [ <b>scope</b> <i>SCOPE</i> ] [ <b>table</b> <i>TABLE_ID</i> ]


title: PARAMETERS
content:
<b><b>add</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new route entry to the routing table.<br><br><b><b>change</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes attributes of an existing route entry.<br><br><b><b>replace</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replaces an existing route or adds it if it doesn't exist.<br><br><b><b>delete</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes a route entry from the routing table.<br><br><b><b>show</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current routing table entries. This is the default command if none is specified.<br><br><b><b>get</b> <i>SELECTOR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a route lookup to a specific destination and displays the route that would be used.<br><br><b><b>flush</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Flushes (deletes) all entries or a specific set of entries from a routing table or the cache.<br><br><b><b>save</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Saves the current routing table to a file, typically in a format suitable for <b>restore</b>.<br><br><b><b>restore</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restores routing table entries from a saved file.<br><br><b><b>monitor</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continuously monitors for changes in the routing table and prints updates.<br><br><b><b>default</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <b>add</b>, <b>delete</b>, <b>change</b>, <b>replace</b> to refer to the default route (0.0.0.0/0 for IPv4, ::/0 for IPv6).<br><br><b><i>PREFIX</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The destination IP address or network (e.g., 192.168.1.0/24, 10.0.0.1). Can be omitted for <b>default</b> routes.<br><br><b><b>via</b> <i>ADDRESS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP address of the gateway through which traffic for the route should be forwarded.<br><br><b><b>dev</b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the outgoing network interface name (e.g., eth0, enp3s0) through which packets for the route will be sent.<br><br><b><b>src</b> <i>ADDRESS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the preferred source IP address to be used for packets matching this route.<br><br><b><b>metric</b> <i>VALUE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a preference value (cost) to the route. Lower values indicate higher preference when multiple routes to the same destination exist.<br><br><b><b>scope</b> { <b>global</b> | <b>link</b> | <b>host</b> | <i>SCOPE_ID</i> }</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the scope of the route's validity: <b>global</b> (reachable anywhere), <b>link</b> (reachable on this link), <b>host</b> (reachable only on this host).<br><br><b><b>table</b> { <b>main</b> | <b>local</b> | <b>default</b> | <i>TABLE_ID</i> }</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the routing table to operate on. The <b>main</b> table is the default. Others are used for policy routing.<br><br><b><b>onlink</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Indicates that the gateway address specified by <b>via</b> is directly reachable on the local link, even if it's not on the same subnet as the local interface.<br><br><b><b>proto</b> { <b>kernel</b> | <b>boot</b> | <b>static</b> | <b>dhcp</b> | ... }</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the protocol by which the route was installed. Used primarily for informational purposes with <b>show</b>, indicating how the route was learned.<br><br><b><b>cached</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <b>show</b> to display routes from the kernel's routing cache.<br><br>


title: DESCRIPTION
content:
The <b>ip route</b> command is a fundamental utility within the <i>iproute2</i> suite, designed to manage the Linux kernel's IP routing tables. It provides comprehensive functionalities to view, add, change, or delete routing entries for both IPv4 and IPv6 protocols. Unlike the older <i>route</i> command from the <i>net-tools</i> package, <b>ip route</b> offers superior capabilities for advanced routing policies, multiple routing tables, and better integration with modern networking concepts. It's essential for configuring network connectivity, directing traffic through specific interfaces or gateways, and setting up complex network topologies, such as multi-homed servers, VPNs, or load balancing scenarios. Understanding and utilizing <b>ip route</b> is crucial for network administrators and anyone managing Linux-based network infrastructure.


title: CAVEATS
content:
The <b>ip route</b> command requires <i>root</i> privileges to modify the routing table, and typically for most <b>show</b> operations unless the information is publicly available. Incorrect manipulation of routing tables can lead to network connectivity loss or unexpected traffic routing, potentially impacting system or network operations. For complex policy routing, it's often used in conjunction with <b>ip rule</b>, which adds another layer of complexity. It's crucial to understand the implications of changes before applying them.


title: ROUTING TABLES
content:
The Linux kernel can maintain multiple routing tables, not just a single one. By default, most routing operations interact with the <b>main</b> table. Other standard tables include <b>local</b> (for routes to local and broadcast addresses) and <b>default</b> (an empty table used as a placeholder). Users can define additional custom tables (identified by numbers or names in <i>/etc/iproute2/rt_tables</i>) for advanced scenarios like policy-based routing, where different traffic flows use different routing decisions based on various criteria.


title: POLICY ROUTING
content:
While <b>ip route</b> manages the routing table entries, <i>policy routing</i> allows the system to select which routing table to use based on source address, destination address, incoming interface, or other packet attributes. This is achieved using the <b>ip rule</b> command (part of <i>iproute2</i>). For example, traffic originating from a specific source IP might use a different routing table than general outbound traffic, enabling complex network configurations like multi-WAN setups or specific traffic engineering.


title: DEFAULT GATEWAY
content:
The 'default gateway' is a crucial routing entry that specifies where to send packets when there is no more specific route defined in the routing table. In <b>ip route</b> terminology, this is represented by a destination of <i>0.0.0.0/0</i> (for IPv4) or <i>::/0</i> (for IPv6). A common command to add a default gateway would be <b>ip route add default via <i>GATEWAY_IP</i> dev <i>INTERFACE</i></b>, while <b>ip route show</b> will display the currently configured default route if one exists.


title: HISTORY
content:
The <b>ip route</b> command is a core component of the <i>iproute2</i> suite, which began development in the late 1990s as a modern replacement for the older <i>net-tools</i> utilities (such as <b>route</b>, <b>ifconfig</b>, <b>netstat</b>). The primary motivation for <i>iproute2</i> was to provide a more robust and feature-rich interface to the Linux kernel's advanced networking capabilities, including support for IPv6, policy routing, traffic control, and multiple routing tables. <b>ip route</b> specifically took over the role of managing kernel routing tables, offering capabilities that the legacy <b>route</b> command lacked, making it the standard tool for network configuration on modern Linux systems.


title: SEE ALSO
content:
<b>ip</b>(8), <b>ip-link</b>(8), <b>ip-addr</b>(8), <b>ip-rule</b>(8), <b>route</b>(8) (legacy command)


title: SYNOPSIS
content:
<b>ip route add</b> { <I>DESTINATION</I> | <I>default</I> } [<b>via</b> <I>GATEWAY</I>] [<b>dev</b> <I>DEVICE</I>] [<b>src</b> <I>SOURCE_IP</I>] [<b>metric</b> <I>METRIC</I>] [<b>proto</b> <I>PROTOCOL</I>] [<b>scope</b> <I>SCOPE</I>] [<b>table</b> <I>TABLE_ID</I>] [<b>type</b> <I>TYPE</I>] [<b>onlink</b>]


title: PARAMETERS
content:
<b>DESTINATION | default</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The destination network or host. Can be an IP address (e.g., 192.168.1.1), a CIDR block (e.g., 192.168.1.0/24), or 'default' for the default route.<br><br><b>via GATEWAY</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP address of the next-hop router or gateway to reach the destination.<br><br><b>dev DEVICE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the network interface through which packets for the destination will be sent (e.g., eth0, enp0s3, wlan0).<br><br><b>src SOURCE_IP</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the source IP address for packets sent out via this route. Useful in multi-homed scenarios.<br><br><b>metric METRIC</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An integer value indicating the preference for this route. Lower metrics are preferred when multiple routes exist for the same destination.<br><br><b>proto PROTOCOL</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A numeric or symbolic identifier for the routing protocol that installed this route (e.g., 'static', 'boot', 'kernel', 'redirect', 'dhcp').<br><br><b>scope SCOPE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the scope of the destination address: 'global' (reachable anywhere), 'link' (only on the directly connected link), or 'host' (only reachable locally).<br><br><b>table TABLE_ID</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the routing table to add the route to. Common tables include 'main', 'local', 'default', or a numeric ID.<br><br><b>type TYPE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The type of route: 'unicast' (normal route), 'blackhole' (discards packets silently), 'prohibit' (discards packets and sends ICMP Prohibit), 'unreachable' (discards and sends ICMP Unreachable), 'local', 'broadcast', 'throw', etc.<br><br><b>onlink</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the kernel to believe the destination is directly connected via the specified device, bypassing checks for the gateway's reachability.<br><br>


title: DESCRIPTION
content:
The `ip route add` command is a fundamental utility within the `iproute2` suite, used to manually insert new entries into the Linux kernel's IP routing table. This table dictates how network traffic is forwarded from the local system to various destinations. Each entry, or "route," specifies a destination network or host, often a `<i>gateway</i>` (the next hop to reach that destination), and the `<i>device</i>` (network interface) through which the traffic should exit.<br><br>By adding routes, administrators can direct traffic for specific destinations through particular interfaces, gateways, or even define rules for traffic rejection. For instance, you might add a route to a private network accessible via a VPN tunnel, or a default route to the internet via your router. `ip route add` superseded the older `<i>route add</i>` command, offering more advanced features like policy routing, support for multiple routing tables, and comprehensive IPv6 management. Understanding and utilizing this command is crucial for configuring complex network topologies and ensuring proper network connectivity on Linux systems.


title: CAVEATS
content:
<b>ip route add</b> requires root privileges to execute.<br><br>Changes made with `ip route add` are <I>ephemeral</I>; they are not persistent across system reboots. To make routes persistent, they must be configured through system-specific network configuration files or services (e.g., `netplan`, `NetworkManager`, `/etc/network/interfaces` on Debian/Ubuntu, `/etc/sysconfig/network-scripts` on RHEL/CentOS).<br><br>Incorrectly adding routes can disrupt network connectivity, potentially making the system inaccessible. Always verify changes using `ip route show` after modification.


title: ROUTE PERSISTENCE
content:
Routes added with `ip route add` are active immediately but are lost upon system reboot. To ensure routes are re-established after a restart, you must configure them in your system's network configuration files. The exact method varies by distribution: <br> - On Debian/Ubuntu, edit `/etc/network/interfaces`. <br> - On RHEL/CentOS, use `nmcli` or configure files in `/etc/sysconfig/network-scripts/`. <br> - Modern distributions often use `netplan` or `NetworkManager` for declarative network configuration.


title: ADDING A DEFAULT ROUTE
content:
The most common use case is adding a default route (gateway to the internet). This is achieved by specifying `default` as the destination: <br> `<b>ip route add default via 192.168.1.1 dev eth0</b>` <br> This directs all traffic for unknown destinations through the specified gateway on the given interface.


title: SPECIAL ROUTE TYPES
content:
Beyond the standard `unicast` route, `ip route add` supports several special types for specific network behaviors: <br> - `<b>blackhole</b>`: Silently drops packets destined for this route. Useful for blocking malicious traffic or unused subnets. <br> - `<b>prohibit</b>`: Drops packets and sends an ICMP 'Communication Administratively Prohibited' message back to the sender. <br> - `<b>unreachable</b>`: Drops packets and sends an ICMP 'Destination Unreachable' message. <br> These are invaluable for enforcing network policies and security.


title: HISTORY
content:
The `ip route` command is part of the `iproute2` utility suite, which was developed to replace the older `net-tools` (including `ifconfig`, `route`, `netstat`) in Linux. `iproute2` emerged in the late 1990s as a more powerful and flexible alternative, specifically designed to handle advanced networking features like policy routing, multiple routing tables, traffic control, and comprehensive IPv6 support, which were not well-supported by the legacy tools. Over time, `iproute2` has become the standard and recommended toolset for configuring networking on modern Linux distributions.


title: SYNOPSIS
content:
<b>ip route get</b> <i>DESTINATION</i> [<b>from</b> <i>ADDRESS</i>] [<b>iif</b> <i>NAME</i>] [<b>oif</b> <i>NAME</i>] [<b>tos</b> <i>TOS</i>] [<b>mark</b> <i>MARK</i>] [<b>uid</b> <i>UID</i>] [<b>ipproto</b> <i>PROTOCOL</i>] [<b>sport</b> <i>PORT</i>] [<b>dport</b> <i>PORT</i>] [<b>pref</b> <i>SRC_PREF</i>] [<b>metric</b> <i>METRIC</i>] [<b>via</b> <i>GW</i>] [<b>src</b> <i>ADDRESS</i>] [<b>vrf</b> <i>NAME</i>]


title: PARAMETERS
content:
<b><i>DESTINATION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The target IP address or network prefix for which to perform the routing lookup (e.g., 192.168.1.1, 10.0.0.0/8).<br><br><b><b>from</b> <i>ADDRESS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the source IP address of the hypothetical packet. This can influence policy routing decisions.<br><br><b><b>iif</b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulates the packet arriving on a specific input interface (e.g., eth0, lo). Useful for troubleshooting incoming traffic paths.<br><br><b><b>oif</b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulates the packet being sent out a specific output interface. Less common for 'get' but allows testing explicit paths.<br><br><b><b>tos</b> <i>TOS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Type of Service byte (or DSCP value) for the hypothetical packet, affecting routes based on TOS.<br><br><b><b>mark</b> <i>MARK</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the firewall mark (fwmark) associated with the packet, critical for testing policy routing rules that use marks.<br><br><b><b>uid</b> <i>UID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the user ID of the process originating the packet, used in policy routing for user-specific rules.<br><br><b><b>ipproto</b> <i>PROTOCOL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP protocol number (e.g., 6 for TCP, 17 for UDP) for the packet, influencing protocol-specific rules.<br><br><b><b>sport</b> <i>PORT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the source port number for the packet, used in conjunction with 'ipproto'.<br><br><b><b>dport</b> <i>PORT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the destination port number for the packet, used in conjunction with 'ipproto'.<br><br><b><b>pref</b> <i>SRC_PREF</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the source address preference, used in advanced policy routing to select a preferred source IP.<br><br><b><b>metric</b> <i>METRIC</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Considers routes with a specific metric value. Not commonly used to force a route, but for testing.<br><br><b><b>via</b> <i>GW</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulates routing a packet through a specific gateway, overriding the default gateway selection logic.<br><br><b><b>src</b> <i>ADDRESS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly requests the kernel to use this source IP address for the lookup. Similar to 'from'.<br><br><b><b>vrf</b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Virtual Routing and Forwarding (VRF) table to perform the lookup within.<br><br>


title: DESCRIPTION
content:
<br>The <b>ip route get</b> command is a powerful diagnostic tool within the <b>iproute2</b> suite, used to simulate how the Linux kernel would route packets to a specific destination.<br><br>Unlike <b>ip route show</b>, which lists the entire routing table, <b>ip route get</b> performs a live lookup, mimicking the kernel's routing logic for a hypothetical packet.<br><br>It provides detailed information about the chosen route, including the output interface (<b>dev</b>), the gateway (<b>via</b>), the source IP address that would be used (<b>src</b>), and various metrics or flags (e.g., <b>cache</b>).<br><br>This command is invaluable for troubleshooting connectivity issues, verifying policy routing rules, and understanding why certain traffic might be taking an unexpected path. It allows administrators to test different routing scenarios by specifying parameters like the incoming interface, source address, or even firewall marks, helping to pinpoint routing misconfigurations without sending actual traffic.


title: CAVEATS
content:
The <b>ip route get</b> command performs a <i>simulation</i> of the kernel's routing decision, not an actual packet transmission. Therefore, it does not account for external factors like firewalls, NAT devices, or network congestion outside the host. The output reflects only what the kernel's routing table would choose based on its internal rules. Complex queries involving parameters like <b>mark</b> or <b>uid</b> may require root privileges. While powerful, it doesn't provide insight into <i>why</i> a particular route was chosen from a policy perspective, only <i>what</i> route was chosen.


title: COMMON USE CASES
content:
<b>Troubleshooting Connectivity:</b> Determine the exact path (interface, gateway, source IP) a packet would take to a specific destination.<br><br><b>Verifying Source IP Selection:</b> Use the <b>src</b> option to simulate traffic originating from a particular address and see which source IP the kernel would select for the outgoing packet.<br><br><b>Understanding Policy Routing:</b> Test how different firewall marks (<b>mark</b>) or user IDs (<b>uid</b>) might influence routing decisions based on configured policy routing rules.


title: INTERPRETING OUTPUT
content:
The output typically shows: <br><b>src</b> <i>ADDRESS</i>: The source IP address the kernel would use.<br><b>via</b> <i>GATEWAY</i>: The next-hop gateway for the destination.<br><b>dev</b> <i>INTERFACE</i>: The outgoing network interface.<br><b>cache</b>: Indicates if the route is from the routing cache (common for frequently used routes).<br>Other fields like <b>metric</b>, <b>prefsrc</b>, <b>expires</b> may also be present, providing further details about the route's properties.


title: HISTORY
content:
The <b>ip route get</b> command is an integral part of the <b>iproute2</b> utility suite, which was developed to replace the older, less feature-rich <b>net-tools</b> commands (like <b>ifconfig</b> and <b>route</b>) in modern Linux distributions. Initiated primarily by Alexey Kuznetsov, <b>iproute2</b> provides a more consistent, flexible, and powerful interface for network configuration and management, particularly well-suited for complex networking setups involving policy routing, VRFs, and traffic control. The <b>get</b> subcommand specifically offers a unique diagnostic capability that was largely absent in earlier toolsets, reflecting the increasing need for precise routing analysis in contemporary network environments.


title: SYNOPSIS
content:
<b>ip route { list | show }</b> [ <i>SELECTOR_OPTIONS</i> ] [ <i>OUTPUT_OPTIONS</i> ]<br><i>SELECTOR_OPTIONS</i> may include filtering by <b>to</b> <i>PREFIX</i>, <b>dev</b> <i>IFACE</i>, <b>table</b> <i>ID</i>, <b>src</b> <i>ADDR</i>, <b>via</b> <i>GATEWAY</i>, or specifying <i>ADDRESS_FAMILY</i> (e.g., <b>inet</b>, <b>inet6</b>).<br><i>OUTPUT_OPTIONS</i> may include <b>brief</b>, <b>details</b>, <b>statistics</b>, <b>json</b>, <b>pretty</b>, <b>exact</b>, <b>cached</b>, <b>all</b>.


title: PARAMETERS
content:
<b><b>list</b> | <b>show</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The primary command to display routing table entries. Both are equivalent and often implied if no other subcommand is given after <b>ip route</b>.<br><br><b><b>to</b> <i>PREFIX</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters routes to a specific destination network or host (e.g., <i>192.168.1.0/24</i>, <i>default</i> for the default route).<br><br><b><b>dev</b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters routes associated with a particular outgoing network interface (e.g., <i>eth0</i>, <i>wlan0</i>).<br><br><b><b>table</b> <i>ID</i> | <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which routing table to display. Common tables include <b>main</b> (the default), <b>local</b>, and <b>default</b>, or a numeric ID for custom tables.<br><br><b><b>src</b> <i>ADDRESS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters routes that use a specific source IP address for outgoing packets.<br><br><b><b>inet</b> | <b>inet6</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP address family to display routes for: IPv4 (<b>inet</b>) or IPv6 (<b>inet6</b>). If omitted, <b>inet</b> is typically assumed.<br><br><b><b>details</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows more verbose information for each route, including advanced attributes like protocol, metric, and flags.<br><br><b><b>statistics</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays packet and byte count statistics for each route, useful for monitoring network traffic.<br><br><b><b>json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the routing table data in a machine-readable JSON format.<br><br><b><b>pretty</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used in conjunction with <b>json</b> to produce human-readable, indented JSON output.<br><br><b><b>all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists entries from all routing tables configured on the system, not just the <b>main</b> table.<br><br><b><b>exact</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requires an exact match for the specified prefix, preventing longest prefix matching behavior.<br><br>


title: DESCRIPTION
content:
The <b>ip route list</b> command is a fundamental tool within the <i>iproute2</i> utility suite, used to display the IP routing table entries maintained by the Linux kernel. This table dictates how IP packets are forwarded to their intended destinations, whether local or remote. It provides a comprehensive view of the system's routing configuration, including destination networks, next-hop gateways, outgoing network interfaces, and route metrics. This command is the modern standard for network routing inspection, replacing older tools like <i>route</i> and <i>netstat</i>, and offering richer detail and filtering capabilities. Users can specify various options to filter the output, such as displaying routes for specific address families (IPv4 or IPv6), listing entries from a particular routing table, or showing detailed attributes for each route. It's an indispensable command for network configuration, troubleshooting, and diagnostics on Linux systems.


title: CAVEATS
content:
Viewing detailed routing information or specific routing tables often requires root privileges. Users migrating from older <i>net-tools</i> (e.g., <i>route</i>) should note the different syntax and richer functionality of <i>iproute2</i> commands. The <b>cached</b> option refers to the route cache, which is less significant in modern Linux kernel routing mechanisms compared to the FIB (Forwarding Information Base) lookup.


title: UNDERSTANDING OUTPUT FIELDS
content:
The output of <b>ip route list</b> provides several key fields:<br><b>destination (e.g., 0.0.0.0/0 or default)</b>: The network or host to which the route applies. <i>0.0.0.0/0</i> or <i>default</i> signifies the default route for all unroutable traffic.<br><b>via GATEWAY_IP</b>: The IP address of the next-hop gateway for packets destined to the specified network.<br><b>dev INTERFACE_NAME</b>: The local network interface through which packets leave the system to reach the destination or gateway.<br><b>proto KERNEL_PROTOCOL</b>: Indicates how the route was installed (e.g., <i>kernel</i> for routes automatically configured, <i>static</i> for manually added routes, <i>dhcp</i>, <i>bgp</i>, etc.).<br><b>scope SCOPE_TYPE</b>: Defines the visibility and reachability of the route (e.g., <i>global</i> for internet-routable, <i>link</i> for directly connected, <i>host</i> for local addresses).<br><b>metric METRIC_VALUE</b>: A numerical value indicating the cost of the route; lower values are generally preferred.


title: POLICY ROUTING
content:
Beyond the basic routing table (<b>main</b>), Linux kernels support multiple routing tables for policy routing. <b>ip route list</b> allows inspecting these tables using the <b>table</b> option. This feature enables complex routing decisions based on source address, application, and other criteria, going beyond simple destination-based routing.


title: HISTORY
content:
The <b>iproute2</b> utility suite, which includes <b>ip route list</b>, was developed by Alexey Kuznetsov starting in the late 1990s. It was designed as a modern replacement for the older <b>net-tools</b> utilities (like <b>route</b> and <b>netstat</b>), which relied on the less efficient <i>ioctl</i> interface. <b>iproute2</b> leverages the Netlink socket interface, providing a more robust, extensible, and efficient method for interacting with the Linux kernel's networking stack. This shift enabled richer features such as policy routing and detailed traffic control, making <b>ip route list</b> the standard and preferred command for routing table inspection in modern Linux distributions.


title: PARAMETERS
content:
<b><i>SELECTOR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A placeholder for various filtering options to narrow down the displayed routes.<br><br><b><b>dev</b> <i>IFNAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays routes associated with a specific network interface (e.g., <i>eth0</i>, <i>enp0s3</i>).<br><br><b><b>table</b> <i>TABLE_ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows routes from a specified routing table. Common tables include <i>main</i> (default), <i>local</i> (for local and broadcast addresses), and <i>default</i> (a synonym for main). Custom tables can also be specified by ID or name.<br><br><b><b>type</b> <i>TYPE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters routes by their type, such as <i>unicast</i> (default), <i>local</i>, <i>broadcast</i>, <i>nat</i>, <i>unreachable</i>, <i>prohibit</i>, or <i>blackhole</i>.<br><br><b><b>scope</b> <i>SCOPE_ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays routes with a specific scope: <i>global</i> (reachable anywhere), <i>link</i> (reachable only on the local link), or <i>host</i> (only on the local host).<br><br><b><b>proto</b> <i>PROTO_ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters by the routing protocol that installed the route. Examples include <i>kernel</i> (routes added by the kernel itself), <i>static</i> (manually added), <i>boot</i>, <i>dhcp</i>, <i>ospf</i>, <i>bgp</i>, etc.<br><br><b><b>src</b> <i>ADDRESS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters routes by the source IP address that would be used when sending traffic over this route.<br><br><b><b>to</b> <i>ADDRESS</i> | <i>PREFIX</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters routes destined for a specific IP address or network prefix (e.g., <i>192.168.1.0/24</i>).<br><br><b><b>via</b> <i>ADDRESS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters routes that use a specific gateway IP address.<br><br><b><b>iif</b> <i>IFNAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters routes matching packets coming in via the specified interface.<br><br><b><b>oif</b> <i>IFNAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters routes matching packets going out via the specified interface.<br><br><b><b>exact</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <b>to</b> or <b>from</b>, ensures an exact match on the address/prefix length, rather than a longest-prefix match.<br><br>


title: DESCRIPTION
content:
The <b>ip route show</b> command is a fundamental tool within the <i>iproute2</i> suite, used to display the kernel's IP routing tables. It provides a comprehensive view of how your Linux system forwards network packets. Unlike older utilities like <i>route</i>, <b>ip route show</b> offers more detailed and granular control over routing information, including support for multiple routing tables (e.g., main, local), policy routing, and various filtering options. Understanding its output is crucial for network troubleshooting, verifying connectivity, and validating network configurations. The command's output typically includes the destination network, gateway, output device, protocol by which the route was learned, and scope. It's an essential command for any network administrator or power user working with Linux systems.


title: CAVEATS
content:
While <b>ip route show</b> generally does not require root privileges to display the main routing table, certain advanced operations or access to specific non-default routing tables might. The output can be extensive, especially on complex networks, making it beneficial to pipe the output to tools like <i>grep</i>, <i>awk</i>, or <i>less</i> for easier readability and filtering. It's important to have a basic understanding of IP networking concepts to fully interpret the command's output.


title: UNDERSTANDING OUTPUT COLUMNS
content:
The output of <b>ip route show</b> typically includes several columns:<br><ul><li><b>default</b> or a network prefix: The destination network or host.<br></li><li><b>via</b> <i>GATEWAY_IP</i>: The IP address of the next-hop gateway for reaching the destination.<br></li><li><b>dev</b> <i>IFNAME</i>: The outgoing network interface used for this route.<br></li><li><b>proto</b> <i>PROTOCOL</i>: Indicates how the route was learned (e.g., <i>kernel</i> for directly connected networks, <i>static</i> for manually added routes, <i>dhcp</i>, <i>ospf</i>, etc.).<br></li><li><b>scope</b> <i>SCOPE</i>: Defines the reachability of the destination (e.g., <i>link</i> for directly connected, <i>global</i> for publicly routable).<br></li><li><b>src</b> <i>SOURCE_IP</i>: The preferred source IP address used for packets leaving this interface via this route.<br></li><li><b>metric</b> <i>VALUE</i>: A cost associated with the route; lower values are preferred.</li></ul>


title: ROUTING TABLES
content:
Linux kernels can maintain multiple independent routing tables. By default, <b>ip route show</b> displays entries from the <i>main</i> table. Other common tables include <i>local</i> (for routes to local addresses and broadcast addresses) and <i>default</i> (often an alias for <i>main</i>). Users can define custom routing tables for policy routing, which allows for more complex routing decisions based on various criteria (e.g., source IP, application). These tables are typically defined in <i>/etc/iproute2/rt_tables</i>.


title: HISTORY
content:
The <b>ip route show</b> command is part of the <i>iproute2</i> utility suite, which was developed to replace older, less powerful network configuration tools like <i>ifconfig</i> and <i>route</i>. Initiated by Alexey Kuznetsov, <i>iproute2</i> provides a more robust and modern interface for managing network configurations in Linux. It leverages advanced kernel features such as policy routing, multiple routing tables, and comprehensive traffic control. Its adoption marked a significant shift in how network administrators manage Linux networking, offering greater flexibility and control over the network stack, particularly beneficial for complex network environments and IPv6.


title: SYNOPSIS
content:
<b>ip tcp_metrics</b> { <i>show</i> | <i>flush</i> } [ <i>ADDRESS</i> ] [ <b>dev</b> <i>NAME</i> ] [ <b>table</b> <i>TABLE_ID</i> ]


title: PARAMETERS
content:
<b><i>show</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the cached TCP metrics for specified or all destinations.</i><br><br><b><i>flush</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Clears the cached TCP metrics for specified or all destinations. Requires root privileges.</i><br><br><b><i>ADDRESS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>An optional destination IP address (IPv4 or IPv6) for which to show or flush metrics. If omitted, all cached entries are displayed/flushed.</i><br><br><b><b>dev</b> <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>An optional network device name (e.g., <code>eth0</code>) to filter metrics by the outgoing interface.</i><br><br><b><b>table</b> <i>TABLE_ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>An optional routing table ID to filter metrics associated with a specific routing table.</i><br><br>


title: DESCRIPTION
content:
The <b>ip tcp_metrics</b> command is part of the <b>iproute2</b> suite, providing an interface to the Linux kernel's TCP metrics cache. This cache stores performance-related information for various network paths, such as Round Trip Time (RTT), congestion window, reordering, and retransmission statistics, for destinations that the kernel has previously communicated with. <br><br>By analyzing these cached metrics, system administrators and network engineers can gain insights into the performance characteristics of specific network routes without actively establishing new connections. This is invaluable for network troubleshooting, identifying congested paths, or verifying network configuration changes. The command allows users to display these metrics or to flush (clear) them, forcing the kernel to re-evaluate the path characteristics for future connections. These cached values are used by the kernel to optimize TCP behavior for subsequent connections to the same destination.


title: CAVEATS
content:
The metrics displayed by <b>ip tcp_metrics</b> are cached by the kernel; they represent historical data for previous connections and might not reflect the current real-time performance of a path, especially if network conditions have recently changed. <br><br>The kernel periodically ages out or invalidates entries in the cache, and certain network events (like link changes) can also trigger a flush. Flushing the cache can temporarily affect performance for new connections as the kernel re-learns path characteristics. <br><br>Flushing metrics requires root privileges.


title: OUTPUT INTERPRETATION
content:
The output of <b>ip tcp_metrics show</b> typically includes fields such as:<br><ul><li><b>rtt:</b> <i>Round Trip Time (smoothed average).</i></li><li><b>rttvar:</b> <i>RTT variance, indicating the stability of the RTT.</i></li><li><b>ato:</b> <i>Ack Timeout (timeout for acknowledgements).</i></li><li><b>pmtu:</b> <i>Path Maximum Transmission Unit (largest packet size that can traverse the path without fragmentation).</i></li><li><b>reordering:</b> <i>Number of times packets were received out of order.</i></li><li><b>retrans:</b> <i>Number of retransmissions.</i></li><li><b>ssthresh:</b> <i>Slow start threshold.</i></li><li><b>cwnd:</b> <i>Congestion Window.</i></li><li><b>last_output/last_input:</b> <i>Timestamps of the last packet sent/received for this path.</i></li></ul>Understanding these values can help diagnose network performance issues, such as high latency (high RTT), packet loss (high retransmissions), or MTU problems.


title: KERNEL MECHANISM
content:
The TCP metrics cache is an internal data structure within the Linux kernel's networking stack. It's populated dynamically as TCP connections are established and data is exchanged. The kernel uses these cached values to optimize subsequent TCP connections to the same destination, potentially allowing for faster ramp-up of bandwidth and more efficient congestion control. The cache helps reduce the overhead of re-discovering optimal path parameters for every new connection to a host that has been communicated with recently.


title: HISTORY
content:
The <b>ip tcp_metrics</b> command is part of the <b>iproute2</b> utility suite, which has progressively replaced older network configuration tools like <b>net-tools</b> (e.g., <b>ifconfig</b>, <b>route</b>, <b>netstat</b>) in modern Linux distributions. The caching of TCP metrics within the kernel has been a fundamental optimization for TCP performance for a long time, allowing the kernel to avoid repeated path discovery and setup costs for common destinations. The <b>ip tcp_metrics</b> command provides a user-space interface to inspect and manage this internal kernel mechanism, evolving alongside the kernel's networking capabilities to offer more granular control and visibility.


title: PARAMETERS
content:
<b><B>add</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new IPsec token to the kernel's XFRM subsystem. Requires <I>name</I> and <I>value</I>.<br><br><b><B>del</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes an existing IPsec token by its specified <I>name</I>.<br><br><b><B>show</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays information about configured IPsec tokens. If a <I>name</I> is provided, only that token's details are shown; otherwise, all tokens are listed.<br><br><b><B>flush</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes all currently configured IPsec tokens from the kernel's XFRM subsystem.<br><br><b><B>name</B> <I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the unique identifier for the IPsec token. Required for <B>add</B> and <B>del</B>, optional for <B>show</B>.<br><br><b><B>value</B> <I>VALUE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the hexadecimal string value of the token. This is the shared secret or key material. Required for <B>add</B>.<br><br><b><B>lifetime</B> <I>SECONDS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. Defines the duration in seconds after which the token expires. Applicable only to <B>add</B>. If omitted, the token's lifetime is infinite.<br><br>


title: DESCRIPTION
content:
The `ip token` command is a sub-command of the `ip` utility, part of the `iproute2` suite. It is used to manage IPsec tokens within the Linux kernel's XFRM (Transform) framework. These tokens are credentials, typically shared secrets or keys, used for authentication and negotiation in IPsec security policies. `ip token` allows administrators to add new tokens, delete existing ones, display token information, and flush all configured tokens. This capability is crucial for dynamically managing cryptographic keys or authentication credentials used by IPsec SAs (Security Associations) and SPs (Security Policies) without requiring service restarts.


title: CAVEATS
content:
The `ip-token` (accessed as `ip token`) command requires root privileges to execute. It is exclusively designed for managing IPsec tokens within the Linux kernel's XFRM subsystem and is not for general cryptographic key management. Direct manipulation of IPsec tokens via this command is typically performed in advanced IPsec configurations or by automated scripts, rather than by typical end-users.


title: IPSEC TOKEN PURPOSE
content:
IPsec tokens primarily serve as shared secrets or pre-shared keys (PSKs) that the kernel's XFRM framework can directly utilize for authentication purposes or to derive session keys during IPsec security association establishment. They offer a mechanism to provision these cryptographic secrets directly into the kernel, reducing reliance solely on user-space key management daemons for certain IPsec deployments or scenarios where dynamic, kernel-managed secrets are beneficial.


title: EXAMPLE USAGE
content:
<B>1. Add a token named 'mytoken' with a specific value and a 1-hour lifetime:</B><br>`sudo ip token add name mytoken value 0102030405060708090a0b0c0d0e0f10 lifetime 3600`<br><br><B>2. Display information about all currently configured IPsec tokens:</B><br>`sudo ip token show`<br><br><B>3. Delete the token named 'mytoken':</B><br>`sudo ip token del name mytoken`<br><br><B>4. Flush (delete) all IPsec tokens from the system:</B><br>`sudo ip token flush`


title: HISTORY
content:
The `iproute2` suite, which includes `ip token`, has been a fundamental part of Linux networking since the late 1990s, serving as the modern replacement for older `net-tools`. The IPsec and XFRM functionalities, including the management of tokens, were integrated as Linux's native IPsec capabilities matured, providing a robust command-line interface for kernel-level IPsec configuration.


title: SYNOPSIS
content:
<b><I>ip xfrm</I></b> { <b><I>state</I></b> | <b><I>policy</I></b> } { <b><I>add</I></b> | <b><I>update</I></b> | <b><I>delete</I></b> | <b><I>get</I></b> | <b><I>flush</I></b> | <b><I>list</I></b> | <b><I>monitor</I></b> } [ <i>ARGUMENTS</i>... ]


title: PARAMETERS
content:
<b>state</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages IPsec Security Associations (SAs). SAs define the cryptographic parameters (e.g., encryption algorithms, authentication keys, modes) for securing data traffic. This subcommand is used to add, modify, delete, list, or monitor SAs.<br><br><b>policy</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages IPsec Security Policies (SPs). SPs define rules for selecting traffic that should be protected by IPsec, specifying source/destination addresses, protocols, ports, and the required IPsec action (e.g., encrypt, authenticate, bypass, discard). This subcommand is used to add, modify, delete, list, or monitor SPs.<br><br>


title: DESCRIPTION
content:
The <b><I>ip xfrm</I></b> command is a powerful subcommand of the <b><I>iproute2</I></b> suite, used for managing IPsec (IP Security) components directly within the Linux kernel’s XFRM (Transform) subsystem.<br><br>It allows administrators to configure IPsec Security Associations (SAs) and Security Policies (SPs), which are fundamental for setting up secure, encrypted communication channels at the IP layer. SAs define the cryptographic algorithms, keys, and modes for securing traffic, while SPs dictate which traffic should be processed by IPsec, its direction (inbound/outbound), and the action to take (e.g., protect, bypass, discard).<br><br>While complex for manual configuration, <b><I>ip xfrm</I></b> is the underlying mechanism used by higher-level IPsec daemon implementations like StrongSwan or Libreswan.


title: CAVEATS
content:
Manual configuration of IPsec using <b><I>ip xfrm</I></b> can be highly complex and error-prone due to the numerous parameters required for SAs and SPs. Most IPsec deployments rely on higher-level daemons (e.g., StrongSwan, Libreswan) which automate the <b><I>ip xfrm</I></b> calls. Requires root privileges to execute. Incorrect configurations can lead to network connectivity issues or security vulnerabilities.


title: COMMON ACTIONS
content:
Both <b><I>state</I></b> and <b><I>policy</I></b> subcommands support a set of common actions:<br><b><I>add</I></b>: Add a new entry.<br><b><I>update</I></b>: Modify an existing entry.<br><b><I>delete</I></b>: Remove an entry.<br><b><I>get</I></b>: Retrieve details of a specific entry.<br><b><I>list</I></b>: Display all configured entries.<br><b><I>flush</I></b>: Remove all entries of a specific type.<br><b><I>monitor</I></b>: Continuously monitor for events related to SAs or SPs.


title: SA VS. SP
content:
It's crucial to understand the distinction between Security Associations (SAs) and Security Policies (SPs) in IPsec:<br><b><I>Security Association (SA)</I></b>: Defines <i>how</i> IPsec secures traffic. It specifies the cryptographic algorithms (e.g., AES, SHA256), keys, modes (e.g., tunnel, transport), and SPI (Security Parameter Index). SAs are typically negotiated by IKE (Internet Key Exchange) daemons.<br><b><I>Security Policy (SP)</I></b>: Defines <i>what</i> traffic IPsec should secure. It specifies traffic selectors (source/destination IPs, protocols, ports), the direction (in/out/fwd), and the action to take (e.g., <b><I>protect</I></b>, <b><I>bypass</I></b>, <b><I>discard</I></b>). SPs dictate which SA should be used for specific traffic.


title: HISTORY
content:
The <b><I>ip xfrm</I></b> command is an integral part of the <b><I>iproute2</I></b> utilities, which emerged as the modern networking toolkit for Linux, largely replacing older <b><I>net-tools</I></b> commands like <b><I>ifconfig</I></b> and <b><I>route</I></b>. Its development aligned with the Linux kernel's adoption of the Netlink interface for robust communication between user space and kernel modules, including the XFRM (Transform) subsystem for IPsec. It has been the standard way to interact with the kernel's IPsec implementation for many years, offering more flexibility and features than its predecessors.


title: SYNOPSIS
content:
<i>ip6tables</i> [<b>-t</b> <i>table</i>] [<i>command</i>] [<i>chain</i>] [<i>rule-specification</i>] [<i>options</i>]<br><br>Common commands:<br><i>ip6tables</i> <b>-A</b> <i>chain rule-specification</i><br><i>ip6tables</i> <b>-D</b> <i>chain rule-specification</i> | <i>rulenum</i><br><i>ip6tables</i> <b>-I</b> <i>chain</i> [<i>rulenum</i>] <i>rule-specification</i><br><i>ip6tables</i> <b>-R</b> <i>chain rulenum rule-specification</i><br><i>ip6tables</i> <b>-L</b> [<i>chain</i>] [<b>-v</b>] [<b>-n</b>] [<b>--line-numbers</b>]<br><i>ip6tables</i> <b>-F</b> [<i>chain</i>]<br><i>ip6tables</i> <b>-Z</b> [<i>chain</i>]<br><i>ip6tables</i> <b>-N</b> <i>chain</i><br><i>ip6tables</i> <b>-X</b> [<i>chain</i>]<br><i>ip6tables</i> <b>-P</b> <i>chain target</i><br><i>ip6tables</i> <b>-E</b> <i>old-chain-name new-chain-name</i>


title: PARAMETERS
content:
<b><b>-A</b>, <b>--append</b> <i>chain rule-specification</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Appends one or more rules to the end of the specified <i>chain</i>.<br><br><b><b>-D</b>, <b>--delete</b> <i>chain rule-specification</i> | <i>rulenum</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes one or more rules from the specified <i>chain</i>, either by exact match or by rule number.<br><br><b><b>-I</b>, <b>--insert</b> <i>chain</i> [<i>rulenum</i>] <i>rule-specification</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inserts one or more rules at the specified <i>rulenum</i> (default is 1, the beginning) in the <i>chain</i>.<br><br><b><b>-R</b>, <b>--replace</b> <i>chain rulenum rule-specification</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replaces a rule at the specified <i>rulenum</i> in the <i>chain</i>.<br><br><b><b>-L</b>, <b>--list</b> [<i>chain</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all rules in a specific <i>chain</i>, or all chains if none is specified.<br><br><b><b>-F</b>, <b>--flush</b> [<i>chain</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes all rules from the specified <i>chain</i>, or all chains if none is specified.<br><br><b><b>-Z</b>, <b>--zero</b> [<i>chain</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resets the packet and byte counters for all rules in the specified <i>chain</i>, or all chains.<br><br><b><b>-N</b>, <b>--new-chain</b> <i>chain</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new user-defined <i>chain</i>.<br><br><b><b>-X</b>, <b>--delete-chain</b> [<i>chain</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes the specified user-defined <i>chain</i>. The chain must be empty and not referenced by any other rule.<br><br><b><b>-P</b>, <b>--policy</b> <i>chain target</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default <i>target</i> (policy) for a built-in <i>chain</i> (e.g., ACCEPT, DROP).<br><br><b><b>-E</b>, <b>--rename-chain</b> <i>old-chain-name new-chain-name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Renames a user-defined chain.<br><br><b><b>-p</b>, <b>--protocol</b> <i>protocol</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets for a specified <i>protocol</i> (e.g., <b>tcp</b>, <b>udp</b>, <b>icmpv6</b>).<br><br><b><b>-s</b>, <b>--source</b> <i>address</i>[/<i>mask</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets originating from the specified source <i>address</i> or network.<br><br><b><b>-d</b>, <b>--destination</b> <i>address</i>[/<i>mask</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets destined for the specified destination <i>address</i> or network.<br><br><b><b>-j</b>, <b>--jump</b> <i>target</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>target</i> of the rule, which is the action to take (e.g., <b>ACCEPT</b>, <b>DROP</b>, <b>REJECT</b>, <b>LOG</b>, or a user-defined chain).<br><br><b><b>-m</b>, <b>--match</b> <i>module</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an extended match <i>module</i> to use (e.g., <b>state</b> for connection tracking, <b>multiport</b> for multiple ports).<br><br><b><b>-i</b>, <b>--in-interface</b> <i>name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets entering via the specified network <i>interface</i>.<br><br><b><b>-o</b>, <b>--out-interface</b> <i>name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets exiting via the specified network <i>interface</i>.<br><br><b><b>-t</b>, <b>--table</b> <i>table</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the table to operate on (e.g., <b>filter</b>, <b>nat</b>, <b>mangle</b>, <b>raw</b>, <b>security</b>). Default is <b>filter</b>.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output when listing rules, showing interface names and options with their full names.<br><br><b><b>-n</b>, <b>--numeric</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays IP addresses and port numbers in numeric format, avoiding DNS lookups.<br><br><b><b>--line-numbers</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows rule line numbers when listing rules, useful for deletion or replacement by number.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the help message for the command.<br><br>


title: DESCRIPTION
content:
<i>ip6tables</i> is the command-line utility used to set up, maintain, and inspect the IPv6 packet filter rules in the Linux kernel. It is a fundamental component of the Netfilter framework, allowing system administrators to define rules for network packets based on various criteria, such as source/destination IP addresses, protocols, ports, and interfaces.<br><br>The rules are organized into tables, each serving a specific purpose (e.g., <b>filter</b> for basic packet filtering, <b>mangle</b> for modifying packet headers, <b>nat</b> for Network Address Translation, though less common with IPv6's ample address space). Within each table, rules are further organized into chains (e.g., <b>INPUT</b> for incoming packets, <b>FORWARD</b> for packets routed through the system, <b>OUTPUT</b> for outgoing packets). When a packet traverses a chain, each rule is evaluated in order until a match is found and a target action (like ACCEPT, DROP, or REJECT) is applied, or the chain's default policy is hit.<br><br><i>ip6tables</i> is crucial for securing IPv6-enabled systems by controlling network access, preventing unauthorized connections, and managing network traffic flow.


title: CAVEATS
content:
<ul><li><b>Root Privileges:</b> <i>ip6tables</i> requires root privileges to modify firewall rules.</li><li><b>Volatile Rules:</b> Rules set with <i>ip6tables</i> are stored in the kernel's memory and are lost upon reboot. To make rules persistent, they must be saved using <i>ip6tables-save</i> and restored at boot using <i>ip6tables-restore</i>, or by using a persistence service like <i>ip6tables-persistent</i>.</li><li><b>Rule Order:</b> The order of rules within a chain is critical. Packet processing stops at the first matching rule, so broad rules should generally come after specific rules.</li><li><b>Complexity:</b> Misconfigurations can easily lead to unintended network access, security vulnerabilities, or complete network lockout. Careful planning and testing are essential.</li><li><b>Superseded by nftables:</b> In newer Linux distributions, <i>nftables</i> is the recommended successor, unifying firewall management for both IPv4 and IPv6. <i>ip6tables</i> may exist as a compatibility layer on top of <i>nftables</i> in these environments.</li></ul>


title: TABLES
content:
<i>ip6tables</i> organizes rules into distinct tables, each designed for a specific type of packet processing:<br><ul><li><b>filter</b>: The default table. Used for basic packet filtering (allowing or blocking packets). Contains <b>INPUT</b>, <b>FORWARD</b>, <b>OUTPUT</b> built-in chains.</li><li><b>nat</b>: Used for Network Address Translation. While less common for IPv6 due to its large address space, it can still be used for specific NAT scenarios. Contains <b>PREROUTING</b>, <b>OUTPUT</b>, <b>POSTROUTING</b> built-in chains.</li><li><b>mangle</b>: Used for altering packet headers (e.g., modifying TTL, TOS, or setting QoS marks). Contains <b>PREROUTING</b>, <b>INPUT</b>, <b>FORWARD</b>, <b>OUTPUT</b>, <b>POSTROUTING</b> built-in chains.</li><li><b>raw</b>: Used for processing packets before they are handled by connection tracking, primarily to exclude traffic from stateful inspection. Contains <b>PREROUTING</b>, <b>OUTPUT</b> built-in chains.</li><li><b>security</b>: Used for Mandatory Access Control (MAC) networking rules, often in conjunction with security frameworks like SELinux. Contains <b>INPUT</b>, <b>FORWARD</b>, <b>OUTPUT</b> built-in chains.</li></ul>


title: BUILT-IN CHAINS
content:
Each table has predefined built-in chains that correspond to specific points in the packet's journey through the network stack:<br><ul><li><b>INPUT</b>: For packets destined for the local host itself.</li><li><b>FORWARD</b>: For packets that are being routed through the local host to another destination.</li><li><li><b>OUTPUT</b>: For packets originating from the local host and going out.</li><li><b>PREROUTING</b>: For packets arriving at the network interface, before routing decisions. (Used in <b>nat</b>, <b>mangle</b>, <b>raw</b> tables)</li><li><b>POSTROUTING</b>: For packets leaving the network interface, after routing decisions. (Used in <b>nat</b>, <b>mangle</b> tables)</li></ul><br>Users can also create custom chains to organize rules more effectively.


title: TARGETS
content:
When a rule matches a packet, a <i>target</i> determines the action to take:<br><ul><li><b>ACCEPT</b>: Allows the packet to pass and continue its journey.</li><li><b>DROP</b>: Silently discards the packet. No error message is sent back to the sender.</li><li><b>REJECT</b>: Discards the packet and sends an appropriate error message (e.g., ICMPv6 Port Unreachable) back to the sender.</li><li><b>LOG</b>: Logs information about the packet to the system log (e.g., syslog). The packet then continues to traverse the chain.</li><li><b>RETURN</b>: Stops processing the current chain and returns to the calling chain (if it was a jump to a user-defined chain).</li><li><b>JUMP to custom chain</b>: Directs the packet to a user-defined chain for further processing.</li></ul>


title: HISTORY
content:
<i>ip6tables</i> is part of the Netfilter project, which provides stateful packet filtering, Network Address Translation (NAT), and other packet manipulation capabilities for the Linux kernel. It was developed to specifically handle IPv6 traffic, mirroring the functionality of <i>iptables</i> for IPv4. Prior to <i>ip6tables</i>, IPv6 firewalling was handled by less capable tools. Since its introduction, <i>ip6tables</i> has been the standard command for configuring IPv6 firewall rules on Linux systems for many years.<br><br>While still widely used and supported, newer Linux distributions are transitioning towards <i>nftables</i>, a more modern and flexible packet filtering framework that aims to supersede both <i>iptables</i> and <i>ip6tables</i> by providing a single command-line tool for managing both IPv4 and IPv6 rules with a more consistent syntax and improved performance.


title: SYNOPSIS
content:
<b>ip6tables-restore</b> [<i>-c</i>|<i>--counters</i>] [<i>-n</i>|<i>--noflush</i>] [<i>-v</i>|<i>--verbose</i>] [<i>-h</i>|<i>--help</i>] [<i>-t table</i>|<i>--table table</i>]


title: PARAMETERS
content:
<b><b>-c</b>, <b>--counters</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restore the byte and packet counters for each rule from the input. Without this option, counters are reset to zero upon restoration.<br><br><b><b>-n</b>, <b>--noflush</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not flush the existing table before restoring. This option is dangerous as it can lead to duplicated or inconsistent rules if not used carefully, as rules from the file will be appended to existing ones.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display verbose information during the restoration process, showing details of operations being performed.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message for the command and exit.<br><br><b><b>-t</b> <i>table</i>, <b>--table</b> <i>table</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restore only the specified table (e.g., 'filter', 'nat', 'mangle', 'raw', 'security'). If not specified, all tables found in the input are restored.<br><br>


title: DESCRIPTION
content:
<b>ip6tables-restore</b> is a utility used to restore IPv6 firewall rules (chains, rules, and tables) from a text file into the Linux kernel's <i>ip6tables</i> (Netfilter) framework. This file is typically generated by the <b>ip6tables-save</b> command. It reads rules from standard input or a specified file and applies them efficiently. This command is crucial for persistence, allowing administrators to save and reload firewall configurations across reboots or for quick deployment of complex rule sets.<br><br>By default, <b>ip6tables-restore</b> flushes all existing rules in the specified tables before loading new ones, ensuring a clean slate. It then parses the input file line by line, adding the rules to the appropriate tables and chains, making the restoration process robust and idempotent.


title: CAVEATS
content:
<ul><li>Requires root privileges to run successfully, as it modifies kernel-level firewall rules.</li><li>By default, it <i>flushes</i> all existing rules in the specified tables before loading new ones. Using <b>-n</b> (<b>--noflush</b>) bypasses this, which can result in rule duplication or unintended firewall behavior if the input file contains rules already present.</li><li>Incorrectly formatted input files can lead to errors or an incomplete/corrupted firewall configuration. Always ensure the input file was generated by <b>ip6tables-save</b> or adheres strictly to its output format.</li><li>While designed for robustness, it's prudent to test new rule sets in a controlled environment before deploying to production, especially when dealing with complex configurations.</li></ul>


title: STANDARD INPUT
content:
<b>ip6tables-restore</b> commonly reads its rule set from standard input. This enables powerful piping capabilities, such as `<i>ip6tables-save | ip6tables-restore</i>` (though redundant for a single host) or `<i>ssh user@remote 'ip6tables-save' | ip6tables-restore</i>` to replicate firewall rules between hosts.


title: ATOMIC OPERATIONS
content:
The command performs its operations in an atomic manner. This means that either all rules are successfully restored, or none are, preventing a partially configured or inconsistent firewall state if an error occurs during the process.


title: HISTORY
content:
<b>ip6tables-restore</b> is an integral part of the <i>ip6tables</i> suite, which in turn is a component of the broader Netfilter project for the Linux kernel. Its development paralleled the increasing adoption of IPv6, providing a consistent and robust method for managing IPv6 firewall rules, mirroring the functionality already established for IPv4 with <b>iptables-restore</b>. It ensures that complex firewall configurations can be saved, reloaded, and maintained efficiently across system reboots and deployments, reflecting the continuous evolution of Linux networking capabilities.


title: SYNOPSIS
content:
<b>ip6tables-save</b> [<b>-c</b>|<b>--counters</b>] [<b>-t</b> <i>table</i>|<b>--table</b> <i>table</i>] [<b>-f</b> <i>file</i>|<b>--file</b> <i>file</i>]


title: PARAMETERS
content:
<b><b>-c</b>, <b>--counters</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes the current values of packet and byte counters for each rule in the output. This can be useful for debugging, auditing, or monitoring traffic flow through specific firewall rules.<br><br><b><b>-t</b> <i>table</i>, <b>--table</b> <i>table</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which Netfilter table to dump. If this option is omitted, <i>ip6tables-save</i> will dump rules from all available tables. Common tables include <i>filter</i> (default firewalling), <i>nat</i> (Network Address Translation), <i>mangle</i> (packet alteration), <i>raw</i> (connection tracking exceptions), and <i>security</i> (SELinux integration).<br><br><b><b>-f</b> <i>file</i>, <b>--file</b> <i>file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the output directly to the specified <i>file</i> instead of standard output (stdout). While functionally equivalent to shell redirection (e.g., <code>ip6tables-save > file</code>), this option is provided for convenience.<br><br>


title: DESCRIPTION
content:
<i>ip6tables-save</i> is a utility used to dump the current IPv6 firewall rules from the Linux kernel's Netfilter tables to standard output. These rules are crucial for network security, defining how incoming and outgoing IPv6 traffic is processed. The command effectively creates a textual representation of the active firewall state, including all chains and rules within them. The output is specifically formatted to be directly compatible with the <i>ip6tables-restore</i> command, making it an indispensable tool for system administrators. It is commonly used for backing up existing firewall configurations, migrating rules between different Linux systems, or setting up persistent firewall rules that load automatically upon system boot, ensuring that your IPv6 network remains secured after a reboot.


title: CAVEATS
content:
<i>ip6tables-save</i> typically requires root privileges to access and read the kernel's Netfilter tables, otherwise it may report permission errors or no rules.<br>The output format is highly specific and optimized for consumption by <i>ip6tables-restore</i>. Manual editing of the saved file is possible but requires a deep understanding of <i>ip6tables</i> rule syntax and Netfilter table structure; incorrect modifications can lead to parsing errors or firewall misconfigurations.<br>The command only saves the active rules; it does not manage or save related kernel modules, network interfaces, or other system configurations that might be necessary for the rules to function correctly. These must be managed separately.


title: COMMON USAGE FOR PERSISTENCE
content:
A very common usage pattern for <i>ip6tables-save</i> is to save the current rules to a file to ensure persistence across system reboots. For example: <code>sudo ip6tables-save > /etc/ip6tables/rules.v6</code>. Subsequently, a system service (such as those provided by the <i>netfilter-persistent</i> package or a custom systemd unit) can be configured to load these saved rules automatically at boot time using <i>ip6tables-restore</i>.


title: OUTPUT FILE FORMAT
content:
The output file generated by <i>ip6tables-save</i> follows a specific, structured format. It begins with a line like <b>*<i>table_name</i></b> for each table (e.g., <b>*filter</b>, <b>*nat</b>), followed by definitions of user-defined chains (e.g., <b>:<i>CHAIN_NAME</i> <i>POLICY</i> [<i>PACKETS</i>:<i>BYTES</i>]</b>) and then the rules themselves (e.g., <b>-A <i>CHAIN_NAME</i> -i eth0 -j ACCEPT</b>). Each table section concludes with a <b>COMMIT</b> line, which signals <i>ip6tables-restore</i> to apply all the preceding rules for that specific table atomically. This structured format ensures reliable and efficient loading of firewall rules.


title: HISTORY
content:
<i>ip6tables-save</i> is an integral component of the Netfilter project, which provides the advanced packet filtering and NAT framework within the Linux kernel. It was developed as the IPv6 counterpart to the established <i>iptables-save</i> utility, responding to the growing adoption of IPv6 and the need for consistent firewall management across IP versions. Its introduction was crucial for enabling system administrators to persist and reproduce IPv6 firewall configurations reliably, making it a fundamental tool for maintaining robust network security policies on Linux systems since its inception as part of the ip6tables suite.


title: PARAMETERS
content:
<b>NAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The desired name for the new bonding interface (e.g., <i>bond0</i>).<br><br><b>mode <i><type></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the bonding policy. Common modes include <i>balance-rr</i> (round-robin), <i>active-backup</i> (failover), <i>balance-xor</i> (XOR sum), <i>broadcast</i>, <i>802.3ad</i> (LACP), <i>balance-tlb</i> (transmit load balancing), <i>balance-alb</i> (adaptive load balancing).<br><br><b>miimon <i><interval></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Frequency in milliseconds to check the link status of each slave. Set to 0 to disable MII monitoring.<br><br><b>updelay <i><delay></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delay in milliseconds before bringing a slave online after its link is detected.<br><br><b>downdelay <i><delay></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delay in milliseconds before taking a slave offline after its link is lost.<br><br><b>lacp_rate <i><rate></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the rate at which LACPDU packets are transmitted to partners. Can be <i>slow</i> (default, 30 seconds) or <i>fast</i> (1 second). Only valid for <i>802.3ad</i> mode.<br><br><b>xmit_hash_policy <i><policy></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;For <i>balance-xor</i> and <i>802.3ad</i> modes, specifies how outgoing traffic is distributed. Options include <i>layer2</i>, <i>layer2+3</i>, <i>layer3+4</i>.<br><br><b>arp_interval <i><interval></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Frequency in milliseconds for ARP link monitoring. Set to 0 to disable.<br><br><b>arp_ip_target <i><IP_address></i>[,<i><IP_address></i>...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more IP addresses to target for ARP link monitoring. Required if <i>arp_interval</i> is set.<br><br><b>primary <i><slave_name></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a preferred slave interface. This interface will be used if available, even if other slaves are up.<br><br><b>fail_over_mac <i><policy></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Determines MAC address handling on failover in <i>active-backup</i> mode. Can be <i>none</i>, <i>active</i>, <i>follow</i>.<br><br><b>primary_reselect <i><policy></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Policy for reselecting the primary slave. Can be <i>always</i>, <i>better</i>, <i>failure</i>.<br><br>


title: DESCRIPTION
content:
The <b>ip aggcreate</b> command, part of the <b>iproute2</b> utility suite, is used to dynamically create a new network bonding (or link aggregation) interface in the Linux kernel. A bonding interface aggregates multiple network interfaces (slaves) into a single logical interface, providing benefits such as load balancing, fault tolerance, and increased bandwidth.<br><br>This command allows administrators to specify various bonding parameters at creation time, such as the bonding mode, link monitoring options, and LACP configuration. Once created, individual physical interfaces can be added as slaves to this new bond interface using the <b>ip link set</b> command. This approach offers a flexible way to manage network aggregation without requiring manual editing of configuration files or system reboots, making it a powerful tool for configuring resilient and high-performance network setups.


title: CAVEATS
content:
<ul><li>The <i>bonding</i> kernel module must be loaded for this command to function.</li><li>The created bond interface is <i>not</i> persistent across reboots unless configured via system-specific network configuration files (e.g., <i>/etc/network/interfaces</i>, NetworkManager profiles, or systemd-networkd).</li><li><b>ip aggcreate</b> only creates the bond device; physical interfaces must be added as slaves using <b>ip link set <i>&lt;slave_dev&gt;</i> master <i>&lt;bond_dev&gt;</i></b>.</li><li>Incorrect bonding modes or parameters can lead to network connectivity issues or performance degradation.</li></ul>


title: BONDING MODES
content:
The <i>mode</i> parameter is critical and dictates how the bond behaves. Each mode offers different features for redundancy and load balancing. For example, <i>active-backup</i> is for simple failover, while <i>802.3ad</i> (LACP) requires switch support for advanced aggregation and traffic distribution.


title: SLAVE INTERFACES
content:
After creating the bond with <b>ip aggcreate</b>, you must assign physical network interfaces as slaves to it. This is done using the <b>ip link set</b> command. For example: <b>ip link set</b> <i>eth0</i> <b>master</b> <i>bond0</i>. These slave interfaces will then be managed by the bonding driver.


title: LINK MONITORING
content:
Parameters like <i>miimon</i>, <i>arp_interval</i>, and <i>arp_ip_target</i> are essential for reliable link monitoring. These mechanisms ensure the bond can react quickly to link failures (e.g., cable unplugged, switch port down) and maintain network connectivity by switching to healthy slave interfaces.


title: HISTORY
content:
The <b>iproute2</b> utility suite, which includes <b>ip aggcreate</b>, was developed to replace older network configuration tools like <b>ifconfig</b> and <b>route</b>. It provides a more robust, flexible, and powerful way to manage network interfaces, routing, and traffic control. The <b>aggcreate</b> subcommand specifically addresses the need for dynamic creation and configuration of bonding interfaces, leveraging the kernel's bonding driver capabilities. Its integration into <b>iproute2</b> reflects a shift towards a more unified and modern network management framework in Linux, offering granular control over network device parameters.


title: SYNOPSIS
content:
<i>ipcalc</i> [<i>options</i>] <i><IP_address_or_range></i> [<i>netmask_or_prefix</i>]<br><i>ipcalc</i> [<i>options</i>] <i><conversion_argument></i>


title: PARAMETERS
content:
<b><b>-b</b>, <b>--broadcast</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the broadcast address of the network.<br><br><b><b>-n</b>, <b>--network</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the network address (or subnet ID).<br><br><b><b>-m</b>, <b>--netmask</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the network mask in dotted-decimal format.<br><br><b><b>-p</b>, <b>--prefix</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the prefix length (CIDR notation).<br><br><b><b>-h</b>, <b>--hostrange</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the range of IP addresses assignable to hosts within the network.<br><br><b><b>-r</b>, <b>--longrange</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the first and last usable IP address in the host range.<br><br><b><b>-c</b>, <b>--class</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the network class (e.g., A, B, C, D, E).<br><br><b><b>-s</b>, <b>--split</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Split the given network into smaller subnets. Requires an additional argument for the new prefix length.<br><br><b><b>-d</b>, <b>--dot</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output IP addresses in dotted decimal format (default for IP addresses).<br><br><b><b>-x</b>, <b>--hex</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output IP addresses in hexadecimal format.<br><br><b><b>-B</b>, <b>--binary</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output IP addresses in binary format.<br><br><b><b>--hosts</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the total number of addresses in the network.<br><br><b><b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display all calculated network information (network, broadcast, netmask, prefix, hostrange, hosts). This is often the default behavior when no specific flags are used.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
<i>ipcalc</i> is a versatile command-line utility for performing calculations and conversions related to IP networks, primarily IPv4. It can determine various network properties such as the network address, broadcast address, netmask, host range, and the number of usable hosts from a given IP address and CIDR prefix or netmask. Beyond basic network calculations, <i>ipcalc</i> also supports conversions between different IP address representations (dotted-decimal, hexadecimal, binary) and can provide details like the network class or split a larger network into smaller subnets. It's a fundamental tool for network administrators and engineers for planning, troubleshooting, and understanding IP addressing schemes.


title: CAVEATS
content:
Functionality and available options for <i>ipcalc</i> can vary slightly depending on the specific package and Linux distribution it's sourced from (e.g., part of <i>initscripts</i> or a standalone utility). Traditional <i>ipcalc</i> primarily supports IPv4 addresses; IPv6 support is not standard across all versions.


title: USAGE EXAMPLES
content:
<i>ipcalc</i> can be used to quickly determine network parameters for a given IP address and netmask/CIDR. For instance, to get all details for a specific IP and prefix: <b>ipcalc 192.168.1.5/24</b>.<br>To specify IP and netmask separately: <b>ipcalc 192.168.1.5 255.255.255.0</b>.<br>To convert an IP address to binary: <b>ipcalc -B 10.0.0.1</b>.<br>To split a network into smaller subnets: <b>ipcalc --split 192.168.0.0/22 24</b> will show all /24 subnets within the /22 range.


title: HISTORY
content:
<i>ipcalc</i> has been a long-standing, simple, and effective command-line tool in the Linux ecosystem. It was historically often bundled with network initialization scripts (<i>initscripts</i>) or provided as a standalone utility package. Its straightforward approach to IP calculations has kept it relevant for quick network analysis and planning, even with the advent of more comprehensive tools like <i>iproute2</i>.


title: SYNOPSIS
content:
<b>ipcmk</b> { <b>-M</b> <i>shmkey</i> | <b>-Q</b> <i>msgkey</i> | <b>-S</b> <i>semkey</i> } [<b>-p</b> <i>mode</i>]<br><b>ipcmk</b> <b>-P</b> <i>pathname</i> { <b>-M</b> | <b>-Q</b> | <b>-S</i> } [<b>-p</b> <i>mode</i>]


title: PARAMETERS
content:
<b><b>-M</b> <i>shmkey</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a shared memory segment using <i>shmkey</i>. If <i>shmkey</i> is 0 (<i>IPC_PRIVATE</i>), a new, unique key is generated.<br><br><b><b>-Q</b> <i>msgkey</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a message queue using <i>msgkey</i>. If <i>msgkey</i> is 0 (<i>IPC_PRIVATE</i>), a new, unique key is generated.<br><br><b><b>-S</b> <i>semkey</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a semaphore array using <i>semkey</i>. If <i>semkey</i> is 0 (<i>IPC_PRIVATE</i>), a new, unique key is generated.<br><br><b><b>-P</b> <i>pathname</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate an IPC key using `ftok(3)` from the specified <i>pathname</i>. This option is mutually exclusive with directly providing <i>shmkey</i>, <i>msgkey</i>, or <i>semkey</i> (i.e., using a non-zero key directly with <b>-M</b>, <b>-Q</b>, or <b>-S</b>).<br><br><b><b>-p</b> <i>mode</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the access permissions for the newly created IPC object. <i>mode</i> should be an octal number, similar to `chmod(1)`. The default permissions are typically 0600 (read/write for owner only).<br><br>


title: DESCRIPTION
content:
<b>ipcmk</b> is a command-line utility used to create new System V Inter-Process Communication (IPC) objects.<br>These objects include shared memory segments, message queues, and semaphore arrays. It serves as a low-level tool primarily for testing IPC mechanisms, debugging applications that rely on System V IPC, or for quickly setting up an IPC resource without the need to write custom C code. Users can specify the type of object to create, its unique key, and its access permissions. Creating IPC objects typically requires appropriate system permissions (e.g., root privileges or belonging to a specific user/group) as these are system-wide resources.


title: CAVEATS
content:
Creation of IPC objects typically requires root privileges or appropriate permissions for the calling user/group.<br>System V IPC objects persist in the kernel even after the creating process exits. They are only removed explicitly (e.g., using `ipcrm(1)`) or upon system reboot. Unmanaged objects can lead to resource exhaustion.<br>When using `ftok(3)` via <b>-P</b>, the specified <i>pathname</i> must exist and be accessible to `ftok` to generate a valid key.<br>IPC keys are system-wide. Conflicts can occur if a key is chosen that is already in use by another application. Using <i>IPC_PRIVATE</i> (key 0) or `ftok(3)` helps to mitigate key conflicts.


title: <I>IPC KEYS EXPLAINED</I>
content:
System V IPC objects are identified by a unique integer key. Processes use this key to gain access to or attach to the same IPC object. Keys can be explicitly specified (e.g., a specific integer), generated using `ftok(3)` from a pathname and a project ID, or automatically assigned by the system if `<i>IPC_PRIVATE</i>` (value 0) is used. Using `<i>IPC_PRIVATE</i>` is generally safer for temporary or single-instance objects as it guarantees a unique key and avoids potential conflicts.


title: <I>OBJECT PERSISTENCE</I>
content:
A critical characteristic of System V IPC objects is their persistence. Unlike typical process-specific resources like file descriptors or stack memory, IPC objects reside in the kernel's memory and persist even after the creating process terminates. They remain available for other processes to use until explicitly removed using `ipcrm(1)` or until the system is rebooted. This persistence is fundamental for inter-process communication but also necessitates careful management to prevent resource leaks and potential system resource exhaustion.


title: HISTORY
content:
<b>ipcmk</b> is an integral part of the System V Inter-Process Communication (IPC) suite, which originates from AT&T System V Unix, dating back to the early 1980s. Alongside `ipcs` (to display IPC status) and `ipcrm` (to remove IPC objects), it forms the basic set of utilities for managing System V IPC resources. These commands have been a standard feature on Unix-like operating systems for decades and are typically provided by the `util-linux` package on modern Linux distributions.


title: SYNOPSIS
content:
<b>ipcrm</b> {<b>-m</b> <I>shmid</I> | <b>-M</b> <I>shmkey</I>}<br><b>ipcrm</b> {<b>-q</b> <I>msgid</I> | <b>-Q</b> <I>msgkey</I>}<br><b>ipcrm</b> {<b>-s</b> <I>semid</I> | <b>-S</b> <I>semkey</I>}<br><b>ipcrm</b> {<I>shm</I> | <I>msg</I> | <I>sem</I>} <I>id</I>...


title: PARAMETERS
content:
<b><b>-m</b> <I>shmid</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the shared memory segment identified by its numeric ID. This is a common way to specify the object for deletion.<br><br><b><b>-M</b> <I>shmkey</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the shared memory segment identified by its symbolic key. Keys are typically used during creation.<br><br><b><b>-q</b> <I>msgid</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the message queue identified by its numeric ID.<br><br><b><b>-Q</b> <I>msgkey</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the message queue identified by its symbolic key.<br><br><b><b>-s</b> <I>semid</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the semaphore set identified by its numeric ID.<br><br><b><b>-S</b> <I>semkey</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the semaphore set identified by its symbolic key.<br><br><b><I>shm</I> <I>id</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes one or more shared memory segments specified by their numeric IDs. This is a POSIX-compliant form where the type is given explicitly.<br><br><b><I>msg</I> <I>id</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes one or more message queues specified by their numeric IDs. This is a POSIX-compliant form.<br><br><b><I>sem</I> <I>id</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes one or more semaphore sets specified by their numeric IDs. This is a POSIX-compliant form.<br><br>


title: DESCRIPTION
content:
The <b>ipcrm</b> command is used to remove System V interprocess communication (IPC) objects, specifically shared memory segments, message queues, and semaphore sets. These objects are created by applications for communication and synchronization between processes. Over time, or due to abnormal termination of applications, these objects can become orphaned or unused, consuming system resources.<br><br><b>ipcrm</b> provides a way to delete these objects either by their unique integer ID (obtained via the <b>ipcs</b> command) or by a symbolic key (used during creation). It's crucial for system administrators and developers to manage IPC resources to prevent resource leaks and ensure system stability. Removal is typically done by the owner of the IPC object or the superuser.


title: CAVEATS
content:
Removing an IPC object can disrupt or crash running applications that are actively using it. Always ensure the object is no longer needed before removal. Only the owner of an IPC object or the superuser (root) can remove it. Incorrect usage can lead to data loss or system instability.


title: FINDING IPC IDS/KEYS
content:
To identify which IPC objects are present on a system, use the <b>ipcs(1)</b> command. It displays detailed information about shared memory segments, message queues, and semaphore sets, including their IDs, keys, owner, and permissions. For example, <I>ipcs -m</I> lists shared memory segments, <I>ipcs -q</I> lists message queues, and <I>ipcs -s</I> lists semaphore sets. The output of <b>ipcs</b> is essential for obtaining the correct IDs or keys to use with <b>ipcrm</b>.


title: PERMISSIONS
content:
To successfully remove an IPC object, the user executing <b>ipcrm</b> must either be the effective owner of the object or have superuser (root) privileges. If the necessary permissions are not met, the command will fail and typically report a 'Permission denied' error. This security measure prevents unauthorized removal of critical IPC resources.


title: HISTORY
content:
<b>ipcrm</b> is part of the System V IPC utilities, which have been a standard component of Unix-like operating systems since the System V release of Unix in the early 1980s. Its core functionality has remained consistent over decades, providing a fundamental tool for managing interprocess communication resources.


title: SYNOPSIS
content:
<b>ipcs</b> [<i>options</i>]<br><br>Common usage examples:<br><b>ipcs</b> <b>-a</b><br><b>ipcs</b> <b>-m</b> <b>-p</b> <b>-t</b>


title: PARAMETERS
content:
<b><b>-s</b>, <b>--semaphores</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays information about <i>semaphore arrays</i>.<br><br><b><b>-q</b>, <b>--queues</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays information about <i>message queues</i>.<br><br><b><b>-m</b>, <b>--shmems</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays information about <i>shared memory segments</i>.<br><br><b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A shorthand option to display information about <i>all three</i> IPC facilities: shared memory, message queues, and semaphores. (Equivalent to <b>-s -q -m</b>).<br><br><b><b>-p</b>, <b>--pid</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the <i>process IDs</i> (PIDs) of the last operations on the IPC resources. For shared memory, it shows the PIDs of the last <b>shmat</b>/<b>shmdt</b> operations. For message queues, the PIDs of the last <b>msgsnd</b>/<b>msgrcv</b>. For semaphores, typically the last <b>semop</b>.<br><br><b><b>-l</b>, <b>--limits</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the <i>system-wide limits</i> for IPC facilities as configured in the kernel. This includes maximum number of segments/queues/arrays, maximum size, etc.<br><br><b><b>-t</b>, <b>--time</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the <i>time of last operations</i> on the IPC resources (e.g., last attach/detach for shared memory, last send/receive for message queues, last semaphore operation).<br><br><b><b>-c</b>, <b>--creator</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>creator</i> (process that created the resource) and <i>owner</i> (current owner) of the IPC facilities.<br><br><b><b>-u</b>, <b>--users</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the <i>user ID</i> (UID) and <i>group ID</i> (GID) of the owner and creator of the IPC facilities.<br><br><b><b>-i</b> <i>id</i>, <b>--id</b> <i>id</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed information about a <i>specific IPC resource</i> identified by its unique ID (e.g., shared memory ID, message queue ID, or semaphore array ID). This ID can be obtained from a general <b>ipcs</b> listing.<br><br><b><b>-k</b>, <b>--key</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>IPC key</i> associated with each resource. Keys are used by applications to obtain an ID for an IPC resource when creating or accessing it.<br><br>


title: DESCRIPTION
content:
The <b>ipcs</b> command provides a snapshot of interprocess communication (IPC) facilities currently in use on a Linux system. These facilities primarily include <i>shared memory segments</i>, <i>message queues</i>, and <i>semaphore arrays</i>, as managed by the System V IPC mechanism.<br><br>It is an essential tool for <i>system administrators</i> and <i>developers</i> to monitor, debug, and manage applications that rely on IPC. By listing details such as resource IDs, keys, owners, permissions, sizes, and the number of attached processes, <b>ipcs</b> helps identify potential resource leaks, monitor usage, and troubleshoot performance issues related to IPC resources.


title: CAVEATS
content:
Permissions: To see all IPC facilities on the system, <i>root privileges</i> are often required. Without them, <b>ipcs</b> might only show resources owned by the current user or globally readable ones.<br><br>Output Format Variations: The exact column headers and format of the output can vary slightly between different Unix-like operating systems, Linux distributions, or even kernel versions. Always consult your system's <b>man ipcs</b> for precise details.<br><br>System V IPC Only: <b>ipcs</b> reports exclusively on System V IPC facilities. <i>POSIX IPC</i> mechanisms (e.g., <b>shm_open()</b>, <b>mq_open()</b>, <b>sem_open()</b>) are <b>not</b> reported by this command. For POSIX IPC, you might need to inspect files in <b>/dev/shm</b> or similar locations.


title: UNDERSTANDING OUTPUT COLUMNS
content:
When <b>ipcs</b> lists IPC resources, it provides several columns of information. Common ones include:<br><b>ID</b>: The unique identifier for the IPC resource (e.g., <i>shmid</i>, <i>msqid</i>, <i>semid</i>).<br><b>KEY</b>: The IPC key used to access the resource.<br><b>OWNER</b>: The user ID (UID) of the owner.<br><b>PERMS</b>: The access permissions (octal) for the resource.<br><b>BYTES</b> (for shared memory): The size of the shared memory segment in bytes.<br><b>NATTCH</b> (for shared memory): The number of processes currently attached to the shared memory segment.<br><b>LAST_OP</b> (for queues/semaphores): The PID of the process that performed the last operation.<br><b>CPID</b>/<b>LPID</b> (for shared memory): The PID of the creator and last attach/detach process, respectively.<br><b>MSGQBYTES</b> (for queues): The maximum number of bytes allowed in the message queue.


title: COMMON USE CASES
content:
<b>ipcs</b> is frequently used for:<br>1.  <i>Debugging Applications</i>: Identifying if IPC resources are being created correctly, if processes are attaching/detaching as expected, or if queues are filling up.<br>2.  <i>Resource Management</i>: Checking for 'orphaned' IPC resources that might remain after a process crashes, which can consume system memory or other limits.<br>3.  <i>Performance Monitoring</i>: Assessing the number of attached processes to shared memory segments or the size of message queues to identify potential bottlenecks.<br>4.  <i>System-Wide Limits</i>: Using <b>ipcs -l</b> to verify current kernel IPC limits and compare them against application requirements or system capacity.


title: HISTORY
content:
The <b>ipcs</b> command is a legacy utility that originated with <i>System V Unix</i>, which introduced the System V IPC mechanisms (shared memory, message queues, and semaphores) as a fundamental means for interprocess communication. It has been a core component of Linux since its early development, providing a crucial interface for inspecting the status of these kernel-managed resources. Its design and functionality have remained largely consistent over the decades, reflecting its foundational role in Unix-like operating systems.


title: SYNOPSIS
content:
<b>iperf</b> <i>-s</i> [<i>options</i>]<br><b>iperf</b> <i>-c</i> <i>&lt;host&gt;</i> [<i>options</i>]<br><i>(Common options used for both TCP and UDP modes)</i>


title: PARAMETERS
content:
<b><i>-s</i>, <i>--server</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run <b>iperf</b> in server mode, listening for incoming client connections.<br><br><b><i>-c</i>, <i>--client</i> <i>&lt;host&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run <b>iperf</b> in client mode, connecting to the specified <i>&lt;host&gt;</i>.<br><br><b><i>-u</i>, <i>--udp</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use UDP instead of TCP for the test. Default is TCP.<br><br><b><i>-p</i>, <i>--port</i> <i>&lt;port&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the port number for the server to listen on or for the client to connect to. Default is 5201.<br><br><b><i>-i</i>, <i>--interval</i> <i>&lt;seconds&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Report statistics at fixed <i>&lt;seconds&gt;</i> intervals rather than only at the end.<br><br><b><i>-t</i>, <i>--time</i> <i>&lt;seconds&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The time in <i>&lt;seconds&gt;</i> to transmit data. Default is 10 seconds.<br><br><b><i>-n</i>, <i>--bytes</i> <i>&lt;n[KMGT]&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes to transmit. For example, <i>1G</i> for 1 Gigabyte.<br><br><b><i>-P</i>, <i>--parallel</i> <i>&lt;num_streams&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of parallel client streams to run. Useful for testing multi-threaded applications or overcoming single-stream limitations.<br><br><b><i>-R</i>, <i>--reverse</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run a reverse test mode, where the server sends data to the client.<br><br><b><i>-w</i>, <i>--window</i> <i>&lt;size[KMGT]&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;TCP window size or socket buffer size. Can significantly affect TCP throughput over high-latency or high-bandwidth links.<br><br><b><i>-b</i>, <i>--bandwidth</i> <i>&lt;n[KMGT]&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Target bandwidth in bits/sec. Primarily used for UDP tests to specify the sending rate. Can also be used for TCP pacing in <b>iperf3</b>.<br><br><b><i>-J</i>, <i>--json</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output results in JSON format (<b>iperf3</b> only). Ideal for programmatic parsing.<br><br><b><i>-h</i>, <i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help information and exit.<br><br>


title: DESCRIPTION
content:
<b>iperf</b> is a powerful command-line tool designed for active measurements of the maximum achievable bandwidth on IP networks. It operates in a client-server model, where one instance acts as a server listening for connections and another as a client initiating data transfers. <b>iperf</b> supports both TCP and UDP protocols, allowing for comprehensive network analysis. It can measure throughput, jitter (for UDP), and packet loss (for UDP), making it an invaluable utility for network troubleshooting, capacity planning, and validating network performance after infrastructure changes. Users can tune various parameters such as port numbers, test duration, buffer sizes, and the number of parallel streams to simulate different network conditions. It's widely used across various operating systems, including Linux, Windows, and macOS.


title: CAVEATS
content:
There are two main versions: <b>iperf2</b> and <b>iperf3</b>. They are distinct projects, not fully compatible, and use different sets of options. <b>iperf3</b> is generally recommended for modern use.<br>Firewalls must be configured to allow traffic on the chosen port (default 5201).<br>Results represent the maximum achievable bandwidth under test conditions and might not reflect typical application performance due to other network traffic or system overheads.<br>High-speed tests might be limited by CPU performance on either the client or server, or by specific OS network stack tunings.


title: COMMON USE CASES
content:
Measuring throughput between two hosts or within a cloud environment.<br>Testing network link capacity after infrastructure upgrades or changes.<br>Diagnosing bandwidth bottlenecks or network congestion issues.<br>Benchmarking network performance of virtual machines or cloud instances.<br>Assessing UDP characteristics like jitter and packet loss for real-time applications (e.g., VoIP, video streaming).


title: INTERPRETING RESULTS
content:
When interpreting <b>iperf</b> output, pay attention to the <i>Interval</i>, <i>Transfer</i>, and <i>Bandwidth</i> columns for throughput. For UDP tests, <i>Jitter</i> and <i>Lost/Total Datagrams</i> are crucial indicators of real-time performance. Always ensure that neither the client nor the server's CPU is saturated during the test, as this can artificially limit reported bandwidth. For TCP tests, a high number of <i>retransmits</i> indicates network issues like congestion or packet loss, which degrade performance even if raw bandwidth looks good.


title: HISTORY
content:
<b>iperf</b> was originally developed by the Distributed Systems and Networks Research Group (DSNRG) at NLANR. The original project, now often referred to as <b>iperf2</b>, continues to be maintained independently. A significant rewrite, <b>iperf3</b>, was later developed by ESnet (Energy Sciences Network). <b>iperf3</b> introduced new features like JSON output, authentication, and improved multi-threading support, making it better suited for modern network environments and high-speed testing. While <b>iperf2</b> remains relevant for some legacy systems, <b>iperf3</b> is generally preferred for new deployments and advanced network analysis.


title: SYNOPSIS
content:
<b>iperf3</b> [<i>OPTIONS</i>]<br><b>iperf3 -s</b> [<i>OPTIONS</i>] <i>(Server mode)</i><br><b>iperf3 -c</b> <i>&lt;server_address&gt;</i> [<i>OPTIONS</i>] <i>(Client mode)</i>


title: PARAMETERS
content:
<b><b>-s</b>, <b>--server</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run in server mode. <i>iperf3</i> will listen for incoming client connections.<br><br><b><b>-c</b>, <b>--client</b> <i>&lt;host&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run in client mode, connecting to the specified <i>host</i> (server address or hostname).<br><br><b><b>-p</b>, <b>--port</b> <i>&lt;N&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the port number for the server to listen on or for the client to connect to. The default port is <i>5201</i>.<br><br><b><b>-P</b>, <b>--parallel</b> <i>&lt;N&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of parallel client streams to run. This can significantly increase throughput on high-latency links.<br><br><b><b>-u</b>, <b>--udp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use <b>UDP</b> instead of <b>TCP</b>. When used with client mode, a target bandwidth (<b>-b</b>) is usually specified.<br><br><b><b>-b</b>, <b>--bandwidth</b> <i>&lt;N[KMGT]></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Target bandwidth in bits/sec for <b>UDP</b> tests (e.g., <i>100M</i> for 100 Mbps). Default for <b>UDP</b> is <i>1 Mbit/sec</i>.<br><br><b><b>-t</b>, <b>--time</b> <i>&lt;N&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Time in seconds to transmit data. Default is <i>10 seconds</i>.<br><br><b><b>-n</b>, <b>--bytes</b> <i>&lt;N[KMGT]></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of bytes to transmit. Alternative to <b>--time</b>.<br><br><b><b>-R</b>, <b>--reverse</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run in reverse mode. The server sends data, and the client receives it. Useful for testing upload bandwidth from the client's perspective.<br><br><b><b>-J</b>, <b>--json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output results in <b>JSON</b> format. Useful for scripting and parsing results programmatically.<br><br><b><b>-i</b>, <b>--interval</b> <i>&lt;N&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print periodic reports every <i>N</i> seconds during the test.<br><br><b><b>-w</b>, <b>--window</b> <i>&lt;N[KMGT]></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set <b>TCP</b> window size (socket buffer size). Affects <b>TCP</b> performance over high-latency links.<br><br><b><b>-B</b>, <b>--bind</b> <i>&lt;host&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Bind to a specific local interface (IP address) for incoming/outgoing connections.<br><br><b><b>--bidir</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run a bidirectional test simultaneously (both client and server send and receive data).<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show <i>iperf3</i> version information.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message and exit.<br><br>


title: DESCRIPTION
content:
<i>iperf3</i> is a powerful command-line utility designed for active measurements of the maximum achievable bandwidth on IP networks. It allows users to test network throughput, loss, and jitter between two endpoints, one acting as a server and the other as a client.<br><br>It supports both <b>TCP</b> and <b>UDP</b> protocols, offering various options to tune test parameters such as connection duration, target bandwidth, and number of parallel streams. <i>iperf3</i> is an essential tool for network administrators and engineers for troubleshooting network bottlenecks, validating network infrastructure, and capacity planning by simulating different traffic loads.


title: CAVEATS
content:
<b>-</b> Requires <i>iperf3</i> to be installed and running on <b>both</b> client and server machines.<br><b>-</b> Firewalls (e.g., <i>firewalld</i>, <i>ufw</i>, network ACLs) must allow traffic on the chosen port (default <i>5201</i>) for the test to succeed.<br><b>-</b> Results can be influenced by CPU load, disk I/O, OS buffer settings, and other network traffic on participating hosts.<br><b>-</b> <b>UDP</b> tests may show high bandwidth even with significant packet loss, as <i>iperf3</i> measures the rate at which packets are sent/received, not necessarily successfully delivered.


title: TCP VS. UDP TESTING
content:
When using <b>TCP</b> (the default), <i>iperf3</i> measures the achievable maximum throughput, reflecting how much data can be reliably transmitted. For <b>UDP</b>, it measures the sending rate and reports statistics on jitter and packet loss, which are crucial for real-time applications like voice and video. <b>UDP</b> tests often require setting a target bandwidth (<b>-b</b>).


title: CLIENT/SERVER OPERATION
content:
<i>iperf3</i> always requires one instance to run as a <b>server</b> (listening for connections with <b>-s</b>) and another as a <b>client</b> (initiating connections to the server with <b>-c</b>). This dual-role setup allows for point-to-point network performance evaluation.


title: INTERPRETING RESULTS
content:
The output typically includes bandwidth in bits/sec, duration of the test, and amount of data transferred. For <b>UDP</b>, additional metrics like jitter (variation in packet delay) and packet loss percentage are reported. High packet loss or jitter in <b>UDP</b> indicates network congestion or poor quality, while low <b>TCP</b> bandwidth might point to bottlenecks, insufficient buffer sizes, or network path issues.


title: HISTORY
content:
<i>iperf3</i> is a significant redesign of the original <i>iperf</i> (now often referred to as <i>iperf2</i>). It was developed by ESnet to address some limitations and simplify the codebase of its predecessor. Key improvements include a more modern architecture, <b>JSON</b> output for easier parsing, and support for a single connection bidirectional testing. Its development aims to provide a robust and extensible tool for modern network performance measurement.


title: SEE ALSO
content:
<b>iperf</b>(1) <i>(older version, also known as iperf2)</i>, <b>netcat</b>(1) <i>(nc)</i>, <b>ping</b>(8), <b>traceroute</b>(8), <b>ss</b>(8), <b>tcpdump</b>(1)


title: SYNOPSIS
content:
<b>ipfs</b> <i>[global options]</i> <b><command></b> <i>[command options] [arguments]</i><br><b>ipfs daemon</b> <i>[options]</i><br><b>ipfs init</b> <i>[options]</i>


title: PARAMETERS
content:
<b><b>--api</b> <i>&lt;address&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the API server address to connect to (e.g., <i>/ip4/127.0.0.1/tcp/5001</i>).<br><br><b><b>--encoding</b> <i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the encoding type for API responses (e.g., <i>json</i>, <i>xml</i>, <i>csv</i>). Defaults to <i>json</i>.<br><br><b><b>--json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the output to be JSON format, overriding default encoding.<br><br><b><b>--timeout</b> <i>&lt;duration&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a timeout for the command execution (e.g., <i>5s</i>, <i>1m</i>, <i>1h</i>).<br>A global option that applies to all commands.<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug messages for troubleshooting purposes.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the main <b>ipfs</b> command or a specific subcommand.<br><br>


title: DESCRIPTION
content:
The <b>ipfs</b> command-line interface provides tools to interact with the InterPlanetary File System (IPFS) daemon. IPFS is a peer-to-peer network and protocol designed to create a permanent, decentralized method of storing and sharing files. It utilizes content-addressing, meaning each file is uniquely identified by its cryptographic hash, rather than its location. This allows content to be retrieved from any node that stores it, enhancing resilience against censorship and improving efficiency for distributed content delivery.<br><br>The <b>ipfs</b> command enables users to perform a wide range of operations, including adding files to their local IPFS repository (e.g., <b>ipfs add</b>), retrieving content from the network (e.g., <b>ipfs get</b>, <b>ipfs cat</b>), managing their local IPFS node, interacting with other peers, and administering the IPFS daemon (e.g., <b>ipfs daemon</b>, <b>ipfs init</b>). It is a fundamental tool for engaging with the decentralized web.


title: CAVEATS
content:
Most <b>ipfs</b> commands require a running IPFS daemon in the background, which can consume significant system resources (CPU, RAM, disk I/O, and network bandwidth). Content added to IPFS is not automatically made permanent across the network; it must be explicitly 'pinned' (e.g., with <b>ipfs pin add</b>) to ensure other nodes retain it and prevent garbage collection. The decentralized nature means performance can vary based on network conditions and the availability of peers hosting the desired content.


title: CONTENT ADDRESSING VS. LOCATION ADDRESSING
content:
Traditional web protocols like HTTP address content by its <i>location</i> (where it's stored on a server). IPFS, conversely, addresses content by its <i>cryptographic hash</i> (what it is). This fundamental difference makes IPFS content immutable, verifiable, and enables distributed retrieval, as any node with the content can serve it.


title: DISTRIBUTED NETWORK
content:
IPFS operates as a distributed peer-to-peer network. Data is fragmented and stored across multiple nodes, enhancing availability and resilience. When you request content, the network identifies which peers have the data and retrieves it directly from them, rather than from a single central server.


title: HISTORY
content:
IPFS was conceptualized and designed by Juan Benet at Protocol Labs in 2014. The first Go implementation was released in 2015, quickly gaining traction within the decentralized web community. It aims to complement or potentially replace HTTP for certain use cases, offering a more resilient and censorship-resistant way to distribute content. Over the years, <b>ipfs</b> has become a foundational technology for many Web3 applications, decentralized storage solutions, and content delivery networks, continuously evolving with contributions from a global open-source community.


title: SYNOPSIS
content:
<i><B>ipmitool</B></i> [<i><B>-I <interface></B></i>] [<i><B>-H <hostname></B></i>] [<i><B>-U <username></B></i>] [<i><B>-P <password></B></i>] [<i><B>-p <port></B></i>] [<i><B>-L <level></B></i>] [<i><B>-C <cipher_suite></B></i>] [<i><B>-k <key></B></i>] [<i><B>-h</B></i>] [<i><B>-v</B></i>] <i><B><command></B></i> [<i><B><command_arguments></B></i>...]


title: PARAMETERS
content:
<b><i><B>-I <interface></B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IPMI interface to use (e.g., <i><B>lanplus</B></i> for remote access, <i><B>kcs</B></i> for local KCS). Common options include <i><B>lan</B></i>, <i><B>lanplus</B></i>, <i><B>kcs</B></i>, <i><B>smic</B></i>, <i><B>ssw</B></i>, <i><B>open</B></i>.<br><br><b><i><B>-H <hostname></B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the remote BMC hostname or IP address for <i><B>lan</B></i> or <i><B>lanplus</B></i> interface operations.<br><br><b><i><B>-U <username></B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the username for authentication to the remote BMC.<br><br><b><i><B>-P <password></B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the password for authentication to the remote BMC. It's recommended to avoid plaintext passwords directly on the command line.<br><br><b><i><B>-p <port></B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the destination UDP port for remote IPMI connections (default is <i><B>623</B></i>).<br><br><b><i><B>-L <level></B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the privilege level for the IPMI session (e.g., <i><B>user</B></i>, <i><B>operator</B></i>, <i><B>administrator</B></i>, <i><B>oem</B></i>).<br><br><b><i><B>-C <cipher_suite></B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the cipher suite to use for <i><B>lanplus</B></i> connections. Useful for compatibility issues with older BMCs.<br><br><b><i><B>-k <key></B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the authentication key for SOL (Serial Over LAN) or other key-based authentication methods.<br><br><b><i><B>-h</B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message with basic usage information and exits.<br><br><b><i><B>-v</B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases verbosity level for debugging output, useful for troubleshooting connection or command issues.<br><br><b><i><B><command></B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific IPMI subcommand to execute (e.g., <i><B>sensor</B></i>, <i><B>power</B></i>, <i><B>sel</B></i>, <i><B>chassis</B></i>, <i><B>lan</B></i>, <i><B>user</B></i>).<br><br><b><i><B><command_arguments></B></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Arguments specific to the chosen IPMI subcommand. These vary greatly depending on the command.<br><br>


title: DESCRIPTION
content:
<i><B>ipmitool</B></i> is a powerful command-line utility designed for managing and configuring devices that support the <i><B>Intelligent Platform Management Interface (IPMI)</B></i>. IPMI is an industry-standard interface used by server hardware for out-of-band management. This unique capability means that <i><B>ipmitool</B></i> can interact directly with the server's <i><B>Baseboard Management Controller (BMC)</B></i>, independent of the operating system running on the server. Administrators can use it to monitor system health (temperatures, voltages, fan speeds), manage power states (power on/off/cycle), retrieve sensor readings, view and clear <i><B>System Event Logs (SEL)</B></i>, configure network settings for the BMC, and even perform firmware updates.<br><br><i><B>ipmitool</B></i> supports various communication interfaces, including <i><B>LAN (via RMCP+)</B></i> for remote access, local system interfaces (<i><B>KCS</B></i>, <i><B>SMIC</B></i>, <i><B>SSW</B></i>), and serial. Its versatility makes it an indispensable tool for server administrators managing large data centers or remote hardware, allowing critical operations even when the server's main CPU is powered off or unresponsive.


title: CAVEATS
content:
<i><B>Security Risks:</B></i> Providing passwords directly on the command line (via <i><B>-P</B></i>) is insecure as it can be visible in process lists (<i><B>ps</B></i> output) or command history. It's recommended to use environment variables or interactively enter the password.<br><i><B>Firmware Dependencies:</B></i> The functionality and available commands can vary significantly based on the BMC firmware version and hardware vendor implementation. Outdated firmware may have security vulnerabilities or limited features.<br><i><B>Network Configuration:</B></i> For remote operations, ensure proper network connectivity and firewall rules to allow IPMI traffic (UDP port <i><B>623</B></i>) to the BMC's IP address.<br><i><B>Complexity:</B></i> IPMI is a broad specification, and <i><B>ipmitool</B></i> reflects this with numerous subcommands and options, requiring familiarity with IPMI concepts for effective use.


title: <I><B>COMMON USAGE PATTERNS</B></I>
content:
<i><B>ipmitool</B></i> typically follows the pattern <i><B>ipmitool -I lanplus -H <host> -U <user> -P <pass> <command> [args]</B></i>. Some frequently used commands include:<br><ul><li><i><B>power status</B></i>, <i><B>power on</B></i>, <i><B>power off</B></i>, <i><B>power cycle</B></i>: For managing server power state.</li><li><i><B>sensor list</B></i>: To display all sensor readings (temperatures, voltages, fan speeds).</li><li><i><B>sel list</B></i>, <i><B>sel clear</B></i>: To view and clear System Event Logs (SEL).</li><li><i><B>lan print</B></i>, <i><B>lan set</B></i>: To view and configure network settings for the BMC.</li><li><i><B>chassis status</B></i>: To get the chassis power status and operational state.</li></ul>


title: <I><B>IMPORTANCE OF OUT-OF-BAND MANAGEMENT</B></I>
content:
The primary benefit of IPMI and <i><B>ipmitool</B></i> is the ability to manage servers 'out-of-band'. This means management operations can be performed even if the server's operating system has crashed, is powered off, or is otherwise unresponsive. This capability is crucial for remote data centers, Lights-Out Management (LOM), and maintaining server availability and health without requiring physical presence or an operational OS.


title: HISTORY
content:
The <i><B>Intelligent Platform Management Interface (IPMI)</B></i> standard itself was developed by Intel, Dell, Hewlett-Packard, and NEC and first released in <i><B>1998</B></i>. It quickly became an industry standard for out-of-band server management. <i><B>ipmitool</B></i> emerged as a widely used open-source command-line utility to interact with IPMI-enabled hardware. Its development has been community-driven, providing a flexible and powerful interface to the capabilities offered by BMCs, making it an indispensable tool for system administrators and datacenter operations over the past two decades.


title: PARAMETERS
content:
<b>job-id</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>The unique identifier assigned to the print job by CUPS.</I><br><br><b>user</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>The username of the individual who submitted the print job.</I><br><br><b>title</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>A descriptive title for the print job, often displayed in print queues.</I><br><br><b>copies</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>The integer number of copies requested for the document.</I><br><br><b>options</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>A string containing job-specific options and printer attributes, typically in a "key=value" format (e.g., <B>duplex=two-sided-long-edge media=A4</B>). This filter interprets numerous standard IPP and CUPS options for output control.</I><br><br><b>file</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>The path to the input document file. If this argument is omitted, the filter reads the print data from standard input.</I><br><br>


title: DESCRIPTION
content:
<I>The <B>ippevepcl</B> command is a crucial filter within the CUPS (Common Unix Printing System) framework, designed to enable driverless printing to PCL (Printer Command Language) compatible printers that adhere to the IPP Everywhere standard. It acts as an intermediary, converting print job data, typically in PDF or PWG Raster format, into a PCL stream that the printer can understand. This filter supports various PCL levels and interprets common print options such as duplexing, media size, resolution, and color modes, ensuring accurate output. By leveraging <B>ippevepcl</B>, users can print to a wide range of PCL printers without needing to install specific vendor drivers, significantly simplifying printer setup and management in modern network environments.</I>


title: CAVEATS
content:
<I>As a CUPS filter, <B>ippevepcl</B> is generally not invoked directly by users but by the CUPS daemon. Its proper operation relies on the printer correctly advertising its IPP Everywhere and PCL capabilities. It primarily handles PDF and PWG Raster input; other formats may require pre-processing by other CUPS filters. Debugging print issues involving <B>ippevepcl</B> typically involves reviewing the CUPS error logs for detailed information.</I>


title: INPUT AND OUTPUT FORMATS
content:
<I>The <B>ippevepcl</B> filter primarily accepts input in PDF or PWG Raster formats, either from standard input or a specified file. It then converts this data into Printer Command Language (PCL) streams, which are output to standard output for the printer to consume.</I>


title: PCL LEVEL SUPPORT
content:
<I>This filter is capable of generating PCL output compliant with various PCL levels, including PCL 5c/e and PCL XL (PCL 6), depending on the printer's advertised capabilities and the specific print job requirements.</I>


title: IPP EVERYWHERE COMPLIANCE
content:
<I>As its name suggests, <B>ippevepcl</B> is designed to facilitate printing to devices that conform to the IPP Everywhere standard, enabling a robust driverless printing experience.</I>


title: HISTORY
content:
<I>The <B>ippevepcl</B> filter is a component of the <B>cups-filters</B> project, which originated from the main CUPS (Common Unix Printing System) project after Apple's acquisition. Its creation was driven by the emergence of the IPP Everywhere standard, a key initiative aimed at simplifying printer driver management by defining a common set of capabilities for driverless printing. This filter specifically targets PCL-compatible printers, enabling them to be used seamlessly in IPP Everywhere environments without requiring vendor-specific drivers. Its ongoing development contributes to the vision of universal, standards-based printing across various operating systems.</I>


title: PARAMETERS
content:
<b><b>-d</b> <i>spool-directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where received print files will be stored for inspection.<br><br><b><b>-h</b> <i>hostname</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the hostname or IP address on which to listen for incoming connections.<br><br><b><b>-p</b> <i>port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the port number to listen on. The default is 8000.<br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restarts the printer (re-initializes its state) after each job is processed.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables SSL/TLS encryption for secure communication with clients.<br><br><b><b>-t</b> <i>title</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a descriptive title for the simulated printer, often used for display in GUI environments.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, displaying more detailed information about processed jobs and events.<br><br><b><b>-x</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits the program after successfully processing the first print job received.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with command-line options and usage.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the program's version information.<br><br>


title: DESCRIPTION
content:
<b>ippeveprinter</b> is a command-line utility from the CUPS project designed to simulate an Internet Printing Protocol (IPP) printer. It acts as an event-driven IPP server, listening for incoming IPP print jobs on a specified port (default 8000) or an automatically assigned port. Its primary purpose is to provide a controllable environment for testing IPP client applications, IPP servers, and validating IPP compliance.<br><br>Unlike a real printer, <b>ippeveprinter</b> does not produce physical output. Instead, it processes the incoming job data, simulates printer responses, and can optionally save the print data to files for inspection. This makes it invaluable for debugging, development, and conformance testing of IPP-based printing solutions without needing a physical printer or extensive CUPS configuration. It's a key tool for developers working on printing protocols.


title: CAVEATS
content:
<b>ippeveprinter</b> is primarily a development and testing tool and is <i>not</i> intended for use as a production printer daemon. It simulates IPP behavior without actually printing to a physical device, and while it supports core IPP functionalities, it may not replicate all complex behaviors of a full-featured CUPS server or a specific printer model. Its effective use requires understanding of IPP and CUPS concepts.


title: TESTING WORKFLOW
content:
Often used in conjunction with <b>ippeveprint(1)</b> to send print jobs to the simulated printer, or with <b>ipptool(1)</b> to query its status and capabilities. This allows for comprehensive end-to-end testing of IPP applications and services.


title: JOB DATA INSPECTION
content:
When configured with the <b>-d</b> option, <b>ippeveprinter</b> saves the received print job data (e.g., PostScript, PCL, PDF) into files within the specified spool directory. This feature is invaluable for developers to inspect the exact data sent by client applications and diagnose formatting or protocol issues.


title: HISTORY
content:
<b>ippeveprinter</b> has been an integral part of the CUPS (Common Unix Printing System) project's development tools since its early stages. Its creation was driven by the need for a robust and controllable environment to test Internet Printing Protocol (IPP) client applications and servers. It has evolved alongside the IPP specification, making it a cornerstone for validating IPP compliance and ensuring interoperability in the printing ecosystem. Its focus has always been on providing a reliable simulation for developers and testers.


title: DESCRIPTION
content:
The command <i>ippeveps</i> is not a standard or commonly recognized Linux command, utility, or executable found in typical Linux distributions, common third-party software repositories, or official documentation. Therefore, an analysis of its specific functionality, syntax, or operational parameters is impossible within the scope of standard Linux environments. Its presence would indicate a custom script developed by a user or administrator for a very specific purpose within a particular computing environment, or more frequently, it signifies a typographical error made when attempting to invoke an existing, legitimate command. While the components 'ipp' (Internet Printing Protocol) and 'eps' (Encapsulated PostScript) might suggest a connection to printing or document handling, this remains speculative without further context. Users attempting to execute <i>ippeveps</i> on a standard Linux system will invariably receive a 'command not found' error message.


title: CAVEATS
content:
As <i>ippeveps</i> is not a standard command, attempting to execute it on a typical Linux system will result in a 'command not found' error. Any functionality associated with this name would be specific to a custom environment where such a script or alias has been explicitly defined.


title: POSSIBLE INTENT
content:
Given the 'ipp' and 'eps' components, it's highly probable that the user intended to refer to a command or utility related to the <b>Internet Printing Protocol (IPP)</b> or the handling of <b>Encapsulated PostScript (EPS)</b> files. Users often interact with printing systems via commands like <b>lp</b>, <b>lpr</b>, or through CUPS (Common Unix Printing System) utilities like <b>ipptool</b>. PostScript processing and conversion are typically handled by tools like Ghostscript (<b>gs</b>) or related utilities (e.g., <b>ps2pdf</b>).


title: HISTORY
content:
There is no documented history for a standard Linux command named <i>ippeveps</i>, as it does not exist in official distributions or widely adopted open-source projects.


title: SYNOPSIS
content:
ippfind [ <b>-f</b> ] [ <b>-L</b> ] [ <b>-n</b> <i>name</i> ] [ <b>-N</b> ] [ <b>-R</b> ] [ <b>-s</b> <i>service-type</i> ] [ <b>-t</b> <i>timeout</i> ] [ <b>-V</b> ] [ <b>-X</b> ]


title: PARAMETERS
content:
<b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Finds only fully registered services, ignoring partially advertised ones.<br><br><b><b>-L</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists long URIs, including the service path and printer name.<br><br><b><b>-n</b> <i>name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for a specific printer by its advertised name. The name can be a full or partial match.<br><br><b><b>-N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes IPP-over-USB devices from the discovery results.<br><br><b><b>-R</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resolves discovered hostnames to their IP addresses. By default, hostnames are returned.<br><br><b><b>-s</b> <i>service-type</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the DNS-SD service type to search for (e.g., <i>_ipp._tcp</i> for standard IPP, <i>_ipps._tcp</i> for IPP over TLS). Defaults to searching for both.<br><br><b><b>-t</b> <i>timeout</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the discovery timeout in seconds. The command will wait for this duration to find services. Default is typically 5 seconds.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the program's version information and exits.<br><br><b><b>-X</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates XML formatted output, useful for programmatic parsing.<br><br>


title: DESCRIPTION
content:
<i>ippfind</i> is a command-line utility designed for discovering IPP (Internet Printing Protocol) printers and servers on a local network. It leverages DNS Service Discovery (DNS-SD), often implemented via mDNS (multicast DNS) using services like Avahi or Bonjour, to locate network-advertised printing resources. Part of the CUPS (Common Unix Printing System) software suite, <i>ippfind</i> simplifies the process of finding available printers without manual configuration. It outputs the URI (Uniform Resource Identifier) of discovered printers, which can then be used with other CUPS tools such as <i>lpadmin</i> or <i>lpstat</i> to set up or manage print queues. This command is particularly useful in dynamic network environments where printers are frequently added or removed, or when administrators need to quickly identify available printing services.


title: CAVEATS
content:
<i>ippfind</i> relies on mDNS/DNS-SD for network discovery, which requires a functioning mDNS responder (like Avahi or Bonjour) on the system and network. <br>Firewall rules might block the necessary multicast traffic (UDP port 5353), preventing successful discovery. <br>Some network configurations may not support mDNS, limiting the command's effectiveness.


title: DEFAULT SERVICE TYPES
content:
By default, <i>ippfind</i> searches for services advertised under both <i>_ipp._tcp</i> (standard IPP) and <i>_ipps._tcp</i> (IPP over TLS/SSL) service types. Use the <b>-s</b> option to specify a different or single service type.


title: OUTPUT FORMAT
content:
The command typically outputs one or more IPP URIs, each on a new line, representing discovered printers. For example, <i>ipp://printername.local:631/ipp/print</i> or <i>ipps://192.168.1.100:443/printers/LaserJet</i>. The <b>-L</b> option can alter the URI detail, and <b>-X</b> provides XML output.


title: HISTORY
content:
<i>ippfind</i> is an integral part of the CUPS (Common Unix Printing System) project. CUPS was initially developed by Easy Software Products and first released in 1999. Apple Inc. acquired Easy Software Products in 2007 and has since maintained and evolved CUPS. <i>ippfind</i> was introduced to automate and simplify the discovery of network-advertised IPP printers, aligning with the growing adoption of IPP as a standard printing protocol. Its development mirrors the evolution of CUPS itself, providing modern, user-friendly mechanisms for printer management in network environments.


title: SYNOPSIS
content:
<b>ipptool</b> [ <i>OPTIONS</i> ] <i>URI</i> [ <i>TESTFILE.test ...</i> ]<br><br><i>URI</i>: Specifies the IPP resource to connect to (e.g., <i>ipp://localhost:631/printers/myprinter</i> or <i>ipps://192.168.1.100:443/ipp/print</i>).<br><i>TESTFILE.test</i>: One or more IPP test files containing directives for requests and expected responses. If no test files are specified, <i>ipptool</i> reads from standard input.


title: PARAMETERS
content:
<b>-E</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables <b>TLS encryption</b> for the connection. For <i>ipps://</i> URIs, TLS is enabled by default.<br><br><b>-I</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't pretty-print requests sent to the server. By default, <i>ipptool</i> pretty-prints requests for readability.<br><br><b>-P</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't pretty-print responses received from the server. By default, responses are pretty-printed.<br><br><b>-V <i>version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IPP protocol version to use for requests. Common values include <i>1.0</i>, <i>1.1</i>, and <i>2.0</i>.<br><br><b>-X</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't exit on the first error. Continue processing subsequent requests in the test file even if an error occurs.<br><br><b>-c <i>client-name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the 'client-name' attribute in requests, identifying the client to the server.<br><br><b>-d <i>name=value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines a variable for use within the test file. Variables can be referenced using <i>${name}</i>.<br><br><b>-f <i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a file whose contents will be sent as the document data with the IPP request.<br><br><b>-i <i>iteration-count</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of times to iterate or repeat the tests in the given test files.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all recognized IPP operations, attributes, and values. This can be helpful for understanding IPP syntax.<br><br><b>-m <i>max-requests</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the maximum number of requests to send before exiting. Useful for limiting test execution time.<br><br><b>-o <i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Saves the raw IPP request and response data to the specified file.<br><br><b>-q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be quiet; don't display status messages or progress. Only errors and critical information will be shown.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not retry failed requests. By default, <i>ipptool</i> might retry some requests.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show status messages after each request, including the HTTP and IPP status codes.<br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show timing information for each request, indicating how long it took to send and receive data.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be verbose; display additional debugging and informational messages during execution.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit on the first error encountered during test execution. This is the default behavior.<br><br>


title: DESCRIPTION
content:
<i>ipptool</i> is a command-line utility used to test and debug Internet Printing Protocol (IPP) servers and clients. It allows users to send specific IPP requests, defined in `.test` files, to a target IPP server (printer, print server, etc.) and then analyze or validate the server's responses. This tool is invaluable for developers creating IPP-compliant devices or software, as well as for system administrators troubleshooting printing issues.<br><br>It supports various IPP versions (1.0, 1.1, 2.0), different authentication methods, and secure communication via TLS. Users can define a sequence of IPP operations, expected status codes, and attribute values within the test files, making <i>ipptool</i> a powerful tool for automated compliance testing and regression testing of IPP implementations.


title: CAVEATS
content:
Understanding and writing <i>ipptool</i> test files requires a good grasp of the IPP specification. Debugging complex IPP interactions can be challenging without proper knowledge of the protocol's intricacies. Network connectivity, firewall rules, and the target IPP server's configuration directly impact <i>ipptool</i>'s ability to communicate successfully.


