# CommandSection

title: DESCRIPTION
content:
The <b>dfc</b> command is a modern and visually enhanced alternative to the traditional <i>df</i> utility, designed to display disk space usage on mounted filesystems. Unlike <i>df</i>, <b>dfc</b> provides a more human-readable and aesthetically pleasing output by default, incorporating color-coded thresholds for usage, ASCII graphs, and clearer formatting. It aims to improve user experience for interactive shell sessions, making it easier to quickly grasp disk consumption statuses across various storage devices and partitions. <b>dfc</b> can report on total, used, and available space, percentage usage, and optionally display filesystem types, device names, and inode information. Its colored output typically highlights low, medium, and high usage levels, alerting users to critical disk space situations at a glance.


title: CAVEATS
content:
<b>dfc</b> is typically a third-party utility and may not be installed by default on all Linux distributions. Its enhanced visual output, while great for interactive use, can make programmatic parsing of its output more challenging compared to the standard <i>df</i> command.


title: COLOR CODING EXPLAINED
content:
<b>dfc</b> uses color to provide immediate visual cues about disk usage:<br><i>Green</i>: Low usage (e.g., 0-60%).<br><i>Yellow/Orange</i>: Medium usage, approaching critical (e.g., 60-90%).<br><i>Red</i>: High usage, potentially critical (e.g., 90% and above).


title: INTERACTIVE USAGE
content:
<b>dfc</b> is particularly well-suited for interactive use in a shell. Its clear, color-coded, and often graphical output allows system administrators and users to quickly assess disk space availability without needing to carefully parse raw numbers, significantly enhancing readability and quick comprehension.


title: HISTORY
content:
While the traditional <b>df</b> command is part of GNU Coreutils and has been a staple of Unix-like systems for decades, <b>dfc</b> emerged as a community-driven project to offer a more user-friendly and visually appealing alternative. Its development focused on addressing the common user desire for 'at-a-glance' disk space information, incorporating modern terminal capabilities like color and simple ASCII graphs, making it a popular choice for interactive system administration.


title: PARAMETERS
content:
<b>-u, --unpack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unpack the source package after downloading all components.<br><br><b>-d, --download-only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Download files but do not unpack the source directory.<br><br><b>-x, --extract</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A synonym for <i>--unpack</i>.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress most output, only showing errors.<br><br><b>-P &lt;path&gt;, --destdir &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Download files into the specified directory instead of the current working directory.<br><br><b>-S, --no-signature-check</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not check the GPG signature of the <i>.dsc</i> file. <b>Use with extreme caution!</b><br><br><b>-D, --allow-less-secure-sha1</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allow SHA1 checksums, which are considered less secure than newer hash algorithms.<br><br><b>-T, --allow-v1-hash</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allow MD5 or SHA1 hashes, which are older and less secure formats.<br><br><b>-l, --allow-unauthenticated-dsc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allow unauthenticated <i>.dsc</i> files. Implies <i>--no-signature-check</i>. <b>Highly discouraged!</b><br><br><b>-C &lt;level&gt;, --check-dirname-level &lt;level&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Control the strictness of directory name checking (e.g., for security checks on unpacked directory names).<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
dget is a utility from the <i>devscripts</i> package that simplifies downloading Debian source packages. It takes a <i>.dsc</i> file (either a local path or a URL) as an argument. It automatically downloads all associated files mentioned in the <i>.dsc</i> file, such as the original upstream tarball (e.g., <i>.orig.tar.gz</i>) and the Debian-specific diff (e.g., <i>.debian.tar.xz</i>). By default, it verifies cryptographic signatures (GPG) to ensure the integrity and authenticity of the source package.<br><br>After downloading, it can optionally unpack the source tree into the current directory, making it ready for inspection, patching, or building with tools like <i>debuild</i>. It's an essential tool for developers and users who need to examine or recompile Debian packages from their original source code.


title: CAVEATS
content:
Using options like <i>--no-signature-check</i> or <i>--allow-unauthenticated-dsc</i> bypasses crucial security checks, potentially exposing the user to malicious or tampered source code. Always verify the authenticity of source packages, especially from untrusted sources. `dget` relies on internet connectivity to fetch URLs and may require proper APT configuration for resolving package names if not provided with a direct URL.


title: WORKING WITH .DSC FILES
content:
A <i>.dsc</i> (Debian Source Control) file is a plain-text file that describes a Debian source package. It lists the package name, version, architecture (source), maintainer, build dependencies, and most importantly, the names and checksums of the other files that make up the source package (e.g., <i>.orig.tar.gz</i>, <i>.debian.tar.xz</i>, <i>.diff.gz</i>). `dget` parses this file to determine exactly which files to download and how to verify them.


title: SIGNATURE VERIFICATION
content:
By default, `dget` attempts to verify the GPG signature of the <i>.dsc</i> file. This cryptographic verification ensures that the file has not been tampered with and originates from a trusted source (typically a Debian developer's key or an official archive key). If the signature is invalid, missing for a file from a trusted repository, or if the key is not trusted, `dget` will typically fail and alert the user to a potential security issue, preventing the download of potentially compromised sources.


title: HISTORY
content:
<i>dget</i> is an integral part of the <i>devscripts</i> package, a suite of tools primarily used by Debian developers and maintainers. It has been a standard utility within the Debian ecosystem for many years, evolving alongside Debian's packaging formats and security practices. Its primary role has consistently been to simplify the process of obtaining and preparing Debian source trees for further development or inspection.


title: SYNOPSIS
content:
As <i>dgn_comp</i> is not a standard Linux command, its exact synopsis is proprietary and unknown without access to the specific software it belongs to. <br><br><b><i>Usage is highly dependent on its specific implementation within a CAD/EDA environment.</i></b><br><i><b>Example (highly speculative): <code>dgn_comp [options] <input_design1.dgn> <input_design2.dgn> <output_report_file></code></b></i>


title: PARAMETERS
content:
<b><i>(proprietary options/arguments)</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;As <i>dgn_comp</i> is not a standard Linux command, its parameters are proprietary and undocumented publicly. They would depend entirely on the specific CAD/EDA software it integrates with and the tasks it is designed to perform (e.g., specifying input/output files, comparison modes, reporting options).<br><br>


title: DESCRIPTION
content:
<i>dgn_comp</i> is not a standard command found in typical Linux distributions' core utilities or system administration toolsets. Its name strongly suggests it is a specialized utility related to CAD (Computer-Aided Design) or EDA (Electronic Design Automation) software. The "dgn" prefix likely refers to the <I>DGN</I> file format, which is a proprietary CAD file format primarily associated with Bentley Systems' MicroStation. The "comp" suffix could imply either "comparison" (e.g., comparing two DGN files or designs for differences) or "compilation" (e.g., processing a design from DGN into another format or for simulation/analysis).<br><br>Without access to the specific software suite it belongs to, its exact functionality, options, and usage remain proprietary. Such tools are typically used in engineering, architecture, or manufacturing environments where DGN files are actively used for design data. It is not part of the GNU utilities or standard Linux packages and will generally not be found on a typical system unless specific commercial CAD/EDA software is installed.


title: CAVEATS
content:
<ul><li><i>dgn_comp</i> is not a standard Linux command and is not part of common distributions or their default repositories.</li><li>Its functionality, options, and usage are proprietary and specific to the CAD/EDA software suite it belongs to (likely involving DGN files).</li><li>Public documentation is generally unavailable for this command.</li><li>Attempting to execute <i>dgn_comp</i> on a system without the specific proprietary software installed will likely result in a "command not found" error.</li></ul>


title: <B>DGN FILE FORMAT</B>
content:
DGN (Design) is a CAD file format used for storing design data, particularly associated with Bentley Systems' MicroStation. It is a proprietary format, and <i>dgn_comp</i> likely operates on or generates reports based on this specific file type, understanding its complex internal structure.


title: <B>PROPRIETARY NATURE</B>
content:
Users should understand that <i>dgn_comp</i> is not a general-purpose Linux utility. Its presence and functionality are entirely dependent on the installation of a specific commercial CAD/EDA software package, meaning it won't be available on most standard Linux systems without that proprietary software.


title: HISTORY
content:
The history of <i>dgn_comp</i> is tied directly to the development and evolution of the proprietary CAD/EDA software suite it is a part of. It is not an open-source or publicly documented command with a standalone development history. It would have been developed by a commercial software vendor (likely Bentley Systems or a company dealing with DGN data) to serve specific needs within their design automation workflows, such as design verification, version control for CAD files, or automated design transformations. Its usage is limited to environments where these specific proprietary tools are deployed.


title: SEE ALSO
content:
diff(1) <i>(for general file comparison, though dgn_comp performs specialized CAD data comparison)</i>, file(1) <i>(for identifying file types, which might be useful to confirm DGN format)</i>, <i>Conceptually related to CAD/EDA software suites like Bentley Systems MicroStation, AutoCAD, Cadence Virtuoso, Synopsys tools, etc.</i>


title: PARAMETERS
content:
<b><i>-&lt;digest_algorithm&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the hashing algorithm to use, such as <b>-md5</b>, <b>-sha1</b>, <b>-sha256</b>, <b>-sha512</b>, etc. If not specified, a default (often SHA256) may be used depending on the OpenSSL version.<br><br><b><b>-binary</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the digest in binary format.<br><br><b><b>-hex</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the digest in hexadecimal format. This is the default output format for the digest.<br><br><b><b>-out</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the output digest to the specified <i>&lt;file&gt;</i> instead of standard output.<br><br><b><b>-sign</b> <i>&lt;private_key&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Signs the calculated digest with the specified <i>&lt;private_key&gt;</i>. The private key must be in PEM format.<br><br><b><b>-verify</b> <i>&lt;public_key&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verifies a signature using the specified <i>&lt;public_key&gt;</i>. This typically involves inputting the original file, the signature, and the public key for verification.<br><br>


title: DESCRIPTION
content:
The <i>dgst</i> command, part of the <b>OpenSSL</b> toolkit, is a versatile utility used to calculate message digests (hashes) of files or data streams. A message digest is a fixed-size string of bytes derived from a variable-length input, typically used to ensure data integrity and authenticity. If even a single bit of the input data changes, the resulting digest will be significantly different. <br><br>Beyond simple hashing, <i>dgst</i> also supports cryptographic operations such as signing digests with private keys and verifying signatures with public keys, making it a fundamental tool in digital forensics, security, and secure communication protocols. It supports a wide array of hashing algorithms including but not limited to MD5, SHA-1, SHA-256, SHA-512, and various other more obscure ones. <br><br>The command can process input from specified files or from standard input, and output the digest in various formats, commonly hexadecimal or binary.


title: CAVEATS
content:
Older hash algorithms like <b>MD5</b> and <b>SHA-1</b> are considered cryptographically broken for many security applications due to known collision vulnerabilities. They should not be used for integrity checks where collision resistance is critical, such as digital signatures or password hashing. For new applications, always prefer modern algorithms like <b>SHA-256</b> or <b>SHA-512</b>.


title: COMMON USAGE EXAMPLE: HASHING A FILE
content:
To calculate the SHA256 digest of a file named <i>document.txt</i> and display it in hexadecimal format:<br><b>openssl dgst -sha256 document.txt</b><br><br>To calculate the MD5 digest of a string passed via standard input:<br><b>echo 'Hello, World!' | openssl dgst -md5</b>


title: HISTORY
content:
The <i>dgst</i> command is an integral part of the <b>OpenSSL</b> cryptographic software library, which has been under continuous development since 1998, succeeding the SSLeay library. It has evolved significantly over time, adapting to new cryptographic standards and addressing security vulnerabilities, reflecting the ongoing advancements in cryptography and the changing threat landscape. Its usage is widespread across Unix-like operating systems.


title: PARAMETERS
content:
<b><b>--no-act</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not actually do anything; just print the commands that would be run.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show more verbose output, explaining what is being done.<br><br><b><b>-p<I>package</I></b>, <b>--package=<I>package</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Act only on the specified <I>package</I>.<br><br><b><b>-a</b>, <b>--arch</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Act only on architecture-dependent packages.<br><br><b><b>-i</b>, <b>--indep</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Act only on architecture-independent packages.<br><br><b><b>Other debhelper options</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Like most <I>dh_</I> commands, <I>dh_bash-completion</I> accepts generic <I>debhelper</I> options documented in <I>debhelper(7)</I>.<br><br>


title: DESCRIPTION
content:
<I>dh_bash-completion</I> is a debhelper program that is responsible for installing bash completion scripts into the correct system-wide locations for Debian packages. It typically runs during the <I>dh</I> build sequence, often implicitly via <I>dh --with bash-completion</I> or when <I>debhelper</I> detects relevant files. It looks for completion files either provided by the package maintainer in the <I>debian/</I> directory (e.g., <I>debian/&lt;packagename&gt;.bash-completion</I>) or generated by other <I>debhelper</I> tools. It then places them into <I>usr/share/bash-completion/completions/</I> or <I>etc/bash_completion.d/</I> within the package's build tree (<I>debian/&lt;packagename&gt;/</I>), ensuring they are properly packaged and installed on the user's system. This automation simplifies package maintenance and allows users to benefit from tab completion for commands provided by the package.


title: CAVEATS
content:
<b>1.</b> <I>dh_bash-completion</I> is rarely invoked directly by package maintainers.<br>It is almost always part of the automated <I>dh</I> sequence in <I>debian/rules</I> (<I>dh</I> or <I>dh --with bash-completion</I>).<br><b>2.</b> The completion scripts themselves must be correctly formatted and placed in the appropriate locations within the <I>debian/</I> directory for <I>debhelper</I> to find them.<br><b>3.</b> For the completion to function, the <I>bash-completion</I> package must be installed on the end-user's system.


title: INSTALLATION LOCATIONS
content:
<I>dh_bash-completion</I> installs completion files into the standard system locations for bash completion scripts, typically <I>/usr/share/bash-completion/completions/</I> (for statically loaded completions) or <I>/etc/bash_completion.d/</I> (for dynamically loaded completions) within the final package file system. It handles the packaging of these files into the appropriate <I>debian/&lt;packagename&gt;/</I> subdirectories.


title: TYPICAL INVOCATION IN DEBIAN/RULES
content:
Package maintainers usually do not call <I>dh_bash-completion</I> directly. Instead, they rely on <I>dh</I> to call it automatically.<br>This is typically achieved by:<br><b>1.</b> Using <I>dh</I> directly (e.g., <I>dh $@</I> in <I>debian/rules</I>), where <I>debhelper</I> detects the presence of completion files (e.g., <I>debian/&lt;packagename&gt;.bash-completion</I>).<br><b>2.</b> Explicitly enabling the bash-completion sequence via <I>dh --with bash-completion $@</I>.


title: HISTORY
content:
Part of the <I>debhelper</I> suite, <I>dh_bash-completion</I> was introduced to streamline and automate the process of packaging bash completion scripts for Debian packages. Its development reflects the ongoing effort to simplify common packaging tasks and improve the user experience by ensuring that command-line completions are easily available for software installed via Debian packages.


title: PARAMETERS
content:
<b><b>--no-act</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not actually do anything; just print the commands that would be executed.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details about the operations.<br><br><b><b>-N</b><i>pkg</i>, <b>--no-package=</b><i>pkg</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not operate on the specified package, even if it is built by the source package.<br><br><b><b>-p</b><i>pkg</i>, <b>--package=</b><i>pkg</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operate only on the specified package. This is often used when a source package builds multiple binary packages.<br><br><b><b>-a</b>, <b>--arch-indep</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Act only on architecture independent packages.<br><br><b><b>-A</b>, <b>--arch-dep</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Act only on architecture dependent packages.<br><br>


title: DESCRIPTION
content:
<i>dh_dkms</i> is a <b>debhelper</b> program designed to streamline the packaging of <b>Dynamic Kernel Module Support (DKMS)</b> modules for Debian-based systems. It typically runs as part of the standard <i>dh</i> command sequence during the package build process, automating the steps required to properly integrate a kernel module with DKMS. Its primary role is to process the <i>dkms.conf</i> file found in the source directory, which specifies how the kernel module should be built, installed, and uninstalled by the <i>dkms</i> framework.<br><br>The command ensures that the module's source code is correctly placed within the Debian package structure, allowing the <i>dkms</i> system on the end-user's machine to automatically rebuild and install the module whenever a new kernel version is installed or updated. This dramatically simplifies maintenance for kernel module packages, as it eliminates the need for manual recompilation or separate package updates for each new kernel. <i>dh_dkms</i> handles the necessary interactions with the <i>dkms(8)</i> utility, ensuring the module is correctly registered and managed by the system.


title: CAVEATS
content:
A well-formed <i>dkms.conf</i> file is <b>mandatory</b> in the source directory for <i>dh_dkms</i> to function correctly. The <i>dkms</i> package itself must be listed as a <b>Build-Depends</b> in <i>debian/control</i>. It is primarily designed to be used within the <i>dh</i> command sequence; direct manual invocation is rarely needed or recommended.


title: <B>IMPORTANT FILES</B>
content:
<i>dh_dkms</i> primarily looks for a file named <i>dkms.conf</i> in the source directory. This configuration file is essential for instructing the <i>dkms(8)</i> utility on how to build, install, and remove the kernel module. It may also utilize optional scripts like <i>dkms_mkdeb</i> and <i>dkms_mkdsc</i> for custom package creation.


title: <B>INTEGRATION WITH DH</B>
content:
Most users will not explicitly call <i>dh_dkms</i>. Instead, it is implicitly executed by the <i>dh(1)</i> command as part of its default sequence (e.g., <i>dh --with dkms</i> or automatically if <i>debian/control</i> lists <i>dkms</i> in <i>Build-Depends</i>). This design philosophy allows package maintainers to use a simpler <i>debian/rules</i> file.


title: HISTORY
content:
<i>dh_dkms</i> emerged as part of the <b>debhelper</b> suite to address the increasing complexity of packaging kernel modules for Debian that relied on the <b>DKMS</b> framework. Before its introduction, maintaining such packages across multiple kernel versions often required intricate manual scripting within <i>debian/rules</i>. Its integration into <b>debhelper</b> significantly streamlined the process, providing a standardized and automated way to manage DKMS module packaging, thus simplifying the lives of package maintainers and ensuring robust kernel module support for users.


title: PARAMETERS
content:
<b><i>[debhelper options]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Like most debhelper commands, <i>dh_installxmlcatalogs</i> primarily uses the standard debhelper options, which are documented in <i>debhelper(7)</i>. These options control various aspects of package building, such as verbosity, acting on specific packages, or simulating execution.<br><br>Examples include:<br><b>-v</b>, <b>--verbose</b>: Enable verbose output.<br><b>-d</b>, <b>--debug</b>: Enable debug output.<br><b>-n</b>, <b>--no-act</b>: Don't actually do anything, just show what would be done.<br><b>-p</b><i>package</i>, <b>--package=</b><i>package</i>: Act only on the specified package.<br><b>-A</b>, <b>--all</b>: Act on all packages listed in `debian/control`.<br><br>


title: DESCRIPTION
content:
<i>dh_installxmlcatalogs</i> is a debhelper program that helps in installing and registering XML catalogs for Debian packages. XML catalogs are used by XML parsers (like libxml2) to map public and system identifiers to local files, which is useful for validating XML documents against DTDs or schemas without requiring network access.<br><br>This command scans for XML catalog files (typically ending with <i>.cat</i> or <i>.xml</i>) found in the package build directory (usually <i>debian/tmp/</i>). It then installs these catalog files into the correct system-wide XML catalog directory (e.g., <i>/etc/xml/catalog.d</i>). Crucially, it also registers them with the system's central XML catalog (e.g., <i>/etc/xml/catalog</i>), ensuring they are discoverable by XML-aware applications. The registration process typically involves using the <i>xmlcatalog(1)</i> utility. It automatically handles common paths for XML catalogs and adheres to Debian policy for XML resources. This command should be called from <i>debian/rules</i>, often via <i>dh(1)</i>.


title: CAVEATS
content:
This command is part of the Debian packaging system and is not intended for direct use by end-users. It relies on the <i>xmlcatalog(1)</i> utility, which is typically provided by the `libxml2-utils` package, being available on the system. It primarily handles installation and registration of public and system identifiers within XML catalogs, adhering to Debian policy for XML resources.


title: TYPICAL USAGE IN <I>DEBIAN/RULES</I>
content:
<i>dh_installxmlcatalogs</i> is usually invoked indirectly by the <i>dh(1)</i> command, often as part of the default `dh $@` sequence in <i>debian/rules</i>. For instance, if your package uses XML catalogs, you might simply call `dh $@` in your <i>debian/rules</i> file, and <i>debhelper</i> will determine that <i>dh_installxmlcatalogs</i> needs to be run. Alternatively, you can explicitly ensure its execution by adding <b>--with xmlcatalogs</b> to your <i>dh</i> command, e.g., `dh $@ --with xmlcatalogs`.


title: HISTORY
content:
Before the advent of <i>dh_installxmlcatalogs</i>, Debian package maintainers manually managed the installation and registration of XML catalogs within their <i>debian/rules</i> files. This often involved writing complex shell commands to interact with <i>xmlcatalog(1)</i>, leading to potential inconsistencies and errors across different packages. <i>dh_installxmlcatalogs</i> was introduced as part of the <i>debhelper</i> suite to automate and standardize this process, ensuring that XML catalogs are correctly installed and registered according to Debian policy, thereby simplifying package maintenance and improving the reliability of XML-dependent applications.


title: PARAMETERS
content:
<b>--no-act</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not actually perform any operations. Instead, print the commands that would be executed, allowing for a dry run.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, providing more detailed information about the actions being taken by <i>dh_numpy</i>.<br><br><b>--indep</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Act only on architecture-independent packages. This option is inherited from <i>debhelper</i> and filters the package types <i>dh_numpy</i> operates on.<br><br><b>--arch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Act only on architecture-dependent packages. Similar to <code>--indep</code>, this option filters based on package architecture.<br><br><b>[debhelper options]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>dh_numpy</i> supports all standard options provided by <i>debhelper(7)</i>. These options control general behavior common to most <i>dh_*</i> commands, such as output verbosity, dry-run mode, and targeting specific package types (e.g., architecture-dependent or independent components of a source package).<br><br>


title: DESCRIPTION
content:
<i>dh_numpy</i> is a specialized <i>debhelper</i> program designed for Debian packaging of the <i>NumPy</i> library. Its primary function is to byte-compile Python source files (with a .py extension) found specifically within the <code>/usr/lib/python{X}/dist-packages/numpy/</code> directory and its subdirectories. This process converts human-readable Python code into bytecode (.pyc or .pyo files), which can lead to faster loading times and minor obfuscation within installed packages.<br><br>It is typically invoked automatically by the main <i>dh(1)</i> command during the Debian package build process when either the <code>--with python-support</code> or <code>--with python3-support</code> sequence is specified in the <i>debian/rules</i> file. This ensures that <i>NumPy</i> packages adhere to Debian's Python packaging policies and are optimized for deployment on user systems.


title: CAVEATS
content:
<i>dh_numpy</i> is highly specific to the <i>NumPy</i> Python library and will only process files located within the expected <code>/usr/lib/python{X}/dist-packages/numpy/</code> path structure. It relies on being called as part of the <i>debhelper</i>'s Python support sequences. For general Python byte-compilation for packages that are not <i>NumPy</i>-specific, other <i>debhelper</i> tools like <i>dh_python3(1)</i> or <i>dh_python2(1)</i> should be used.


title: HISTORY
content:
<i>dh_numpy</i> emerged as a specialized component within the <i>debhelper</i> suite, designed to streamline the packaging of significant Python libraries in Debian. As <i>NumPy</i> grew to be a foundational library for scientific and numerical computing in Python, its specific packaging requirements, particularly concerning the efficient byte-compilation of its extensive codebase, necessitated a dedicated tool. It integrates seamlessly with the broader <i>python-support</i> and <i>python3-support</i> mechanisms provided by <i>debhelper</i>, evolving alongside Debian's Python packaging policies.


title: PARAMETERS
content:
<b>-k, --no-clean</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not clean up byte-compiled files from the source tree.<br><br><b>-p, --package=<i>package</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Act only on the specified package.<br><br><b>-N, --noact</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't actually do anything; just show what would be done.<br><br><b>-X, --exclude=<i>item</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude files or directories matching <i>item</i> from processing.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details of operations.<br><br><b>-i, --indep</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operate on architecture-independent files (used by debhelper for build architecture).<br><br><b>-a, --arch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operate on architecture-dependent files (used by debhelper for build architecture).<br><br>


title: DESCRIPTION
content:
<i>dh_pycentral</i> is a debhelper(7) program historically used during the Debian package build process to handle Python-specific tasks. Its primary function was to manage Python's byte-compiled files (<i>.pyc</i> and <i>.pyo</i>) for various Python versions supported on a system. When a package installed Python modules, <i>dh_pycentral</i> would ensure these modules were correctly byte-compiled, making them ready for faster execution. It also handled the creation of <i>.pth</i> files and links in <i>/usr/share/python-central</i>, which allowed different Python packages to correctly resolve dependencies and share modules. While once a standard part of Python package building in Debian, <i>dh_pycentral</i> and the broader <i>python-central</i> system it belonged to have been largely superseded by <i>dh-python</i> and the <i>pybuild</i> system. Modern Debian/Ubuntu Python packages typically use <i>dh-python</i> for a more streamlined and flexible approach to Python packaging, making <i>dh_pycentral</i> a legacy tool.


title: CAVEATS
content:
<i>dh_pycentral</i> and the <i>python-central</i> system it belongs to are largely considered legacy. Modern Debian and Ubuntu packaging for Python applications and libraries exclusively uses <i>dh-python</i> and the <i>pybuild</i> system, which provide a more robust and flexible framework for handling multiple Python versions, virtual environments, and diverse build systems. New Debian packages should <b>not</b> use <i>dh_pycentral</i>. Existing packages might still use it, but are strongly encouraged to migrate to <i>dh-python</i> for maintainability and compatibility.


title: FILE MANAGEMENT
content:
<i>dh_pycentral</i> managed the byte-compilation of <i>.py</i> files into <i>.pyc</i> and <i>.pyo</i> (optimized) files and ensured these were placed correctly for all supported Python versions (e.g., <i>/usr/lib/python2.7/dist-packages/</i>). It also handled the creation of <i>.pth</i> files and symlinks in <i>/usr/share/python-central</i>, which allowed multiple Debian packages to provide modules to the same Python environment without conflicts.


title: HISTORY
content:
<i>dh_pycentral</i> was introduced as part of the <i>python-central</i> package in Debian, becoming a standard tool for managing Python byte-compilation and module installation within the Debian packaging ecosystem. Its purpose was to standardize the handling of Python packages, especially in environments with multiple Python interpreters and shared module directories. However, with the evolving landscape of Python development and the need for more flexible build systems (e.g., setuptools, distutils2, wheel), <i>python-central</i> began to show limitations. Around Debian 7 (Wheezy) and later, <i>dh-python</i> emerged as a more modern and powerful successor, leveraging the standard <i>distutils</i> and <i>setuptools</i> build systems more directly. <i>dh_pycentral</i>'s usage has steadily declined since, with <i>dh-python</i> now being the recommended and widely adopted method for Python packaging in Debian and its derivatives.


title: SYNOPSIS
content:
<b>dh_pysupport</b> is typically invoked as part of the <I>dh(1)</I> command sequence in a Debian package's <I>debian/rules</I> file, like:<br>#!/usr/bin/make -f<br>%:<br><i>    dh $@</i><br>It does not usually take direct command-line arguments from a user. Its behavior is primarily driven by the presence of Python files in the package and the debhelper environment.


title: PARAMETERS
content:
<b>No specific parameters</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>dh_pysupport</b> does not expose specific command-line parameters for user interaction. Its operations are largely automatic within the debhelper build process. Any arguments passed to it are typically standard debhelper flags (e.g., <I>--indep</I>, <I>--arch</I>, etc.) which control the overall build process rather than specific <b>dh_pysupport</b> functions.<br><br>


title: DESCRIPTION
content:
<b>dh_pysupport</b> was a <I>debhelper</I> program designed to assist in packaging Python 2 modules for Debian-based systems. Its primary function was to handle the installation of Python source files (<I>.py</I>), byte-compilation of these files into <I>.pyc</I> and <I>.pyo</I> (optimized) versions, and to manage the creation of <I>site-packages</I> or <I>dist-packages</I> directories. It ensured that Python modules were correctly installed to the appropriate system-wide locations and managed dependencies with the system's Python 2 interpreter. It was an integral part of the <I>python-support</I> framework, which provided a standardized way to build Python packages. With the end-of-life for Python 2 and the transition to Python 3, <b>dh_pysupport</b> has been largely superseded by <I>dh_python</I> and is considered a legacy tool.


title: CAVEATS
content:
<b>dh_pysupport</b> is <I>highly deprecated</I> and <I>effectively removed</I> from modern Debian and Ubuntu distributions. It was part of the <I>python-support</I> package, which has been removed since Debian Stretch (and corresponding Ubuntu releases). It was designed exclusively for Python 2 packages. For Python 3 packaging, and for modern Python 2 packaging before its complete deprecation, it has been superseded by <I>dh_python</I> and <I>dh_python2</I>. It should not be used for new packages.


title: LEGACY CONTEXT
content:
<b>dh_pysupport</b> was designed to work with Python 2's <I>site-packages</I> directory structure and the legacy <I>python</I> command. Modern Python packaging leverages <I>python3</I> and often virtual environments, which <b>dh_pysupport</b> does not support.


title: HISTORY
content:
<b>dh_pysupport</b> emerged as a core component of the <I>python-support</I> framework in Debian, aimed at simplifying the packaging of Python 2 modules. It provided a consistent mechanism for handling Python-specific build steps. With the advent of Python 3 and the need for a more robust and future-proof packaging solution that could handle multiple Python versions, the <I>python-support</I> framework, including <b>dh_pysupport</b>, was replaced by <I>dh_python</I>. This transition began around 2010-2012 and concluded with the complete removal of <I>python-support</I> from Debian Stretch in 2017.


title: PARAMETERS
content:
<b><b>-l</b>, <b>--list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all currently connected DFU-capable devices and their properties.<br><br><b><b>-d</b>, <b>--device</b> <i>vendor</i>:<i>product</i>[,<i>vendor</i>:<i>product</i>...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target DFU device by its USB Vendor ID (VID) and Product ID (PID). Multiple devices can be specified.<br><br><b><b>-a</b>, <b>--alt</b> <i>alt_setting</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific alternate interface setting for the DFU operation. This is crucial for devices with multiple memory regions.<br><br><b><b>-i</b>, <b>--interface</b> <i>interface_number</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the DFU interface number to use, useful for devices with multiple DFU interfaces.<br><br><b><b>-s</b>, <b>--serial</b> [<i>serial_string</i>|<i>serial_number</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects the device based on its USB serial number or string, useful when multiple identical devices are connected.<br><br><b><b>-p</b>, <b>--path</b> <i>bus-port.port...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects the device by its physical USB bus and port path, for precise device targeting.<br><br><b><b>-U</b>, <b>--upload</b> <i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uploads (reads) firmware from the DFU device and saves it to the specified <i>filename</i>.<br><br><b><b>-D</b>, <b>--download</b> <i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads (writes) firmware from the specified <i>filename</i> to the DFU device. The file should be in a DFU-compatible format (e.g., .dfu, .bin).<br><br><b><b>-R</b>, <b>--reset</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resets the device after the DFU operation (upload or download) completes, often taking it out of DFU mode.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the DFU process for debugging.<br><br>


title: DESCRIPTION
content:
The <b>dfutool</b>, most commonly referring to the widely used open-source utility <b>dfu-util</b> on Linux, is a powerful command-line tool designed to communicate with devices that support the USB Device Firmware Upgrade (DFU) protocol. This protocol enables in-system programming of firmware, allowing users to update, upgrade, or recover the firmware on microcontrollers and embedded systems directly over a standard USB connection. <b>dfu-util</b> provides essential functionalities such as uploading (reading) firmware from a device, downloading (writing) new firmware to it, erasing device memory, and listing available DFU-capable devices. It is an indispensable tool in embedded systems development, rapid prototyping, and field maintenance, offering a flexible and standardized method to manage device firmware without requiring specialized JTAG/SWD programmers or debuggers beyond a simple USB cable. Its broad adoption makes it compatible with numerous microcontrollers, including those from STMicroelectronics, Atmel, and others.


title: CAVEATS
content:
The term <b>dfutool</b> can sometimes refer to vendor-specific or proprietary Device Firmware Upgrade utilities (e.g., for Cypress or Microchip devices), which may have different syntax and functionalities compared to the general-purpose <b>dfu-util</b>. Users should verify which specific tool is intended. <br>For <b>dfu-util</b> to function correctly, proper USB device permissions are required, often configured via udev rules or by running the command with superuser privileges (e.g., using <b>sudo</b>). Without correct permissions, devices may not be detected or accessible. <br>Using incorrect or corrupted firmware images can potentially 'brick' a device, rendering it inoperable. Always ensure the firmware file is compatible and verified for your specific hardware.


title: DFU MODE
content:
For <b>dfutool</b> (or <b>dfu-util</b>) to interact with a device, the device must first be placed into its specific DFU mode. This often involves a particular hardware procedure, such as holding down a 'boot' button during power-up, shorting specific pins, or issuing a software command that triggers a reset into DFU mode. The exact method for entering DFU mode varies significantly between device manufacturers and models and is crucial for successful firmware operations.


title: HISTORY
content:
The USB Device Firmware Upgrade (DFU) specification was developed by the USB Implementers Forum to standardize in-field firmware updates over USB. The open-source <b>dfu-util</b> project emerged to provide a cross-platform, free implementation of this protocol. It began development around 2007 and has since become a cornerstone tool for embedded systems development, particularly in the open-source community, complementing or replacing proprietary DFU tools. It continues to be actively maintained and updated to support new DFU specifications and device implementations.


title: SYNOPSIS
content:
<i><code>dhclient [<b>-r</b>|<b>-d</b>|<b>-v</b>|<b>-q</b>] [<b>-cf</b> <I>config-file</I>] [<b>-lf</b> <I>lease-file</I>] [<b>-p</b> <I>port</I>] [<b>-I</b> <I>client-id</I>] [<b>-H</b> <I>hostname</I>] [<I>interface</I> ...]</i>


title: PARAMETERS
content:
<b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Release the current lease and shut down the interface.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force <code>dhclient</code> to run in the foreground (debug mode).<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output to stderr.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be quiet; suppress non-essential output.<br><br><b><b>-cf</b> <I>config-file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative configuration file path.<br><br><b><b>-lf</b> <I>lease-file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative lease database file path.<br><br><b><b>-p</b> <I>port</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the UDP port number <code>dhclient</code> should use.<br><br><b><b>-I</b> <I>client-id</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the client identifier to send to the DHCP server.<br><br><b><b>-H</b> <I>hostname</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the hostname to send to the DHCP server.<br><br><b><I>interface</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The network interface (e.g., eth0, enp0s3) to configure.<br><br>


title: DESCRIPTION
content:
<i><code>dhclient</code> is the ISC DHCP client program, responsible for obtaining an IP address and other network configuration parameters from a DHCP server. When executed, it sends DHCP discovery requests, receives DHCP offers, and then requests and acknowledges a lease for network configuration. This typically includes an IP address, subnet mask, default gateway, DNS server addresses, and possibly other options like NTP servers or domain search lists.<br><br>The command often runs as a daemon, managing the network interface throughout its lifecycle, including lease renewal and release. It reads configuration from <code>/etc/dhcp/dhclient.conf</code> and stores lease information in <code>/var/lib/dhclient/dhclient.leases</code>. Upon successful configuration, <code>dhclient</code> executes the <code>dhclient-script</code> (typically found at <code>/usr/sbin/dhclient-script</code>) to apply the network settings to the operating system. This makes <code>dhclient</code> a critical component for most dynamic network setups on Linux systems.</i>


title: CAVEATS
content:
<i>Running <code>dhclient</code> typically requires root privileges as it modifies network interface settings. Ensure no conflicting network management services (e.g., NetworkManager, systemd-networkd) are also attempting to configure the same interface, which can lead to unpredictable behavior. When using <code>dhclient</code>, the lease file is critical; if it becomes corrupted or lost, the client may not correctly remember its previous lease information, potentially leading to delays or issues in obtaining a new IP address.</i>


title: LEASE MANAGEMENT AND RENEWAL
content:
<i><code>dhclient</code> actively manages the obtained IP address lease. Before a lease expires, <code>dhclient</code> attempts to renew it with the DHCP server, typically at 50% and 87.5% of the lease duration. If renewal fails, it will attempt to rebind to the server, and if that also fails, it will seek a new lease. This continuous process ensures uninterrupted network connectivity.</i>


title: CONFIGURATION AND SCRIPTING
content:
<i>Beyond the command-line options, <code>dhclient</code>'s behavior is heavily influenced by <code>/etc/dhcp/dhclient.conf</code>, which can specify requested DHCP options, preferred lease times, and various client behaviors. Upon receiving a lease, <code>dhclient</code> invokes <code>/usr/sbin/dhclient-script</code> (or a system-specific equivalent), which is a powerful shell script responsible for actually configuring the network interface, updating DNS settings in <code>/etc/resolv.conf</code>, and executing any custom hooks defined in <code>/etc/dhcp/dhclient-enter-hooks.d/</code> or <code>/etc/dhcp/dhclient-exit-hooks.d/</code> directories.</i>


title: HISTORY
content:
<i><code>dhclient</code> is a fundamental component of the Internet Systems Consortium (ISC) DHCP distribution, a widely adopted open-source implementation of the DHCP protocol. Its origins trace back to the early days of DHCP, providing robust and standards-compliant client functionality for Unix-like operating systems. Over the years, it has been continually maintained and updated, adapting to new RFCs and operating system changes, making it a cornerstone for dynamic network configuration across countless Linux and Unix deployments.</i>


title: SYNOPSIS
content:
<i>dhclient-script</i> <I>interface</I> <I>reason</I><br><br>While not typically run by users directly, <b>dhclient</b> invokes it with the network <i>interface</i> being configured (e.g., <i>eth0</i>) and the current DHCP <i>reason</i> (e.g., <i>BOUND</i>, <i>RENEW</i>). The actual configuration data is passed via environment variables.


title: PARAMETERS
content:
<b><I>interface</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the network interface currently being configured or deconfigured by <b>dhclient</b> (e.g., <i>eth0</i>, <i>enp0s3</i>).<br><br><b><I>reason</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Indicates the current state or event in the DHCP client's lifecycle that triggered the script execution. Common reasons include: <I>PREINIT</I>, <I>BOUND</I>, <I>RENEW</I>, <I>REBIND</I>, <I>EXPIRE</I>, <I>RELEASE</I>, <I>FAIL</I>.<br><br>


title: DESCRIPTION
content:
<i>dhclient-script</i> is a crucial shell script invoked internally by the <b>dhclient</b> daemon, which is the ISC DHCP client. Its primary purpose is to configure the system's network interfaces based on the DHCP lease information received from a DHCP server. When <b>dhclient</b> successfully obtains or renews a lease, it executes <i>dhclient-script</i>, passing various DHCP option values as environment variables (e.g., IP address, netmask, gateway, DNS servers).<br><br>The script then uses these variables to apply the appropriate network settings, which typically involves: configuring the IP address and netmask for the interface, adding default routes, and updating the <i>/etc/resolv.conf</i> file with DNS server information. It's invoked at different stages of the DHCP negotiation lifecycle, identified by a 'reason' argument (e.g., <I>PREINIT</I>, <I>BOUND</I>, <I>RENEW</I>, <I>EXPIRE</I>, <I>RELEASE</I>, <I>FAIL</I>). Users generally do not execute this script directly; it operates as an internal component of the DHCP client process.


title: CAVEATS
content:
<i>dhclient-script</i> is not intended for direct user execution in most typical scenarios; it's an internal component of the <b>dhclient</b> daemon.<br>It relies heavily on environment variables set by <b>dhclient</b> to receive lease information. Without these, manual execution is largely ineffective for network configuration.<br>Customization should generally be done via hook scripts in designated directories rather than directly modifying <i>dhclient-script</i>, to maintain compatibility and ease upgrades.<br>Behavior can slightly vary between different versions of the ISC DHCP client or if a different DHCP client is used.


title: ENVIRONMENT VARIABLES
content:
When <i>dhclient-script</i> is invoked, <b>dhclient</b> populates numerous environment variables with information from the DHCP lease. These include: <br><i>new_ip_address</i>, <i>new_subnet_mask</i>, <i>new_routers</i>, <i>new_broadcast_address</i> for network settings.<br><i>new_domain_name</i>, <i>new_domain_name_servers</i> for DNS configuration.<br><i>new_ntp_servers</i>, <i>new_host_name</i>, etc., for other DHCP options.<br>The script uses these variables to perform its configuration tasks.


title: HOOK SCRIPTS AND CUSTOMIZATION
content:
The <i>dhclient-script</i> is designed to be extensible. It sources and executes scripts from various directories during its execution, allowing administrators to add custom logic. Common hook directories include: <br><i>/etc/dhcp/dhclient-enter-hooks.d/</i>: Scripts executed at the beginning of the script's run.<br><i>/etc/dhcp/dhclient-exit-hooks.d/</i>: Scripts executed at the end of the script's run.<br><i>/etc/dhcp/dhclient-event-hooks.d/</i>: Scripts executed for specific events (e.g., pre-init, bound).<br>This mechanism is the recommended way to extend or modify <b>dhclient</b>'s behavior without altering the main script.


title: HISTORY
content:
<i>dhclient-script</i> is an integral part of the ISC DHCP client suite, which has been a foundational component for DHCP client functionality in Unix-like operating systems for decades. Its modular and script-based design allows for high flexibility and system-specific customization, a common characteristic of Linux networking tools. It has evolved alongside the <b>dhclient</b> daemon, adapting to new network configurations and operating system features while maintaining its core responsibility of applying DHCP-provided network settings.


title: PARAMETERS
content:
<b><b>-b</b>, <b>--background</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Background the client after configuration.<br><br><b><b>-d</b>, <b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose debug messages.<br><br><b><b>-k</b>, <b>--release</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Release the IP address and exit. Removes lease information.<br><br><b><b>-n</b>, <b>--rebind</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force a rebind to a new lease.<br><br><b><b>-r</b>, <b>--request</b> <i><ipaddr></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Request a specific IP address from the DHCP server.<br><br><b><b>-x</b>, <b>--exit</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit and remove the lease. Similar to <b>-k</b> but also removes dynamic routes and DNS entries.<br><br><b><b>-w</b>, <b>--waitip</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Wait for an IP address to be configured before exiting. Useful in scripts.<br><br><b><b>-c</b>, <b>--config</b> <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative configuration file path instead of the default <i>/etc/dhcpcd.conf</i>.<br><br><b><b>-4</b>, <b>--ipv4only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only configure IPv4 addresses; ignore IPv6.<br><br><b><b>-6</b>, <b>--ipv6only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only configure IPv6 addresses (DHCPv6 and SLAAC); ignore IPv4.<br><br>


title: DESCRIPTION
content:
<i>dhcpcd</i> is a <b>DHCP client daemon</b> that automatically configures network interfaces on Linux systems. It supports both IPv4 and IPv6 (including DHCPv6 and SLAAC) and manages the entire network configuration lifecycle: discovering DHCP servers, requesting an IP address, configuring the interface (IP, netmask, gateway, DNS servers), and renewing leases. <br><br>Known for its robustness and efficiency, <i>dhcpcd</i> can handle multiple network interfaces simultaneously, manage static IP configurations, and ensure persistent network settings across reboots. It interacts with the kernel to set up routes and DNS resolution. Its extensible hook system allows for custom scripts to be executed at various stages of the DHCP process, making it highly customizable for diverse networking environments. It's a foundational tool for automated network setup, especially in environments where network configuration needs to be dynamic and reliable.


title: CAVEATS
content:
<i>dhcpcd</i> typically requires <b>root privileges</b> to operate as it modifies network interfaces and system configuration files. It can potentially conflict with other network management services (e.g., NetworkManager, systemd-networkd) if they are simultaneously attempting to configure the same network interface. Proper configuration, especially via <i>/etc/dhcpcd.conf</i>, is crucial to avoid network misconfigurations and ensure desired behavior.


title: CONFIGURATION FILE
content:
The primary configuration file for <i>dhcpcd</i> is <b>/etc/dhcpcd.conf</b>. This file allows users to define static IP addresses, specify desired options to send/request from the DHCP server, set timeouts, manage persistent leases, and control other advanced network settings. It's critical for persistent and customized network behavior, overriding default command-line options.


title: HOOKS
content:
<i>dhcpcd</i> uses an extensive hook system, with scripts typically located in <b>/usr/lib/dhcpcd/dhcpcd-hooks/</b> (or similar distribution-specific paths). These scripts are executed at different stages of the DHCP process (e.g., when an IP is obtained, renewed, or released). They are responsible for vital tasks like updating <i>/etc/resolv.conf</i> with DNS server information, configuring NTP servers, or running custom post-configuration actions.


title: HISTORY
content:
<i>dhcpcd</i> originated from NetBSD and has been ported to Linux, becoming a popular choice for its lightweight footprint and robust performance. It's widely adopted in various Linux distributions and embedded systems due to its reliability in managing dynamic network configurations. Its continuous development has ensured support for modern network protocols, including DHCPv6 and Stateless Address Autoconfiguration (SLAAC), maintaining its relevance as a core network configuration tool.


title: SYNOPSIS
content:
The command's syntax typically involves specifying options and, optionally, the network interfaces it should listen on:<br><br><b><code>dhcpd</code></b> [ <i>options</i> ] [ <i>interface0</i> [... <i>interfaceN</i> ] ]<br><br>Examples of common options include forcing IPv4/IPv6, specifying configuration and lease files, and managing daemonization.


title: PARAMETERS
content:
<b>-4</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force `dhcpd` to operate on IPv4 only.<br><br><b>-6</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force `dhcpd` to operate on IPv6 only.<br><br><b>-p <i>port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Listen for DHCP requests on a different UDP <i>port</i> instead of the default (67 for IPv4, 547 for IPv6).<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debug mode; log messages to standard error (stderr) in addition to syslog.<br><br><b>-f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run `dhcpd` in the foreground instead of daemonizing. Useful for debugging or containerized environments.<br><br><b>-cf <i>config-file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternate configuration <i>file</i> for `dhcpd` to use instead of the default `/etc/dhcp/dhcpd.conf`.<br><br><b>-lf <i>lease-file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternate lease database <i>file</i> to record IP address assignments, instead of the default `/var/lib/dhcp/dhcpd.leases`.<br><br><b>-user <i>user</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Drop privileges to the specified <i>user</i> after startup. Recommended for security.<br><br><b>-group <i>group</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Drop privileges to the specified <i>group</i> after startup. Recommended for security.<br><br><b>-chroot <i>directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Change the root <i>directory</i> (`chroot`) after startup, enhancing security by confining the daemon.<br><br><b>-pid-file <i>pid-file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternate PID <i>file</i> to store the process ID of the running daemon.<br><br><b>[<i>interfaces...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify one or more network <i>interfaces</i> on which `dhcpd` should listen for DHCP requests. If omitted, it typically listens on all available interfaces configured in `dhcpd.conf`.<br><br>


title: DESCRIPTION
content:
The `dhcpd` command is the <b>ISC DHCP server daemon</b> for Linux and Unix-like systems. It is responsible for dynamically assigning IP addresses and other network configuration parameters to clients on a network using the <i>Dynamic Host Configuration Protocol</i> (DHCP).<br><br>When a DHCP client boots up or connects to the network, it sends a broadcast request for an IP address. `dhcpd` listens for these requests on configured network interfaces. Upon receiving a request, it consults its primary configuration file, <i>`dhcpd.conf`</i>, and its lease database, <i>`dhcpd.leases`</i>, to determine an available IP address and other network settings (such as subnet mask, default gateway, and DNS servers). It then offers this configuration to the client. If the client accepts, `dhcpd` acknowledges the assignment and records the lease in its database.<br><br>It supports both <b>IPv4</b> and <b>IPv6</b> operations, making it a versatile and essential service for automated network management, reducing manual configuration efforts and preventing IP address conflicts.


title: CAVEATS
content:
<ul><li>`dhcpd` <b>requires root privileges</b> to start and bind to privileged ports (UDP 67/547). It's best practice to drop privileges to a less privileged user/group after startup.</li><li>The <i>`dhcpd.conf`</i> configuration file can be complex; syntax errors will prevent the daemon from starting. Always validate configuration before restarting.</li><li>Only <b>one instance</b> of `dhcpd` should manage a given IP address pool to prevent conflicts and ensure consistent lease management.</li><li>The <i>`dhcpd.leases`</i> file is critical for tracking assigned IPs and must be protected from corruption and unauthorized access. Regularly back it up.</li><li>Proper firewall rules are essential to restrict DHCP traffic to only necessary interfaces and ensure network security.</li></ul>


title: DHCP LEASE MANAGEMENT
content:
<i>DHCP leases</i> are temporary assignments of IP addresses to clients. `dhcpd` diligently tracks these leases in its <b>`dhcpd.leases`</b> file, recording details such as the assigned IP, MAC address of the client, lease start time, and expiration time. This allows the server to manage the IP address pool effectively, renewing leases for active clients, reassigning expired addresses, and preventing address conflicts. The lease file is crucial for the server's operation and state persistence across restarts.


title: THE DORA PROCESS
content:
`dhcpd` orchestrates IP address assignment through the <b>DORA</b> process (<i>Discover</i>, <i>Offer</i>, <i>Request</i>, <i>Acknowledge</i>).<br><ul><li><b>Discover</b>: Client broadcasts to find a DHCP server.</li><li><b>Offer</b>: `dhcpd` responds with an available IP address and configuration.</li><li><b>Request</b>: Client formally requests the offered IP.</li><li><b>Acknowledge</b>: `dhcpd` confirms the assignment, completing the lease process.</li></ul>This sequence ensures reliable and dynamic IP allocation.


title: HISTORY
content:
The <b>Internet Systems Consortium (ISC) DHCP server</b>, implemented by `dhcpd`, has a long and significant history in the open-source networking world. Developed by ISC, a non-profit organization dedicated to supporting the Internet infrastructure, it has been a cornerstone for dynamic IP address management since its early versions in the 1990s. Its continuous development has seen the integration of features like IPv6 support, failover capabilities, and robust lease management, establishing it as one of the most widely deployed and reliable DHCP server implementations across various Unix and Linux distributions. Its open-source nature has contributed to its widespread adoption and community support.


title: SYNOPSIS
content:
<b>dhcpdump</b> [<i>options</i>]<br>Common usage examples:<br><b>tcpdump</b> -q -s 0 -w - port bootps or port bootpc | <b>dhcpdump</b><br><b>dhcpdump</b> -i <i>eth0</i>


title: PARAMETERS
content:
<b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br><b>-i <i><interface></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads packets directly from the specified network <i><interface></i>. <br>This option typically requires root privileges and might rely on internal <br>calls to <i>tcpdump</i> or similar capture mechanisms.<br><br><b>-r <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads packets from the specified PCAP <i><file></i> instead of standard input <br>or a live interface.<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the network interface from being put into promiscuous mode when <br>capturing directly via <b>-i</b>.<br><br><b>-q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quick (quiet) mode. Provides a more concise output by suppressing some <br>detailed information.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not resolve hostnames. Displays IP addresses numerically instead of <br>attempting to resolve them to hostnames.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verbose mode. Provides more detailed output, though its exact effect can <br>vary between different <i>dhcpdump</i> implementations.<br><br>


title: DESCRIPTION
content:
<i>dhcpdump</i> is a command-line utility designed to decode and display the contents of <br>DHCP (Dynamic Host Configuration Protocol) and BOOTP (Bootstrap Protocol) <br>packets in a human-readable format. It acts as a specialized dissector, <br>processing raw packet data, typically received from network packet capture <br>tools like <i>tcpdump</i> or <i>tshark</i>. Its primary function is to simplify the <br>analysis of DHCP/BOOTP communications, making it easier for network <br>administrators and engineers to troubleshoot DHCP issues, monitor client <br>lease assignments, and verify server responses.<br><br>When combined with packet capture tools, <i>dhcpdump</i> presents detailed <br>information such as transaction IDs, client MAC addresses, requested IP <br>addresses, lease times, DHCP message types (discover, offer, request, ack, <br>nak, decline), and various DHCP options (subnet mask, router, DNS servers, etc.). <br>This makes it an invaluable tool for understanding the intricacies of the <br>DHCP negotiation process on a network.


title: CAVEATS
content:
<i>dhcpdump</i>'s direct packet capture capabilities (using <b>-i</b> or <b>-r</b>) are <br>not universally present across all implementations; some versions strictly <br>expect piped input from tools like <i>tcpdump</i>. <br>It relies on accurate filtering of DHCP/BOOTP traffic to avoid processing <br>unrelated network data. <br>The exact set of supported DHCP options and the output format can vary <br>between different versions and distributions. <br>Some very new or non-standard DHCP options might not be fully decoded.


title: TYPICAL USAGE WITH PACKET CAPTURE TOOLS
content:
The most common way to use <i>dhcpdump</i> is by piping the raw packet output <br>from a packet capture tool to its standard input. For instance, <br><b>tcpdump -q -s 0 -w - 'port bootps or port bootpc' | dhcpdump</b> <br>captures all DHCP/BOOTP traffic and passes it to <i>dhcpdump</i> for parsing. <br>The <b>-s 0</b> option ensures full packets are captured, <b>-w -</b> writes to <br>standard output, and the filter expression <b>'port bootps or port bootpc'</b> <br>specifically targets DHCP/BOOTP ports (67 and 68).


title: INTERPRETING OUTPUT
content:
<i>dhcpdump</i>'s output is structured to highlight key DHCP transaction <br>details. It typically includes: <br><i>• Transaction ID (Xid)</i>: A unique identifier for the DHCP exchange.<br><i>• Message Type</i>: Indicates the DHCP message (e.g., DISCOVER, OFFER, <br>REQUEST, ACK, NAK).<br><i>• Client MAC Address (Chaddr)</i>: The hardware address of the client.<br><i>• Client IP Address (Ciaddr)</i>: The client's current IP address (if applicable).<br><i>• Requested IP Address (Yiaddr)</i>: The IP address offered by the server or <br>requested by the client.<br><i>• Lease Time</i>: How long the IP address is valid.<br><i>• DHCP Options</i>: Detailed list of options like Subnet Mask, Router, DNS <br>Servers, Server Identifier, etc. This information is crucial for verifying <br>network configurations and debugging connectivity issues.


title: HISTORY
content:
<i>dhcpdump</i> emerged as a specialized tool during the early days of widespread <br>DHCP adoption, complementing general-purpose packet sniffers like <br><i>tcpdump</i>. Its development was driven by the need for simpler, human-readable <br>analysis of DHCP negotiations without requiring a full graphical protocol <br>analyzer. Initially, many implementations were simple scripts (e.g., Perl or <br>Awk) designed to parse <i>tcpdump</i> output. Over time, compiled binaries <br>providing more robust parsing and optional direct capture capabilities <br>became available. Its usage remains valuable for quick, focused DHCP <br>analysis, especially in environments where a full-fledged network analyzer <br>is not readily available or when debugging DHCP issues at the command line.


title: PARAMETERS
content:
<b>-i <i><interface></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the network interface to use for sending DHCP requests (e.g., eth0, wlan0).<br><br><b>-t <i><threads></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the number of concurrent threads to use for sending requests, improving attack speed.<br><br><b>-r <i><rate></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define the rate of DHCP DISCOVER requests per second.<br><br><b>-s <i><source_ip></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a source IP address for the DHCP packets. Can be spoofed to conceal origin.<br><br><b>-d <i><delay></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a delay (in seconds) between sending each DHCP DISCOVER request.<br><br><b>-p <i><port></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the source UDP port to use for the DHCP requests (default is 68).<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit immediately when the DHCP IP pool is exhausted (server stops offering IPs).<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output to display more detailed information about the attack's progress.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the help message and exit, showing available options and usage.<br><br>


title: DESCRIPTION
content:
<i>dhcpig</i> is a Python-based command-line utility designed to perform DHCP starvation attacks. Its primary function is to flood a DHCP server with a large number of DHCP DISCOVER requests, each typically spoofing a unique MAC address. This continuous stream of requests aims to exhaust the DHCP server's available IP address pool, preventing legitimate clients from obtaining IP addresses and effectively causing a Denial of Service (DoS) condition on the network. While primarily used by security professionals for penetration testing and assessing network resilience against such attacks, its misuse can severely disrupt network operations. The tool operates by crafting and sending raw DHCP packets, often leveraging Python's Scapy library, and can be configured with various options like the number of threads, request rate, and source IP spoofing.


title: CAVEATS
content:
<i>dhcpig</i> is a powerful tool with the potential to cause significant network disruption. Its use without explicit authorization on any network is illegal and unethical, and can lead to a complete Denial of Service (DoS) for all legitimate clients attempting to obtain network connectivity. It should only be used in controlled environments, such as dedicated penetration testing labs, or on networks where you have received explicit permission to perform such testing. Always ensure you understand the legal and ethical implications before deploying this command.


title: HISTORY
content:
<i>dhcpig</i> emerged as a specialized tool within the cybersecurity community, particularly among penetration testers, to assess the resilience of DHCP services. While it does not have a long, well-documented development history like some foundational Linux commands, its creation is rooted in the need for a simple, scriptable method to demonstrate and test against DHCP starvation attacks. It leverages libraries like Scapy, which provides the underlying packet crafting capabilities, making it a common type of network attack script found in modern ethical hacking and security testing toolkits.


title: PARAMETERS
content:
<b>-i <I>interface</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the network interface to use for sending and receiving DHCP packets (e.g., eth0, wlan0).<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a DHCP starvation attack, attempting to exhaust the server's IP address pool.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches a rogue DHCP server attack, offering malicious network configurations to clients.<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to perform a DHCP server kill/Denial-of-Service attack by sending crafted packets.<br><br><b>-t <I>target_ip</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the IP address of the target DHCP server (useful for targeted attacks).<br><br><b>-h <I>MAC_address</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular MAC address to use for spoofing during attacks. If omitted, a random MAC will be generated.<br><br><b>-d <I>delay</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Introduces a delay (in seconds) between sending DHCP requests during starvation attacks.<br><br><b>--no-release</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the tool from releasing acquired DHCP leases during starvation attacks, ensuring the IPs remain consumed.<br><br><b>-N <I>number</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the number of DHCP requests to send before stopping (primarily for starvation attacks).<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about the attack progress and packet exchanges.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits immediately upon encountering the first error.<br><br>


title: DESCRIPTION
content:
<b>dhcpwn</b> is a powerful Python-based utility designed for conducting various DHCP (Dynamic Host Configuration Protocol) attacks. Its primary functionalities include DHCP starvation and rogue DHCP server attacks.<br><br>In a DHCP starvation attack, <b>dhcpwn</b> floods the network with DHCP DISCOVER requests, using a multitude of spoofed MAC addresses, aiming to exhaust the DHCP server's available IP address pool. This can lead to a denial-of-service (DoS) for legitimate clients attempting to obtain an IP address. When used as a rogue DHCP server, <b>dhcpwn</b> can respond to DHCP DISCOVER requests with malicious network configurations, such as pointing clients to a malicious DNS server or gateway, thereby facilitating man-in-the-middle (MiTM) attacks.<br><br>This tool is commonly employed by penetration testers and security professionals to assess the resilience of network infrastructure against DHCP-based threats and to identify vulnerabilities in DHCP server configurations. It requires raw socket access, meaning it typically needs <i>root privileges</i> to operate effectively.


title: CAVEATS
content:
Using <b>dhcpwn</b> can disrupt network services and should only be performed on networks where you have explicit permission. It requires <i>root privileges</i> to operate due to its need for raw socket access. Its effectiveness can vary depending on the target DHCP server's security configurations, such as DHCP snooping, port security, or MAC address filtering. Always use responsibly and ethically.


title: ETHICAL HACKING CONTEXT
content:
<b>dhcpwn</b> is a crucial tool in the arsenal of ethical hackers and penetration testers. It allows security professionals to simulate common DHCP-related attacks in a controlled environment to identify and mitigate potential security loopholes before malicious actors can exploit them.


title: DEPENDENCIES
content:
As a Python-based utility, <b>dhcpwn</b> relies on specific Python libraries for packet manipulation, most notably <i>Scapy</i>. These dependencies are typically satisfied when the tool is installed through a package manager on penetration testing distributions.


title: HISTORY
content:
<b>dhcpwn</b> emerged as a specialized tool within the cybersecurity community, primarily designed for penetration testing and vulnerability assessment of network infrastructures. It's often bundled with popular penetration testing distributions like <i>Kali Linux</i> and <i>Parrot OS</i>, reflecting its role as a dedicated utility for exploiting DHCP-related weaknesses. Its development focuses on providing a straightforward interface for common DHCP attack vectors, making it accessible to security professionals for simulating real-world threats and understanding network vulnerabilities.


title: PARAMETERS
content:
<b><I>numbits</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the desired bit length of the prime parameter (<I>p</I>) to be generated. Common values include 1024, 2048 (default for recent OpenSSL), and 4096. This argument is typically placed at the end of the command.<br><br><b>-in <I>filename</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an input file from which to read DH parameters, rather than generating new ones.<br><br><b>-out <I>filename</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an output file to which the generated or processed DH parameters will be written. If not specified, parameters are written to standard output.<br><br><b>-text</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the DH parameters in a human-readable, textual format, including the prime (<I>p</I>) and generator (<I>g</I>).<br><br><b>-C</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the DH parameters in C code format, which can be directly embedded into C programs.<br><br><b>-noout</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the output of the encoded (PEM or DER) version of the parameters. Useful when only checking or printing text/C code.<br><br><b>-check</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verifies the consistency of the DH parameters read from the input file. It checks if <I>p</I> is prime and if <I>g</I> is a valid generator.<br><br><b>-dsaparam</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates DH parameters from DSA parameters. This can be faster as DSA parameter generation is often optimized for speed, and the resulting DH parameters share similar properties.<br><br><b>-rand <I>file(s)</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more files containing random data to seed the random number generator used for prime generation. This enhances the unpredictability of the generated parameters.<br><br><b>-engine <I>id</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular OpenSSL cryptographic engine to use for operations, often for hardware-accelerated cryptography.<br><br><b>-2</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the use of 2 as the generator (<I>g</I>). While faster, <I>g=2</I> is generally less secure than <I>g=5</I> or a randomly chosen generator for specific attacks.<br><br><b>-5</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the use of 5 as the generator (<I>g</I>). This is generally considered more robust than <I>g=2</I> when a fixed generator is desired.<br><br>


title: DESCRIPTION
content:
The <b>dhparam.1s</b> reference points to the <I>openssl dhparam</I> command, a utility within the OpenSSL toolkit used for generating and managing Diffie-Hellman (DH) parameters. Diffie-Hellman key exchange is a fundamental cryptographic primitive that enables two parties to establish a shared secret over an insecure communication channel. These parameters consist of a large prime number (<I>p</I>) and a generator (<I>g</I>), which define the finite cyclic group used in the key exchange.<br><br>Generating strong, unique DH parameters is crucial for ensuring the security of protocols like TLS/SSL, especially when using ephemeral Diffie-Hellman (DHE) cipher suites. DHE provides Perfect Forward Secrecy (PFS), meaning that even if a server's long-term private key is compromised, past session keys remain secure. The command allows users to create new parameters of a specified bit length, verify existing parameters for consistency, and output them in various formats for use in applications like web servers (e.g., Nginx, Apache) or VPNs.


title: CAVEATS
content:
Generating strong DH parameters, especially with larger bit lengths (e.g., 4096 bits), can be a computationally intensive and time-consuming process. Reusing the same DH parameters across many servers, while not as critical as reusing private keys, is generally discouraged in favor of unique parameters per server or organization to mitigate certain risks related to logjam attacks. Modern security recommendations suggest a minimum of 2048-bit parameters; 1024-bit and 512-bit parameters are considered insecure for new deployments. The security of generated parameters heavily relies on a high-quality source of entropy for the random number generator.


title: ROLE IN PERFECT FORWARD SECRECY (PFS)
content:
In the context of TLS/SSL, the <I>openssl dhparam</I> command is particularly important for enabling ephemeral Diffie-Hellman (DHE) cipher suites. When a server uses DHE, it generates new, unique DH parameters for each client connection or session. This ensures that the session key derived from the DH exchange is 'ephemeral' (short-lived). If the server's long-term private key is ever compromised, these past session keys remain secure because they were established using distinct, temporary DH parameters, thus providing Perfect Forward Secrecy.


title: PRIME `P` AND GENERATOR `G`
content:
The security of the Diffie-Hellman key exchange fundamentally relies on two numbers: a large prime number <B>p</B> and a generator <B>g</B> (a primitive root modulo <B>p</B>). These numbers define the mathematical group within which the key exchange operations are performed. The <I>dhparam</I> command generates these values, ensuring they have the necessary cryptographic properties (e.g., <B>p</B> is a strong prime) to resist known attacks. The bit length specified with <I>numbits</I> directly corresponds to the size of <B>p</B>.


title: HISTORY
content:
The Diffie-Hellman key exchange algorithm was published in 1976 by Whitfield Diffie and Martin Hellman, marking a pivotal moment in public-key cryptography. The <I>dhparam</I> command has been a core component of the OpenSSL toolkit for many years, reflecting its importance in securing network communications. Over time, as computing power has increased and cryptanalysis techniques have advanced, the recommended bit length for DH parameters has progressively risen. Early implementations might have used 512-bit or 1024-bit parameters, while 2048-bit has become the standard minimum for modern applications, and 4096-bit is increasingly adopted for enhanced security. This evolution highlights the continuous arms race in cryptography.


title: SYNOPSIS
content:
<i>dict</i> [options] &lt;word&gt;<br><i>dict</i> [options] -f &lt;file&gt;<br><i>dict</i> [options] -s<br><i>dict</i> [options] -D &lt;database&gt;<br><i>dict</i> [options] -M &lt;strategy&gt;<br><i>dict</i> [options] -I<br><i>dict</i> [options] -S<br><i>dict</i> [options] -V<br><i>dict</i> [options] -H


title: PARAMETERS
content:
<b>-h <server>, --host <server></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the DICT server hostname or IP address to connect to.<br><br><b>-p <port>, --port <port></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the port number on the server to connect to. Default is 2628.<br><br><b>-d <database>, --database <database></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which dictionary database to search. Use `*` to search all available databases.<br><br><b>-m <strategy>, --strategy <strategy></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the matching strategy for the lookup (e.g., <i>exact</i>, <i>soundex</i>, <i>levenshtein</i>).<br><br><b>-L, --list-databases</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all dictionary databases available on the connected server.<br><br><b>-S, --list-strategies</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all matching strategies supported by the connected server.<br><br><b>-f <file>, --file <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads a list of words to look up from the specified file, one word per line.<br><br><b>-s, --servers</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the list of default DICT servers configured in the system.<br><br>


title: DESCRIPTION
content:
The <i>dict</i> command is a client for the <B>DICT protocol</B>, specified in <B>RFC 2229</B>. It allows users to query network-based dictionary servers for definitions, word lists, and other lexical information.<br><br>This utility is commonly used to look up word definitions directly from the command line, often connecting to public DICT servers available on the internet. It supports various dictionary databases on the server, and users can specify which databases to search or search all available ones. Beyond simple definitions, <i>dict</i> can also perform "match" operations to find words similar to a pattern, or retrieve server information.<br><br>The command is versatile, allowing for both direct word lookups and more advanced queries, making it a powerful tool for linguists, writers, or anyone needing quick access to lexical data. It typically operates on port 2628 by default, connecting to the server to send queries and display the received definitions or information.


title: CAVEATS
content:
The <i>dict</i> command is a client-side utility and requires a running DICT server to function. Its utility and the quality of definitions are entirely dependent on the availability and content of the connected server. Network connectivity is essential for querying remote servers, and some public servers may have usage policies or rate limits.


title: COMMON USAGE EXAMPLE
content:
To look up a word, simply type <B>dict <i>word</i></B>. For example, to find the definition of '<i>ubiquitous</i>': <br><i>dict ubiquitous</i><br><br>To list all databases on a specific server: <br><i>dict -h dict.org -L</i><br><br>To search for words matching a pattern (e.g., words starting with '<i>tele</i>') using a specific strategy: <br><i>dict -m prefix -d * tele</i>


title: HISTORY
content:
The DICT protocol was designed in the late 1990s as a standardized way to access dictionary data over the internet, inspired by the success of protocols like HTTP and FTP. <B>RFC 2229</B>, which defines the DICT protocol, was published in <B>September 1997</B>. The <i>dict</i> command-line client was developed as part of the initial implementation efforts to provide an easy way to interact with these servers. It became a standard utility in many Unix-like operating systems for its simplicity and efficiency in querying lexical data over a dedicated protocol, contrasting with less structured web-scraping methods.


title: SYNOPSIS
content:
<b>diff</b> [<i>OPTIONS</i>] <i>FILE1 FILE2</i><br><b>diff</b> [<i>OPTIONS</i>] <i>DIRECTORY1 DIRECTORY2</i><br><b>diff</b> [<i>OPTIONS</i>] <i>FILE DIRECTORY</i>


title: PARAMETERS
content:
<b><b>-u</b> or <b>--unified</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output in unified format. This is a compact way to show changes, commonly used for creating patch files.<br><br><b><b>-c</b> or <b>--context</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output in context format. Shows several lines of context around each change for better readability.<br><br><b><b>-N</b> or <b>--new-file</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat absent files as empty. Useful when comparing directories where one file might be missing.<br><br><b><b>-r</b> or <b>--recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively compare subdirectories when comparing two directories.<br><br><b><b>-q</b> or <b>--brief</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output only a summary, stating if files differ or are identical, without detailed diff output.<br><br><b><b>-y</b> or <b>--side-by-side</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output in a two-column format, showing <i>FILE1</i> on the left and <i>FILE2</i> on the right for visual comparison.<br><br><b><b>-w</b> or <b>--ignore-all-space</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore all whitespace changes when comparing lines.<br><br><b><b>-B</b> or <b>--ignore-blank-lines</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore changes where lines are blank.<br><br><b><b>-I</b> <i>REGEXP</i> or <b>--ignore-matching-lines=</b><i>REGEXP</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore changes to lines that match the provided regular expression.<br><br><b><b>--no-dereference</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not follow symbolic links; compare the links themselves rather than their targets.<br><br>


title: DESCRIPTION
content:
The <b>diff</b> command is a fundamental Unix utility used to compare two files or directories line by line. It outputs the differences between them, indicating which lines have been added, deleted, or changed. This utility is indispensable for tracking changes in source code, configuration files, and text documents. <b>diff</b> can generate various output formats, including the traditional "normal" format, "context" format (showing lines around the changes), and the highly popular "unified" format, which is compact and commonly used with <b>patch</b> to apply changes. When comparing directories, <b>diff</b> recursively identifies differing files and reports on them. It's a cornerstone tool in version control systems and software development workflows.


title: CAVEATS
content:
<b>diff</b> performs line-based comparisons. It does not understand the semantic meaning of code or text, only character differences on a line.<br>For binary files, <b>diff</b> typically reports only that the files differ without showing content changes.<br>Comparing very large files or directories can be resource-intensive and slow.


title: EXIT STATUS
content:
<b>diff</b> exits with a status of 0 if the files are identical, 1 if they differ, and 2 if an error occurred. This makes it suitable for use in scripts to conditionally execute commands based on file differences.


title: OUTPUT FORMATS OVERVIEW
content:
The default <b>normal</b> format shows additions (a), deletions (d), and changes (c) with line numbers. The <b>context</b> format (<b>-c</b>) provides more surrounding lines for clarity. The <b>unified</b> format (<b>-u</b>) is highly compact, showing changes prefixed with <b>+</b> for additions, <b>-</b> for deletions, and a space for unchanged lines; it's often used to create patch files. The <b>side-by-side</b> format (<b>-y</b>) presents the files in two columns for easy visual comparison.


title: HISTORY
content:
The <b>diff</b> utility dates back to the early days of Unix, first appearing in Research Unix, likely developed in the 1970s. It was created by Douglas McIlroy at Bell Labs. Its fundamental algorithm, based on the longest common subsequence problem, revolutionized how changes in text files could be tracked and applied, paving the way for modern version control systems. It has been a standard Unix utility ever since and is part of the POSIX standard.


title: PARAMETERS
content:
<b>-o, --output=<i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output PDF file to save the highlighted differences. If not specified and no viewer is opened, the comparison results are only indicated by the exit status.<br><br><b>-s, --view-mode=<i>MODE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the interactive viewer mode (e.g., <i>swipe</i>, <i>fade</i>, <i>difference</i>). This option requires the interactive viewer to be available and not suppressed by <i>--no-view</i>.<br><br><b>-r, --resolution=<i>DPI</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the rendering resolution in DPI for page comparison (default is typically 100). Higher DPI means better accuracy but slower processing and larger memory consumption.<br><br><b>-m, --match-pages</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to match pages by content similarity rather than by page number, useful for documents with inserted or deleted pages, or reordered content.<br><br><b>--no-antialias</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables anti-aliasing during rendering, potentially showing more subtle pixel differences that might otherwise be smoothed over. This can make differences more apparent but also create 'noise' from rendering artifacts.<br><br><b>--gray</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Renders pages in grayscale before comparison, useful for ignoring color variations and focusing solely on luminosity changes or structural differences.<br><br><b>--diff-color=<i>COLOR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the highlight color for differences (e.g., <i>red</i>, <i>#FF0000</i>). Accepts common color names or hexadecimal RGB values.<br><br><b>--no-view</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the interactive viewer from opening, useful for scripting or automated checks. If an output file is specified with <i>-o</i>, it will still be generated.<br><br><b>--check-only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only checks for differences and exits with status 0 if files are visually identical, 1 if differences are found. Does not generate an output PDF or open the viewer. Useful for CI/CD pipelines.<br><br><b>--check-level=<i>LEVEL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the threshold for considering a difference significant enough (default is often 0.1). A lower value means it's more sensitive to subtle differences; a higher value ignores minor discrepancies.<br><br><b>--page-range=<i>RANGE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compares only a specific range of pages (e.g., <i>1-5</i>, <i>7</i>, <i>1-</i> for all pages from 1 onwards). Multiple ranges can be comma-separated (e.g., <i>1-3,5,8-10</i>).<br><br><b>--exclude-rect=<i>X1,Y1,X2,Y2</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes a rectangular area from comparison on all pages. Coordinates are in points (1/72 inch) relative to the top-left corner of the page. Useful for ignoring headers, footers, or dynamic elements.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides more detailed output during processing, including progress, rendering information, and potential warnings or errors.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>diff-pdf</i> version information and exits.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the help message and available options, then exits.<br><br>


title: DESCRIPTION
content:
diff-pdf is a command-line tool designed to visually compare two PDF files. Unlike text-based diff tools, diff-pdf renders each page of the input PDFs into images and then performs a pixel-by-pixel comparison. It identifies and highlights discrepancies such as changes in text, fonts, layout, images, and formatting that standard text diffs might miss. The tool can either open a graphical viewer to show the differences interactively (using swipe, fade, or difference modes) or generate a new PDF document with the differences highlighted, making it invaluable for quality assurance, document version control, and verifying PDF processing outputs. It's particularly useful when ensuring that two PDFs appear identical to the human eye, even if their underlying structure might differ slightly.


title: CAVEATS
content:
diff-pdf performs visual (raster) comparison, not structural analysis. This means slight differences in font rendering, anti-aliasing, or PDF internal structures might be reported as visual differences even if they appear negligible to the human eye or represent identical content. Performance can be slow for large PDF files or very high DPI settings, as it involves rendering each page as an image. It relies on an underlying PDF rendering engine (commonly Poppler or Ghostscript), so its accuracy and capabilities are tied to that engine. It may not work optimally with scanned documents where text content is not embedded, only image content.


title: EXIT STATUS
content:
diff-pdf returns <b>0</b> if the files are visually identical (especially when using <i>--check-only</i>), <b>1</b> if differences are found, and a non-zero value greater than 1 in case of errors. This makes it highly suitable for use in scripts, automated testing, and continuous integration/delivery (CI/CD) pipelines to ensure PDF integrity.


title: DEPENDENCIES
content:
diff-pdf typically requires a robust PDF rendering library such as Poppler (often the `libpoppler-glib` development files). For its interactive graphical viewer, it usually depends on a compatible toolkit like GTK+ (GIMP Toolkit). These dependencies are typically available through standard Linux package managers.


title: HISTORY
content:
diff-pdf is a relatively modern tool that leverages existing PDF rendering libraries (like Poppler) to provide a user-friendly visual comparison utility. Its development was driven by the need for a robust way to compare PDF documents visually, overcoming the limitations of purely textual diff tools for complex document formats. It gained popularity for its straightforward approach to highlighting visual discrepancies, making it a valuable tool in various document-centric workflows.


title: PARAMETERS
content:
<b><i>&lt;IMAGE1_PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the first image file for comparison.<br><br><b><i>&lt;IMAGE2_PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the second image file for comparison.<br><br><b>--threshold <i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the sensitivity for pixel difference. Pixels differing by less than this value are considered identical. The range and meaning of <i>&lt;value&gt;</i> can vary (e.g., 0-255 for RGB channels, or a percentage).<br><br><b>--output <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path where the generated difference image should be saved. This image typically highlights the pixels that differ between the input images.<br><br><b>--diff-color <i>&lt;color&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the color used to highlight differences in the output image (e.g., `red`, `#FF0000`).<br><br><b>--exit-code-on-diff</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Returns a non-zero exit code if differences are detected between the two images, useful for scripting and automation.<br><br><b>--metric <i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the metric used for comparison (e.g., <i>`RMSE`</i> for Root Mean Squared Error, <i>`PSNR`</i> for Peak Signal-to-Noise Ratio). Not all implementations support this.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more details about the comparison process and results to standard output.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available options and usage.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the command's version information.<br><br>


title: DESCRIPTION
content:
<i>diffimg</i> is a utility designed to visually compare two image files and identify areas where they differ. Unlike a byte-level comparison tool like <i>diff</i>, <i>diffimg</i> understands image formats and performs a pixel-by-pixel analysis. When differences are found, it typically generates a third output image that highlights these discrepancies, often by overlaying a distinct color on the changed pixels, or by showing only the differing regions. This command is invaluable for tasks such as automated visual regression testing in software development, verifying image transformations, or ensuring consistency across different versions of graphical assets. Its ability to produce a visual representation of changes makes it highly effective for quickly pinpointing even subtle alterations that might be missed by the human eye alone.


title: CAVEATS
content:
The <i>diffimg</i> command is <b>not a standard, universally pre-installed Linux utility</b> like <i>ls</i> or <i>grep</i>. Its availability, exact options, and behavior can vary significantly depending on the specific implementation you are using. It might be a custom script, part of a larger image processing suite (though <i>compare</i> from ImageMagick is more common for this purpose), or a standalone program compiled from source. Users should consult the documentation for their specific <i>diffimg</i> version or verify its presence and usage on their system.


title: TYPICAL USE CASES
content:
<b>Visual Regression Testing:</b> Automatically verifying that changes to code (e.g., CSS, UI framework updates) do not inadvertently introduce visual discrepancies in web pages or application interfaces.<br><b>Asset Verification:</b> Ensuring that different versions of images or icons are identical or that image processing steps produce the expected visual output.<br><b>Quality Assurance:</b> Aiding in manual or automated QA processes by providing clear visual feedback on unintended graphical changes.


title: HISTORY
content:
The concept of <i>diffimg</i> emerged from the growing need to compare graphical assets beyond simple byte-level differences. While traditional <i>diff</i> commands are excellent for text and generic binary files, they are unsuitable for image comparisons where a single pixel shift or color change can alter a file without changing its byte size or structure in a way <i>diff</i> can interpret meaningfully. Specific <i>diffimg</i> implementations have typically been developed as standalone tools or custom scripts to address visual regression testing and quality assurance challenges in various domains, such as web development, game development, and graphic design, where visual fidelity is paramount.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a help message and exit.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's version number and exit.<br><br><b>--compare-files</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When comparing two directories, compare their contents. (Default: True)<br><br><b>--no-compare-files</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not compare file contents when comparing directories.<br><br><b>--compare-symlinks</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When comparing two directories, compare symbolic links. (Default: True)<br><br><b>--no-compare-symlinks</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not compare symbolic links.<br><br><b>--compare-mtimes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compare file modification times. (Default: True)<br><br><b>--no-compare-mtimes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not compare file modification times.<br><br><b>--compare-uids</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compare user IDs. (Default: True)<br><br><b>--no-compare-uids</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not compare user IDs.<br><br><b>--compare-gids</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compare group IDs. (Default: True)<br><br><b>--no-compare-gids</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not compare group IDs.<br><br><b>--compare-modes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compare file modes (permissions). (Default: True)<br><br><b>--no-compare-modes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not compare file modes (permissions).<br><br><b>--compare-xattrs</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compare extended attributes. (Default: True)<br><br><b>--no-compare-xattrs</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not compare extended attributes.<br><br><b>--compare-numeric-ids</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compare numeric user and group IDs, instead of names.<br><br><b>--exclude PATTERN</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude files or directories matching the specified PATTERN.<br><br><b>--max-depth N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only compare files/directories up to N levels deep.<br><br><b>--full-diff</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show full differences even for very large files.<br><br><b>--shallow</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not recurse into archives or filesystems (e.g., compare a <i>.zip</i> file as a plain file, not its contents).<br><br><b>--progress</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show progress indicators during the comparison.<br><br><b>--text</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output in plain text format (default).<br><br><b>--html</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output in HTML format, suitable for web browsers.<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output in JSON format, suitable for machine parsing.<br><br><b>--output FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write output to the specified FILE instead of standard output.<br><br><b>--unified</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output unified diff format (implies <b>--text</b>).<br><br><b>--new-directory <NAME></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use <NAME> for the label of the new (second) directory in the output.<br><br><b>--old-directory <NAME></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use <NAME> for the label of the old (first) directory in the output.<br><br><b>--use-file-mtime</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When comparing, treat modification times of files as 0 (epoch) to ignore timestamp differences.<br><br><b>--use-source-date-epoch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When comparing, treat modification times of files as the <b>SOURCE_DATE_EPOCH</b> environment variable, used in reproducible builds.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show debugging messages during execution.<br><br><b>--profile</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Profile execution to identify performance bottlenecks.<br><br><b>--max-file-size SIZE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Maximum file size to attempt to diff. Files larger than SIZE will be skipped.<br><br><b>--max-diff-size SIZE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Maximum difference size to display. Differences larger than SIZE will be truncated.<br><br><b>--max-directory-size SIZE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Maximum directory size (in bytes) to recurse into. Larger directories are skipped.<br><br><b>--no-timestamps</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not output timestamps in the diff header.<br><br><b>--list-handlers</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all available file format handlers that <i>diffoscope</i> can use.<br><br><b>--diff-tool COMMAND</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use the specified COMMAND to diff text files internally.<br><br>


title: DESCRIPTION
content:
<i>diffoscope</i> is a versatile tool for recursively comparing two files or directories. Unlike standard <b>diff</b>, it intelligently understands various file formats and archives (e.g., <i>.deb</i>, <i>.rpm</i>, <i>.jar</i>, <i>.zip</i>, <i>.tar</i>, disk images like <i>.iso</i>, <i>.img</i>), allowing it to deep-dive into their contents, metadata, permissions, and timestamps.<br><br>It can even unpack and compare nested archives or filesystems, providing a comprehensive report of all differences found. <i>diffoscope</i> is a crucial component in the <b>Reproducible Builds</b> effort, helping developers ensure that identical source code produces identical build artifacts, byte-for-byte. It provides detailed, human-readable output, and also supports machine-readable JSON output for automated analysis. Its ability to "look inside" many file types makes it invaluable for debugging build irreproducibility or understanding subtle differences between software versions.


title: CAVEATS
content:
<ul><li>Can be resource-intensive for very large or deeply nested comparisons, potentially consuming significant CPU and memory.</li><li>Requires external tools and libraries for parsing certain file formats (e.g., <b>binutils</b> for ELF analysis, <b>debutils</b> for <i>.deb</i> files, <b>libarchive</b> for various archives). Ensure these dependencies are met for full functionality.</li><li>Output can be very verbose, especially for complex differences. Parsing plain text output programmatically might be challenging; consider using the <b>--json</b> output for automated analysis.</li><li>Not all differences are immediately obvious without understanding the underlying file formats and their specific metadata or internal structures.</li></ul>


title: OUTPUT FORMATS
content:
<i>diffoscope</i> offers flexible output options. Beyond the default human-readable plain text (<b>--text</b>), it can generate rich HTML (<b>--html</b>) for viewing in web browsers, which includes clickable sections and visual cues for differences. It also provides structured JSON (<b>--json</b>) for easy machine parsing and integration into automated workflows or custom reporting tools, making it highly adaptable for various use cases.


title: REPRODUCIBLE BUILDS INTEGRATION
content:
While useful for general file comparison, <i>diffoscope</i>'s design is heavily influenced by the requirements of the <b>Reproducible Builds</b> effort. It includes specific options like <b>--use-file-mtime</b> and <b>--use-source-date-epoch</b> to standardize timestamps, allowing comparisons to focus solely on genuine content differences and facilitate the verification of deterministic builds. This focus makes it an indispensable tool for auditing and improving the reproducibility of software build processes.


title: HISTORY
content:
<i>diffoscope</i> emerged as a fundamental tool within the <b>Reproducible Builds</b> project, an initiative focused on ensuring that software can be reliably rebuilt from source, yielding identical binary artifacts every time. Its development began around 2013-2014, driven by the need for a robust and intelligent diffing utility capable of inspecting complex, nested binary formats that standard tools like <b>diff</b> could not handle. Its primary purpose is to help identify and debug non-deterministic elements introduced during the build process, such as varying timestamps, build paths, or user/group IDs, which can cause 'unreproducible' builds. By providing detailed insights into these differences, <i>diffoscope</i> plays a vital role in enhancing software trustworthiness and security.


title: SYNOPSIS
content:
<b>diffstat</b> [<i>options</i>] [<i>file...</i>]<br>Most commonly used by piping <i>diff</i> output: <i>diff</i> [<i>options</i>] | <b>diffstat</b> [<i>options</i>]


title: PARAMETERS
content:
<b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show cumulative line counts for additions and deletions across all files processed.<br><br><b>-f <FORMAT></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output format. Common formats include 'brief' (default: filename, changed lines, histogram) or 'total' (just total lines changed).<br><br><b>-g</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Always show the graphical histogram, even if other options might suppress it (often default behavior).<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message with command usage and options, then exit.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not truncate long filenames in the output, showing full paths.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not show the graphical histogram; print numeric totals only for additions, deletions, and changed lines.<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Process the input as a patch file, which often contains additional header information (often the default for piped input).<br><br><b>-R</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reverse the interpretation of additions and deletions. Lines previously marked as added will be counted as deleted, and vice-versa.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information of the <i>diffstat</i> utility and exit.<br><br><b>-w <WIDTH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum width of the output line, specifically controlling the width of the histogram.<br><br><b>--files</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print only filenames and the total count of changed lines per file, omitting the detailed histogram.<br><br><b>--total</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print a grand total line at the end, summarizing all additions, deletions, and total changed lines across all files.<br><br>


title: DESCRIPTION
content:
<i>diffstat</i> reads the output of the <i>diff</i> command or a patch file and provides a concise summary of the changes. For each file, it typically displays the filename, the number of lines added, the number of lines deleted, and an ASCII-based graphical histogram representing these changes. This utility is invaluable for quickly understanding the scope and nature of modifications across multiple files in a patch or a large change set, offering a high-level overview without the need to review the full, detailed <i>diff</i> output. It helps in assessing the impact of code changes at a glance, making it easier to gauge the size and complexity of revisions.


title: CAVEATS
content:
<i>diffstat</i> relies on receiving input in a standard <i>diff</i> format (e.g., unified, context, or normal diff). If the input is malformed or not recognized as a valid diff or patch, it may produce incorrect or no output. It only summarizes existing differences; it does not generate the diffs themselves. The graphical histogram is ASCII-based, so its visual appearance might vary slightly depending on the terminal emulator and font configuration.


title: COMMON USAGE PATTERN
content:
The most common and effective way to use <i>diffstat</i> is by piping the output of a <i>diff</i> command (or any command producing diff-like output) directly into it. This allows for immediate summarization of changes.<br><b>Example 1: Summarizing a traditional file diff:</b><br><i>diff -u file1.c file2.c | diffstat</i><br><br><b>Example 2: Summarizing changes in a Git repository:</b><br><i>git diff | diffstat</i>


title: VERSATILITY IN SCRIPTING
content:
Due to its ability to process standard input and produce structured, human-readable output, <i>diffstat</i> is highly versatile for integration into shell scripts. It can be used as a component in automated workflows for code review, generating concise change reports, or as part of continuous integration/delivery pipelines where a quick, high-level overview of modifications is beneficial.


title: HISTORY
content:
<i>diffstat</i> is a classic utility, typically distributed as part of the <i>patchutils</i> package, which provides a suite of tools for manipulating and applying patch files. Its development arose from the fundamental need to quickly digest and understand code changes encapsulated in traditional <i>diff</i> files – the predominant method of sharing code modifications before the widespread adoption of modern distributed Version Control Systems (VCS) like Git. While many contemporary VCS tools now offer built-in summary functionalities (e.g., <i>git diff --stat</i>), <i>diffstat</i> remains a robust and independent tool for analyzing plain <i>diff</i> output, particularly useful in shell scripting, legacy systems, or when dealing with generic patch formats.


title: PARAMETERS
content:
<b>--color {always,auto,never}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Control when to use ANSI colors in the output.<br><br><b>--display {inline,side-by-side}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Choose between inline diff or side-by-side column view.<br><br><b>--syntax-highlight {auto,always,never}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable or disable syntax highlighting for file content.<br><br><b>--lang {language}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force a specific language parser for the input files.<br><br><b>--line-numbers {auto,always,never}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display line numbers next to diffed content.<br><br><b>--tab-width {width}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the number of spaces for a tab character.<br><br><b>--context {lines}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of unchanged lines to show around changes (default: 3).<br><br><b>--diff-context {lines}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to --context, but for the diff algorithm itself.<br><br><b>--show-skipped-lines</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show lines that difftastic skipped due to parsing errors.<br><br><b>--byte-changes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Fall back to byte-level diff for lines with syntax errors.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help message and exit.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
<I>difft</I> (short for <I>difftastic</I>) is a command-line tool that performs semantic, structural diffs on files, contrasting with traditional line-based diff utilities like <I>diff</I>. Instead of just comparing lines, <I>difft</I> parses files into their underlying syntax tree, identifying changes at the token, statement, or expression level. This approach results in more accurate and readable diffs, especially for code, as it can highlight moving blocks of code, renamed variables, or reordered parameters, rather than just showing entire lines as added or removed. It supports over 50 programming languages and various text formats, providing syntax highlighting and configurable output styles (inline or side-by-side).


title: CAVEATS
content:
<I>difft</I> is a third-party tool and not part of standard Linux distributions by default, requiring separate installation. While highly effective for code, its structural parsing can sometimes be slower than traditional line-based diffs for very large files. Its output, while clearer for semantic changes, may be more verbose than <I>diff</I> for trivial differences or non-code text. It's primarily designed for human readability, making it less suitable for scripting or automated parsing compared to <I>diff</I>'s more rigid output format.


title: INSTALLATION
content:
As <I>difft</I> is not a standard utility, it must be installed. Common methods include: using Cargo (Rust's package manager) with <I>cargo install difftastic</I>; via Homebrew (macOS/Linux) with <I>brew install difftastic</I>; or from pre-built binaries or package managers specific to your distribution.


title: GIT INTEGRATION
content:
<I>difft</I> can be configured as Git's default diff tool for a superior code review experience. This is typically done by configuring Git to use <I>difft</I> by setting <I>core.pager</I> to <I>'difft --patience --display=inline --syntax-highlight=auto'</I> and <I>diff.external</I> to <I>difft</I> globally.


title: HISTORY
content:
<I>difftastic</I> was created by Wilfred Hughes, with its first public release appearing around 2021. It emerged as a response to the limitations of traditional line-based diff algorithms, which often produce noisy or misleading output for code changes. Its development focused on leveraging modern parsing techniques (specifically tree-sitter) to understand the structure of code, providing a more intelligent and developer-friendly way to visualize changes. It quickly gained popularity in the developer community for its innovative approach.


title: SYNOPSIS
content:
<b>dig</b> [<i>@server</i>] [<i>name</i>] [<i>type</i>] [<i>class</i>] [<i>+options</i>] [<i>{queryopts}</i>]<br><ul><li><i>@server</i>: Specifies the IP address or hostname of the <b>DNS server</b> to query. If omitted, the system's default DNS server is used.</li><li><i>name</i>: The <b>domain name</b>, <i>hostname</i>, or <i>IP address</i> (for reverse lookup) to query.</li><li><i>type</i>: The <b>DNS record type</b> to query (e.g., <b>A</b>, <b>AAAA</b>, <b>MX</b>, <b>NS</b>, <b>SOA</b>, <b>TXT</b>, <b>CNAME</b>, <b>PTR</b>, <b>SRV</b>). Defaults to <b>A</b> if omitted.</li><li><i>class</i>: The <b>network class</b> (e.g., <b>IN</b> for Internet, <b>CH</b> for Chaos, <b>HS</b> for Hesiod). Defaults to <b>IN</b>.</li><li><i>+options</i>: Various <b>command-line options</b> to control query behavior and output format (e.g., <b>+short</b>, <b>+trace</b>).</li><li><i>{queryopts}</i>: Legacy query options for specific record types. Rarely used with modern <b>dig</b>.</li></ul>


title: PARAMETERS
content:
<b>@server</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies</i> the <b>DNS server</b> to query by its IP address or hostname.<br><br><b>name</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The <b>domain name</b>, <i>hostname</i>, or <i>IP address</i> to lookup.<br><br><b>type</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The <b>DNS record type</b> to query (e.g., <b>A</b>, <b>AAAA</b>, <b>MX</b>, <b>NS</b>, <b>SOA</b>, <b>TXT</b>).<br><br><b>-x <IP_address></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a <b>reverse DNS lookup</b> (<i>PTR query</i>) for the given IP address.<br><br><b>+short</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays only the <i>answer section</i>, providing a concise output.<br><br><b>+noall +answer</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all sections of the output except the <i>answer section</i>.<br><br><b>+trace</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Traces the <i>delegation path</i> from the root servers, showing each queried server.<br><br><b>+recurse</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Requests</i> recursive queries to the server (default).<br><br><b>+norecurse</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables</i> recursive queries, performing an iterative query.<br><br><b>+tcp</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <b>dig</b> to use <i>TCP</i> for the query instead of <i>UDP</i>.<br><br><b>+time=<seconds></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the <i>timeout</i> for a query, in seconds.<br><br><b>+tries=<num></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of <i>retries</i> for a query.<br><br><b>+stats</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays <i>query statistics</i>, including query time and server details.<br><br><b>+nocomments</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables</i> the display of comment lines in the output.<br><br><b>+noquestion</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables</i> the display of the question section in the output.<br><br>


title: DESCRIPTION
content:
The <b>dig</b> (<i>Domain Information Groper</i>) command is a flexible tool for interrogating <i>DNS name servers</i>.<br>It performs <b>DNS lookups</b> and displays the answers that are returned from the name servers that were queried. While it can operate in a simple query mode, its primary use is for <i>network troubleshooting</i>, particularly for <i>DNS-related issues</i>.<br><b>dig</b> is commonly used by system administrators to verify <i>DNS records</i>, check <i>DNS propagation</i>, and diagnose problems with <i>domain name resolution</i>.<br>Unlike older tools like <b>nslookup</b>, <b>dig</b> provides more detailed, flexible, and consistent output, making it the preferred choice for professional DNS diagnostics.


title: CAVEATS
content:
<ul><li><b>dig</b> requires a basic understanding of <i>DNS concepts</i> to interpret its detailed output effectively.</li><li>The default output can be verbose; use options like <b>+short</b> or <b>+noall +answer</b> for concise results.</li><li>It may not be installed by default on all minimal Linux distributions, often requiring the installation of the <b>bind-utils</b> or <b>dnsutils</b> package.</li><li>For very complex DNS queries or advanced server diagnostics, understanding <i>BIND configuration files</i> might be necessary in conjunction with <b>dig</b>.</li></ul>


title: COMMON USE CASES
content:
<b>dig</b> is invaluable for:<br><ul><li><i>Verifying A records</i> (IP addresses) for a domain: <b>dig example.com</b></li><li><i>Checking MX records</i> (mail servers): <b>dig example.com MX</b></li><li><i>Performing reverse lookups</i> (IP to hostname): <b>dig -x 192.0.2.1</b></li><li><i>Tracing DNS delegation paths</i> to diagnose issues: <b>dig +trace example.com</b></li><li><i>Querying a specific DNS server</i>: <b>dig @ns1.example.com example.com</b></li></ul>


title: OUTPUT SECTIONS
content:
A standard <b>dig</b> output includes several sections:<br><ul><li><b>HEADER</b>: Shows <i>dig</i> version, query options, and response flags.</li><li><b>QUESTION SECTION</b>: Repeats the query performed.</li><li><b>ANSWER SECTION</b>: Contains the <i>DNS records</i> returned for the query. This is often the most important part.</li><li><b>AUTHORITY SECTION</b>: Lists the <i>authoritative name servers</i> for the queried domain.</li><li><b>ADDITIONAL SECTION</b>: Provides supplementary information, such as IP addresses for name servers listed in the <i>AUTHORITY SECTION</i>.</li><li><b>STATISTICS</b>: Summarizes query time, server details, and message size.</li></ul>


title: HISTORY
content:
<b>dig</b> originated as part of the <i>BIND</i> (<i>Berkeley Internet Name Domain</i>) software suite, developed by the <i>Internet Systems Consortium</i> (ISC).<br>It was designed to be a more powerful and flexible alternative to older DNS lookup utilities like <b>nslookup</b>, which had known limitations and was eventually deprecated by ISC.<br>Since its inception, <b>dig</b> has become the de facto standard tool for <i>DNS diagnostics</i> and <i>troubleshooting</i> across <i>Unix-like operating systems</i> due to its comprehensive features and consistent output format.<br>Its continuous development ensures compatibility with new <i>DNS record types</i> and <i>protocol extensions</i>.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a summary of command-line options and exit.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of <i>Dillo</i> and exit.<br><br><b>-g, --geometry=WxH+X+Y</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the initial window size and position (e.g., <i>800x600+100+50</i>).<br><br><b>-f, --full-screen</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Start <i>Dillo</i> in full-screen mode.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress output messages to standard error.<br><br><b>-l, --list-cookies</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List the contents of the cookies file and then exit.<br><br><b>-a, --about-config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the internal configuration page (<i>about:config</i>) for advanced settings.<br><br><b>-p, --proxy=URL</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a proxy server to use for all connections (e.g., <i>http://localhost:8080</i>).<br><br><b>-c, --clear-cache</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clear the browser's cache and then exit.<br><br><b>-s, --print-style-sheets</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print a list of the currently applied style sheets to standard error.<br><br><b>-P, --private</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable private browsing mode, where history, cookies, and cache are not saved.<br><br><b>-k, --kiosk-mode</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable kiosk mode, restricting user interaction for public terminals.<br><br><b>-m, --max-mem-cache=MB</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum memory size (in MB) for the in-memory cache.<br><br><b>-u, --user-agent=STRING</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Override the default User-Agent string sent in HTTP requests.<br><br><b>-t, --trusted-ca-file=FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative file containing trusted CA certificates.<br><br><b>-o, --open-tab=URL</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the specified <i>URL</i> in a new browser instance.<br><br><b>-I, --dump-image-formats</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dump a list of supported image formats to standard output and exit.<br><br><b>-E, --dump-encoding-schemes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dump a list of supported character encoding schemes to standard output and exit.<br><br><b>-U, --use-style-sheet=FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a custom CSS stylesheet for rendering pages.<br><br><b>-H, --history-file=FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative file for browsing history.<br><br><b>-C, --config-dir=DIR</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative directory for <i>Dillo</i>'s configuration files.<br><br>


title: DESCRIPTION
content:
<i>Dillo</i> is a remarkably fast and lightweight graphical web browser, designed with efficiency and minimalism in mind. It stands out for its exceptionally small footprint, both in terms of memory usage and disk space, making it an ideal choice for older computers, embedded systems, or environments where resources are scarce. Unlike modern browsers that prioritize feature richness and complex rendering, <i>Dillo</i> focuses on quickly displaying web content, primarily text and basic images.<br><br>It employs its own rendering engine, the Dillo Rendering Engine (DRC), and leverages the FLTK toolkit for its graphical user interface. While it may not fully support all contemporary web technologies like advanced JavaScript or complex CSS layouts, it excels at providing a quick and clean browsing experience for simpler websites, making it a valuable tool for specific use cases where speed and resource conservation are paramount.


title: CAVEATS
content:
<i>Dillo</i>'s primary limitation is its lack of robust support for modern web technologies, most notably JavaScript and complex CSS. This means many contemporary websites, which heavily rely on these features for interactivity and layout, may render incorrectly or be entirely unusable. It is best suited for simple, text-heavy pages or for environments where minimal resource consumption is critical.


title: RENDERING ENGINE AND CONFIGURATION
content:
<i>Dillo</i> utilizes its own rendering engine, known as the Dillo Rendering Engine (DRC), which is specifically optimized for speed and low resource usage. Unlike most modern browsers that use engines like Blink, Gecko, or WebKit, DRC is designed to parse and display HTML efficiently with minimal overhead.<br><br>User-specific configurations, including preferences, bookmarks, and security settings, are typically managed via a text-based configuration file named <i>dillorc</i>, usually located in the <i>~/.dillo</i> directory.


title: HISTORY
content:
<i>Dillo</i> was first released in December 1999 by Jorge Arellano Cid, with the explicit goal of creating a small, fast, and secure graphical web browser. It was developed to be a minimalist alternative to larger, resource-intensive browsers, particularly suited for older hardware, embedded systems, and low-resource environments. Its development has consistently focused on maintaining a small footprint and efficient performance, distinguishing it from most mainstream browsers.


title: PARAMETERS
content:
<b>-a, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not ignore entries starting with '.'<br><br><b>-A, --almost-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not list implied '.' and '..'<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a long listing format, showing permissions, owner, size, and date. This overrides dir's default columnar output.<br><br><b>-R, --recursive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List subdirectories recursively.<br><br><b>-F, --classify</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Append indicator (one of */=>@|) to entries.<br><br><b>-h, --human-readable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;With -l, print human readable sizes (e.g., 1K 234M 2G).<br><br><b>-S</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sort by file size, largest first.<br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sort by modification time, newest first.<br><br><b>--color[=WHEN]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Colorize the output. WHEN can be 'always' (default), 'never', or 'auto'.<br><br><b>-1, --format=single-column</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List one file per line, effectively disabling dir's default multi-column output.<br><br><b>-d, --directory</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List directories themselves, not their contents.<br><br>


title: DESCRIPTION
content:
The <i>dir</i> command in Linux is a utility used to list the contents of directories. It is essentially a variant of the <i>ls</i> command, often implemented as a hard link to <i>ls</i> with specific default options enabled. Its primary purpose is to provide an output format similar to the <i>dir</i> command found in DOS and Windows operating systems, making it familiar to users migrating from those environments. By default, <i>dir</i> lists files and subdirectories in a multi-column, vertically sorted format, without showing additional details like permissions, ownership, or timestamps. This behavior is equivalent to running <b>ls -C --format=vertical</b>. This default output makes it suitable for a quick, concise overview of directory contents. While it shares virtually all capabilities with <i>ls</i> when additional options are provided, its distinctive default presentation caters specifically to users seeking a simple, uncluttered list of items within a directory.


title: CAVEATS
content:
The <b>dir</b> command is primarily provided for compatibility with DOS/Windows users and for scripting where a specific columnar output is desired. For advanced file listing and detailed information, the <b>ls</b> command offers more flexibility and is generally the preferred tool in native Linux environments. Its behavior is often identical to <b>ls -C --format=vertical</b>, so understanding <b>ls</b> is key to fully utilizing <b>dir</b>.


title: DEFAULT BEHAVIOR
content:
By default, <b>dir</b> behaves like <b>ls -C --format=vertical</b>. This means it lists files and directories in multiple columns, sorted vertically within columns, and does not show hidden files or detailed information (permissions, size, date, etc.).


title: RELATIONSHIP TO LS
content:
In most Linux distributions, <b>dir</b> is either a hard link or an alias to the <b>ls</b> executable. This implies that any options valid for <b>ls</b> can generally be used with <b>dir</b>, though <b>dir</b> might have pre-set default options that are overridden by explicitly provided <b>ls</b> options. Therefore, while we list common options, any option documented for <b>ls</b> is generally applicable.


title: HISTORY
content:
The <b>dir</b> command has been part of GNU Core Utilities for a long time, primarily as a convenience alias or hard link to the more powerful <b>ls</b> command. Its inclusion is largely to provide a familiar command interface for users accustomed to the <i>dir</i> command in MS-DOS and Windows operating systems, facilitating an easier transition to Linux. While <b>ls</b> is the native and more feature-rich command for listing directory contents in Unix-like systems, <b>dir</b> serves its purpose by offering a quick, columnar view of files by default.


title: PARAMETERS
content:
<b>-a &lt;agent_string&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the <b>User-Agent</b> HTTP header for all requests.<br><br><b>-b</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the initial banner output.<br><br><b>-c &lt;cookie_string&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a custom HTTP <b>Cookie</b> header for all requests.<br><br><b>-E &lt;status_code&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes specific HTTP <b>status codes</b> from being shown in the output.<br><br><b>-H &lt;header_string&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a custom HTTP header to all requests (e.g., '<b>Authorization: Bearer token</b>').<br><br><b>-N &lt;status_code&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hides specific HTTP <b>status codes</b> from the output (similar to -E).<br><br><b>-o &lt;file&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Saves the scan results to the specified output file.<br><br><b>-p &lt;proxy:port&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Routes all HTTP traffic through the specified <b>proxy server</b>.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables <b>recursive directory scanning</b> on discovered directories.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the display of <b>404 (Not Found)</b> errors in the output.<br><br><b>-t &lt;threads&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of concurrent connections (<b>threads</b>) for scanning.<br><br><b>-u &lt;user:pass&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies credentials for <b>HTTP Basic Authentication</b>.<br><br><b>-X &lt;extensions&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Appends common file <b>extensions</b> (e.g., '<i>.php,.html,.bak</i>') to each wordlist entry.<br><br><b>-z &lt;delay_ms&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a <b>delay</b> in milliseconds between each HTTP request to avoid detection or rate limiting.<br><br>


title: DESCRIPTION
content:
<i>dirb</i> is a web content scanner written in C, designed to brute-force directories and files on web servers. It performs a dictionary-based attack, attempting to guess valid paths and file names that might not be directly linked or easily discoverable. Commonly used in penetration testing and security auditing, <i>dirb</i> helps uncover hidden sensitive files (e.g., configuration, backup, logs), unlisted directories, or outdated vulnerable web applications.<br><br>It functions by sending HTTP requests for each word in a provided wordlist and analyzing the server's responses (status codes like <b>200 OK</b>, <b>301 Moved Permanently</b>, <b>403 Forbidden</b>, <b>404 Not Found</b>) to determine resource existence. <i>dirb</i> supports features such as proxies, HTTP authentication, recursive scanning, and custom extensions, making it a versatile tool for web application reconnaissance. Its effectiveness is highly dependent on the quality and comprehensiveness of the wordlists used.


title: CAVEATS
content:
<b>Wordlist Dependency</b>: The effectiveness of <i>dirb</i> heavily relies on the quality and comprehensiveness of the wordlist used. A poor wordlist will yield poor results.<br><b>Rate Limiting & IP Bans</b>: Aggressive scanning can trigger server-side rate limiting, firewall blocks, or IP bans, potentially disrupting service or leading to detection.<br><b>Legal and Ethical Use</b>: <i>dirb</i> should only be used against targets for which you have explicit, written permission. Unauthorized scanning can be illegal and unethical.<br><b>False Positives/Negatives</b>: May produce false positives (e.g., misinterpreting custom 404 pages as valid content) or false negatives (missing files if the wordlist is incomplete or the server returns non-standard error codes).


title: DEFAULT WORDLISTS
content:
<i>dirb</i> typically includes several default wordlists, commonly found in <i>/usr/share/dirb/wordlists/</i>. Notable examples include <i>common.txt</i>, <i>big.txt</i>, and <i>small.txt</i>, which provide a solid foundation for initial discovery scans.


title: RECURSIVE SCANNING BEHAVIOR
content:
When the <i>-r</i> option is enabled, <i>dirb</i> performs <b>recursive scanning</b>. This means that upon discovering a valid directory, it will automatically initiate a new brute-force scan within that subdirectory, allowing for a deeper and more comprehensive mapping of the web server's hierarchical structure.


title: HISTORY
content:
<i>dirb</i> has long been a foundational tool in web penetration testing, valued for its straightforwardness, efficiency, and effectiveness in dictionary-based web content discovery. Developed by The Dark Raver and written in C, it benefits from high performance. While more contemporary tools like <i>Gobuster</i> and <i>FFUF</i>, written in Go, offer potentially faster scans and advanced features, <i>dirb</i> maintains its widespread usage and is a standard inclusion in security-focused Linux distributions such as <i>Kali Linux</i>. Its development has consistently focused on enhancing its core capability for robust web content brute-forcing.


title: PARAMETERS
content:
<b><i>java -jar /path/to/DirBuster.jar</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;This is the primary command to execute the DirBuster application. DirBuster is fundamentally a GUI tool, and while launched via the command line, it does not typically offer extensive command-line parameters for direct scanning operations. Most interactions occur within its graphical interface.<br><br><b><i>-Xmx&lt;size&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Java VM option)</i> Sets the maximum Java heap memory size. For example, <b>-Xmx1G</b> allocates 1 Gigabyte of memory. This is crucial for performance, especially when using large wordlists or targeting many hosts.<br><br><b><i>-D&lt;property&gt;=&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Java VM option)</i> Sets a system property for the Java Virtual Machine. This can sometimes be used to configure specific proxy settings or other environment variables for the Java application, though direct DirBuster CLI options for scanning are minimal.<br><br>


title: DESCRIPTION
content:
DirBuster is a multi-threaded <b>Java application</b> designed to brute-force web servers for hidden directories and files. It's a widely used tool by penetration testers and security professionals to discover potentially sensitive information or attack vectors that are not explicitly linked or obvious.<br><br>It operates by making HTTP requests for each path generated from its comprehensive wordlists, including common directory names, file extensions, and file names. Based on the HTTP response codes (e.g., 200 OK, 403 Forbidden, 404 Not Found), it determines if a path exists. DirBuster can handle various network configurations, including proxies, custom HTTP headers, and can follow redirects. While primarily known for its graphical user interface (GUI), it can be launched from the command line, though its core scanning functionality is best utilized through the GUI. It helps uncover forgotten or misconfigured directories that could lead to information disclosure or further exploitation during a security assessment.


title: CAVEATS
content:
DirBuster is primarily a <b>GUI-based application</b>, not a traditional command-line utility for automated scripting. Its direct command-line options for scanning are very limited to non-existent; the command-line is mainly used for launching the GUI. It requires a <b>Java Runtime Environment (JRE)</b> to function. Being a brute-forcing tool, its usage can be resource-intensive, consuming significant CPU and network bandwidth. Always ensure you have <b>explicit permission</b> before using DirBuster against any target system to avoid legal and ethical issues.


title: HISTORY
content:
DirBuster was developed by the <b>OWASP (Open Web Application Security Project)</b> as part of their comprehensive suite of open-source security tools. It gained significant popularity among penetration testers, especially when pre-installed in security-focused Linux distributions like <b>BackTrack</b> and later <b>Kali Linux</b>. Its initial development and widespread usage peaked in the late 2000s and early 2010s. While still functional and included in many toolsets, its development has largely slowed, with newer, often CLI-focused, alternatives like Gobuster and Ffuf gaining prominence for automated scanning tasks.


title: SEE ALSO
content:
<i>gobuster(1)</i>: A Go-based, fast CLI directory/file brute-forcer., <i>ffuf(1)</i>: A fast web fuzzer, often used for directory and file enumeration., <i>wfuzz(1)</i>: A powerful web application fuzzer with extensive options for directory discovery., <i>nikto(1)</i>: A web server scanner that includes directory enumeration as part of its checks., <i>dirb(1)</i>: Another classic CLI web content scanner, similar in purpose to DirBuster.


title: PARAMETERS
content:
<b><b>--print-database</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the default <b>DIR_COLORS</b> database built into the command. This output can be used as a template for custom configuration files.<br><br><b><b>--bourne-shell</b><br><b>--sh</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output commands suitable for Bourne-compatible shells (e.g., Bash, Zsh). This is the default behavior.<br><br><b><b>--c-shell</b><br><b>--csh</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output commands suitable for C-shell compatible shells (e.g., csh, tcsh).<br><br><b><b>--default</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use the built-in default color scheme rather than trying to read a configuration file from <i>/etc/DIR_COLORS</i> or the user's home directory.<br><br><b><b><I>FILE</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative configuration file to read instead of the default <i>/etc/DIR_COLORS</i> or <i>~/.dircolors</i>.<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;Output version information and exit.<br><br>


title: DESCRIPTION
content:
The <b>dircolors</b> command generates shell code to set the <b>LS_COLORS</b> environment variable. This variable is then used by the <b>ls</b> command (specifically with its <b>--color</b> option) to display files and directories in various colors based on their type, permissions, and other attributes. Users typically configure <b>dircolors</b> by creating a configuration file, often <i>~/.dircolors</i>, which defines the specific colors for different file types (e.g., directories, executable files, archives, symbolic links).<br><br>When executed, <b>dircolors</b> reads its configuration (either from a specified file, <i>/etc/DIR_COLORS</i>, or its built-in defaults) and outputs a series of shell commands. These commands, when <b>eval</b>uated in a shell startup script like <i>.bashrc</i> or <i>.zshrc</i>, populate the <b>LS_COLORS</b> variable, enabling a visually rich and informative directory listing. It supports both Bourne-compatible shells (like Bash and Zsh) and C-shell syntax.


title: CAVEATS
content:
The output of <b>dircolors</b> must be <i>evaluated</i> by the shell for the <b>LS_COLORS</b> variable to be set. Simply running <b>dircolors</b> alone will print the commands to standard output but won't apply them to the current shell session.<br><br>For colors to appear, the <b>ls</b> command itself must be invoked with the <b>--color</b> option (e.g., <b>ls --color=auto</b> or via an alias like <b>alias ls='ls --color=auto'</b>).<br><br>Color display is dependent on the terminal's capabilities; older or text-only terminals may not render colors correctly.


title: TYPICAL USAGE IN SHELL PROFILES
content:
To enable colored <b>ls</b> output permanently, users usually add the following lines to their shell's configuration file (e.g., <i>~/.bashrc</i> or <i>~/.zshrc</i>):<br><br><b>eval "$(dircolors)"</b><br><br>And an alias for <b>ls</b> (if not already present):<br><br><b>alias ls='ls --color=auto'</b><br><br>For custom configurations, specify the file:<br><br><b>eval "$(dircolors ~/.my_custom_dircolors)"</b>


title: CONFIGURATION FILE FORMAT
content:
A <b>dircolors</b> configuration file (like <i>/etc/DIR_COLORS</i> or <i>~/.dircolors</i>) consists of lines defining colors and attributes for different file types. Each line typically contains a keyword (e.g., <b>DIR</b> for directories, <b>EXE</b> for executables, <b>LINK</b> for symbolic links) followed by a color code (a numerical ANSI escape sequence).<br><br>Example entries:<br><b>DIR 01;34</b>  <i>(bold blue for directories)</i><br><b>EXE 01;32</b>  <i>(bold green for executables)</i><br><b>.tgz 01;31</b> <i>(bold red for .tgz files)</i><br><br>It can also specify the terminal type using the <b>TERM</b> keyword.


title: HISTORY
content:
<b>dircolors</b> is part of the GNU Core Utilities, a fundamental set of tools for Linux and other Unix-like operating systems. Its functionality for configuring <b>ls</b> colors has been a standard feature for many years, providing a robust and flexible way to customize terminal output. It replaced earlier, less standardized methods of achieving colored directory listings, evolving to handle various shell syntaxes and configuration options.


title: PARAMETERS
content:
<b><b>allow</b> [<i>&lt;path&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Allows</i> the <code>.envrc</code> file in the current or specified directory to be loaded. This is a security measure to prevent untrusted code execution.<br><br><b><b>deny</b> [<i>&lt;path&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Denies</i> the <code>.envrc</code> file in the current or specified directory, preventing it from being loaded.<br><br><b><b>edit</b> [<i>&lt;path&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Opens</i> the <code>.envrc</code> file for editing in the current or specified directory using your default editor.<br><br><b><b>hook</b> <i>&lt;shell_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prints</i> the shell hook needed to integrate <b>direnv</b> into your shell. This output should be evaluated in your shell's startup file (e.g., <code>eval "$(direnv hook bash)"</code>).<br><br><b><b>reload</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Forces</i> <b>direnv</b> to reload the environment variables from the current directory's <code>.envrc</code> file.<br><br><b><b>exec</b> <i>&lt;dir&gt;</i> [<i>&lt;command&gt;</i>...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Executes</i> a command in the environment defined by the <code>.envrc</code> file in the specified directory, without changing your current shell's directory.<br><br><b><b>status</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays</i> the current status of <b>direnv</b>, including the loaded <code>.envrc</code> file and modified variables.<br><br><b><b>version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prints</i> the installed <b>direnv</b> version.<br><br><b><b>stdlib</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prints</i> the contents of <b>direnv</b>'s standard library, which contains many useful helper functions for <code>.envrc</code> files (e.g., <code>layout python</code>, <code>use node</code>).<br><br>


title: DESCRIPTION
content:
<b>direnv</b> is a powerful shell extension that automatically loads and unloads environment variables when you change directories. Instead of manually sourcing scripts or setting variables for each project, <b>direnv</b> allows you to define project-specific environment settings in a file named <code>.envrc</code> within your project's root directory.<br><br>When you navigate into a directory containing an <code>.envrc</code> file, <b>direnv</b> executes its contents, making the defined variables available to your current shell session. Upon leaving that directory, it automatically unloads them, keeping your global environment clean and preventing conflicts. This is particularly useful for managing different versions of programming languages (e.g., Node.js, Python), setting API keys, database configurations, or any other project-specific settings.<br><br>For security, <b>direnv</b> requires explicit permission to load an <code>.envrc</code> file using <code>direnv allow</code>, preventing arbitrary code execution. Its integration with popular shells like Bash, Zsh, and Fish is seamless, typically involving a single line added to your shell's startup file. This tool significantly enhances developer workflow efficiency and maintains a clean, context-aware shell environment.


title: CAVEATS
content:
<i><br><b>Shell Hook Requirement:</b> <b>direnv</b> relies on a shell hook to function correctly. This hook must be sourced in your shell's startup file (e.g., <code>.bashrc</code>, <code>.zshrc</code>, <code>config.fish</code>). Without it, <b>direnv</b> will not automatically load/unload environments.<br><br><b>Security Risk (<code>.envrc</code> files):</b> Because <code>.envrc</code> files are arbitrary shell scripts, they can execute any command. Always review <code>.envrc</code> files from untrusted sources before running <code>direnv allow</code>. The <code>allow</code>/<code>deny</code> mechanism is crucial for security.<br><br><b>Performance Impact:</b> While generally minimal, in environments with very complex <code>.envrc</code> files or extremely frequent directory changes, there might be a slight performance overhead during prompt rendering or directory transitions.<br></i>


title: <B>.ENVRC FILE</B>
content:
The <code>.envrc</code> file is the core configuration file for <b>direnv</b>. It is a plain text file containing shell commands that modify the environment. When <b>direnv</b> processes this file, it executes the commands within it. Common commands include <code>export VAR=value</code>, <code>PATH_add /path/to/bin</code>, or using <b>direnv</b>'s standard library functions like <code>layout python</code> or <code>use node</code>.


title: <B>STANDARD LIBRARY (STDLIB)</B>
content:
<b>direnv</b> comes with a rich set of built-in helper functions, collectively known as the <b>stdlib</b>. These functions simplify common tasks within <code>.envrc</code> files. Examples include <code>layout python</code> (to automatically set up Python virtual environments), <code>use node</code> (for Node.js version management), <code>path_add</code> (to prepend a path to the <code>PATH</code> variable), and many more. Using the stdlib makes <code>.envrc</code> files more concise and robust.


title: HISTORY
content:
<b>direnv</b> was created by Laurent Pluchet around 2011-2012. The motivation behind its development was to simplify the management of project-specific environment variables, addressing the common pain point of manually sourcing activation scripts (e.g., for Python virtual environments) or setting numerous `PATH` and other variables for different projects. Its elegant approach of automatic environment switching upon directory entry and exit quickly gained traction, especially as microservices and polyglot development became more prevalent, requiring developers to seamlessly switch between different project contexts and their unique environmental needs.


title: PARAMETERS
content:
<b><code>--zero</code>, <code>-z</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;End each output line with NUL, not newline. This is useful for processing with commands like <code>xargs -0</code>.<br><br><b><code>--help</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><code>--version</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
<i><br></i>The <b>dirname</b> command is a standard Unix/Linux utility that outputs the directory portion of a given pathname. It takes one or more pathnames as arguments and, for each, prints the parent directory. Its primary use is to remove the non-directory suffix (the filename or last component) from a file path, leaving only the directory path.<i><br><br></i>For example, if you provide <code>/home/user/documents/report.txt</code>, <b>dirname</b> will output <code>/home/user/documents</code>. If the input is a directory path like <code>/usr/local/bin/</code>, it will output <code>/usr/local</code>. If the path contains no slashes (e.g., <code>myfile.txt</code>), it will output <code>.</code> (representing the current directory).<i><br><br></i><b>dirname</b> is an essential tool in shell scripting for manipulating file paths, allowing scripts to construct new paths relative to an existing file, determine a script's own directory, or extract just the directory part for various processing needs. It operates purely on the string representation of the path, not on whether the path actually exists on the filesystem.


title: CAVEATS
content:
<i><br></i><b>Trailing Slashes:</b> <b>dirname</b> treats multiple trailing slashes as a single slash. For instance, <code>dirname /usr/local///</code> will yield <code>/usr/local</code>.<i><br></i><b>Root Directory:</b> If the input is <code>/</code>, it returns <code>/</code>.<i><br></i><b>No Slashes:</b> If the input pathname contains no slashes (e.g., <code>filename.txt</code>), it returns <code>.</code> (the current directory).<i><br></i><b>Empty Input:</b> Providing an empty string <code>""</code> as input usually results in <code>.</code> according to POSIX specifications.<i><br></i><b>Non-existent Paths:</b> <b>dirname</b> operates solely on the string structure of the path; it does not check if the path or its components actually exist on the filesystem. This means it will process valid-looking but non-existent paths correctly.


title: COMMON USE CASES
content:
<i><br></i><b>dirname</b> is frequently used in shell scripts to:<i><br></i>- Navigate to a script's own directory: <code>cd "$(dirname "$0")"</code><i><br></i>- Construct new paths: <code>"$(dirname "$FILE")"/new_file.txt</code><i><br></i>- Process files in a directory: <code>find . -name '*.log' -print0 | xargs -0 -I {} mv {} "$(dirname {})"/logs/</code>


title: POSIX COMPLIANCE
content:
The behavior of <b>dirname</b> is strictly defined by POSIX, which is crucial for writing portable shell scripts that need to run consistently across different Unix and Linux environments. This compliance ensures that its output for various input path structures remains predictable.


title: HISTORY
content:
<b>dirname</b> is a very old and fundamental command that has been a part of Unix and Linux systems for decades. It is specified by the Single Unix Specification (SUS) and POSIX. This standardization ensures its consistent behavior across various Unix-like operating systems. On Linux systems, it is typically provided as part of the GNU coreutils package. Its robust and predictable behavior makes it a cornerstone for portable shell scripting and path manipulation tasks.


title: PARAMETERS
content:
<b><i>-c</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clears the entire directory stack, removing all entries.<br><br><b><i>-l</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces a listing using full pathnames, suppressing tilde (~) expansion for the home directory.<br><br><b><i>-p</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the directory stack with each entry on a new line.<br><br><b><i>-v</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the directory stack with one entry per line, prefixed by its 0-based index in the stack.<br><br><b><i>+N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Nth entry from the left (0-indexed) of the directory stack. '0' refers to the current directory.<br><br><b><i>-N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Nth entry from the right (0-indexed) of the directory stack.<br><br>


title: DESCRIPTION
content:
The <b>dirs</b> command is a shell built-in utility designed to display the current contents of the directory stack. This stack is a list of directories that can be manipulated using commands like <b>pushd</b> and <b>popd</b>, allowing users to navigate efficiently between recently visited directories without manually typing their full paths. <br><br>When executed without any options, <b>dirs</b> presents the stack with pathnames abbreviated, typically replacing the home directory with a tilde (~). Various options allow for different display formats, such as showing full pathnames, numbering the entries, or listing one directory per line. Additionally, <b>dirs</b> can be used to clear the entire directory stack, effectively resetting its state.


title: CAVEATS
content:
<b>dirs</b> is a shell built-in command (e.g., in Bash, Zsh, Tcsh), meaning it is part of the shell itself rather than a standalone executable found in directories like <i>/bin</i> or <i>/usr/bin</i>. Its behavior and availability are thus dependent on the specific shell being used. <br>The directory stack is ephemeral; it exists only for the current shell session and is not persistent across different terminal windows or after the shell exits.


title: DIRECTORY STACK INDEXING
content:
The directory stack is 0-indexed. When using <i>+N</i> or <i>-N</i>, '0' consistently refers to the current working directory, which is always the first entry in the stack as displayed by <b>dirs</b> without options. Subsequent numbers refer to the directories further back in the stack history.


title: HISTORY
content:
The concept of a directory stack, along with complementary commands like <b>pushd</b>, <b>popd</b>, and <b>dirs</b>, was first introduced with the C shell (<i>csh</i>). This innovation aimed to provide a more dynamic and efficient way to navigate directories. Due to its utility, this feature was subsequently adopted by other prominent Unix-like shells, including Bash and Zsh, becoming a standard and highly valued component of shell functionality for both interactive use and scripting.


title: PARAMETERS
content:
<b><b>-u URL, --url URL</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the target URL(s) to scan. Multiple URLs can be provided separated by commas.</i><br><br><b><b>-l FILE, --url-list FILE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Provides a path to a file containing a list of target URLs, one URL per line.</i><br><br><b><b>-e EXTENSIONS, --extensions EXTENSIONS</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Adds file extensions to test for (e.g., 'php,asp,html').</i><br><br><b><b>-w WORDLIST, --wordlist WORDLIST</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the path to a custom wordlist file for brute-forcing.</i><br><br><b><b>-t THREADS, --threads THREADS</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Configures the number of concurrent threads to use for scanning, affecting speed and stealth.</i><br><br><b><b>-r, --recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enables recursive scanning of discovered directories.</i><br><br><b><b>-p PROXY, --proxy PROXY</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies an HTTP/S proxy to use for requests (e.g., 'http://127.0.0.1:8080').</i><br><br><b><b>-H HEADERS, --headers HEADERS</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Allows adding custom HTTP headers to requests (e.g., 'Cookie: foo=bar,X-Forwarded-For: 1.1.1.1').</i><br><br><b><b>-A USER_AGENT, --user-agent USER_AGENT</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets a custom User-Agent string for all requests.</i><br><br><b><b>--cookie COOKIE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets a custom cookie header for all requests.</i><br><br><b><b>-S STATUS, --status STATUS</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Filters results to include only specified HTTP status codes (e.g., '200,301,403').</i><br><br><b><b>-D STATUS, --exclude-status STATUS</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Filters results to exclude specified HTTP status codes.</i><br><br><b><b>-o FILE, --report FILE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Saves the scan results to a specified file.</i><br><br><b><b>--format FORMAT</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the output format for the report file (e.g., 'json', 'xml', 'csv', 'simple').</i><br><br>


title: DESCRIPTION
content:
<b>dirsearch</b> is a powerful command-line tool designed for brute-forcing directories and files on web servers. It systematically checks a predefined list of paths (a wordlist) against a target URL to discover hidden or unlinked resources.<br><br>This utility is widely used by penetration testers, security auditors, and developers to identify forgotten administration panels, sensitive files, vulnerable configurations, or other accessible resources that might expose security weaknesses. dirsearch supports various features including multi-threading for speed, proxy integration, custom HTTP headers and user agents, recursive scanning, filtering by HTTP status codes, and specifying file extensions. Its ability to generate reports in different formats makes it an essential tool for comprehensive web application security assessments.


title: CAVEATS
content:
<b>dirsearch</b> generates a significant amount of network traffic and can be considered intrusive. It should <i>only be used on systems for which you have explicit authorization</i>. Its aggressive nature can trigger Web Application Firewalls (WAFs) or Intrusion Detection Systems (IDS), potentially leading to a ban or alert. Relying solely on wordlists may result in false negatives if the target paths are not included. Care should be taken to manage the number of threads and delays to avoid overwhelming the target server or being detected.


title: <B>INSTALLATION AND USAGE</B>
content:
dirsearch is primarily a Python-based tool and can be installed via `pip` or by cloning its GitHub repository.<br>While it comes with default wordlists, users can supply custom wordlists tailored to specific targets or technologies. For effective and stealthy operations, it's often recommended to use dirsearch in conjunction with a proxy like Burp Suite, allowing for traffic inspection and modification.


title: <B>CUSTOMIZATION AND EVASION</B>
content:
To evade detection, users can leverage options like random User-Agents, custom headers, and delays between requests. Recursive scanning and specifying file extensions can significantly deepen the search, revealing more obscure or hidden assets.


title: HISTORY
content:
<b>dirsearch</b> originated as an open-source project written in Python, gaining significant traction within the cybersecurity community due to its efficiency and flexibility in web directory brute-forcing. It has been continuously developed and maintained on GitHub, with ongoing updates that add new features and improve performance. Its inclusion in popular penetration testing distributions like Kali Linux has cemented its status as a go-to tool for web application reconnaissance and vulnerability assessment.


title: SYNOPSIS
content:
<b>dirsplit</b> <i>&lt;source_directory&gt;</i> <i>&lt;destination_directory_prefix&gt;</i> [OPTIONS]


title: PARAMETERS
content:
<b><i>&lt;source_directory&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the source directory whose contents (files and subdirectories) are to be split.<br><br><b><i>&lt;destination_directory_prefix&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The base path where new subdirectories will be created. For example, if 'split_data/' is provided, subdirectories like 'split_data/001/', 'split_data/002/' will be created.<br><br><b><b>--items</b> <i>&lt;N&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Splits the source directory's contents such that each new subdirectory contains approximately <i>N</i> files/items. This option is mutually exclusive with <b>--dirs</b>.<br><br><b><b>--dirs</b> <i>&lt;M&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Splits the source directory's contents evenly into <i>M</i> new subdirectories. This option is mutually exclusive with <b>--items</b>.<br><br><b><b>--type</b> <i>&lt;action&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the action to perform on the files: '<b>move</b>' (default) to move files, '<b>copy</b>' to copy files, or '<b>link</b>' to create symbolic links. Be cautious with 'move' as it changes file paths.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a simulated run, showing which files would be moved/copied/linked and where, without making any actual changes to the filesystem. Highly recommended for testing.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the splitting process as it happens.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with usage instructions and available options.<br><br>


title: DESCRIPTION
content:
The command <i>dirsplit</i> is not a standard, pre-installed Linux utility found in most distributions. Instead, it typically refers to a custom script or a user-contributed tool designed to address the challenge of managing directories containing an excessively large number of files. Such scenarios can lead to performance issues with file system operations (like <i>ls</i>, <i>find</i>, backups) and can sometimes hit filesystem inode limits or practical manageability thresholds.<br><br>A common implementation of <i>dirsplit</i> works by taking all files and/or subdirectories from a specified source directory and distributing them into a new set of subdirectories within a destination path. The distribution can be based on various criteria, such as limiting the number of items per new subdirectory, or by distributing items evenly across a pre-defined number of new subdirectories. The operation can typically involve moving, copying, or symbolically linking the original files to their new locations, effectively 'sharding' the large directory's contents.


title: CAVEATS
content:
<b><i>dirsplit</i> is NOT a standard Linux command.</b> Implementations can vary significantly between different scripts or user-contributed versions. Always verify the script's source and functionality before execution. Using the <b>--type move</b> option will permanently change the paths of your files; ensure you have backups. Operations on extremely large directories can be time and resource-intensive. Be aware that splitting a directory's contents breaks the original logical grouping, which might affect applications or scripts expecting files at their original paths.


title: COMMON USE CASES
content:
Reasons for using <i>dirsplit</i> often include:<br><b>Improving File System Performance:</b> Many file systems and utilities perform poorly with directories containing hundreds of thousands or millions of files. Splitting them can significantly speed up operations like listing, searching, or traversing.<br><b>Backup and Archiving:</b> Splitting large directories into smaller, manageable chunks can simplify backup strategies, allowing for more granular and faster incremental backups.<br><b>Data Distribution:</b> For distributed systems or transferring data, splitting a monolithic directory can make it easier to distribute content across multiple storage nodes or transfer archives more efficiently.<br><b>Overcoming Filesystem Limits:</b> Some older filesystems or specific configurations might have practical limits on the number of entries in a single directory, which <i>dirsplit</i> can help circumvent.


title: IMPLEMENTATION NOTES
content:
A typical <i>dirsplit</i> script internally uses commands like <i>find</i> to list files, <i>mkdir</i> to create new subdirectories, and then <i>mv</i>, <i>cp</i>, or <i>ln</i> to move/copy/link files. It usually involves iterating through the source directory and assigning files sequentially or randomly to the target subdirectories based on the specified splitting logic. The naming convention for new subdirectories often involves sequential numbers (e.g., '001', '002', '003').


title: HISTORY
content:
Unlike standard Unix utilities with defined release histories, <i>dirsplit</i> does not have a single, official development history. The need to split large directories arose with the growth of data storage and the limitations of certain filesystems or backup tools when dealing with massive file counts in a single directory. As such, various users and administrators independently developed scripts (often in Bash, Python, Perl) to perform this task. These scripts are typically shared within communities or developed in-house, making <i>dirsplit</i> more of a common solution pattern than a specific command with a unified lineage.


title: PARAMETERS
content:
<b><code>--help</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays basic command-line help information and exits. The extent of this help is usually limited to application-launching arguments.<br><br><b><code>--version</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the application's version number and exits.<br><br><b><code>discord://&lt;url&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;While not a traditional option, the <b>discord</b> executable can process Discord-specific URLs (e.g., invites to servers, links to channels). Running <code>discord discord://invite/my-server</code> would attempt to open that specific link within the application.<br><br>


title: DESCRIPTION
content:
The <b>discord</b> command on Linux is primarily used to launch the Discord desktop application, a popular proprietary VoIP, instant messaging, and digital distribution platform. Unlike traditional Linux command-line utilities, <b>discord</b> is a graphical user interface (GUI) application designed for real-time communication among users. It allows for voice calls, video calls, text messaging in private chats or communities (servers), and sharing of media files. When invoked from the terminal, it typically opens the Discord application window, providing access to its full set of features for communication and community management. Its command-line interface is minimal, serving mainly to initiate the application rather than providing extensive operational control via the terminal.


title: CAVEATS
content:
The <b>discord</b> executable on Linux is not a standard command-line utility in the sense of tools like <b>ls</b>, <b>grep</b>, or <b>sed</b>. It is a proprietary graphical application whose primary function is to provide a user interface for communication. Its command-line arguments are extremely limited, mainly confined to basic application control (like opening specific URLs or showing version information) rather than manipulating system processes or files. Installation typically occurs via package managers (APT, DNF, Pacman), Snap, Flatpak, or by direct download of an AppImage or .deb/.rpm package. It does not possess a man page in the traditional Linux system (section 1-8).


title: INSTALLATION AND LAUNCHING
content:
On most Linux distributions, Discord is installed through package managers or containerized formats. Once installed, simply typing <code>discord</code> in a terminal is the most common way to launch the application. Users can also launch it via their desktop environment's application launcher or menu system.


title: APPLICATION BEHAVIOR
content:
When launched, <b>discord</b> typically opens its main application window. It usually runs in the background, often providing an icon in the system tray for easy access or to indicate new notifications, even after the window is closed. This behavior is consistent with many desktop communication applications.


title: HISTORY
content:
Discord was launched in 2015, initially gaining popularity among gamers. Over time, its usage expanded to various communities. The Linux client for Discord was developed as part of its cross-platform strategy, allowing users on Linux distributions to access the full features of the Discord platform. While the underlying technology and development are continuous, the 'command' itself has always served the singular purpose of launching the GUI application, with its interface and features evolving within the application itself, rather than through command-line options.


title: PARAMETERS
content:
<b><i>jobspec ...</i> | <i>pid ...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more job identifiers (e.g., <i>%1</i>, <i>%jobname</i>) or process IDs to disown. If omitted and neither <b>-a</b> nor <b>-r</b> is supplied, the currently running job is acted upon.<br><br><b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove all jobs from the job table. This makes them immune to <b>SIGHUP</b> upon shell exit.<br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove only running jobs from the job table. This makes them immune to <b>SIGHUP</b> upon shell exit.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Mark each <i>jobspec</i> or <i>PID</i> so that a <b>SIGHUP</b> is not sent to the job if the shell receives a <b>SIGHUP</b>. Unlike the default behavior, this option does <i>not</i> remove the job from the job table, meaning it will still appear in <b>jobs</b> output.<br><br>


title: DESCRIPTION
content:
The <b>disown</b> command is a shell built-in utility, primarily found in Bash and Zsh, used to remove jobs from the shell's active job table. By removing a job from this table, the shell will no longer send a <b>SIGHUP</b> signal to that process when the shell exits. This is particularly useful for long-running processes that you wish to continue executing in the background even after closing the terminal or logging out.<br><br>Typically, when a shell exits, it sends a <b>SIGHUP</b> to all processes in its job table. <b>disown</b> prevents this by severing the shell's association with the process. Once a job is disowned (without the <b>-h</b> option), it can no longer be managed by the shell's job control commands (like <b>fg</b> or <b>bg</b>) and will not appear in the output of the <b>jobs</b> command.<br><br>It's commonly used after a process has been suspended (e.g., with <b>Ctrl+Z</b>) and then moved to the background (with <b>bg</b>), to ensure its continued execution independent of the shell session.


title: CAVEATS
content:
<b>disown</b> is a shell built-in command, primarily available in Bash and Zsh, not a standalone executable found in <i>/usr/bin</i>. <br>Once a process is disowned (without <b>-h</b>), it cannot be brought back to the foreground (<i>fg</i>) or backgrounded (<i>bg</i>) using shell job control commands. <br>While <b>disown</b> prevents <b>SIGHUP</b> from the shell, it does not guarantee a process will run indefinitely; it can still be killed by other signals, system shutdowns, or resource limits. <br>It only affects jobs started within the current shell session.


title: USE CASES
content:
<b>disown</b> is ideal when you start a long-running process interactively, realize you need to close your terminal, and want the process to continue. A common sequence is: <br>1. Start command: <i>long_command</i> <br>2. Suspend with <b>Ctrl+Z</b> <br>3. Send to background: <b>bg</b> <br>4. Detach from shell: <b>disown</b>


title: COMPARISON WITH NOHUP
content:
While both <b>disown</b> and <b>nohup</b> aim to allow processes to survive shell exit, they differ in their approach. <b>nohup</b> is an external command used to launch a process from the start, ensuring it ignores <b>SIGHUP</b> from the outset and often redirects its output to <i>nohup.out</i>. <b>disown</b>, on the other hand, is a shell built-in used <i>after</i> a job has already been started within the current shell, allowing you to retrospectively detach it from job control.


title: HISTORY
content:
The concept of detaching processes from the shell's job control has been a feature of interactive Unix-like shells for decades. <b>disown</b> specifically emerged as a built-in command in shells like Bash and Zsh to provide fine-grained control over job management, complementing older methods like <b>nohup</b>. Its development is tied to the evolution of shell job control features, which became standard in the late 1980s and early 1990s.


title: PARAMETERS
content:
<b>-backdrop</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the image on the root window of the X server.<br><br><b>-delay <value></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a delay between images when displaying a sequence, in 1/100ths of a second (e.g., <I>-delay 200</I> for 2 seconds).<br><br><b>-geometry <WxH{+-}X{+-}Y></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the initial window size and position (e.g., <I>800x600+100+50</I>).<br><br><b>-loop <value></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls the number of times a slideshow repeats; <I>0</I> for infinite looping.<br><br><b>-resize <geometry></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resizes the image to the specified geometry (e.g., <I>50%</I> or <I>1024x768</I>) before display.<br><br><b>-title <string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the title of the image window displayed on the X server.<br><br><b>-update <seconds></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continuously updates the displayed image every N seconds (useful for monitoring changing files).<br><br><b>-verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints detailed information about the image being displayed to standard output.<br><br><b>-monochrome</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the image in black and white.<br><br><b>-flip</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a vertical mirror image of the input.<br><br>


title: DESCRIPTION
content:
The <b>display</b> command is an integral part of the <I>ImageMagick</I> software suite, designed for viewing and interactively manipulating image files on an X Window System display. It supports an extensive array of image formats, allowing users to open and inspect virtually any image file. <br><br>Beyond simple viewing, <b>display</b> offers a rich set of interactive capabilities accessible via mouse clicks and keyboard shortcuts directly from the image window. Users can zoom, pan, rotate, resize, apply basic image effects, save in different formats, and even print. Its interactive nature makes it a powerful tool for quick image inspection and basic editing tasks, particularly favored in command-line environments and scripting workflows.


title: CAVEATS
content:
The <b>display</b> command requires an active X Window System environment to function, as it presents images within a graphical window. It cannot be used on headless servers without an X server. For extremely large images or complex interactive operations, it can be resource-intensive, potentially consuming significant memory and CPU. While offering interactive editing capabilities, these are basic compared to dedicated image editing software.


title: INTERACTIVE IMAGE MANIPULATION
content:
Once an image is displayed, users can right-click on the image to access a comprehensive menu of operations, or use keyboard shortcuts for tasks like zooming, panning, rotating, saving, and printing. This interactivity transforms <b>display</b> from a mere viewer into a dynamic tool for on-the-fly adjustments and explorations.


title: SLIDESHOW CAPABILITIES
content:
<b>display</b> can be used to view multiple images sequentially, acting as a simple slideshow viewer. This is controlled via the <I>-delay</I> option to set the transition time between images, and the <I>-loop</I> option to specify how many times the sequence should repeat, allowing for automated image presentations.


title: HISTORY
content:
The <b>display</b> command is a foundational component of the <I>ImageMagick</I> software suite. <I>ImageMagick</I> was initially developed by John Cristy at E. I. du Pont de Nemours and Company, with its first public release in 1990. <b>display</b> has been a core utility since the early days, serving as an interactive front-end for <I>ImageMagick's</I> powerful image processing capabilities on Unix-like systems, primarily within the X Window System environment. Its ongoing development has mirrored that of <I>ImageMagick</I>, continually expanding its support for new formats and features.


title: PARAMETERS
content:
<b>-delay <value></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the interframe delay for animations in 1/100ths of a second.<br><br><b>-geometry <WxH+X+Y></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the preferred size and position of the display window.<br><br><b>-loop <count></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Determines how many times an animation sequence is repeated. Use '0' for infinite.<br><br><b>-resize <WxH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resizes the image before displaying it in the window.<br><br><b>-rotate <degrees></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rotates the image by the specified number of degrees.<br><br><b>-title <string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a title to the display window.<br><br><b>-verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints detailed information about the image to standard output.<br><br><b>-crop <WxH+X+Y></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts a rectangular region of the image.<br><br><b>-flip</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a mirror image by reflecting the pixels along the Y axis.<br><br><b>-flop</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a mirror image by reflecting the pixels along the X axis.<br><br><b>-quality <value></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the JPEG/MIFF/PNG compression level for output images (0-100).<br><br><b>-display <display></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the X server to connect to.<br><br>


title: DESCRIPTION
content:
<i><b>display.im6</b></i> is a powerful interactive image viewer and manipulator, part of the ImageMagick 6 suite of tools. It's primarily used to display image files on an X Window System server, offering a graphical user interface (GUI) for various image operations.<br><br>Users can view single images, animate sequences, and perform on-the-fly manipulations such as zooming, panning, rotating, resizing, cropping, and color adjustments. The command supports a vast array of image formats, making it a versatile tool for photographers, designers, and developers working with visual content. Beyond simple viewing, it provides options to save modified images, print them, or export them in different formats. Its interactive nature makes it ideal for visual inspection and quick edits.


title: CAVEATS
content:
Requires an X Window System server to function, making it unsuitable for headless environments.<br>The '.im6' suffix denotes ImageMagick version 6; users might find <i><b>magick display</b></i> (ImageMagick 7) or symlinks on newer systems, which offer similar or enhanced functionality.


title: INTERACTIVE CONTROLS
content:
Once an image is displayed, users can interact with it using mouse clicks and keyboard shortcuts. For instance, right-clicking typically brings up a menu with various image manipulation options, while scrolling the mouse wheel often controls zooming or frame advancement for animations.


title: SUPPORTED IMAGE FORMATS
content:
<i><b>display.im6</b></i> inherits ImageMagick's extensive format support, allowing it to open and save images in over 200 formats, including JPEG, PNG, GIF, TIFF, BMP, SVG, PDF, and many raw camera formats.


title: HISTORY
content:
<i><b>display</b></i> has been a fundamental component of the ImageMagick suite since its inception in 1990. The `.im6` suffix specifically indicates an executable compiled against or belonging to the ImageMagick 6 series. While ImageMagick 7 introduced a unified `magick` command (e.g., `magick display`), the `display.im6` command persists in many distributions for backward compatibility or as part of legacy installations. Its evolution reflects the continuous development of ImageMagick as a leading open-source image manipulation library.


title: PARAMETERS
content:
<b>--port PORT</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the TCP port <i>distccd</i> should listen on (default is 3632).<br><br><b>--allow IP/MASK</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restricts connections to specified IP addresses or network ranges (e.g., 192.168.1.0/24). Essential for security.<br><br><b>--listen IP</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP address <i>distccd</i> will bind to for listening.<br><br><b>--jobs N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the number of concurrent compilation jobs <i>distccd</i> will process at any given time.<br><br><b>--log-file FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects logging output to a specified file instead of standard error.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of log messages, providing more detailed information.<br><br><b>--user USER</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Drops privileges to run as a specified user after startup. Highly recommended for security.<br><br><b>--daemon</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Detaches <i>distccd</i> from the controlling terminal and runs it in the background as a daemon.<br><br><b>--no-detach</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <i>distccd</i> from detaching from the terminal, useful for debugging.<br><br><b>--sanitize-path</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Cleans and restricts the PATH environment variable passed to the compiler for security reasons.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a summary of command-line options and exits.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information for <i>distccd</i> and exits.<br><br>


title: DESCRIPTION
content:
<i>distccd</i> is the daemon component of the <i>distcc</i> distributed compilation system.<br>It listens for incoming compilation requests from <i>distcc</i> clients, typically on TCP port 3632, and executes the requested compiler on the client's source code, sending the results back.<br>By distributing compilation tasks across multiple machines running <i>distccd</i>, in conjunction with a <i>distcc</i>-enabled client, users can significantly accelerate build times for large software projects that involve numerous compilation units.<br>The daemon aims to make remote compilation almost transparent to the user and the build system, acting as a powerful backend for tools like <i>make</i>.<br>Due to its nature of executing arbitrary code received over the network, security is paramount; <i>distccd</i> must be configured carefully with strict access controls to restrict connections only to trusted clients.


title: CAVEATS
content:
<b>Security Risk:</b> Running <i>distccd</i> without proper access control (e.g., using <i>--allow</i> and a firewall) can allow anyone on the network to execute arbitrary commands on the host machine. This is a severe security vulnerability.<br><b>Compiler Compatibility:</b> For successful distributed compilation, the compiler versions and potentially their configurations (e.g., linker versions, libc versions) on the client and server machines should be compatible.<br><b>Network Latency:</b> While speeding up compilation, high network latency between the client and <i>distccd</i> server can negate performance benefits, and even slow down builds.


title: SECURITY BEST PRACTICES
content:
Always use the <i>--allow</i> option to whitelist trusted client IP addresses or networks, and configure a firewall to restrict access to <i>distccd</i>'s port (default 3632) to only trusted sources.<br>Run <i>distccd</i> as a non-root, dedicated user using the <i>--user</i> option to minimize potential damage from vulnerabilities.<br>Consider running <i>distccd</i> only within a secure, isolated network segment.


title: TYPICAL SETUP
content:
<b>On server machines:</b> Install <i>distccd</i> and start it with appropriate security settings (e.g., <i>distccd --daemon --allow 192.168.1.0/24 --user distccuser</i>).<br><b>On client machines:</b> Configure <i>distcc</i> (e.g., by setting the <i>DISTCC_HOSTS</i> environment variable to a space-separated list of <i>distccd</i> server addresses). Then, when compiling, prefix your compilation commands with <i>distcc</i> (e.g., <i>distcc gcc myprogram.c</i>) or configure your build system (like <i>make</i>) to use <i>distcc</i>.


title: HISTORY
content:
<i>distccd</i> is a core component of the <i>distcc</i> project, which was originally developed by Martin Pool in the early 2000s. Its primary goal was to leverage idle CPU cycles on multiple machines to speed up C/C++ compilation, particularly beneficial for large open-source projects or corporate codebases. The project aimed for simplicity and ease of setup, making distributed compilation accessible without complex build system modifications. <i>distccd</i> facilitates this by providing the remote execution endpoint.


title: SYNOPSIS
content:
<b><code>distrobox [<i>GLOBAL_OPTIONS</i>] <i>SUBCOMMAND</i> [<i>SUBCOMMAND_OPTIONS</i>] [<i>ARGUMENTS</i>]</code></b><br><br>Common Subcommands:<br><b><code>distrobox create [<i>OPTIONS</i>] <i>CONTAINER_NAME</i></code></b><br><b><code>distrobox enter [<i>OPTIONS</i>] <i>CONTAINER_NAME</i> [<i>COMMAND</i>]</code></b><br><b><code>distrobox list</code></b><br><b><code>distrobox rm <i>CONTAINER_NAME</i> [...]</code></b><br><b><code>distrobox upgrade</code></b>


title: PARAMETERS
content:
<b><b><code>-h</code></b>, <b><code>--help</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help message for <code>distrobox</code> or a subcommand.<br><br><b><b><code>--root</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run <code>distrobox</code> as root (using sudo/doas).<br><br><b><b><code>create</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new <code>distrobox</code> container.<br><br><b><b><code>  -i</code></b>, <b><code>--image <image></code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the container image to use (e.g., <code>fedora:latest</code>, <code>ubuntu:22.04</code>).<br><br><b><b><code>  -n</code></b>, <b><code>--name <name></code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name for the new container.<br><br><b><b><code>  --home <path></code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Mount a custom host path as the container's home directory.<br><br><b><b><code>  --volume <path></code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Mount an additional host path into the container (e.g., <code>/opt/mydata:/mnt/data</code>).<br><br><b><b><code>  --pull</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force pull the container image, even if it exists locally.<br><br><b><b><code>  --yes</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically answer yes to prompts during creation.<br><br><b><b><code>enter</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enter a <code>distrobox</code> container to execute commands or a shell.<br><br><b><b><code>  -n</code></b>, <b><code>--name <name></code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the container to enter.<br><br><b><b><code>  [<i>COMMAND</i>]</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Command to execute inside the container instead of the default shell.<br><br><b><b><code>list</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all created <code>distrobox</code> containers.<br><br><b><b><code>rm</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove one or more <code>distrobox</code> containers.<br><br><b><b><code>stop</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stop one or more running <code>distrobox</code> containers.<br><br><b><b><code>upgrade</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Upgrade all <code>distrobox</code> containers to their latest configuration/image.<br><br><b><b><code>export</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Export an application from a container to the host system's PATH and menu entries.<br><br>


title: DESCRIPTION
content:
<code>distrobox</code> is a command-line utility that leverages container runtimes like Podman or Docker to create isolated yet deeply integrated Linux environments. It allows users to create containers running different Linux distributions (e.g., Fedora, Debian, Arch, Ubuntu, openSUSE) and seamlessly integrate them with the host system. This means applications installed inside a <code>distrobox</code> container can access the host's home directory, display server (X11/Wayland), audio (PulseAudio/PipeWire), network, and other resources as if they were natively installed. This makes it ideal for development, testing, and running software that might conflict with the host's package versions or dependencies, especially on immutable operating systems. It provides a simple way to manage multiple isolated user spaces without the overhead of virtual machines, enabling a flexible and consistent cross-distribution workflow.


title: CAVEATS
content:
Requires <b><code>podman</code></b> or <b><code>docker</code></b> to be installed on the host system. While providing deep integration, <code>distrobox</code> containers share the host's Linux kernel, meaning they are not full virtual machines and cannot run different kernel versions or load arbitrary kernel modules. Performance can vary depending on the container runtime and host system resources. Certain specialized networking configurations might require additional setup.


title: HOW IT WORKS
content:
<code>distrobox</code> functions by creating OCI-compliant containers (using <code>podman</code> or <code>docker</code>) from chosen Linux distribution images. It then performs various bind mounts and configurations to seamlessly integrate the container with the host system. This includes mounting the host's <code>/home</code>, <code>/etc/passwd</code>, <code>/etc/group</code>, and various X11/Wayland and audio sockets, allowing GUI applications to run directly from within the container and appear as native host applications.


title: KEY ADVANTAGES
content:
<b>Cross-Distribution Compatibility:</b> Run applications and development environments from any supported Linux distribution on your host.<br><b>Immutable Host Friendliness:</b> Provides a mutable user space on immutable host systems (e.g., Fedora Silverblue, openSUSE MicroOS) without modifying the base OS.<br><b>Seamless Integration:</b> Applications installed in a <code>distrobox</code> container can access the host's home directory, display, sound, and other resources.<br><b>Isolated Environments:</b> Keep dependencies and software conflicts isolated within containers, preventing 'dependency hell' on the host.<br><b>Resource Efficiency:</b> Lighter than full virtual machines, sharing the host kernel and consuming fewer resources.


title: HISTORY
content:
Developed by Luca Di Maio (86Simone) and first publicly released around early 2022. The project was motivated by the need for a generic, cross-distribution solution for creating development and testing environments, especially on immutable host operating systems where traditional package management is discouraged. It aimed to provide a more flexible alternative to Fedora's <code>toolbox</code> utility. Since its inception, <code>distrobox</code> has seen rapid adoption and active development, quickly becoming a popular tool for containerized workflows on Linux.


title: SYNOPSIS
content:
<I><B>distrobox-create</B> [OPTIONS] &lt;container-name&gt;<br><B>distrobox-create</B> <B>--image</B> &lt;image-name&gt; [OPTIONS] &lt;container-name&gt;</I>


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Display a help message and exit.</I><br><br><b>-n, --name CONTAINER_NAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specify the name of the container to be created.</I><br><br><b>-i, --image IMAGE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>The container image to use for the distrobox (e.g., <I>fedora:latest</I>, <I>ubuntu:22.04</I>).</I><br><br><b>-H, --hostname HOSTNAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Set the hostname for the container.</I><br><br><b>-V, --volume VOLUME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Mount a volume into the container (e.g., <I>/path/on/host:/path/in/container</I>).</I><br><br><b>-B, --bind BIND</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Bind mount a file or directory into the container (alias for <B>--volume</B>).</I><br><br><b>--home HOME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Mount the host user's home directory into the container. This is default behavior.</I><br><br><b>--init</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Use <I>systemd-init</I> as the container's entrypoint, useful for running services.</I><br><br><b>--unshare-groups</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Do not share the host's groups with the container.</I><br><br><b>--unshare-processes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Do not share the host's process tree with the container.</I><br><br><b>--unshare-ipc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Do not share the host's IPC namespace with the container.</I><br><br><b>--unshare-net</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Do not share the host's network namespace with the container.</I><br><br><b>--unshare-pid</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Do not share the host's PID namespace with the container.</I><br><br><b>--unshare-uts</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Do not share the host's UTS namespace (hostname) with the container.</I><br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Perform a dry run, showing the commands that would be executed without creating the container.</I><br><br><b>--no-create</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Alias for <B>--dry-run</B>.</I><br><br><b>--pull</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Pull the container image even if it exists locally.</I><br><br><b>-Y, --yes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Automatically answer yes to prompts and proceed without confirmation.</I><br><br><b>--root</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Create the distrobox as the root user. Requires <B>sudo</B> or root privileges.</I><br><br><b>--container-manager MANAGER</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specify the container manager to use (<B>podman</B> or <B>docker</B>).</I><br><br><b>--additional-packages PACKAGES</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Install additional packages upon container creation (space-separated list).</I><br><br><b>--pre-init-hooks HOOKS</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Run shell commands before the container's init process starts.</I><br><br><b>--post-init-hooks HOOKS</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Run shell commands after the container's init process starts.</I><br><br><b>--clone CLONE_FROM</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Create a new distrobox by cloning an existing one.</I><br><br><b>--override-hostname</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Force override the hostname even if it conflicts with host's hostname.</I><br><br><b>--override-path PATH</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Override the default <I>PATH</I> environment variable inside the container.</I><br><br><b>--setup-timeout TIMEOUT</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Set a timeout for the initial setup process in seconds.</I><br><br><b>--skip-entry</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Skip the initial entry into the container after creation.</I><br><br><b>--tty</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Force TTY allocation for container processes.</I><br><br><b>--no-tty</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Disable TTY allocation for container processes.</I><br><br><b>--env VAR=VALUE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Set an environment variable inside the container.</I><br><br><b>--install</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Installs Distrobox (used internally by the setup script).</I><br><br><b>--rm-deps</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Remove build dependencies after initial setup within the container.</I><br><br><b>--force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Force the creation, replacing an existing container if <I>container-name</I> already exists.</I><br><br><b>--replace</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Alias for <B>--force</B>.</I><br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Print more verbose output for debugging.</I><br><br><b>-d, --debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Print debug messages.</I><br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Suppress output messages.</I><br><br>


title: DESCRIPTION
content:
<I>The <B>distrobox-create</B> command is a core component of the Distrobox ecosystem, designed to effortlessly create new, integrated Linux environments within containers. It leverages either <B>Podman</B> or <B>Docker</B> as its container backend, abstracting away the complexities of container management to provide a seamless user experience. The primary goal of <B>distrobox-create</B> is to allow users to install and run software from various Linux distributions (e.g., Fedora, Arch, Ubuntu) on their host system without affecting its integrity or needing a full virtual machine.<br><br>Unlike standard containers, a Distrobox container is specifically configured to integrate deeply with the host system. This includes sharing the user's home directory, <I>UIDs</I>/<I>GIDs</I>, X11/Wayland display, and sound system, making applications run inside the container feel almost native. When you use <B>distrobox-create</B>, you specify an official container image (e.g., <I>ubuntu:latest</I>, <I>fedora:38</I>), and Distrobox handles the initial setup, ensuring the environment is ready for immediate use and integration with your host desktop.<br><br>This command is ideal for developers testing software on different distributions, users who need specific packages only available in certain distros, or anyone looking to isolate applications or development environments for better system hygiene.</I>


title: CAVEATS
content:
<I>Requires <B>Podman</B> or <B>Docker</B> to be installed and running on the host system.<br>While highly integrated, some low-level hardware interactions or specific kernel modules might not function as expected due to the containerized environment.<br>Running graphical applications from within a Distrobox requires an active X server or Wayland compositor on the host system.<br>Though designed for isolation, it's still a container; certain security considerations applicable to containers apply.<br>Performance might be slightly less than native, especially for I/O intensive tasks, though generally negligible for typical usage.</I>


title: <I>HOST SYSTEM INTEGRATION</I>
content:
<I>A key feature of Distrobox is its deep integration with the host system. When a container is created, it automatically shares the user's home directory, <I>UIDs</I>/<I>GIDs</I>, <I>X11</I>/<I>Wayland</I> display, <I>PulseAudio</I>/<I>PipeWire</I> sound system, and <I>D-Bus</I>. This allows graphical applications and command-line tools run within the Distrobox to interact seamlessly with the host's desktop environment and peripherals, making them feel like native host applications.</I>


title: <I>CONTAINER MANAGERS</I>
content:
<I>Distrobox operates as a wrapper around existing container runtimes, primarily <B>Podman</B> and <B>Docker</B>. Users can specify which backend to use via the <B>--container-manager</B> option. <B>Podman</B> is often preferred for its daemon-less architecture and rootless container capabilities, aligning well with Distrobox's design principles for user-centric environments.</I>


title: <I>COMMON USE CASES</I>
content:
<I>Beyond general isolation, <B>distrobox-create</B> is frequently used for:<br><I>1.</I> Running software dependencies that conflict with the host system.<br><I>2.</I> Developing against different Linux distributions (e.g., building <I>.deb</I> packages on an <I>Arch</I> host).<br><I>3.</I> Testing new software versions in an isolated environment.<br><I>4.</I> Providing a consistent development environment across different machines.</I>


title: HISTORY
content:
<I>Distrobox was primarily developed by Luca Di Maio, beginning around 2021, with the aim of providing a simple, powerful, and integrated way to manage development and application environments using OCI containers. It quickly gained traction within the Linux community as a practical solution for cross-distribution compatibility and application isolation, especially for immutable operating systems like Fedora Silverblue and SteamOS. The project focuses on user-friendliness and deep integration with the host system, distinguishing itself from general-purpose container tools by its specialized focus on creating cohesive user environments.</I>


title: SEE ALSO
content:
<I>distrobox(1)</I>, <I>distrobox-enter(1)</I>, <I>distrobox-list(1)</I>, <I>distrobox-rm(1)</I>, <I>distrobox-upgrade(1)</I>, <I>podman(1)</I>, <I>docker(1)</I>


title: SYNOPSIS
content:
<b>distrobox-enter</b> <I>container_name</I> [<I>options</I>] [<I>--</I> <I>command</I> [<I>args</I>...]]


title: PARAMETERS
content:
<b><b><I>container_name</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the Distrobox container to enter. This is typically the first argument after the command name.<br><br><b><b>-n</b>, <b>--name</b> <I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly specifies the name of the container to enter. This is an alternative to providing the name as a positional argument.<br><br><b><b>--root</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enters the container as the root user. If not specified, the command attempts to enter as the current host user.<br><br><b><b>--user</b> <I>USER</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enters the container as a specified user within the container. The user must exist in the container.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the underlying Podman or Docker command that would be executed, without actually running it. Useful for debugging or understanding operations.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of the output, showing more details about the execution process.<br><br><b><b>--tty</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces TTY allocation for the command executed inside the container, even if the standard input is not a TTY.<br><br><b><b>--no-tty</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents TTY allocation for the command executed inside the container, which is useful for scripting or non-interactive environments.<br><br><b><b>--</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A separator used to indicate that all subsequent arguments are part of the command to be executed inside the container, rather than options for <b>distrobox-enter</b> itself.<br><br><b><b><I>command</I></b> [<I>args</I>...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The command and its arguments to be executed non-interactively inside the container. If omitted, an interactive shell is provided.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message for <b>distrobox-enter</b> and exits.<br><br>


title: DESCRIPTION
content:
<b>distrobox-enter</b> is a fundamental command within the Distrobox ecosystem, designed to provide seamless access to existing Distrobox containers. It allows users to either obtain an interactive shell inside a specified container or execute a non-interactive command directly within its environment. This is crucial for managing software, developing applications, and performing system operations without polluting the host operating system.<br><br>By abstracting the underlying container technology (like Podman or Docker), <b>distrobox-enter</b> simplifies the process of interacting with isolated environments, making it feel as if the containerized applications are running natively on the host. It's an essential tool for leveraging the benefits of Distrobox: consistent development environments, isolation of dependencies, and easy portability across different Linux distributions.


title: CAVEATS
content:
The specified container must exist and be accessible by the current user. If a command is specified after <b>--</b>, the command will run non-interactively and exit when it finishes, unlike entering a persistent interactive shell.<br><br>Permissions within the container are subject to the container's user/group settings and the specified <b>--user</b> or <b>--root</b> options, not directly by the host's permissions.


title: INTEGRATION WITH HOST
content:
<b>distrobox-enter</b> seamlessly integrates the container environment with the host by mounting the host's home directory (by default), and other necessary paths like `/mnt/wslg` (for WSLg), `/var/run/docker.sock`, etc. This allows host files and applications to be accessed and interacted with from within the container, blurring the line between host and guest environments.


title: INTERACTIVE VS. NON-INTERACTIVE
content:
Without a command specified after <b>--</b>, <b>distrobox-enter</b> provides an interactive shell (typically `bash` or `zsh` depending on the container image), allowing users to explore and work within the container. When a command is provided after <b>--</b>, it executes that specific command and then exits, making it suitable for scripting or running single tasks without needing to manually exit the container.


title: HISTORY
content:
Distrobox is a relatively modern tool, gaining popularity in the mid-2020s, especially among Linux developers and users on immutable distributions like Fedora Silverblue. <b>distrobox-enter</b> has been a core component since the project's inception, serving the primary purpose of interacting with the created containerized environments. Its development focuses on providing a seamless, robust, and user-friendly experience for entering and working within these environments, leveraging the power of OCI containers while simplifying their management.


title: SEE ALSO
content:
distrobox-create(1), distrobox-list(1), distrobox-rm(1), distrobox-exec(1), distrobox(1), podman(1), docker(1)


title: SYNOPSIS
content:
<b>distrobox-export</b> --container <I>NAME</I> { --app <I>APPLICATION</I> | --bin <I>BINARY</I> | --path <I>PATH</I> | --service <I>SERVICE</I> } [<I>OPTIONS</I>]<br><b>distrobox-export</b> --container <I>NAME</I> --delete { --app <I>APPLICATION</I> | --bin <I>BINARY</I> | --service <I>SERVICE</I> }<br><br><i><I>Note:</I> <b>distrobox-export</b> is typically a symlink to <b>distrobox export</b>.</i>


title: PARAMETERS
content:
<b>--container <I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Required.</b></i> Specifies the name of the Distrobox container from which to export.<br><br><b>--app <I>APPLICATION</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports a GUI application by its <i>.desktop</i> file name (e.g., 'firefox').<br><br><b>--bin <I>BINARY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports a command-line binary or executable (e.g., 'code', 'git').<br><br><b>--path <I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports an entire directory path from the container, making its contents available on the host.<br><br><b>--service <I>SERVICE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports a systemd user service from the container (e.g., 'podman.service').<br><br><b>--delete</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes a previously exported application, binary, or service from the host system.<br><br><b>--export-label <I>LABEL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a custom label or display name to the exported item.<br><br><b>--export-path <I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative directory on the host where the exported item's wrapper should be placed.<br><br><b>--export-wrappers-only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;For <i>--app</i> and <i>--bin</i> exports, prevents the creation of <i>.desktop</i> files, only creating wrapper scripts.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the command's help message and available options.<br><br>


title: DESCRIPTION
content:
<i>distrobox-export</i> is a pivotal command within the Distrobox ecosystem, designed to seamlessly integrate applications, binaries, and services installed inside a Distrobox container with the host system. It allows users to run GUI applications, command-line tools, or daemon services (like systemd user services) directly from their host desktop environment or terminal, as if they were natively installed. This command achieves this by creating necessary symbolic links, <i>.desktop</i> files, or wrapper scripts on the host, pointing to the corresponding elements within the specified container.<br><br>This powerful capability eliminates the need to manually enter the container to use its contents, providing an unparalleled level of dependency isolation while maintaining a native user experience. It's particularly useful for developers or users who need specific software versions, tools, or entire distribution environments without polluting their host system.


title: CAVEATS
content:
Exported applications might still have minor visual inconsistencies if container and host themes are vastly different. Exported services might require careful management (e.g., enabling systemd user services). The <i>--delete</i> option only works for <i>--app</i>, <i>--bin</i>, and <i>--service</i> exports, not for <i>--path</i> exports. The container must be accessible or running for the export to function correctly.


title: DEFAULT EXPORT LOCATIONS
content:
By default, <i>--app</i> exports typically create <i>.desktop</i> files in <i>~/.local/share/applications/</i>. <i>--bin</i> exports create wrapper scripts in <i>~/.local/bin/</i>, which should be in the user's PATH. <i>--service</i> exports usually place service files in <i>~/.config/systemd/user/</i>.


title: HOW EXPORT WORKS
content:
<i>distrobox-export</i> works by generating small wrapper scripts on the host system. These scripts ensure that when the exported application or binary is invoked, it's executed within the specified Distrobox container's environment, inheriting its dependencies and configurations, while still appearing to run directly on the host. For GUI applications, a <i>.desktop</i> file is also created to integrate with the host's desktop environment menus.


title: HISTORY
content:
<i>distrobox-export</i> is a core component of the Distrobox project, which was initially created by Luca Di Maio. The project gained significant traction for its innovative approach to integrating containerized environments with host systems. The export functionality was integral to Distrobox's mission from its early stages, enabling users to leverage diverse Linux distributions and their package ecosystems without the overhead of virtual machines, making it a powerful tool for developers and power users alike.


title: PARAMETERS
content:
<b><i>&lt;command&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The command to execute on the host system.<br><br><b><i>[args...]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional arguments to pass to the command executed on the host.<br><br>


title: DESCRIPTION
content:
<i><b>distrobox-host-exec</b></i> is a utility provided by the Distrobox project that enables users to execute commands directly on the <b>host system</b> from <i>within</i> a Distrobox container. This bridges the gap between the isolated container environment and the underlying host operating system. It is particularly useful for tasks where a command or tool is only available or properly configured on the host, or for managing host-specific resources without exiting the container. Examples include running host-installed GUI applications, interacting with systemd services, or accessing host-level file systems. The command essentially acts as a wrapper, passing the specified command and its arguments to be executed on the host. This functionality maintains the benefits of containerized development while providing seamless access to host capabilities, enhancing workflow integration and flexibility.


title: CAVEATS
content:
<b>Security Implications:</b> Running host commands from within a container inherently reduces the isolation provided by the container. Malicious code within the container could potentially leverage this to affect the host system.<br><b>Environment Differences:</b> The execution environment (PATH, environment variables, working directory) on the host might differ from the container's, which can lead to unexpected behavior if not accounted for.<br><b>User Permissions:</b> Commands are executed with the permissions of the user running <i><b>distrobox-host-exec</b></i> on the host, which means careful consideration of privilege escalation.<br><b>GUI Applications:</b> While often used for GUI apps, ensuring proper X11 forwarding or Wayland integration setup on the host and container is crucial for them to display correctly.


title: COMMON USE CASES
content:
Running host-installed GUI applications (e.g., a specific IDE or browser) from inside a container where development tools are installed.<br>Managing host system services (e.g., <i>systemctl start foobar.service</i>).<br>Accessing host-specific hardware or drivers that are not readily available or configured within the container.<br>Executing host-level package managers or update tools.


title: HOW IT WORKS
content:
<i><b>distrobox-host-exec</b></i> typically works by sending the command to a small helper daemon or process running on the host, or by directly executing it via mechanisms like a <i>podman exec</i> command targeted at a specific host-related container or service if the Distrobox setup uses such a pattern for host interaction. It leverages the host's container runtime capabilities to achieve this, often through a dedicated socket or shared volume.


title: HISTORY
content:
The <i><b>distrobox-host-exec</b></i> utility emerged as part of the broader Distrobox project, initiated by Luca Di Maio. Distrobox aims to provide a seamless way to create and manage development containers that integrate deeply with the host system, overcoming some of the limitations of traditional container setups for desktop users. The <i><b>distrobox-host-exec</b></i> command specifically addresses the need for accessing host-level functionality without breaking the container workflow, reflecting the project's focus on user experience and integration. Its development is ongoing, evolving with the underlying container technologies like Podman and Docker.


title: SYNOPSIS
content:
<b>dialog</b> <i>[common options]</i> <i>&lt;box-type&gt;</i> <i>&lt;text&gt;</i> <i>&lt;height&gt;</i> <i>&lt;width&gt;</i> <i>[box-specific arguments]</i><br><br><i>Common Options include:</i><br><b>--backtitle</b> <i>&lt;string&gt;</i><br><b>--title</b> <i>&lt;string&gt;</i><br><b>--clear</b><br><b>--no-shadow</b><br><b>--stdout</b> | <b>--stderr</b><br><br><i>Box Types include:</i><br><b>--msgbox</b><br><b>--yesno</b><br><b>--inputbox</b><br><b>--textbox</b><br><b>--menu</b><br><b>--checklist</b><br><b>--radiolist</b><br><b>--fselect</b><br><b>--gauge</b>


title: PARAMETERS
content:
<b>--backtitle <i>&lt;string&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a title to be displayed on the screen background, usually at the top.<br><br><b>--title <i>&lt;string&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a title for the dialog box itself, displayed at the top of the box.<br><br><b>--clear</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clears the screen before displaying the dialog box.<br><br><b>--no-shadow</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the shadow effect around the dialog box.<br><br><b>--stdout</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects <b>dialog</b>'s output (user input/selection) to standard output. By default, this output goes to standard error (or /dev/tty).<br><br><b>--stderr</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs <b>dialog</b>'s output (user input/selection) to standard error. This is the default behavior.<br><br><b>--msgbox <i>&lt;text&gt; &lt;height&gt; &lt;width&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a simple message box with an 'OK' button. It pauses until the user presses OK.<br><br><b>--yesno <i>&lt;text&gt; &lt;height&gt; &lt;width&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a question with 'Yes' and 'No' buttons. Returns 0 for Yes, 1 for No.<br><br><b>--inputbox <i>&lt;text&gt; &lt;height&gt; &lt;width&gt; [&lt;init&gt;]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays an input box, allowing the user to enter a single line of text. The optional <i>&lt;init&gt;</i> provides default text.<br><br><b>--textbox <i>&lt;file&gt; &lt;height&gt; &lt;width&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the contents of a specified text file. Allows scrolling if the content exceeds the box size.<br><br><b>--menu <i>&lt;text&gt; &lt;height&gt; &lt;width&gt; &lt;menu_height&gt; [&lt;tag&gt; &lt;item&gt;]...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a menu from which the user can select one item. Each item has a unique <i>&lt;tag&gt;</i> and a descriptive <i>&lt;item&gt;</i>.<br><br><b>--checklist <i>&lt;text&gt; &lt;height&gt; &lt;width&gt; &lt;list_height&gt; [&lt;tag&gt; &lt;item&gt; &lt;status&gt;]...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a list with checkboxes, allowing multiple selections. <i>&lt;status&gt;</i> can be 'on' or 'off'.<br><br><b>--gauge <i>&lt;text&gt; &lt;height&gt; &lt;width&gt; [&lt;percent&gt;]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a progress bar. The percentage can be provided initially or read from standard input.<br><br><b>--fselect <i>&lt;filepath&gt; &lt;height&gt; &lt;width&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a file selection box, allowing the user to browse directories and select a file.<br><br><b>--timebox <i>&lt;text&gt; &lt;height&gt; &lt;width&gt; [&lt;hour&gt; &lt;minute&gt; &lt;second&gt;]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a time selection box, allowing the user to pick a time.<br><br><b>--calendar <i>&lt;text&gt; &lt;height&gt; &lt;width&gt; [&lt;day&gt; &lt;month&gt; &lt;year&gt;]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a calendar, allowing the user to pick a date.<br><br><b>--nocancel</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hides the 'Cancel' button, forcing the user to make a choice (e.g., Yes/No for a yesno box).<br><br>


title: DESCRIPTION
content:
<b>dialog</b> is a program that allows you to present a variety of user-friendly dialog boxes from shell scripts. It utilizes the ncurses library to provide a terminal-based graphical user interface (TUI). This enables script developers to create interactive prompts, menus, and information displays without relying on a full graphical environment.<br><br>Common uses include asking yes/no questions, getting text input, displaying messages, showing progress bars, selecting items from lists, and browsing files. <b>dialog</b> directs the user's input (e.g., entered text, selected menu items) to standard output, while error messages and the dialog box itself are drawn on standard error (unless redirected). Its return code indicates the user's action (e.g., OK, Cancel, Yes, No, ESC). This makes it a powerful tool for enhancing the interactivity and user experience of command-line scripts.


title: CAVEATS
content:
<ul><li><b>Terminal Dependency:</b> <b>dialog</b> requires a terminal that supports ncurses. It is not suitable for use in non-interactive scripts or environments without a proper terminal emulator.</li><li><b>Output Redirection:</b> By default, <b>dialog</b> draws its visual output (the box) to standard error and prints user input/selection to standard output. This often necessitates careful redirection (e.g., <code>2>&1 >/dev/tty</code>) in shell scripts to capture output correctly while displaying the dialog.</li><li><b>Limited GUI:</b> While providing a TUI, it offers only basic, grid-based layouts. It cannot create complex graphical interfaces or widgets found in modern desktop environments.</li><li><b>Exit Status:</b> The program's exit status is crucial for script logic (e.g., 0 for OK/Yes, 1 for Cancel/No). An exit status of 255 typically indicates the user pressed the ESC key.</li><li><b>Shell Quoting:</b> Text arguments containing spaces or shell metacharacters require careful quoting to be passed correctly to <b>dialog</b>.</li></ul>


title: CAPTURING USER INPUT
content:
When using box types like <b>--inputbox</b>, <b>--menu</b>, <b>--checklist</b>, or <b>--radiolist</b>, <b>dialog</b> prints the user's selection or entered text to standard output. Scripts typically capture this output using command substitution.<br><br><i>Example:</i><br><code>RESPONSE=$(dialog --inputbox "Enter your name:" 10 40 2>&1 >/dev/tty)</code><br><br>The common redirection <code>2>&1 >/dev/tty</code> ensures that the dialog box itself is drawn on the terminal (typically <code>/dev/tty</code>), while <b>dialog</b>'s standard output (the user's response) is captured by the shell variable <code>RESPONSE</code>.


title: HISTORY
content:
The <b>dialog</b> program was originally written by Lars Wirzenius and became a staple utility in Linux and Unix-like systems, often distributed as part of the <b>ncurses</b> library. Its development in the early 1990s addressed the need for interactive command-line interfaces for shell scripts, bridging the gap between simple command-line tools and full graphical applications. Over decades, it has evolved with new box types and options, maintaining its core purpose of providing a portable and robust method for user interaction within the terminal environment.


title: SYNOPSIS
content:
<b>diff3</b> [<i>OPTIONS</i>] <i>FILE1 FILE2 FILE3</i><br><i>FILE1</i> is typically the common original base file.<br><i>FILE2</i> is typically 'your' modified version.<br><i>FILE3</i> is typically 'their' modified version.


title: PARAMETERS
content:
<b>-A, --show-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output all changes (common, non-overlapping, and conflicting). Conflict markers include the base content (<i>FILE1</i>) in the middle section.<br><br><b>-E, --ed</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output an <i>ed</i>-style script that, when applied, merges the files. This output does not contain conflict markers but rather <i>ed</i> commands.<br><br><b>-L LABEL, --label=LABEL</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use <i>LABEL</i> instead of the filename in the conflict headers. This option can be specified up to three times, applying to <i>FILE1</i>, <i>FILE2</i>, and <i>FILE3</i> respectively.<br><br><b>-m, --merge</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the merged file. This is the default behavior and implies the standard conflict marker format.<br><br><b>-x, --overlap-only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output only the conflicting changes (overlapping edits). No base content is shown in conflict markers.<br><br><b>-X, --show-overlap</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output conflicting changes, including the base content (<i>FILE1</i>) of the overlapping section, but exclude non-overlapping changes.<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:
<b>diff3</b> compares three versions of a file, identifying differences and attempting to merge them. It's commonly used in version control systems to resolve conflicts when multiple developers modify the same base file. The three files typically represent: <i>BASE</i> (the common ancestor), <i>MINE</i> (your version with changes), and <i>THEIRS</i> (another developer's version with changes).<br><br>The command attempts to combine changes made independently from the <i>BASE</i>. Where changes don't overlap, <b>diff3</b> integrates them seamlessly. When changes overlap in a way that <b>diff3</b> cannot automatically resolve (i.e., both <i>MINE</i> and <i>THEIRS</i> modified the same section differently from <i>BASE</i>), it inserts conflict markers. These markers delineate the conflicting sections, showing the versions from <i>MINE</i> and <i>THEIRS</i>, along with the <i>BASE</i> content if the <i>-A</i> or <i>-X</i> option is used. Users must then manually resolve these conflicts by editing the output file.


title: CAVEATS
content:
<b>diff3</b> assumes that <i>FILE1</i> is the common ancestor of <i>FILE2</i> and <i>FILE3</i>. If this assumption is incorrect, the merge results may be misleading or incorrect.<br><br>Automatic conflict resolution is limited; it handles only non-overlapping changes. Many conflicts require manual intervention and a clear understanding of the content. The tool operates line by line and does not understand the semantic meaning of changes in programming languages or other structured data.


title: CONFLICT MARKERS
content:
When conflicts occur, <b>diff3</b> inserts special markers into the output file to delineate the conflicting sections. The most common format (with <i>-A</i> or <i>-X</i>) is:<br><br><i>&lt;&lt;&lt;&lt;&lt;&lt;&lt; LABEL_FILE2</i><br><i>Content from FILE2</i><br><i>||||||| LABEL_FILE1</i><br><i>Content from FILE1 (BASE)</i><br><i>=======</i><br><i>Content from FILE3</i><br><i>&gt;&gt;&gt;&gt;&gt;&gt;&gt; LABEL_FILE3</i><br><br>The user must manually edit the section between <i>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</i> and <i>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</i> to resolve the conflict.


title: EXIT STATUS
content:
<b>diff3</b> returns an exit status to indicate the outcome of the merge:<br><i>0</i>: No conflicts were found; the merge was clean.<br><i>1</i>: Conflicts were found and inserted into the output.<br><i>2</i>: Trouble occurred (e.g., file not found, invalid options).


title: HISTORY
content:
<b>diff3</b> is part of the <i>diffutils</i> package, a suite of programs for finding differences between files, which has been a staple of Unix-like operating systems since their early development. Its origins can be traced back to the original Unix <b>diff</b> utility. <b>diff3</b> specifically addresses the problem of merging three versions of a file, a common requirement in collaborative software development and version control systems. Its design and algorithms have remained largely consistent, providing a foundational text merging tool that integrates well with systems like CVS and Subversion, and often serves as a component for Git's merge strategies.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints help information and exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints version information and exits.<br><br><b><b>-s</b>, <b>--show-hidden</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows hidden files and directories (those starting with '.').<br><br><b><b>-i</b>, <b>--ignore-errors</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continues scanning even if errors are encountered in some directories.<br><br><b><b>-m</b> <SIZE>, <b>--min-file-size</b> <SIZE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignores files smaller than the specified <i>SIZE</i> (e.g., <i>1K</i>, <i>1M</i>, <i>1G</i>). <br><i>SIZE</i> can be in bytes, K, M, G, T.<br><br><b><b>-a</b>, <b>--apparent-size</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses apparent size (actual bytes of file content) instead of disk usage (allocated blocks). Useful for sparse files.<br><br><b><b>-u</b>, <b>--no-unicode</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses ASCII characters instead of Unicode for progress bars and UI elements.<br><br><b><b>-p</b>, <b>--no-progress</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the progress indicator during the initial scan.<br><br><b><b>-c</b> <SCHEME>, <b>--color-scheme</b> <SCHEME></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the color scheme for the TUI (e.g., <i>dark</i>, <i>light</i>, <i>solarized-dark</i>, <i>monokai</i>).<br><br><b><b>-C</b>, <b>--no-color</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables all color output.<br><br><b><b>-D</b>, <b>--no-delete-confirm</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Caution:</i> Deletes files/directories without asking for confirmation. Use with extreme care as this action is irreversible.<br><br><b><b>-j</b> <NUM_JOBS>, <b>--jobs</b> <NUM_JOBS></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of parallel jobs to use for scanning (defaults to the number of logical cores).<br><br><b><b>[path]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The starting directory to scan. If omitted, <b>diskonaut</b> scans the current working directory.<br><br>


title: DESCRIPTION
content:
<b>diskonaut</b> is a modern, interactive disk usage analyzer for the terminal. It provides a user-friendly <i>TUI</i> (Text User Interface) to visualize disk space consumption, navigate directories, delete files, and sort entries by size or name. Written in <i>Rust</i>, it aims for speed and efficiency, offering an intuitive way to manage disk space directly from the command line. It displays directory sizes, file counts, and allows drilling down into subdirectories to pinpoint large files or folders consuming space. Its interactive nature makes it a powerful and efficient alternative to traditional <b>du</b> commands for exploratory disk space management.


title: CAVEATS
content:
Using the <b>-D</b> or <b>--no-delete-confirm</b> option can lead to irreversible data loss if not used with extreme caution. <br>While designed for efficiency, the initial scanning of very large directories with millions of small files can still take a noticeable amount of time. <br><b>diskonaut</b> provides an intuitive interface but users should still exercise caution when deleting files, especially in system directories.


title: INTERACTIVE NAVIGATION AND KEYBINDINGS
content:
Once launched, <b>diskonaut</b> offers a highly interactive experience with several keybindings:<br><ul><li><b>?</b>: Displays a help screen with all available keybindings.</li><li><b>j</b>/<b>k</b> or <i>Arrow Up</i>/<i>Down</i>: Navigate through entries (files/directories).</li><li><b>h</b>/<b>l</b> or <i>Arrow Left</i>/<i>Right</i>: Go up to the parent directory / enter the selected directory.</li><li><b>d</b>: Delete the selected file or directory (requires confirmation by default).</li><li><b>s</b>: Cycle through different sorting options (by name, size, or item count).</li><li><b>g</b>: Toggle between apparent size and disk usage for displayed sizes.</li><li><b>q</b>: Quit the application.</li></ul>


title: INSTALLATION
content:
<b>diskonaut</b> is often installed via <i>Rust's</i> package manager <b>cargo</b>: <br><i>cargo install diskonaut</i> <br>Many Linux distributions also provide <b>diskonaut</b> in their official package repositories (e.g., <i>apt install diskonaut</i> on Debian/Ubuntu, <i>dnf install diskonaut</i> on Fedora, <i>pacman -S diskonaut</i> on Arch Linux).


title: HISTORY
content:
<b>diskonaut</b> emerged as part of a new generation of command-line tools written in <i>Rust</i>, focusing on performance, memory safety, and an enhanced user experience over older utilities. Its development began around 2018-2019, quickly gaining popularity for its interactive <i>TUI</i> approach to disk space analysis. It offers a more dynamic and visually engaging alternative to static <b>du</b> outputs and provides a modern, often faster, alternative to similar tools like <b>ncdu</b>.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs only the names of the existing containers, suppressing additional details.<br><br><b>-j, --json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the container information in a structured JSON format, useful for scripting and programmatic parsing.<br><br><b>-a, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all containers, including those that are in the process of being created or deleted.<br><br><b>-p, --podman</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the use of Podman as the container backend, even if Docker is detected or preferred.<br><br><b>-d, --docker</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the use of Docker as the container backend, even if Podman is detected or preferred.<br><br>


title: DESCRIPTION
content:
The <b>distrobox-list</b> command is an essential part of the <I>Distrobox</I> toolset, designed to simplify the management of containerized environments. <br><br><i>Distrobox</i> allows users to create isolated development or work environments based on various Linux distributions, leveraging OCI-compliant containers (like those from <I>Podman</I> or <I>Docker</I>). These environments are tightly integrated with the host system, enabling seamless access to home directory, user-defined binaries, and graphical applications.<br><br><b>distrobox-list</b> specifically provides a concise overview of all currently created <i>Distrobox</i> containers. It displays key information such as the container's name, status (e.g., <I>running</I>, <I>exited</I>, <I>creating</I>), the underlying container image used, the container ID, and the container manager (Podman or Docker) used for its creation. This command is crucial for quickly assessing the state and availability of your various development or testing environments.


title: CAVEATS
content:
<b>distrobox-list</b> relies on either <I>Podman</I> or <I>Docker</I> being installed and running on the host system. If no container backend is available or configured, the command may fail or report no containers. <br><br>Permissions can also be a factor; containers created by <I>root</I> might not be visible or manageable by a regular user without appropriate setup.


title: INTERPRETING OUTPUT
content:
The default output of <b>distrobox-list</b> typically includes columns like <I>NAME</I>, <I>STATUS</I>, <I>ID</I>, <I>IMAGE</I>, and <I>CONTAINER MANAGER</I>. The <I>STATUS</I> column is particularly important, indicating whether a container is <I>running</I>, <I>exited</I>, <I>creating</I>, or <I>removing</I>. An <I>exited</I> container means it's not currently active but can be re-entered (started) using <I>distrobox-enter</I>.<br><br>Using the <B>--json</B> flag provides a machine-readable output, which is ideal for scripting and integrating <i>Distrobox</i> container management into automated workflows.


title: HISTORY
content:
<i>Distrobox</i>, and by extension <b>distrobox-list</b>, emerged as a response to the need for simple, user-friendly containerized development environments that integrate well with the host system. It was initially developed by Luca Di Maio (<I>8bitkid</I>) and has rapidly gained traction in the Linux community since its public release, becoming a popular tool for developers seeking to work across different Linux distributions without the overhead of virtual machines or complex container setups. Its design prioritizes ease of use and seamless integration over traditional container isolation models.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not ask for confirmation before removing the container(s).<br><br><b>-a, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove all existing <i>distrobox</i> containers.<br><br><b>-D, --delete-home</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete the symlink to the host's home directory inside the container (if it exists).<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details about the removal process.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable quiet output, suppressing informational messages.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a dry run; do not actually remove anything, just show what would be done.<br><br><b><i>CONTAINER_NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name(s) of the <i>distrobox</i> container(s) to remove. Multiple names can be specified as arguments.<br><br>


title: DESCRIPTION
content:
<i>distrobox-rm</i> is used to remove one or more existing Distrobox containers. It cleans up the container and any associated files that were created specifically for that distrobox. This command is essential for managing your <i>distrobox</i> environments, allowing you to free up disk space and remove environments you no longer need.<br><br>When a <i>distrobox</i> is removed, its entire root filesystem, configuration, and any data stored <b>inside</b> that specific container are permanently deleted. It's crucial to back up any important data before removing a <i>distrobox</i>. The command ensures a clean removal, leaving no lingering container remnants on the host system.


title: CAVEATS
content:
Using <i>distrobox-rm</i> will permanently delete the specified container(s) and <b>all data stored within them</b>. Ensure you have backed up any critical data before proceeding, especially if using the <b>-a</b> or <b>--all</b> option, which removes all <i>distrobox</i> environments. By default, the command asks for confirmation before deletion unless <b>-f</b> or <b>--force</b> is used.


title: CONFIRMATION PROMPT
content:
By default, <i>distrobox-rm</i> will ask for confirmation before removing a container to prevent accidental data loss. This prompt can be bypassed using the <b>--force</b> (<b>-f</b>) option.


title: IMPACT OF --DELETE-HOME
content:
When the <b>--delete-home</b> (<b>-D</b>) option is used, it specifically targets and removes the symbolic link created for the user's home directory <b>inside</b> the container. This action does not affect or delete the actual home directory on the host system.


title: HISTORY
content:
The <i>distrobox</i> project was initiated by Luca Di Maio (Castedo) to simplify the use of containerized environments, making them feel more integrated with the host system. <i>distrobox-rm</i> has been a fundamental utility since the early stages of the project's development, providing the essential capability to cleanly dispose of created environments. Its design ensures that containers are removed thoroughly, preventing orphaned resources and maintaining system hygiene, reflecting the project's goal of seamless integration and easy management.


title: SYNOPSIS
content:
<b>distrobox-stop</b> [<b>-h</b>|<b>--help</b>] [<b>-n</b>|<b>--name</b> <i>&lt;name&gt;</i>] [<b>-a</b>|<b>--all</b>] [<b>-q</b>|<b>--quiet</b>] [<b>-y</b>|<b>--yes</b>]


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><b>-n</b> <i>&lt;name&gt;</i>, <b>--name</b> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the distrobox container to stop. This option is mandatory if <b>--all</b> is not used.<br><br><b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stops all currently running distrobox containers.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most output from the command, useful for scripting.<br><br><b><b>-y</b>, <b>--yes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically answer yes to prompts, useful for non-interactive operations.<br><br>


title: DESCRIPTION
content:
<b>distrobox-stop</b> is a command-line utility used to gracefully stop one or more running <i>distrobox</i> containers. It is an integral part of the <i>distrobox</i> project, which provides a seamless way to create isolated development environments using container technology like Podman or Docker. When you stop a distrobox, its running processes are terminated, and the container ceases to consume CPU and memory resources, although its data and filesystem state are preserved. This command is crucial for managing the lifecycle of your distroboxes, allowing you to free up system resources when a particular environment is not actively in use. You can stop a specific distrobox by its name or stop all running distroboxes simultaneously. The command ensures that the container exits cleanly, preventing potential data corruption or orphaned processes. It's an essential tool for maintaining an organized and resource-efficient development workflow with <i>distrobox</i>.


title: CAVEATS
content:
<ul><li>If the specified distrobox is already stopped or does not exist, the command might return an error or simply do nothing, depending on the version and specific scenario.</li><li>Stopping a distrobox only pauses its execution; it does not remove the container. To remove it, <b>distrobox-rm</b> must be used.</li><li>Ensure you stop the correct distrobox by verifying its name, especially when not using the <b>--all</b> option.</li></ul>


title: CONTAINER LIFECYCLE
content:
<b>distrobox-stop</b> handles stopping a container, preserving its state and data for later re-entry using <b>distrobox-enter</b>. This action contrasts with <b>distrobox-rm</b>, which permanently deletes the container and its associated data.


title: RESOURCE MANAGEMENT
content:
Stopping unused distroboxes is a good practice for freeing up system resources like RAM and CPU cycles, especially on systems with limited resources or when managing many development environments simultaneously.


title: HISTORY
content:
<i>distrobox</i> itself is a relatively modern tool, gaining popularity in the Linux community for its innovative approach to developer environments. It was initially created by Luca Di Maio. The <b>distrobox-stop</b> command has been a core component since its early versions, essential for managing the lifecycle of the created environments. Its development aligns with the broader trend of leveraging OCI containers for local development and system isolation.


title: SEE ALSO
content:
distrobox(1), distrobox-create(1), distrobox-enter(1), distrobox-list(1), distrobox-rm(1), podman(1), docker(1)


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display help information for the command.</i><br><br><b>CONTAINER_NAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Optional. Specifies the name of a single Distrobox container to upgrade. If omitted, all existing containers will be upgraded.</i><br><br>


title: DESCRIPTION
content:
The <i>distrobox-upgrade</i> command provides a convenient way to update packages within your Distrobox containers. Instead of manually entering each container and running its specific package manager's upgrade command (e.g., <b>apt upgrade</b>, <b>dnf upgrade</b>, <b>pacman -Syu</b>), this command automates the process. It can upgrade all existing containers or a specified one. It detects the container's distribution and executes the appropriate upgrade sequence, ensuring your containerized environments remain up-to-date, secure, and stable with minimal effort. This significantly streamlines the maintenance of diverse development or testing setups.


title: CAVEATS
content:
<i>• Ensure the container is running or can be started by Distrobox.</i><br><i>• Internet connectivity is required within the container for updates.</i><br><i>• Large updates can consume significant time and bandwidth.</i><br><i>• While automated, some package managers may still prompt for user input during complex upgrades, requiring manual intervention by entering the container.</i><br><i>• It is always prudent to back up critical data before performing major system-wide updates, though distrobox-upgrade primarily handles package updates.</i>


title: HOW IT WORKS INTERNALLY
content:
<i>distrobox-upgrade</i> intelligently identifies the underlying distribution of each container (e.g., Debian, Fedora, Arch Linux). Based on this identification, it executes the appropriate system-wide update command within the container. For example:<br>• <b>Debian/Ubuntu</b>: <b>sudo apt update && sudo apt upgrade -y</b><br>• <b>Fedora/RHEL/CentOS</b>: <b>sudo dnf upgrade -y</b><br>• <b>Arch Linux</b>: <b>sudo pacman -Syu --noconfirm</b><br>This ensures seamless and correct updating regardless of the container's base system, abstracting away the specifics of each package manager from the user.


title: HISTORY
content:
<i>The distrobox project was initiated to simplify the creation and management of containerized development environments on Linux. The <b>distrobox-upgrade</b> command emerged as a natural extension of this goal, providing a unified and automated approach to keep these diverse environments up-to-date. Its inclusion reflects the project's commitment to reducing administrative overhead and enhancing the user experience for developers and system administrators utilizing multiple Linux distributions simultaneously.</i>


title: PARAMETERS
content:
<b><b>-scale N/D</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale the output image by the given fraction (N divided by D), e.g., 1/2, 1/4, or 1/8. This allows for quick generation of thumbnail-sized images directly from the JPEG data.<br><br><b><b>-crop X,Y,W,H</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Crop the output image to a specified rectangular region. X and Y define the top-left corner coordinates, while W and H define the width and height of the crop region.<br><br><b><b>-grayscale</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Convert the decompressed output image to grayscale. This can reduce file size for formats that support it and simplify color processing.<br><br><b><b>-rgb</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output an RGB image, even if the input is grayscale. This is typically the default color output mode if not using <b>-grayscale</b>.<br><br><b><b>-colors N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quantize the output image to at most N colors. This is useful for reducing color depth for display on limited palettes or for specific image processing needs.<br><br><b><b>-idct <i>ALGORITHM</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Inverse Discrete Cosine Transform (IDCT) algorithm to use for decompression. Common algorithms include <i>float</i>, <i>ifast</i>, <i>islow</i>, <i>iaccurate</i>, and optimized versions like <i>sse2</i> or <i>avx2</i> (if supported by the CPU and compiled library).<br><br><b><b>-fast</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a faster, lower-quality IDCT method for quicker decompression. This is a shorthand for a specific <b>-idct</b> algorithm.<br><br><b><b>-perfect</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a more precise IDCT method, aiming for higher quality but potentially slower decompression. This is often the default or implied by its absence.<br><br><b><b>-pnm</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the image in PNM (Portable Anymap) format, specifically PPM (Portable Pixmap) for color, PGM (Portable Graymap) for grayscale, or PBM (Portable Bitmap) for monochrome. This is often the default output format.<br><br><b><b>-bmp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the image in BMP (Windows Bitmap) format.<br><br><b><b>-tga</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the image in TGA (Truevision Targa) format.<br><br><b><b>-tiff</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the image in TIFF (Tagged Image File Format). Note: This option requires libtiff support to be compiled into the underlying JPEG library.<br><br><b><b>-outfile <i>file</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the decompressed output to the specified <i>file</i>. If this option is omitted, <b>djpeg</b> writes to standard output (stdout).<br><br><b><b>-strict</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use strict compliance with the JPEG standard during decompression, which may cause it to reject some malformed or non-standard JPEG files.<br><br><b><b>-verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose messages, providing more information about the decompression process, such as image dimensions, color space, and memory usage.<br><br>


title: DESCRIPTION
content:
The <b>djpeg</b> command is a command-line utility for decompressing JPEG (Joint Photographic Experts Group) image files. It is part of the Independent JPEG Group (IJG) JPEG library, commonly provided by <i>libjpeg</i> or <i>libjpeg-turbo</i>. Its primary function is to read a JPEG-compressed image and output it in a different, uncompressed, or less-compressed format suitable for viewing, editing, or further processing.<br><br>Common output formats include PPM (Portable Pixmap), PGM (Portable Graymap), PBM (Portable Bitmap), BMP (Windows Bitmap), and TGA (Truevision Targa). Depending on the compilation options of the underlying library, it might also support TIFF (Tagged Image File Format). <b>djpeg</b> provides various options for controlling the decompression process, such as scaling the output image, converting to grayscale, specifying color quantization, and choosing different Inverse Discrete Cosine Transform (IDCT) algorithms for speed or quality tradeoffs.


title: CAVEATS
content:
The availability of certain output formats (e.g., TIFF) depends on how the underlying <i>libjpeg</i> or <i>libjpeg-turbo</i> library was compiled and whether necessary external libraries (like libtiff) were present. Large input files or high resolution images can consume significant amounts of memory during decompression, potentially leading to performance issues or out-of-memory errors on systems with limited RAM. While <b>djpeg</b> is generally robust, malformed or corrupted JPEG files might lead to errors, warnings, or unexpected output behavior.


title: STANDARD INPUT/OUTPUT USAGE
content:
If no input file is specified, <b>djpeg</b> reads JPEG data from standard input (stdin). If the <b>-outfile</b> option is not used, it writes the decompressed image to standard output (stdout). This makes <b>djpeg</b> highly suitable for use in shell pipelines, allowing it to decompress images directly from another command's output or pass its output to another image processing utility (e.g., <code>cat image.jpg | djpeg -pnm | convert - output.png</code>).


title: ERROR HANDLING AND EXIT STATUS
content:
<b>djpeg</b> typically prints error messages and warnings to standard error (stderr) if it encounters issues during decompression, such as corrupted JPEG headers, unsupported features, or file access problems. Upon successful completion, it exits with a status code of 0. A non-zero exit status indicates that an error occurred during processing.


title: HISTORY
content:
<b>djpeg</b> is a core utility from the Independent JPEG Group (IJG) software, which developed and maintained the original JPEG library since the early 1990s. Its development closely tracks the evolution of the <i>libjpeg</i> library, a foundational component for JPEG encoding and decoding across various applications and operating systems. More recently, projects like <i>libjpeg-turbo</i> have forked the original IJG code to provide highly optimized versions of the JPEG algorithms, often utilizing SIMD instructions (like SSE2, AVX2, NEON) for significantly faster decompression on modern processors. This has ensured <b>djpeg</b> remains a fast and widely used tool for JPEG decoding on contemporary systems.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information and exits.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about the decoding process.<br><br><b><b>-s</b>, <b>--silent</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all output messages, except for errors.<br><br><b><b>-j</b> <I>num_threads</I>, <b>--num_threads</b>=<I>num_threads</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of threads to use for decoding, leveraging multi-core processors.<br><br><b><b>-P</b>, <b>--print_properties</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints detailed properties of the decoded image, such as dimensions, bit depth, and color space.<br><br><b><b>-r</b>, <b>--reconstruct_xyb</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reconstructs the image from the internal XYB color space to linear sRGB, useful for analysis.<br><br><b><b>-m</b>, <b>--render_spotcolor</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Renders spot colors if they are present in the JPEG XL file.<br><br><b><b>--target_colorspace</b>=<I>colorspace</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Converts the output to a specific target color space (e.g., <I>RGB_D65_SRG_REL_BT709</I>, <I>LINEAR_SRGB_D65</I>).<br><br><b><b>--orig_bit_depth</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the image with its original bit depth if available, otherwise defaults to 8 or 16 bits.<br><br>


title: DESCRIPTION
content:
<i>djxl</i> is the reference command-line decoder for the <I>JPEG XL</I> image format (<B>.jxl</B> files). Developed as part of the <B>libjxl</B> library, it enables users to convert highly compressed <B>.jxl</B> images into more widely supported formats such as <B>PNG</B>, <B>PPM</B>, <B>PGM</B>, or <B>PBM</B>.<br><br>JPEG XL is a modern, open-source image codec designed for superior compression efficiency and rich features, including support for alpha channels, animations, HDR, and progressive decoding. <I>djxl</I> provides the core functionality to decompress these advanced image files, making their content accessible for viewing, editing, or further processing using other image tools. It's often used for validating JPEG XL encoding, converting files for broader compatibility, or integrating into larger image processing workflows.


title: CAVEATS
content:
<i>djxl</i>'s supported output formats (e.g., PNG, PPM) depend on how the <B>libjxl</B> library was compiled; some builds might have fewer options due to external library dependencies. While <i>djxl</i> is highly optimized, decoding large or complex JPEG XL images can still be CPU-intensive. It is a command-line utility, lacking a graphical user interface for direct interaction.


title: OUTPUT FORMATS
content:
By default, <i>djxl</i> attempts to infer the output format from the output file extension (e.g., <B>.png</B>, <B>.ppm</B>). If no output file is specified, it may write to standard output or require a specific format definition. Supported formats generally include <B>PNG</B>, <B>PPM</B>, <B>PGM</B>, and <B>PBM</B>, which are common for raw pixel data or lossless conversions.


title: COLOR MANAGEMENT
content:
<i>djxl</i> is designed to handle advanced color management features present in JPEG XL files, including embedded ICC profiles. It can perform color space conversions using the <B>--target_colorspace</B> option, ensuring accurate color reproduction when converting images for different display or processing environments.


title: HISTORY
content:
<i>djxl</i> is an integral part of the <B>libjxl</B> project, which began development around 2017 with the goal of creating a universal next-generation image format. The JPEG XL standard itself (ISO/IEC 18181) emerged from a collaboration between Google and Cloudinary, combining features from their respective initiatives, Pik and FUIF. <i>djxl</i> serves as the reference decoder implementation, evolving alongside the standard to ensure accurate and efficient decompression of JPEG XL files.


title: PARAMETERS
content:
<b>add <i>&lt;module/version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Registers a module's source tree with <b>dkms</b>. This requires the module's source to be located in <i>/usr/src/&lt;module&gt;-&lt;version&gt;</i>.<br><br><b>build <i>&lt;module/version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compiles the module for the currently running kernel or a specified kernel version. The module must first be registered with <b>dkms add</b>.<br><br><b>install <i>&lt;module/version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs a previously built module into the kernel module directory. This command implicitly calls <b>dkms build</b> if the module hasn't been built yet.<br><br><b>remove <i>&lt;module/version&gt;</i> [--all]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes a module's source tree and all its built/installed modules from <b>dkms</b> management across all kernel versions, or for a specific kernel if '--all' is omitted.<br><br><b>uninstall <i>&lt;module/version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uninstalls a specific built module from a specified kernel version, but keeps the source tree registered with <b>dkms</b>.<br><br><b>status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current status of all modules managed by <b>dkms</b>, including their versions, built status, and installation status for various kernels.<br><br><b>autoinstall</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to build and install all registered modules for the currently running kernel. Often triggered automatically during kernel package installation/upgrade.<br><br><b>mktarball <i>&lt;module/version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a tarball of the module's source, build, and installation information, which can be used to re-add the module on another system.<br><br>


title: DESCRIPTION
content:
The <b>dkms</b> (Dynamic Kernel Module Support) framework provides a method for installing <i>out-of-tree</i> kernel modules in a way that automatically rebuilds them against new kernel versions. This is crucial for drivers (e.g., proprietary graphics drivers, virtual machine guest additions, custom hardware drivers) that are not part of the main kernel source tree and are thus tied to a specific kernel's Application Binary Interface (ABI).<br><br>Without <b>dkms</b>, installing a new kernel often necessitates manually rebuilding and reinstalling such modules, which can be a tedious and error-prone process. <b>dkms</b> automates this by keeping track of the module source code. When a new kernel is installed, <b>dkms</b> attempts to compile and install these modules for the new kernel version, ensuring continued functionality without manual intervention. It offers a standardized and convenient way to manage driver source trees and their compilation for multiple kernel versions.


title: CAVEATS
content:
<b>dkms</b> relies on the availability of the module's source code and the necessary development tools (e.g., <i>gcc</i>, <i>make</i>, <i>kernel headers</i>) for compilation. Compatibility issues can arise if the module source code is not compatible with the new kernel's API/ABI, potentially leading to compilation failures. It's not a magic bullet for all driver issues, but a robust automation framework.


title: MODULE SOURCE LOCATION
content:
For <b>dkms</b> to manage a module, its source code must typically reside in <i>/usr/src/&lt;module_name&gt;-&lt;module_version&gt;/</i>. The <i>dkms.conf</i> file within this directory provides configuration instructions for <b>dkms</b>.


title: AUTOMATIC INTEGRATION
content:
Many package managers and driver installers (e.g., for NVIDIA graphics drivers or VirtualBox Guest Additions) automatically integrate with <b>dkms</b>. When you install such packages, they often include <b>dkms</b> configuration to ensure the driver remains functional after kernel upgrades.


title: HISTORY
content:
<b>dkms</b> was originally developed by <i>Dell Inc.</i> around 2002 to simplify the management of third-party drivers on their Linux-based systems. It aimed to address the common problem of proprietary drivers breaking with kernel updates, which was a significant support burden. Its utility quickly led to widespread adoption across various Linux distributions, becoming a de facto standard for managing out-of-tree kernel modules.


title: SYNOPSIS
content:
As "dlb" is <b>not a standard Linux command</b>, a universal synopsis demonstrating its syntax, options, and arguments cannot be provided. If it exists in a specific environment, its syntax would be entirely dependent on its custom implementation.


title: DESCRIPTION
content:
The "dlb" command is <b>not recognized</b> as a standard utility within most widely used Linux distributions, such as Debian, Ubuntu, CentOS, Fedora, or Arch Linux. It does not appear in the official GNU core utilities, <i>util-linux</i> package, or common system management tools.<br><br>As such, there is no commonly documented purpose, functionality, or set of operations associated with a command named "dlb" in the typical Linux environment. It is highly probable that "dlb" refers to one of the following:<br><i>1. A typo or misspelling of an existing command.</i><br><i>2. A custom, application-specific, or internal script/binary used in a very specialized or private computing environment.</i><br><i>3. An acronym or shorthand for a concept, rather than an executable command.</i><br>Without further context, analyzing a non-existent command's behavior, options, or typical usage is impossible.


title: CAVEATS
content:
The primary caveat is that "dlb" is <b>not a standard or recognized command</b>. Attempting to execute "dlb" on a typical Linux system will result in a "command not found" error. Any documentation or usage examples for "dlb" would pertain only to highly specialized, custom installations, and not to general Linux system administration or programming.


title: HISTORY
content:
There is <b>no documented history</b> of "dlb" as a standard Linux command because it does not exist in common distributions or open-source projects. Therefore, its development, evolution, or significant usage patterns in the Linux ecosystem are non-existent.


title: PARAMETERS
content:
<b>-l, --output-lib <libname></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the generated import library file (e.g., <i>mylib.lib</i>).<br><br><b>-z, --output-def <deffile></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the generated definition file (e.g., <i>my.def</i>).<br><br><b>-d, --dllname <dllname></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the DLL that this import library is for (e.g., <i>mydll.dll</i>).<br><br><b>-e, --export-all-symbols</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Export all global symbols found in the input object files. Useful for quick DLL creation.<br><br><b>-U, --add-underscore</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add an underscore prefix to all exported symbols. Common in some Windows API conventions.<br><br><b>-k, --kill-at</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove trailing '@<I>N</I>' from symbols, where <i>N</i> is the number of bytes of parameters. Used for <i>stdcall</i> function names.<br><br><b>-f, --no-default-nodefs</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not automatically generate a default <i>.def</i> file based on input objects; an input <i>.def</i> file might be provided instead.<br><br><b>--input-def <deffile></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read symbol definitions from an existing <i>.def</i> file. This allows precise control over exports.<br><br><b>--add-stdcall-alias</b><br>&nbsp;&nbsp;&nbsp;&nbsp;For <i>stdcall</i> functions, add an alias that doesn't include the '@<I>N</I>' suffix.<br><br>


title: DESCRIPTION
content:
The <b>dlltool</b> command, part of the GNU Binutils suite, is a crucial utility for developing applications targeting Microsoft Windows from non-Windows platforms, primarily Linux. It is instrumental in the cross-compilation process, especially when using toolchains like <I>MinGW</I> (Minimalist GNU for Windows).<br><br>Unlike standard Unix-like shared libraries (<i>.so</i> files), Windows Dynamic Link Libraries (<i>.dll</i> files) require specific mechanisms for symbol exporting and importing. <b>dlltool</b> bridges this gap by processing COFF (Common Object File Format) object files to generate the necessary components for linking against DLLs.<br><br>Its primary outputs are <i>import libraries</i> (<i>.lib</i> files) and <i>definition files</i> (<i>.def</i> files). The <i>.lib</i> file is a static library that contains stubs for the functions exported by the DLL, allowing the linker to resolve references at compile time. The <i>.def</i> file describes the DLL's exports and is used by the linker to create the actual DLL. By automating the creation of these files, <b>dlltool</b> enables seamless integration of Windows DLLs into cross-compiled projects.


title: CAVEATS
content:
<b>dlltool</b> is specifically designed for creating Windows DLLs and import libraries. It does not directly create Linux shared libraries (<i>.so</i> files); for those, the <b>ld</b> linker is used with appropriate options. It expects input object files to be in a format compatible with Windows (typically <I>COFF</I> or <I>PE</I>), usually generated by cross-compilers like those provided by <I>MinGW</I>. Its usage is highly specialized for cross-platform development.


title: ROLE IN MINGW TOOLCHAIN
content:
In a <I>MinGW</I> (Minimalist GNU for Windows) cross-compilation toolchain, <b>dlltool</b> plays a vital role. After source code is compiled into COFF object files by the cross-compiler (e.g., <I>i686-w64-mingw32-gcc</I>), <b>dlltool</b> is used to generate the necessary <i>.lib</i> and <i>.def</i> files. These files are then used by the cross-linker (<I>i686-w64-mingw32-ld</I>) to create the final Windows DLLs or executables that link against those DLLs. This makes the entire process of building Windows applications on Linux seamless and efficient.


title: IMPORT LIBRARIES VS. SHARED LIBRARIES
content:
It's important to understand the distinction <b>dlltool</b> manages. On Linux, a shared library (<i>.so</i>) is directly linked against, and symbols are resolved at runtime or load time using the ELF dynamic linking mechanism. On Windows, when linking against a DLL, the linker typically uses an <i>import library</i> (<i>.lib</i> file). This <i>.lib</i> file is a small static library containing 'stubs' or 'thunks' that redirect calls to the actual functions within the DLL at runtime. <b>dlltool</b>'s primary function is to generate these crucial <i>.lib</i> files from the object files that comprise the DLL, along with optional <i>.def</i> files that define which symbols should be exported by the DLL.


title: HISTORY
content:
<b>dlltool</b> is an integral part of the <I>GNU Binutils</I> collection, a set of programming tools for creating and managing binary programs, libraries, and object files. Its development arose from the need to support cross-compilation environments, particularly for targeting Microsoft Windows from Unix-like systems. This became increasingly important with the rise of projects like <I>Cygwin</I> and later <I>MinGW</I>, which aimed to provide a GNU development environment for Windows. <b>dlltool</b> specifically addresses the unique requirements of Windows's DLL linking model, which differs significantly from the ELF-based shared library model prevalent on Linux and other Unix systems. It has been a stable component of Binutils for many years, facilitating countless cross-platform projects.


title: SYNOPSIS
content:
<b>dlv</b> <I>[command]</I> <I>[arguments...]</I><br>The <I>dlv</I> command operates primarily through subcommands, each performing a distinct debugging action or mode.


title: PARAMETERS
content:
<b><b>debug</b> <I>[package]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compiles the specified Go package (or current directory if none) and initiates a new debugging session on the resulting executable.<br><br><b><b>test</b> <I>[package]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compiles and runs the tests for the specified Go package under the debugger, allowing for test-driven debugging.<br><br><b><b>exec</b> <I>[path_to_binary]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Debugs a pre-compiled Go binary located at the specified path. This command does not recompile the source.<br><br><b><b>attach</b> <I>[pid]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attaches the debugger to an already running Go process identified by its Process ID (PID), enabling live debugging.<br><br><b><b>core</b> <I>[path_to_core_dump]</I> <I>[path_to_binary]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens and analyzes a core dump file generated from a crashed Go program, requiring the corresponding executable for symbol resolution.<br><br><b><b>connect</b> <I>[address]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to a <i>dlv</i> server instance running on a specified network address, facilitating remote debugging.<br><br><b><b>trace</b> <I>[package]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Traces the execution of a Go program, logging function calls and their arguments without stopping execution by default.<br><br><b><b>replay</b> <I>[path_to_rr_trace]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replays an <i>rr</i> (record and replay) trace of a Go program's execution, enabling deterministic debugging of past runs.<br><br><b><b>run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A convenient shorthand for <I>dlv debug .</I>, compiling and debugging the program in the current directory.<br><br><b><b>help</b> <I>[command]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for a specific <i>dlv</i> subcommand or general usage if no command is specified.<br><br>


title: DESCRIPTION
content:
<i>dlv</i>, short for <i>Delve</i>, is a modern, full-featured source-level debugger specifically designed for the Go programming language. Unlike general-purpose debuggers like GDB, <i>Delve</i> is built to understand and interact with Go's unique runtime characteristics, including goroutines, channels, and Go-specific stack traces. It provides essential debugging capabilities such as setting breakpoints, stepping through code, inspecting variables, evaluating expressions, and analyzing the runtime state of Go applications. <i>Delve</i> is an indispensable tool for Go developers to diagnose and resolve issues, whether debugging a crashed process, analyzing a core dump, or interacting with a live running program. It aims to provide a robust and intuitive debugging experience that integrates seamlessly with the Go ecosystem and developer workflows.


title: CAVEATS
content:
<i>Delve</i> is exclusively designed for debugging Go programs; it is not compatible with applications written in other programming languages. Attaching to a running process (<I>dlv attach</I>) may require elevated privileges, such as root access or the <I>CAP_SYS_PTRACE</I> capability, depending on the system's security configuration. Debugging can introduce some performance overhead, particularly with extensive tracing or a large number of active breakpoints. It also mandates that the Go toolchain be properly installed and configured on the system.


title: <B>IDE INTEGRATION</B>
content:
<i>Delve</i> is widely adopted and serves as the backend for debugging capabilities in various Go-specific Integrated Development Environments (IDEs) and text editors, including Visual Studio Code (via the official Go extension) and GoLand, providing a seamless graphical debugging experience for developers.


title: <B>REMOTE DEBUGGING</B>
content:
<i>Delve</i> robustly supports remote debugging scenarios. It can operate in a client-server mode, where a <i>dlv server</i> instance runs on a remote machine hosting the Go application, allowing a local <i>dlv connect</i> client or an IDE to establish a connection and debug the remote process over a network.


title: HISTORY
content:
Development of <i>Delve</i> commenced around 2015, primarily initiated by Louis Gerbarg and a growing community of contributors. The project arose from the inherent limitations of using general-purpose debuggers like GDB for Go programs, which lacked a deep understanding of Go's unique runtime concepts, such as goroutines, precise stack layouts, and interfaces. <i>Delve</i> was engineered from the ground up to provide a native, efficient, and Go-idiomatic debugging experience. It rapidly gained prominence within the Go community and has since become the de-facto standard debugger, continually evolving to support new Go language features and integrate with modern development workflows.


title: PARAMETERS
content:
<b>lock</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Locks the current graphical session, requiring re-authentication to unlock.<br><br><b>switch-to-user <i>&lt;username&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates a user switch to the specified user account, prompting for their password if needed.<br><br><b>list-sessions</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a list of all currently active LightDM sessions, including their IDs, users, and state.<br><br><b>switch-session <i>&lt;session_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Switches the focus to an existing LightDM session identified by its session ID.<br><br><b>terminate-session <i>&lt;session_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forcibly terminates the specified LightDM session. Use with caution as it can lead to data loss.<br><br><b>add-nested-session</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts a new, nested X server session within the current one. Less commonly used by end-users.<br><br>


title: DESCRIPTION
content:
<i>dm-tool</i> is a command-line utility designed to interact with the LightDM display manager. It provides a means to perform various session and user management operations directly from the terminal, typically within a graphical session managed by LightDM.<br><br>Its primary functions include locking the screen, switching between different user accounts, listing active sessions, and managing individual sessions (e.g., terminating them or switching to a specific one). This tool is essential for users and administrators in environments where LightDM is the chosen display manager, enabling programmatic control over the graphical login and session environment. It acts as a lightweight interface to LightDM's D-Bus API, offering functionalities that might otherwise require graphical interaction.


title: CAVEATS
content:
<i>dm-tool</i> requires the LightDM display manager to be running and active. It is specifically designed to interact with LightDM and will not function with other display managers like GDM or SDDM. Actions like <i>terminate-session</i> require appropriate permissions, often root privileges or being the owner of the session. Using <i>terminate-session</i> on an active session can lead to data loss for the user of that session.


title: DESKTOP INTEGRATION
content:
Many desktop environments (e.g., Unity, XFCE, MATE) integrate <i>dm-tool</i> for their screen lock and user-switching functionalities, often mapping commands like <i>dm-tool lock</i> to keyboard shortcuts or power management actions.


title: SECURITY CONTEXT
content:
When using <i>dm-tool</i> to perform actions like <i>lock</i> or <i>switch-to-user</i>, it typically operates within the security context of the currently logged-in user. However, managing other sessions or terminating them might require elevated privileges, such as root access.


title: HISTORY
content:
<i>dm-tool</i> is an integral part of the LightDM project, which was initially developed by Canonical Ltd. for Ubuntu as an alternative to GDM. LightDM aimed to be a lightweight, extensible, and standards-compliant display manager. <i>dm-tool</i> was created as its accompanying command-line interface, providing a convenient way to programmatically control LightDM's features, especially for tasks like screen locking and user switching in desktop environments. Its development tracks closely with LightDM's evolution, maintaining compatibility with its D-Bus interface.


title: PARAMETERS
content:
<b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compile only; do not link.<br><br><b>-o <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output file name (e.g., executable or object file).<br><br><b>-g</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate debug information for use with debuggers like <i>gdb</i>.<br><br><b>-O</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optimize the generated code for performance.<br><br><b>-unittest</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compile and run unit tests embedded in the D source code.<br><br><b>-release</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compile for release builds, disabling debug asserts and enabling optimizations.<br><br><b>-debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compile for debug builds, enabling debug asserts and disabling some optimizations.<br><br><b>-I<path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add <I>path</I> to the list of directories to search for imported modules.<br><br><b>-L<linker-option></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pass <I>linker-option</I> directly to the linker.<br><br><b>-m64 / -m32</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Target 64-bit or 32-bit architecture, respectively.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing compilation steps and commands.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a summary of command-line options.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the compiler version information.<br><br>


title: DESCRIPTION
content:
<i>dmd</i> is the reference compiler for the <B>D programming language</B>, developed by Walter Bright of Digital Mars. It translates D source code (.d files) into machine code, producing executable binaries, object files, or static/shared libraries.<br><br>Known for its fast compilation speed, <i>dmd</i> supports all features of the D language, including classes, structs, templates, modules, mixins, garbage collection, and more. It acts as both a compiler and a linker, invoking the system linker (like <i>ld</i>) to resolve external symbols and create the final executable.<br><br>While <i>dmd</i> can be invoked directly for single-file or small projects, larger D projects typically use a build tool and package manager like <i>dub</i>, which wraps <i>dmd</i> and handles dependencies, compilation flags, and linking more efficiently.


title: CAVEATS
content:
<i>dmd</i> typically generates platform-specific binaries. While <i>dmd</i> is a robust compiler, managing large D projects and their dependencies is often best handled by a dedicated build system like <i>dub</i> rather than direct <i>dmd</i> invocations.


title: THE D PROGRAMMING LANGUAGE
content:
The D language is a multi-paradigm system programming language that combines imperative, object-oriented, and functional programming concepts. It aims to offer C-like performance and direct access to hardware while providing modern language features and a garbage collector for ease of use and safety.


title: INTEGRATION WITH BUILD SYSTEMS
content:
Although <i>dmd</i> is the core compiler, D development heavily relies on <i>dub</i>, the D language package manager and build tool. <i>dub</i> simplifies dependency management, compilation, testing, and packaging of D projects, acting as a high-level wrapper around <i>dmd</i> and other D compilers.


title: HISTORY
content:
<i>dmd</i> (Digital Mars D) was created by Walter Bright and first released in 2001 as the initial and reference implementation of the D programming language. Its development aimed to combine the high performance of C++ with the safety and productivity features of languages like Java and C#. The front-end of <i>dmd</i> was open-sourced in 2007, contributing to the wider adoption and community-driven evolution of the D language.


title: SYNOPSIS
content:
<b>dmenu</b> [<i>-v</i>] [<i>-b</i>] [<i>-f</i>] [<i>-i</i>] [<i>-l lines</i>] [<i>-m monitor</i>] [<i>-p prompt</i>] [<i>-fn font</i>] [<i>-nb color</i>] [<i>-nf color</i>] [<i>-sb color</i>] [<i>-sf color</i>] [<i>-w windowid</i>]


title: PARAMETERS
content:
<b><i>-v</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints version information to stdout, then exits.<br><br><b><i>-b</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Causes <b>dmenu</b> to appear at the bottom of the screen.<br><br><b><i>-f</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables keyboard grabbing, allowing other programs to receive keyboard input while <b>dmenu</b> is open. Useful when piping from other commands.<br><br><b><i>-i</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs case-insensitive matching when filtering items.<br><br><b><i>-l lines</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Causes <b>dmenu</b> to display the specified number of <i>lines</i> vertically. By default, it displays as many as fit horizontally.<br><br><b><i>-m monitor</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays <b>dmenu</b> on the specified <i>monitor</i> (e.g., '0' for the primary monitor).<br><br><b><i>-p prompt</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the given <i>prompt</i> text before the input field.<br><br><b><i>-fn font</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the specified <i>font</i> for displaying text.<br><br><b><i>-nb color</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the background <i>color</i> for normal (unselected) items.<br><br><b><i>-nf color</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the foreground (text) <i>color</i> for normal (unselected) items.<br><br><b><i>-sb color</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the background <i>color</i> for selected items.<br><br><b><i>-sf color</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the foreground (text) <i>color</i> for selected items.<br><br><b><i>-w windowid</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the window with the given <i>windowid</i> as its parent, appearing within that window.<br><br>


title: DESCRIPTION
content:
<b>dmenu</b> is a highly efficient and minimalist application launcher and text filter for the X Window System. Developed as part of the <I>Suckless</I> project, it adheres to the philosophy of simplicity, clarity, and frugality. When launched, <b>dmenu</b> reads lines of text from standard input (stdin) and displays them in a customizable menu. Users can then type to filter the displayed items dynamically; as input is provided, <b>dmenu</b> narrows down the list of choices, highlighting matching entries.<br><br>Once an item is selected (typically by pressing Enter), the chosen item is printed to standard output (stdout). Its power lies in its ability to be easily integrated into shell scripts and other tools, acting as a powerful front-end for various tasks beyond just launching applications, such as selecting files, managing windows, or switching workspaces. Its keyboard-driven interface makes it fast and ideal for power users who prefer a streamlined, command-line centric workflow.


title: CAVEATS
content:
<b>dmenu</b> primarily relies on compile-time configuration via its <i>config.h</i> file for advanced features and default settings, limiting runtime customization options compared to more feature-rich alternatives. It is also designed specifically for the X Window System and is not directly usable in a pure console environment.


title: CUSTOMIZATION VIA CONFIG.H
content:
Unlike many applications that offer extensive runtime configuration, <b>dmenu</b> encourages users to modify its <i>config.h</i> source file and recompile it to change default behaviors, keybindings, and other advanced settings. This approach allows for deep customization while maintaining a small and efficient binary.


title: PIPING INPUT
content:
One of <b>dmenu</b>'s most powerful features is its ability to read input from standard input (stdin). This allows it to be seamlessly integrated into shell scripts to select from lists generated by other commands. For example, <i>ls /usr/bin | dmenu -l 20</i> can be used to select an executable, or <i>ps aux | dmenu -l 10</i> to select a process for management.


title: HISTORY
content:
<b>dmenu</b> originated from the <I>Suckless</I> project, an initiative focused on developing minimalist, secure, and resource-efficient software. It was initially designed as a simple, keyboard-driven application launcher for <I>dwm</I> (dynamic window manager), another cornerstone project by <I>Suckless</I>. Its development emphasized simplicity, clarity, and the Unix philosophy of doing one thing well, making it highly extensible through shell scripting rather than baking many features directly into the core program.


title: PARAMETERS
content:
<b><b>-c</b>, <b>--clear</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Clears</i> the <i>kernel ring buffer</i> after printing its contents. This can be useful to start with a fresh log for specific debugging sessions.<br><br><b><b>-H</b>, <b>--human</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables <i>human-readable</i> output. This option paginates the output and shows timestamps in a more digestible format, similar to <b>--ctime</b>.<br><br><b><b>-k</b>, <b>--kernel</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays only messages from the <i>kernel</i>. This is often the default behavior but can be used to explicitly filter out userspace messages if any are present.<br><br><b><b>-l</b> <<i>level</i>>, <b>--level</b> <<i>level</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restricts output to messages with a specific <i>log level</i>, such as `<i>emerg</i>`, `<i>alert</i>`, `<i>crit</i>`, `<i>err</i>`, `<i>warn</i>`, `<i>notice</i>`, `<i>info</i>`, or `<i>debug</i>`.<br><br><b><b>-n</b> <<i>level</i>>, <b>--console-level</b> <<i>level</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the <i>console log level</i>. Messages with a level lower than the specified value will not be printed to the console. This requires root privileges.<br><br><b><b>-r</b>, <b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>raw</i> messages, without parsing facility or level codes. This is useful for exact matching or specific parsing needs.<br><br><b><b>-s</b> <<i>size</i>>, <b>--buffer-size</b> <<i>size</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the size of the <i>kernel ring buffer</i> to query. Useful if the default buffer size is too small or you suspect messages are being truncated.<br><br><b><b>-T</b>, <b>--ctime</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints <i>human-readable timestamps</i>. This option converts the kernel's uptime-based timestamps into absolute, human-readable dates and times.<br><br><b><b>-t</b>, <b>--time</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>seconds since boot</i> as a timestamp, along with the facility and level. This is less human-readable than <b>-T</b> but precise.<br><br><b><b>-u</b>, <b>--user</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays only messages originating from <i>userspace</i>. This is less common but can be useful when debugging specific userspace components that log to the kernel buffer.<br><br><b><b>-w</b>, <b>--follow</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Follows</i> the output, similar to <b>tail -f</b>. <b>dmesg</b> will continue to print new messages as they are added to the <i>kernel ring buffer</i>.<br><br><b><b>-x</b>, <b>--decode-and-pretty</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Decodes the facility and level, and <i>pretty-prints</i> the output. This option provides a more structured and readable format than the default.<br><br>


title: DESCRIPTION
content:
<b>dmesg</b> is a crucial Linux command used to examine the <i>kernel ring buffer</i>. This buffer stores messages produced by the kernel during system boot-up and operation. These messages include information about detected hardware, device driver initialization, kernel module loading, and any system errors or warnings.<br><br>The primary purpose of <b>dmesg</b> is for system debugging and troubleshooting. When issues arise, such as a hardware component not being recognized or a driver failing to load, <b>dmesg</b> provides a chronological log of kernel events that can help identify the root cause. Unlike general system logs (like those managed by `syslog` or `journald`), the <i>kernel ring buffer</i> is held entirely in memory and contains messages directly from the kernel itself, often before other logging services are fully operational. This makes it invaluable for diagnosing boot-time problems.<br><br>While the buffer's content is ephemeral (it's cleared on each reboot), <b>dmesg</b> allows administrators and users to view the current state of the kernel's internal logging. The output can be extensive, so it's frequently piped to tools like <b>grep</b>, <b>less</b>, or <b>more</b> for filtering and easier navigation.


title: CAVEATS
content:
The <i>kernel ring buffer</i> is a <i>volatile</i>, in-memory buffer. Its contents are cleared with each system reboot. For persistent logging, rely on <b>syslog</b> or <b>journald</b> which typically capture and store <b>dmesg</b> output in files like `/var/log/dmesg` or integrate it into their main logs.<br><br>The size of the <i>kernel ring buffer</i> is fixed and finite. If the system generates many messages, older messages may be overwritten (<i>ring buffer</i> behavior). Use <b>-s</b> or check kernel parameters to understand/adjust this size.<br><br>Setting console log levels (<b>-n</b>) or clearing the buffer (<b>-c</b>) requires <i>root privileges</i>. Reading the buffer (default <b>dmesg</b>) usually does not, making it accessible to regular users for diagnostic purposes.


title: PERMISSIONS AND `/DEV/KMSG`
content:
By default, <b>dmesg</b> reads messages from `/dev/kmsg`, a character device that acts as the interface to the <i>kernel ring buffer</i>. While `/dev/kmsg` itself often requires root access for direct reading or writing, <b>dmesg</b> usually uses a mechanism that allows non-root users to read the buffer contents for diagnostic purposes, although writing (e.g., clearing the buffer or changing console log levels) still requires elevated privileges.


title: COMMON USAGE PATTERNS
content:
To view recent messages, <b>dmesg | tail</b> is common. For searching errors, <b>dmesg | grep -i error</b> is frequently used. To view messages with human-readable timestamps and pagination, <b>dmesg -H</b> or <b>dmesg -T | less</b> are popular choices.


title: HISTORY
content:
The <b>dmesg</b> command has a long history, dating back to early Unix-like operating systems. It was originally implemented to provide a simple way for system administrators to view messages generated by the kernel during system boot-up and runtime. As Linux evolved, <b>dmesg</b> became a standard utility for kernel diagnostics, forming part of the essential <b>util-linux</b> package. While modern logging systems like `systemd-journald` offer more comprehensive and persistent logging, <b>dmesg</b> remains indispensable for inspecting the raw, in-memory <i>kernel ring buffer</i>, particularly for low-level hardware and boot-time issues that might occur before full logging services are active. Its core functionality has remained remarkably consistent over decades, with new options added to enhance filtering, formatting, and timestamping capabilities.


title: SEE ALSO
content:
<b>journalctl</b>(1), <b>syslog</b>(2), <b>rsyslogd</b>(8), <b>syslogd</b>(8), <b>tail</b>(1), <b>grep</b>(1), <b>less</b>(1)


title: SYNOPSIS
content:
<b>dmevent_tool</b> [<i>options</i>] [<i>EVENT_TYPE</i>]...<br><b>dmevent_tool</b> <b>--query</b> [<i>options</i>]<br><b>dmevent_tool</b> <b>--list-events</b>


title: PARAMETERS
content:
<b>-f, --foreground</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the event monitoring process in the foreground, rather than detaching to the background.<br><br><b>-d, --debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose debugging messages, useful for troubleshooting issues.<br><br><b>-p, --pidfile <i>path</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a file to write the process ID (PID) of the daemon to.<br><br><b>-i, --ignore <i>device_uuid</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore events originating from a specific Device Mapper device identified by its UUID.<br><br><b>-a, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor and process events of all available types. By default, specific event types must be listed.<br><br><b>-q, --query</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Query the kernel's Device Mapper event queue for any pending or past events, displaying them and then exiting.<br><br><b>-l, --list-events</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all event types that <b>dmevent_tool</b> is capable of monitoring (e.g., 'thin', 'raid', 'mirror').<br><br><b>-j, --json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output event information in JSON format, facilitating programmatic parsing.<br><br><b>-o, --once</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit after processing and handling the first event received.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increase the verbosity of the output messages.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message and exit.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of the <b>dmevent_tool</b> and exit.<br><br><b><i>EVENT_TYPE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more specific event types to monitor, such as 'thin', 'raid', or 'mirror'. If not specified, and '--all' is not used, no events are monitored.<br><br>


title: DESCRIPTION
content:
The <b>dmevent_tool</b> is a utility that monitors and processes events from the Linux kernel's Device Mapper (DM) interface.<br><br>It allows system administrators and tools to react to various changes and states within DM devices, such as thin provisioning low watermarks, RAID array state changes, or mirror synchronization completion.<br><br>It can run as a daemon to continuously monitor events or be used to query the current state of events in the kernel's event queue. This tool is a fundamental component for managing complex storage setups built upon Device Mapper, often used internally by LVM (Logical Volume Manager) to automate responses to specific storage conditions.


title: CAVEATS
content:
The <b>dmevent_tool</b> typically requires root privileges to operate due to its interaction with low-level kernel Device Mapper interfaces.<br><br>While it can display raw event data, interpreting this data often requires a deep understanding of Device Mapper internals and the specific target types (e.g., thin provisioning, RAID, mirror).<br><br>For most LVM users, this tool is managed automatically by LVM components like <b>lvmpolld</b>, and direct interaction is rarely necessary unless debugging complex storage issues.


title: EVENT TYPES
content:
<b>dmevent_tool</b> can monitor various event types from Device Mapper targets.<br>Common examples include:<br><i>thin</i>: Events related to thin provisioning, such as '_thin_low_water' (when a thin pool approaches its capacity limit) or '_thin_overflow'.<br><i>raid</i>: Events from Device Mapper RAID targets, indicating changes in array state like degradation or recovery.<br><i>mirror</i>: Events from Device Mapper mirror targets, often signaling completion of resynchronization.


title: INTEGRATION WITH LVM
content:
In most LVM setups, <b>dmevent_tool</b>'s capabilities are leveraged by the <b>lvmpolld</b> daemon, which is responsible for polling for and reacting to Device Mapper events. This allows LVM to manage thin pool auto-extension, monitor RAID volumes, and perform other automated tasks based on kernel events without manual intervention.


title: HISTORY
content:
The <b>dmevent_tool</b> is an integral part of the <i>lvm2</i> (Logical Volume Manager version 2) software suite. Its development has progressed alongside the evolution of the Linux kernel's Device Mapper framework, particularly with the introduction and maturation of advanced DM targets such as thin provisioning (since kernel 3.2) and DM RAID.<br><br>It was designed to provide a robust mechanism for LVM and other tools to react dynamically to changes in DM devices, allowing for automated responses to critical events like nearing capacity on thin pools or array degradation.<br><br>Its functionality has been crucial for implementing features like automatic thin pool extension and improved monitoring of complex DM setups.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress error messages and verbose output.<br><br><b><b>-s</b> <i>KEYWORD</i>, <b>--string</b> <i>KEYWORD</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display only the value of the specified DMI string (e.g., "system-manufacturer", "bios-version").<br><br><b><b>-t</b> <i>TYPE</i>, <b>--type</b> <i>TYPE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display only the entries of the specified DMI type (e.g., 0 for BIOS, 1 for System, 4 for Processor, 17 for Memory). Accepts type name or ID.<br><br><b><b>-u</b> <i>FILE</i>, <b>--dump-bin</b> <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dump the DMI data into a binary file for later analysis.<br><br><b><b>-i</b> <i>FILE</i>, <b>--from-file</b> <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read DMI data from a binary file instead of live system memory (/dev/mem or sysfs).<br><br><b><b>-H</b>, <b>--header</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the SMBIOS header information.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version of <b>dmidecode</b> and exit.<br><br>


title: DESCRIPTION
content:
<b>dmidecode</b> is a Linux command-line utility used to extract detailed hardware and system information from a computer's DMI (Desktop Management Interface) table, also known as SMBIOS (System Management BIOS).<br><br>This table stores crucial data about the system's components, including its manufacturer, model, serial number, BIOS version, processor type and speed, memory modules (size, speed, form factor), motherboard details, and expansion slots.<br><br>The utility parses this binary data and presents it in a human-readable format. It's an invaluable tool for system administrators, technicians, and developers for inventory management, troubleshooting hardware issues, verifying specifications, and identifying system components without requiring physical access or disassembling the machine. It typically requires root privileges to access the necessary memory regions or sysfs files.


title: CAVEATS
content:
<b>dmidecode</b> typically requires <i>root privileges</i> to access the necessary kernel interfaces (like <i>/dev/mem</i> or <i>/sys/firmware/dmi/tables</i>). The accuracy of the information presented is dependent on the DMI table implemented by the system's BIOS/UEFI firmware; some vendors may not populate all fields or provide generic data. It is primarily used on x86/x86-64 systems.


title: DMI/SMBIOS TYPES
content:
The SMBIOS specification defines various types for different hardware components, each with a unique ID. Using the <b>-t</b> option with these IDs or names can filter output to specific hardware sections. For example:<br><i>Type 0</i>: BIOS Information<br><i>Type 1</i>: System Information<br><i>Type 2</i>: Base Board Information<br><i>Type 3</i>: Chassis Information<br><i>Type 4</i>: Processor Information<br><i>Type 16</i>: Physical Memory Array<br><i>Type 17</i>: Memory Device<br><i>Type 22</i>: Portable Battery


title: COMMON DMI STRINGS
content:
When using the <b>-s</b> option to retrieve specific string values, common keywords include:<br><i>"system-manufacturer"</i><br><i>"system-product-name"</i><br><i>"system-serial-number"</i><br><i>"bios-vendor"</i><br><i>"bios-version"</i><br><i>"baseboard-manufacturer"</i><br><i>"processor-version"</i>


title: HISTORY
content:
<b>dmidecode</b> was created by Jean Delvare, with initial releases around 2000. It emerged as a solution to easily access SMBIOS (DMI) information from system firmware, which was traditionally difficult to retrieve without proprietary tools or direct BIOS/UEFI calls. Its development has continuously adapted to new SMBIOS specification versions, establishing it as a fundamental utility for hardware inventory and diagnostics across Linux distributions.


title: PARAMETERS
content:
<b><b>-i</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform an Internet number lookup (Netcraft.com). This provides information about the web server, operating system, and hosting provider history.<br><br><b><b>-w</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a Whois lookup on the target host's IP address or domain. This retrieves domain registration details like registrant, contact information, and name servers.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retrieve Netcraft IP address information from the host. This is related to the Netcraft lookup but specifically targets IP details.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a search for possible subdomains. This attempts to find additional hostnames within the target's domain.<br><br><b><b>-e</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a search for possible email addresses. This tries to extract email addresses associated with the target domain from various sources.<br><br><b><b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a TCP port scan on the target. This option discovers open ports on the specified host.<br><br><b><b>-f</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read ports from a file for the TCP port scan (used with <b>-p</b>). This allows specifying a custom list of ports to scan.<br><br><b><b>-b</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read banner information from open ports during the TCP port scan (used with <b>-p</b>). This helps identify the services running on discovered ports.<br><br><b><b>-t</b> <i>&lt;timeout&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the timeout value in seconds for the TCP port scan. This controls how long <i>dmitry</i> waits for a response from a port.<br><br><b><b>-F</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a fast TCP port scan (used with <b>-p</b>). This option optimizes the scan for speed, potentially sacrificing some accuracy.<br><br><b><b>-o</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save the output to a specified file. This redirects all command output to a file instead of the console.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display verbose output. This provides more detailed information about the scanning process and results.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help message and exit. Shows all available options and their usage.<br><br>


title: DESCRIPTION
content:
<i>dmitry</i>, short for "Deepmagic Information Gathering Tool," is a versatile command-line utility designed for reconnaissance and information gathering on target hosts. It consolidates several functionalities typically found in separate tools, offering a comprehensive suite for initial security assessments and penetration testing.<br><br>The tool can perform various lookups, including Netcraft queries to identify web server technologies and hosting details, Whois lookups to retrieve domain registration information, and DNS lookups for hostnames and IP addresses. Additionally, <i>dmitry</i> is capable of scanning for open TCP ports, banners, and even searching for subdomains and email addresses associated with the target. Its primary purpose is to provide a quick, consolidated overview of a target's online presence and infrastructure, aiding security professionals in understanding potential attack surfaces.


title: CAVEATS
content:
Using <i>dmitry</i> without proper authorization can be considered illegal or unethical. Always ensure you have explicit permission from the target's owner before performing any scans or information gathering. The accuracy of information, especially details like uptime or email addresses, can vary and might not always be current or complete. Furthermore, aggressive scanning, particularly port scans, may trigger Intrusion Detection/Prevention Systems (IDS/IPS) and could lead to your IP address being blocked.


title: ETHICAL CONSIDERATIONS
content:
It is crucial to use <i>dmitry</i> responsibly and ethically. Unauthorized use against systems you do not own or have permission to test is strictly prohibited and may have legal consequences. This tool is intended for legitimate security research, penetration testing, and system administration on authorized targets only.


title: HISTORY
content:
<i>dmitry</i> was developed by Deepmagic, Inc., as part of their suite of security tools. It gained significant traction within the cybersecurity community, particularly among users of penetration testing distributions like Kali Linux and BackTrack (its predecessor). Its development aimed to streamline the initial reconnaissance phase of security assessments by integrating multiple information-gathering techniques into a single, easy-to-use command-line interface, reducing the need to switch between various specialized utilities.


title: PARAMETERS
content:
<b>-a, --activate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activate RAID sets. Can be combined with: <i>a</i> (all), <i>e</i> (all active), <i>i</i> (incomplete metadata), <i>n</i> (no device bound), <i>s</i> (same serial), <i>v</i> (verbose).<br><br><b>-c, --clear</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clear metadata. Can be combined with: <i>s</i> (specific type).<br><br><b>-d, --delete</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete a RAID set by name.<br><br><b>-E, --erase_metadata</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Erase metadata from selected devices. Use with extreme caution as it destroys RAID configuration.<br><br><b>-f, --format</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Format a device for a specified RAID set type. This is a low-level operation and should be used carefully.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help message and exit.<br><br><b>-i, --inquire</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inquire about RAID sets. Can be combined with: <i>d</i> (device names/serials), <i>l</i> (list RAID set names), <i>m</i> (list RAID set status), <i>n</i> (number of RAID sets), <i>s</i> (RAID set name for serial).<br><br><b>-l, --list_metadata</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List metadata information found on devices.<br><br><b>-m, --metadata_type</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the metadata type to operate on (e.g., 'isw' for Intel Matrix Storage). If not specified, <i>dmraid</i> attempts to auto-detect.<br><br><b>-P, --part_start</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the partition start sector when rebuilding a partition table, usually for specific fakeraid types.<br><br><b>-r, --rebuild_partition_table</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rebuild the partition table for an active RAID set. This helps the kernel recognize partitions on the RAID volume.<br><br><b>-R, --rebuild</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiate a rebuild operation for a degraded RAID set, typically after replacing a failed disk.<br><br><b>-s, --serial</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a RAID set by its unique serial number instead of its name.<br><br><b>-S, --status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the detailed status of activated RAID sets, including array health and member disks.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br><b>-x, --xml</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output information in XML format, typically used for programmatic parsing or integration with other tools.<br><br>


title: DESCRIPTION
content:
<i>dmraid</i> is a utility designed to manage <B>BIOS-assisted software RAID</B> sets, often referred to as "fakeraid" or "firmware RAID". These RAID implementations, commonly found on consumer motherboards (e.g., Intel ICH/RAID, NVIDIA NForce, Promise), are not true hardware RAIDs (which have a dedicated controller) nor purely software RAIDs (like those managed by <i>mdadm</i>). Instead, they rely on the system's firmware to present multiple physical disks as a single, virtual RAID device, and <i>dmraid</i> provides the Linux operating system with the capability to recognize, activate, and manage these proprietary RAID setups.<br><br>By utilizing the Linux <B>device mapper</B> subsystem, <i>dmraid</i> creates standard block devices (e.g., <i>/dev/mapper/raid_set_name</i>) from these RAID sets, allowing them to be partitioned, formatted, and used like any other disk. While historically important for compatibility with many OEM systems, <i>dmraid</i>'s role has diminished as <i>mdadm</i> has gained capabilities to handle some fakeraid types, and true hardware RAID or robust software RAID solutions are often preferred for critical deployments. Development on <i>dmraid</i> has largely ceased.


title: CAVEATS
content:
<i>dmraid</i> primarily deals with <B>"fakeraid"</B> configurations, which are proprietary and chipset-specific. It is generally <B>not recommended for new software RAID setups</B> on Linux; <i>mdadm</i> is the standard and more robust solution for native software RAID. Development of <i>dmraid</i> has largely ceased, meaning it might not support newer chipset fakeraid implementations or receive bug fixes. Using <i>dmraid</i> with non-fakeraid devices or incorrectly can lead to <B>data loss</B>.


title: DEVICE MAPPER INTEGRATION
content:
<i>dmraid</i> utilizes the Linux <B>device mapper</B> subsystem to create virtual block devices (e.g., <i>/dev/mapper/isw_array_name</i>) from the detected fakeraid sets. These devices then behave like any other disk, allowing for partitioning, formatting, and mounting.


title: METADATA DEPENDENCY
content:
Unlike <i>mdadm</i> which creates its own standard metadata, <i>dmraid</i> relies on reading and interpreting the <B>proprietary metadata</B> written to disks by the motherboard's BIOS/firmware during the fakeraid setup process. This makes it highly dependent on specific chipset implementations and their metadata formats.


title: HISTORY
content:
<i>dmraid</i> was developed to address the challenge of Linux interoperability with <B>BIOS-assisted RAID</B> solutions, commonly found on consumer motherboards from vendors like Intel, NVIDIA, and Promise. These "fakeraid" arrays presented a unique problem: they were not true hardware RAID (which Linux could see as a single block device) nor standard software RAID (which <i>mdadm</i> could manage). <i>dmraid</i> emerged to bridge this gap, allowing Linux to detect and assemble these arrays by interpreting their specific metadata formats, leveraging the <B>device mapper</B> framework.<br><br>Its peak usage coincided with the era when these chipset-based RAID solutions were prevalent in desktop PCs. However, with the maturation of <i>mdadm</i> (which can now handle some fakeraid formats via external metadata drivers) and the increased adoption of either true hardware RAID or pure Linux software RAID, <i>dmraid</i>'s importance has waned. It remains primarily for supporting legacy systems.


title: PARAMETERS
content:
<b><I>--assumeyes</I>, <I>-y</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically answer yes for all questions. Useful for scripting.<br><br><b><I>--nogpgcheck</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable GPG signature checking for all packages during the transaction.<br><br><b><I>--enablerepo=<I>repo_id</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable a specific repository for the current transaction, even if disabled in configuration.<br><br><b><I>--disablerepo=<I>repo_id</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable a specific repository for the current transaction, even if enabled in configuration.<br><br><b><I>--refresh</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force a refresh of all metadata before executing the command, ensuring up-to-date repository information.<br><br><b><I>--downloadonly</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Download packages but do not install them. Useful for offline installations.<br><br><b><I>--setopt=<I>option</I>=<I>value</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a specific configuration option directly. E.g., <I>install_weak_deps=False</I>.<br><br>


title: DESCRIPTION
content:
<i>dnf</i>, which stands for <b>Dandified YUM</b>, is the default package manager for <b>RPM-based</b> Linux distributions like Fedora, Red Hat Enterprise Linux (RHEL) 8+, and CentOS Stream.<br><br>It is the successor to <i>YUM</i> (Yellowdog Updater, Modified) and aims to address many of YUM's shortcomings, particularly in terms of performance, dependency resolution, and API extensibility. <i>dnf</i> uses <b>libsolv</b> for dependency resolution, which generally results in faster and more accurate calculations for package installations, updates, and removals.<br><br><i>dnf</i> provides a robust command-line interface for managing software packages, including searching, installing, updating, removing, and querying packages. It supports various features such as modularity (allowing different streams of software to be installed), rich dependency information, and advanced repository management. Its design is more modern and maintainable, making it a preferred tool for system administrators and users alike on supported distributions.


title: CAVEATS
content:
While <i>dnf</i> is generally reliable, incorrect repository configurations or using options like <I>--nogpgcheck</I> can compromise system security. Be cautious with commands that remove packages (<I>dnf remove</I> or <I>dnf autoremove</I>), as they can inadvertently remove critical system components if dependencies are misinterpreted or manually overridden. Always review the transaction summary before confirming changes.


title: COMMON <I>DNF</I> COMMANDS
content:
<i>dnf</i> offers a wide range of subcommands for various package management tasks:<br><b>install</b> <I>package_name</I>: Installs a package and its dependencies.<br><b>update</b>: Updates all installed packages to their latest available versions.<br><b>remove</b> <I>package_name</I>: Removes an installed package.<br><b>search</b> <I>keyword</I>: Searches for packages containing the specified keyword in their name or summary.<br><b>info</b> <I>package_name</I>: Displays detailed information about a package.<br><b>repolist</b>: Lists all configured software repositories and their status (enabled/disabled).<br><b>autoremove</b>: Removes all unused dependency packages that were installed automatically and are no longer required.


title: MODULARITY
content:
A key feature introduced with <i>dnf</i> and prominent in RHEL 8+ is <b>modularity</b>. It allows for the installation of different streams or versions of software (e.g., Python 3.6 vs. Python 3.8, or different versions of Node.js) on the same system, providing greater flexibility and avoiding conflicts often seen in traditional package management where only one global version of a library or application could exist. Users can 'enable' specific module streams to install their preferred version of software.


title: HISTORY
content:
<i>dnf</i> was developed as a successor to <i>YUM</i>, addressing long-standing performance and dependency resolution issues inherent in <i>YUM</i>'s design. It first appeared in Fedora 18 (2012) and officially became the default package manager in Fedora 22 (2015). The transition from <i>YUM</i> to <i>dnf</i> marked a significant evolution in package management for <b>RPM-based</b> distributions, driven by a desire for a more modern, maintainable, and extensible codebase, leveraging Python 3 and the <b>libsolv</b> library for its robust dependency solver. It was subsequently adopted by Red Hat Enterprise Linux 8+ and CentOS Stream, solidifying its position as the standard package manager for these systems.


title: SYNOPSIS
content:
<b>dnf-config-manager</b> [<i>options</i>] [<i>repository_id</i>...]<br><br><b>Common Usage Patterns:</b><br><b>dnf-config-manager</b> {--set-enabled | --set-disabled} <i>repository_id</i>...<br><b>dnf-config-manager</b> --add-repo <i>URL</i><br><b>dnf-config-manager</b> --dump<br><b>dnf-config-manager</b> --save [--setopt=<<i>repository_id</i>>.<<i>option</i>>=<<i>value</i>>]...


title: PARAMETERS
content:
<b>--set-enabled <repo_id>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable one or more specified DNF repositories. This sets the 'enabled' flag to '1' in their respective configuration files.<br><br><b>--set-disabled <repo_id>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable one or more specified DNF repositories. This sets the 'enabled' flag to '0', making them inactive for DNF operations.<br><br><b>--add-repo <URL></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a new repository configuration. The URL can point to a .repo file directly or to a directory containing .repo files.<br><br><b>--dump</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the current configuration for all known DNF repositories, including their IDs, enabled status, and other parameters.<br><br><b>--save</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save the current configuration changes to disk. This option is typically used in conjunction with <i>--setopt</i> to make changes persistent.<br><br><b>--setopt=<repo_id>.<option>=<value></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a specific option for a given repository. For example, <i>--setopt=myrepo.gpgcheck=0</i> or <i>--setopt=myrepo.baseurl=http://example.com/repo</i>.<br><br><b>--enable <repo_id>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for <i>--set-enabled</i>, providing a more intuitive syntax for enabling repositories.<br><br><b>--disable <repo_id>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for <i>--set-disabled</i>, providing a more intuitive syntax for disabling repositories.<br><br><b>--destdir=<path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative destination directory for new .repo files when using <i>--add-repo</i>. Defaults to <i>/etc/yum.repos.d/</i>.<br><br>


title: DESCRIPTION
content:
<i>dnf-config-manager</i> is a utility that allows system administrators to easily manage DNF (Dandified YUM) repository configurations. It provides a command-line interface to enable, disable, and modify options for specific DNF repositories. This tool operates on the <i>.repo</i> files typically found in <i>/etc/yum.repos.d/</i>, offering a safer and more consistent way to manipulate these settings than manual file editing. It simplifies tasks such as adding new repository sources, enabling/disabling third-party repositories, or adjusting specific parameters like <i>baseurl</i>, <i>gpgcheck</i>, or <i>enabled</i> flags. It is an essential component for managing software sources on Fedora, RHEL, CentOS, and other DNF-based Linux distributions, ensuring that <i>dnf</i> operates with the correct and desired repository configurations.


title: CAVEATS
content:
Modifying system-wide DNF repository configurations using <i>dnf-config-manager</i> typically requires root privileges (or <i>sudo</i>). Direct manual editing of configuration files in <i>/etc/yum.repos.d/</i> is generally discouraged as it can lead to inconsistent configurations or be overwritten by tool actions. Be cautious when disabling essential system repositories, as this can affect system updates and package availability.


title: CONFIGURATION FILE LOCATION
content:
<i>dnf-config-manager</i> primarily interacts with DNF repository configuration files, which are standard INI-like text files typically found in the directory <i>/etc/yum.repos.d/</i>. Each <i>.repo</i> file in this directory defines one or more repositories with their settings.


title: IMPACT ON DNF OPERATIONS
content:
Any changes made using <i>dnf-config-manager</i> (e.g., enabling or disabling a repository, or changing a repository option) are immediately active and will affect subsequent <i>dnf</i> package management operations, such as installing, updating, or removing packages, without needing to restart any services.


title: HISTORY
content:
<i>dnf-config-manager</i> emerged as the DNF package manager replaced YUM in modern Fedora, RHEL 8+, and CentOS Stream distributions. It is the spiritual successor and modern equivalent of <i>yum-config-manager</i> from the YUM ecosystem, providing consistent and robust repository management capabilities. It is distributed as part of the <i>dnf-plugins-core</i> package.


title: SYNOPSIS
content:
<b>dnf group [OPTIONS] &lt;subcommand&gt; [GROUP_SPEC...]</b><br><br><b>Common Subcommands:</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>dnf group list [all|installed|available|hidden|mandatory|optional|default|base|end-user]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>dnf group info GROUP_SPEC...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>dnf group install GROUP_SPEC...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>dnf group reinstall GROUP_SPEC...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>dnf group remove GROUP_SPEC...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>dnf group update GROUP_SPEC...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>dnf group mark remove GROUP_SPEC...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>dnf group mark install GROUP_SPEC...</b><br><br><i>GROUP_SPEC</i> can be a group name (e.g., "Development Tools") or a group ID (e.g., "development-tools").


title: PARAMETERS
content:
<b><b>-y, --assumeyes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically answer 'yes' for all questions, behaving as if the user confirmed every prompt.<br><br><b><b>--allowerasing</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allow erasing of installed packages to resolve dependencies. Useful when a package needs to be removed for a dependency to be satisfied or a conflict resolved.<br><br><b><b>--best</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Try to use the best available versions of packages in transactions. This often means preferring the latest available versions.<br><br><b><b>--installroot=&lt;path&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative installroot (default is '/'). Useful for chroot environments or creating system images without affecting the host.<br><br><b><b>--releasever=&lt;release&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Override the value of <i>$releasever</i> as found in repository configuration files. For example, '39' for Fedora 39.<br><br><b><b>--skip-broken</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip packages that are causing dependency problems and cannot be resolved. The transaction will proceed with the remaining solvable packages.<br><br><b><b>--nogpgcheck</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable GPG signature checking of packages. Use with extreme caution as this compromises system security.<br><br><b><b>--enablerepo=&lt;repo&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable specific repositories by ID or glob that are normally disabled. Can be specified multiple times.<br><br><b><b>--disablerepo=&lt;repo&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable specific repositories by ID or glob that are normally enabled. Can be specified multiple times.<br><br><b><b>--repofrompath=&lt;name&gt;,&lt;path&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add an ad hoc repository from a given path (local directory or URL) with a specified name for the current transaction.<br><br><b><b>--disableexcludes=&lt;repo_id|all&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable excludes for a given repository (by ID) or for all repositories. Excludes prevent certain packages from being considered during transactions.<br><br><b><b>--setopt=VAR=VALUE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a configuration option directly. For example, <i>--setopt=install_weak_deps=False</i> to prevent installation of weak dependencies.<br><br>


title: DESCRIPTION
content:
<i>dnf-group</i> refers to the capabilities within the <br> <b>DNF</b> (Dandified YUM) package manager for managing collections of packages known as 'groups'. These groups logically bundle related software for a specific purpose, like 'Development Tools', 'KDE Plasma Workspaces', or 'Server with GUI'. The command simplifies the process of installing, updating, or removing multiple interconnected packages simultaneously, ensuring system consistency and ease of administration. It provides functionalities to <b>list</b> available groups, show detailed <b>info</b> about their contents, and perform lifecycle operations such as <b>install</b>, <b>remove</b>, <b>reinstall</b>, and <b>update</b> on them. By leveraging repository metadata, <i>dnf-group</i> abstracts away the complexities of individual package dependencies, offering a higher-level approach to software management.


title: CAVEATS
content:
Group operations are heavily dependent on accurate and up-to-date repository metadata. Outdated or corrupted metadata might lead to incomplete or failed transactions. <br> When using <i>dnf group remove</i>, only packages explicitly installed as part of that group, and not required by other installed packages, will be removed. This means it won't necessarily remove <i>all</i> related packages if they were installed independently or are dependencies of other system components. <br> While DNF strives to resolve dependencies for groups, complex scenarios or manually installed conflicting packages might require additional troubleshooting. <br> Group names can sometimes be ambiguous or contain spaces; using group IDs (obtainable via <i>dnf group list id</i>) is often more reliable, especially in scripting.


title: GROUP PACKAGE STATES
content:
DNF groups classify their constituent packages into distinct states, influencing how they are handled during group operations:<br><i><b>mandatory</b></i>: These packages are always installed when the group is installed.<br><i><b>default</b></i>: These packages are installed by default with the group, but users can explicitly deselect them.<br><i><b>optional</b></i>: These packages are available within the group but are not installed by default; they must be manually selected for installation. <br> Understanding these states is crucial for predicting and controlling exactly which packages get installed with a group.


title: GROUP IDS VS. NAMES
content:
Although <b>dnf</b> allows using user-friendly group names (e.g., "Development Tools") for commands like <i>install</i> or <i>info</i>, it is often more reliable and unambiguous to use the internal <b>group ID</b> (e.g., "development-tools"). Group IDs are unique and stable, making them preferable for scripting or when dealing with groups whose names might contain spaces or special characters. Group IDs can be discovered using the command: <br> <i>dnf group list id</i>


title: HISTORY
content:
The concept of managing software through logical package groups was a fundamental feature inherited from <b>YUM</b>, the predecessor to <b>DNF</b>. <b>DNF</b> (Dandified YUM) was developed to overcome performance and dependency resolution limitations of YUM, becoming the default package manager for Fedora distributions starting with version 22. The <i>group</i> subcommand in <b>DNF</b> has been a core capability from its inception, providing a more robust, efficient, and reliable mechanism for users to manage collections of packages as logical units.


title: SYNOPSIS
content:
<b>dnf5</b> [<i>options</i>] &lt;<i>command</i>&gt; [<i>arguments</i>]<br><br>Common commands include:<br><b>dnf5 install</b> [<i>package</i>...]<br><b>dnf5 remove</b> [<i>package</i>...]<br><b>dnf5 update</b> [<i>package</i>...]<br><b>dnf5 check-update</b><br><b>dnf5 search</b> [<i>keyword</i>...]<br><b>dnf5 info</b> [<i>package</i>...]<br><b>dnf5 list</b> [<i>package-spec</i>...]<br><b>dnf5 history</b><br><b>dnf5 clean</b> [<i>all|packages|metadata|expire-cache|dbcache|plugins|binaries|rpmdb|timestamps</i>]<br><b>dnf5 repolist</b> [<i>all|enabled|disabled</i>]


title: PARAMETERS
content:
<b><b>--assumeyes</b>, <b>-y</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically answer yes to all questions during an operation.<br><br><b><b>--cacheonly</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run entirely from cached data, do not update metadata or download new files.<br><br><b><b>--config=</b>&lt;<i>file</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative configuration file path.<br><br><b><b>--downloaddir=</b>&lt;<i>path</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a directory to download packages to, instead of the default cache.<br><br><b><b>--installroot=</b>&lt;<i>path</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative installroot, allowing operations on a different system root.<br><br><b><b>--nogpgcheck</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable GPG signature checking for packages and metadata.<br><br><b><b>--releasever=</b>&lt;<i>version</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Override the value of the '$releasever' variable in configuration files.<br><br><b><b>--setopt=</b>&lt;<i>option</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set any configuration option in the format 'name=value'.<br><br><b><b>--skip-broken</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip packages with broken dependencies, attempting to complete the transaction otherwise.<br><br><b><b>--verbose</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output more detailed debugging information.<br><br>


title: DESCRIPTION
content:
<b>dnf5</b> is the successor to the <b>dnf</b> (Dandified YUM) package manager, primarily used in Fedora, Red Hat Enterprise Linux, and CentOS. It represents a significant evolution, aiming for improved performance, better resource utilization, and a more robust architecture. Unlike <b>dnf</b>, which is largely Python-based, <b>dnf5</b> is rewritten in C++ using the <b>libsolv</b> library, leading to substantial speed improvements in metadata parsing, dependency resolution, and transaction execution. It maintains a command-line interface very similar to <b>dnf</b> for ease of transition, while offering new capabilities and a more modular design. <b>dnf5</b> aims to be the future default package manager, providing a modern, efficient, and reliable solution for managing software packages on RPM-based systems, enhancing the user experience for system administrators and developers alike.


title: CAVEATS
content:
As of early 2024, <b>dnf5</b> is still in active development and adoption. While it's becoming default in some newer Fedora releases (e.g., Fedora 40), it may not be universally available or the primary package manager on all RPM-based distributions yet. Users should be aware of potential differences in plugin compatibility and internal API changes for developers compared to <b>dnf</b>. Always test critical operations in a non-production environment first.


title: CORE TECHNOLOGIES
content:
<b>dnf5</b> is built primarily on <b>libsolv</b> for dependency resolution and <b>librepo</b> for repository management and package downloading. Both libraries are written in C, contributing to <b>dnf5</b>'s significant performance gains and lower memory footprint compared to its Python-based predecessor.


title: API STABILITY
content:
A key goal for <b>dnf5</b> is to provide stable and well-defined C++ APIs. This allows other applications and tools to interact directly with the package management system in a consistent and reliable manner, fostering deeper integration and reducing the need for parsing command-line output.


title: HISTORY
content:
The history of package management in Fedora/RHEL began with <b>yum</b> (Yellowdog Updater, Modified). Due to its limitations in performance and dependency resolution, particularly for complex scenarios, <b>dnf</b> was introduced as its successor. <b>dnf</b>, initially based on Python and leveraging <b>libsolv</b>, brought significant improvements. However, a desire for even greater performance, lower memory footprint, and a more robust, stable C++ API led to the development of <b>dnf5</b>. It represents a complete rewrite in C++, aiming to build upon the successes of <b>dnf</b> while addressing its architectural limitations, particularly those related to its Python core. Development for <b>dnf5</b> began to lay the groundwork for the next decade of RPM-based package management.


title: SYNOPSIS
content:
<b>dnf5-group</b> <<i>command</i>> [<<i>options</i>>] [<<i>arguments</i>>...]<br><br>Examples:<br><b>dnf5-group list --available</b><br><b>dnf5-group info "Development Tools"</b><br><b>dnf5-group install "KDE Plasma Workspaces"</b>


title: PARAMETERS
content:
<b>list [<group_spec...>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists available or installed package groups. Can be combined with specific options like <i>--available</i> (to show only groups available for installation), <i>--installed</i> (to show only currently installed groups), <i>--hidden</i> (to include hidden groups), or <i>--id</i> (to display group IDs). Accepts group specifications as arguments to filter specific groups.<br><br><b>info <group_spec...></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays comprehensive information about one or more specified package groups, including a list of their mandatory, default, and optional packages.<br><br><b>install <group_spec...></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs all mandatory and default packages belonging to the specified group(s). This command ensures all necessary dependencies for the group are met.<br><br><b>remove <group_spec...></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes all mandatory and default packages that were originally installed as part of the specified group(s). It carefully handles dependencies to avoid breaking other installed software.<br><br><b>summary</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a statistical overview and count of available and installed package groups on the system.<br><br><b>mark <install|remove> <group_spec...></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modifies the state of a group, marking it as user-installed or user-removed. This influences how <b>dnf5</b> handles packages within that group during subsequent operations (e.g., updates or autoremove).<br><br><b>--assumeyes, -y</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A common global <b>dnf5</b> option that automatically answers yes to all questions asked during the command execution, useful for scripting.<br><br><b>--refresh</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A common global <b>dnf5</b> option that forces a refresh of the repository metadata before executing the command.<br><br>


title: DESCRIPTION
content:
<i>dnf5-group</i> is a command-line utility used for managing software package groups within the <b>DNF5</b> package management system. It provides functionalities to list available groups, view detailed information about specific groups, install entire groups of related packages, and remove them. This tool simplifies the installation and uninstallation of complex software environments, ensuring that all necessary dependencies for a particular set of functionalities (e.g., a desktop environment, development tools) are handled cohesively.<br><br>It is the successor to <i>dnf group</i> and <i>yum group</i>, offering similar capabilities with the performance and feature enhancements of DNF5. Group management helps users install a complete functional set of software, avoiding the need to individually select numerous interdependent packages. It streamlines provisioning and maintenance of systems by providing predefined, curated collections of software, which are particularly useful for setting up development workstations, server roles, or specific desktop environments. The command offers flexibility in managing installed components and ensures consistency across installations.


title: CAVEATS
content:
As <b>dnf5</b> is still under active development, its commands and options might evolve. While <i>dnf5-group</i> strives for robust dependency resolution, removing a group might not uninstall all its packages if they are also dependencies of other installed software. The group definitions are provided by repository metadata and can vary between different Linux distributions or even different repositories.


title: GROUP SPECIFICATION
content:
Groups can be specified by their full name (e.g., "KDE Plasma Workspaces") or by their unique ID (e.g., "kde-desktop"). Group IDs are often lowercase and hyphenated versions of the group name and are generally more stable across language settings.


title: PACKAGE TYPES IN GROUPS
content:
DNF groups can categorize their constituent packages as <i>mandatory</i>, <i>default</i>, or <i>optional</i>. The <b>dnf5-group install</b> command typically installs only mandatory and default packages. Optional packages within a group must be installed explicitly as individual packages.


title: HISTORY
content:
<i>dnf5-group</i> is an integral part of the <b>DNF5</b> project, the next generation of the DNF package manager. DNF itself succeeded YUM (Yellowdog Updater, Modified) as the default package manager for RPM-based Linux distributions like Fedora, CentOS, and Red Hat Enterprise Linux. The concept of package groups has been a fundamental feature since the YUM era, enabling users to install predefined collections of software (e.g., a specific desktop environment or development tools) efficiently. <i>dnf5-group</i> continues this tradition, leveraging the performance enhancements and modular architecture of <b>DNF5</b> to offer a more efficient and user-friendly experience for managing these software bundles. Its development focuses on modernization, improved reliability, and alignment with contemporary Linux ecosystem standards.


title: PARAMETERS
content:
<b>None</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When invoked as <b>dnsdomainname</b>, the command typically takes no explicit parameters or options. Its behavior is fixed to display the DNS domain name, effectively acting as <b>hostname -d</b>.<br><br>


title: DESCRIPTION
content:
The <b>dnsdomainname</b> command is used to display the DNS (Domain Name System) domain name of the current system. It is typically a symbolic link to the <b>hostname</b> utility. When invoked as <b>dnsdomainname</b>, the <b>hostname</b> command behaves as if the <i>-d</i> option (<i>--domain</i>) was supplied, printing only the DNS domain portion of the system's fully qualified domain name (FQDN).<br><br>This command retrieves the DNS domain name, which is part of the system's network identity on the internet or a private network using DNS. This differs significantly from the <b>domainname</b> (or <b>nisdomainname</b>, <b>ypdomainname</b>) command, which pertains to the system's NIS (Network Information Service) or YP (Yellow Pages) domain name. The DNS domain name is crucial for network communication and service discovery via DNS, while the NIS domain name is relevant for NIS-based user and group management.<br><br>The DNS domain name is usually determined by the system's network configuration, often from <i>/etc/resolv.conf</i> or by performing a reverse DNS lookup on the system's IP address. If the system does not have a DNS domain name configured or discoverable, the command may output nothing or <i>(none)</i>.


title: CAVEATS
content:
<ul><li><b>Symbolic Link</b>: <b>dnsdomainname</b> is almost always a symbolic link to the <b>hostname</b> command. This means its behavior is determined by how <b>hostname</b> interprets its invocation name.</li><li><b>Distinction from NIS/YP Domain</b>: It is crucial not to confuse <b>dnsdomainname</b> with <b>domainname</b> (or <b>nisdomainname</b>, <b>ypdomainname</b>). <b>dnsdomainname</b> retrieves the DNS domain, which is part of the global internet naming system, while <b>domainname</b> deals with the NIS/YP domain, a legacy system for network-wide information distribution.</li><li><b>Lack of DNS Domain</b>: If the system is not configured with a DNS domain name, or if it cannot be determined via reverse DNS lookup or <i>/etc/resolv.conf</i>, <b>dnsdomainname</b> may return an empty string or <i>(none)</i>.</li><li><b>Configuration Dependency</b>: The output relies on correct system network configuration, including <i>/etc/hosts</i> and <i>/etc/resolv.conf</i>, and potentially DNS server availability for reverse lookups.</li></ul>


title: HOW DNS DOMAIN IS DETERMINED
content:
The DNS domain name displayed by <b>dnsdomainname</b> is typically obtained through one of the following methods:<br>1.  <b>From FQDN</b>: If the system's full qualified domain name (FQDN) is set (e.g., <i>myhost.example.com</i>), the domain <i>example.com</i> is extracted. The FQDN can be set in <i>/etc/hostname</i> or via DHCP.<br>2.  <b>From <i>/etc/resolv.conf</i></b>: The <i>domain</i> or <i>search</i> directives in <i>/etc/resolv.conf</i> can provide the default DNS domain name.<br>3.  <b>Reverse DNS Lookup</b>: The system may perform a reverse DNS lookup (PTR query) on its IP address to determine its associated domain name from DNS servers.<br><br>The exact method depends on the specific <b>hostname</b> implementation and system configuration.


title: HISTORY
content:
The <b>dnsdomainname</b> command emerged as part of the <b>hostname</b> utility suite, primarily to provide a clear distinction between the system's DNS domain name and its NIS/YP domain name. In earlier Unix-like systems, the <b>domainname</b> command often served a dual purpose or was ambiguous regarding whether it referred to the NIS or DNS domain. As DNS became the predominant naming service, <b>dnsdomainname</b> was introduced to explicitly retrieve the DNS-specific domain information, making the system's network identity clearer and separating it from legacy NIS/YP configurations. Its integration as a symlink to <b>hostname -d</b> reflects the <b>hostname</b> utility's evolving capabilities to manage various aspects of a system's network identity.


title: PARAMETERS
content:
<b><I>&lt;target_domain&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The target domain for which to scan for subdomains (e.g., <i>example.com</i>).<br><br><b><b>-w</b> <I>&lt;wordlist_file&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom wordlist file to use for subdomain brute-forcing instead of the default built-in list.<br><br><b><b>-r</b> <I>&lt;results_file&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Saves the discovered subdomains and their corresponding IP addresses to the specified output file.<br><br><b><b>-i</b> <I>&lt;ip_address&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignores DNS resolutions that point to the specified IP address. This is particularly useful for filtering out wildcard DNS entries.<br><br><b><b>-d</b> <I>&lt;delay_seconds&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a delay in seconds between each DNS query. This helps to avoid overwhelming DNS servers and reduces the chance of triggering rate limits or detection.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, displaying more detailed information about the scanning process.<br><br><b><b>-h</b> or <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the command's help message, showing available options and usage examples.<br><br>


title: DESCRIPTION
content:
<br><i>dnsmap</i> is a command-line utility designed for passive and active subdomain reconnaissance. It operates primarily by brute-forcing DNS records using a pre-defined or user-supplied wordlist. For each word in the list, <i>dnsmap</i> attempts to resolve <i>subdomain.target_domain.com</i> to an IP address. If a resolution occurs, it indicates a potential live subdomain. This tool is widely used by penetration testers and security researchers to discover hidden or less-obvious subdomains that might host vulnerable services or provide additional attack vectors.<br><br>A key feature of <i>dnsmap</i> is its ability to handle wildcard DNS responses, where a DNS server returns an IP for any non-existent subdomain. The <i>-i</i> option allows users to specify an IP address to ignore, filtering out these wildcard hits and providing cleaner results. While straightforward, <i>dnsmap</i> remains a valuable initial step in the information gathering phase of a security assessment, helping to expand the attack surface by identifying all accessible subdomains associated with a target.<br>


title: CAVEATS
content:
<br><b>1. Wordlist Dependency:</b> <i>dnsmap</i>'s effectiveness heavily relies on the quality and comprehensiveness of the supplied wordlist. It will only discover subdomains present in the list, potentially missing others.<br><b>2. Performance:</b> Scanning large wordlists with a significant delay (using <i>-d</i>) can make the process very slow.<br><b>3. Wildcard DNS:</b> While the <i>-i</i> option helps, perfectly identifying and filtering all wildcard entries can sometimes be challenging, leading to noisy results.<br><b>4. Rate Limiting/Blocking:</b> High volumes of DNS queries can trigger rate limits on DNS servers or be detected and blocked by intrusion prevention systems (IPS).<br><b>5. Ethical Considerations:</b> Always ensure you have explicit permission before performing scans on any domain. Unauthorized scanning can be illegal and unethical.<br>


title: DEFAULT WORDLIST
content:
<br>By default, if no custom wordlist is specified with <b>-w</b>, <i>dnsmap</i> utilizes a small, built-in wordlist containing common subdomain names. For more comprehensive results, providing a larger, custom wordlist is highly recommended.<br>


title: ETHICAL USE
content:
<br>It is crucial to use <i>dnsmap</i> responsibly and ethically. Only perform scans on domains for which you have explicit authorization. Unauthorized scanning can lead to legal repercussions.<br>


title: HISTORY
content:
<br><i>dnsmap</i> emerged as a straightforward tool in the early 2010s, primarily used by penetration testers for initial reconnaissance. Its simplicity and effectiveness in basic subdomain brute-forcing contributed to its adoption in security workflows. While newer, more sophisticated tools have since appeared, often incorporating multiple enumeration techniques and passive intelligence gathering, <i>dnsmap</i> remains a classic example of a direct, active brute-force approach to subdomain discovery. It is typically distributed as a standalone script (often Python or Perl) or as part of larger security toolkits like Kali Linux, showcasing its enduring utility for a specific, focused task.<br>


title: PARAMETERS
content:
<b><b>-h</b> or <b>--no-hosts</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Do not read the hostnames from <i>/etc/hosts</i> or additional hosts files.</i><br><br><b><b>-r</b> <i>&lt;file&gt;</i> or <b>--resolv-file=</b><i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Read upstream DNS servers from <i>&lt;file&gt;</i> instead of <i>/etc/resolv.conf</i>.</i><br><br><b><b>-p</b> <i>&lt;port&gt;</i> or <b>--port=</b><i>&lt;port&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Listen on DNS port <i>&lt;port&gt;</i> instead of the default port 53.</i><br><br><b><b>-q</b> or <b>--log-queries</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Log the results of DNS queries to syslog.</i><br><br><b><b>-x</b> <i>&lt;file&gt;</i> or <b>--pid-file=</b><i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify the PID file for <b>dnsmasq</b> to write its process ID to.</i><br><br><b><b>--interface=</b><i>&lt;interface&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Listen only on the specified network interface(s). Can be specified multiple times.</i><br><br><b><b>--listen-address=</b><i>&lt;ipaddr&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Listen only on the specified IP address(es). Can be specified multiple times.</i><br><br><b><b>--bind-interfaces</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Bind only to the interfaces it is listening on, rather than the wildcard address.</i><br><br><b><b>--conf-file=</b><i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify an alternative configuration file instead of the default <i>/etc/dnsmasq.conf</i>.</i><br><br><b><b>--dhcp-range=</b><i>&lt;start&gt;</i>,<i>&lt;end&gt;</i>,<i>&lt;lease_time&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enable DHCP server, define a range of IP addresses to lease and their lease time (e.g., <i>192.168.1.100,192.168.1.200,12h</i>).</i><br><br><b><b>--dhcp-host=</b><i>&lt;mac&gt;</i>,<i>&lt;ip&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Assign a fixed IP address to a host based on its MAC address.</i><br><br><b><b>--dhcp-option=</b><i>&lt;option&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify DHCP options to be sent to clients (e.g., <i>option:router,192.168.1.1</i>).</i><br><br><b><b>--enable-tftp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enable the built-in TFTP server.</i><br><br><b><b>--tftp-root=</b><i>&lt;directory&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify the root directory for TFTP file transfers.</i><br><br><b><b>--cache-size=</b><i>&lt;size&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Set the size of <b>dnsmasq</b>'s DNS cache (number of entries). Default is 150.</i><br><br><b><b>--address=/</b><i>&lt;domain&gt;</i><b>/</b><i>&lt;ip&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Force a specific domain (e.g., <i>/my.local.domain/192.168.1.1</i>) to resolve to a given IP address.</i><br><br><b><b>--server=/</b><i>&lt;domain&gt;</i><b>/</b><i>&lt;ip&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify an upstream DNS server for specific domains (e.g., <i>/internal.com/10.0.0.1</i>).</i><br><br>


title: DESCRIPTION
content:
The <b>dnsmasq</b> command provides a lightweight and easy-to-configure DNS forwarder, DHCP server, and TFTP server. It's primarily designed for small networks, home networks, and embedded systems, such as routers. As a DNS forwarder, <b>dnsmasq</b> caches DNS queries, significantly improving resolution speed for frequently accessed domains. It can also be configured to resolve local hostnames from <i>/etc/hosts</i> or arbitrary domain-to-IP mappings.<br><br>Its DHCP server functionality supports static and dynamic IP address assignment, BOOTP, and PXE network booting. This makes it invaluable for managing network devices and provisioning new systems. The integrated TFTP server further complements PXE booting by serving boot images.<br><br>Known for its minimal resource consumption and ease of use, <b>dnsmasq</b> is a popular choice for situations where a full-blown DNS/DHCP suite like BIND or ISC DHCP server would be overkill.


title: CAVEATS
content:
While powerful for small environments, <b>dnsmasq</b> is <i>not designed for large-scale enterprise networks</i> due to its single-process architecture and simpler feature set compared to more robust solutions like BIND or ISC DHCPD. It can also <i>conflict with <b>systemd-resolved</b></i> on modern Linux distributions, requiring careful configuration (e.g., disabling <b>systemd-resolved</b> or making <b>dnsmasq</b> listen on a different port and configuring <b>systemd-resolved</b> to forward to it). Security is paramount: ensure it's not configured as an open resolver, which could be exploited for DNS amplification attacks.


title: CONFIGURATION FILES
content:
Beyond command-line options, <b>dnsmasq</b> is typically configured via <i>/etc/dnsmasq.conf</i>. For better organization and modularity, it also processes configuration files found in <i>/etc/dnsmasq.d/</i> (or a directory specified by <b>--conf-dir</b>), allowing for extensible setups without modifying the main configuration file.


title: DNS CACHING BEHAVIOR
content:
<b>dnsmasq</b> acts as a caching DNS forwarder. When a client queries it, <b>dnsmasq</b> first checks its cache. If the answer is not found, it forwards the query to upstream DNS servers (defined in <i>/etc/resolv.conf</i> or by <b>--resolv-file</b>), caches the response, and then returns it to the client. This significantly reduces latency and external network traffic for repeated queries.


title: HISTORY
content:
<b>dnsmasq</b> was originally developed by <i>Simon Kelley</i>, with its first stable release around 2000. It emerged from the need for a compact, efficient, and easy-to-configure DNS and DHCP solution suitable for embedded systems and small home networks. Its simplicity and low resource footprint quickly made it a popular choice for network devices like routers (e.g., those running <i>OpenWrt</i> or <i>DD-WRT</i> firmware). It has continuously evolved, adding features like TFTP and support for IPv6, while maintaining its core philosophy of being a lightweight, integrated network service provider.


title: SYNOPSIS
content:
<B>dnsrecon</B> <I>-d</I> <I>DOMAIN</I> [<I>-t</I> <I>TYPE</I>] [<I>-n</I> <I>NAMESERVER</I>] [<I>-a</I>] [<I>-b</I>] [<I>--threads</I> <I>NUM</I>] [<I>--json</I> <I>FILE</I>]


title: PARAMETERS
content:
<b>-d <I>DOMAIN</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target domain for reconnaissance.<br><br><b>-t <I>TYPE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the type of enumeration. Common types include 'std' (standard), 'axfr' (zone transfer), 'brt' (brute force), 'srv' (SRV records), 'spf' (SPF records), 'dmarc' (DMARC records), etc.<br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs an <B>AXFR</B> (zone transfer) attempt against all nameservers for the target domain.<br><br><b>-b</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables <B>brute-force</B> subdomain enumeration using a built-in wordlist or a custom one specified with <I>-l</I>.<br><br><b>-n <I>NAMESERVER</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Designates a specific nameserver to use for DNS queries instead of relying on the domain's NS records or system defaults.<br><br><b>-r <I>RANGE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Conducts a <B>reverse DNS lookup</B> on a specified IP range (e.g., 192.168.1.0/24).<br><br><b>-l <I>FILENAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a custom wordlist file for <B>brute-force</B> subdomain or host enumeration.<br><br><b>--threads <I>NUM</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of threads for concurrent requests, speeding up enumeration, especially for brute-forcing.<br><br><b>--json <I>FILENAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the reconnaissance results to a JSON formatted file.<br><br><b>--csv <I>FILENAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the reconnaissance results to a CSV formatted file.<br><br><b>--xml <I>FILENAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the reconnaissance results to an XML formatted file.<br><br><b>--iw</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes WHOIS information for the domain if available.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables <B>verbose</B> output, showing more details about the process and findings.<br><br>


title: DESCRIPTION
content:
Dnsrecon is a versatile and comprehensive command-line utility designed for <B>DNS enumeration</B> and reconnaissance. It's widely used by cybersecurity professionals and penetration testers to gather extensive information about target domains and their DNS infrastructure. <br><br>The tool can perform a variety of lookups, including standard record queries (A, AAAA, NS, SOA, MX, SRV, SPF, DMARC), <B>zone transfer attempts</B> (AXFR), and <B>brute-force subdomain discovery</B> using wordlists. It also supports <B>reverse DNS lookups</B> on specified IP ranges, <B>wildcard DNS detection</B>, and can identify common record types to map out a domain's network presence. <br><br>Dnsrecon helps in understanding a domain's attack surface by revealing publicly exposed hosts, services, and misconfigurations, making it an essential tool in the initial information gathering phase of any security assessment.


title: CAVEATS
content:
While powerful, dnsrecon can be <B>noisy</B> on a target network, potentially triggering intrusion detection systems (IDS) due to the volume of DNS queries, especially during brute-force operations. <br><br>Many organizations <B>disable zone transfers (AXFR)</B> to prevent information disclosure, so this feature may not always yield results. <br><br>The accuracy of results depends on the quality of nameservers and the completeness of wordlists used for brute-forcing. <br><br>It requires a working Python environment to run.


title: COMMON USAGE SCENARIOS
content:
Dnsrecon is frequently used during the <B>reconnaissance phase</B> of a penetration test to map out a target's infrastructure. It helps identify potential misconfigurations, discover hidden subdomains, find mail servers, and determine the overall network footprint. This information is crucial for subsequent attack phases.


title: INTEGRATION
content:
As dnsrecon supports various output formats (<I>JSON</I>, <I>XML</I>, <I>CSV</I>), its results can be easily parsed and integrated into other security tools, scripts, or reporting frameworks for further analysis or visualization. This makes it a flexible component in automated security workflows.


title: HISTORY
content:
Dnsrecon originated as a tool within the <I>penetration testing</I> and <I>ethical hacking</I> community, primarily developed by <B>Bitquark</B>. It gained popularity due to its comprehensive enumeration capabilities, quickly becoming a staple in distributions like <B>Kali Linux</B>. Its development has been driven by the need for automated and efficient DNS information gathering, constantly evolving to include new record types and enumeration techniques, such as DMARC and SPF checks, and improved brute-forcing methods. It remains an active and maintained project within the security toolset.


title: PARAMETERS
content:
<b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform reverse lookups on A records to check for corresponding PTR records.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check all hosts listed in the local <i>/etc/hosts</i> file in addition to DNS.<br><br><b>-m</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verify that Mail Exchanger (MX) records point to valid A records.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check for Start of Authority (SOA) record consistency across all authoritative nameservers.<br><br><b>-i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress SOA record serial number checks.<br><br><b>-F</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check the forwarders configuration for validity and reachability.<br><br><b>-D <i>level</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the debug output level (higher numbers provide more detailed output).<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress the printing of all found hosts; only errors are displayed.<br><br><b>-A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not check A (Address) records. This can speed up the scan if only other record types are of interest.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not check NS (Nameserver) records for consistency.<br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use TCP for zone transfers (AXFR) instead of UDP for queries.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details about the checks being performed.<br><br><b>-e <i>email_address</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Email error reports to the specified address.<br><br><b>-o</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output all records found, including SOA and NS records, not just errors.<br><br><b>-x <i>type</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude specific record types from checks (e.g., '-x CNAME').<br><br><b>-Z</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform AXFR (zone transfer) checks to ensure the server allows transfers and data is consistent.<br><br>


title: DESCRIPTION
content:
<i>dnswalk</i> is a command-line utility designed for debugging and profiling DNS zones. It conducts a comprehensive traversal of a specified DNS domain, identifying common errors and inconsistencies. This includes verifying host records, detecting CNAME loops, ensuring correct delegation, finding unresolvable addresses, and checking for missing or incorrect reverse DNS (PTR) records. It's an invaluable tool for network administrators to maintain the health and accuracy of their DNS configurations, thereby preventing prevalent DNS-related problems such as broken links or unresolvable services. The command can be executed interactively or integrated into scripts for automated DNS integrity checks.


title: CAVEATS
content:
<i>dnswalk</i>'s comprehensive checks often rely on zone transfers (AXFR), which many DNS servers block for security reasons. If AXFR is not permitted, the utility's ability to perform a full zone audit will be limited. It can generate significant network traffic on large zones. Some reported 'errors' might be intentional configurations, requiring administrative discretion to interpret.


title: ZONE TRANSFER DEPENDENCY
content:
For <i>dnswalk</i> to perform its most thorough analysis, it ideally requires the target DNS server to allow zone transfers (AXFR). If AXFR is denied, <i>dnswalk</i> can still perform checks based on standard queries, but its ability to detect all inconsistencies across the entire zone will be significantly reduced.


title: ERROR CATEGORIZATION
content:
The command provides categorized error reports, such as <b>BAD A</b> (A record issues), <b>BAD MX</b> (MX record issues), <b>MISSING PTR</b> (missing reverse records), and <b>SOA SERIAL</b> (SOA serial number inconsistencies). This categorization helps administrators quickly identify and address specific types of DNS problems.


title: HISTORY
content:
<i>dnswalk</i> was initially developed by Simon Parsons and became a valuable tool within the DNS community. While its development peaked in the late 1990s and early 2000s, it remains a robust utility for static DNS zone analysis and pre-deployment verification, demonstrating its enduring utility for network administrators.


title: SYNOPSIS
content:
<i><b>dnsx</b> [<b>OPTIONS</b>] -l <b>&lt;hosts_file&gt;</b> | <b>&lt;piped_input&gt;</b><br>Example: <b>subfinder -d example.com | dnsx -a -resp -silent</b></i>


title: PARAMETERS
content:
<b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform A record lookup (IPv4 address).<br><br><b><b>-aaaa</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform AAAA record lookup (IPv6 address).<br><br><b><b>-axfr</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform AXFR record lookup (zone transfer).<br><br><b><b>-cname</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform CNAME record lookup (canonical name).<br><br><b><b>-mx</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform MX record lookup (mail exchange).<br><br><b><b>-ns</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform NS record lookup (name server).<br><br><b><b>-ptr</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform PTR record lookup (reverse DNS pointer).<br><br><b><b>-soa</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform SOA record lookup (start of authority).<br><br><b><b>-spf</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform SPF record lookup (sender policy framework).<br><br><b><b>-txt</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform TXT record lookup (arbitrary text data).<br><br><b><b>-dmarc</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform DMARC record lookup (Domain-based Message Authentication, Reporting & Conformance).<br><br><b><b>-l &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;File containing a list of hosts/domains to lookup.<br><br><b><b>-o &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output file to write results.<br><br><b><b>-r &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;File containing a list of resolvers to use for DNS queries.<br><br><b><b>-s &lt;resolver&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a single custom resolver to use (e.g., 8.8.8.8).<br><br><b><b>-t &lt;int&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of concurrent goroutines (threads) for lookups (default: 25).<br><br><b><b>-retry &lt;int&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of retries for DNS lookups (default: 1).<br><br><b><b>-wt &lt;int&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Wait time in seconds between lookups for rate limiting (default: 1).<br><br><b><b>-timeout &lt;int&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Timeout in seconds for DNS lookups (default: 5).<br><br><b><b>-resp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the full DNS response details.<br><br><b><b>-resp-only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show only the DNS response without the domain name.<br><br><b><b>-json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output results in JSON format.<br><br><b><b>-silent</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show silent output (only results, no banners or verbose info).<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show verbose output.<br><br><b><b>-debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show debug output for detailed troubleshooting.<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the version of dnsx.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message and exit.<br><br><b><b>-cf &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a YAML configuration file for dnsx settings.<br><br><b><b>-skip-wildcard</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip wildcard DNS resolutions.<br><br><b><b>-cdn</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable CDN (Content Delivery Network) filtering based on known CDN IP ranges.<br><br><b><b>-dns-filter</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable DNS filtering to remove duplicate or unwanted records.<br><br><b><b>-ro</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resolve Only mode (don't perform specific record type lookups; just resolve domain to IP).<br><br><b><b>-rt &lt;type&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify recursion type (e.g., 'no-recursion').<br><br><b><b>-rc &lt;code&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by DNS response code (e.g., 'NOERROR', 'NXDOMAIN').<br><br><b><b>-system-resolvers</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use system DNS resolvers (from /etc/resolv.conf).<br><br><b><b>-nxdomain</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include NXDOMAIN responses in output.<br><br><b><b>-no-fallback</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not fallback to system resolvers if custom ones fail.<br><br><b><b>-cdn-file &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;File containing a custom list of CDN identifiers for filtering.<br><br><b><b>-rl &lt;int&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rate limit requests per second.<br><br>


title: DESCRIPTION
content:
<i><b>dnsx</b> is a powerful and highly efficient command-line utility developed by ProjectDiscovery for comprehensive DNS enumeration and resolution. Designed for bulk processing, it can perform various types of DNS lookups, including A, AAAA, CNAME, MX, NS, PTR, SOA, SPF, TXT, and DMARC records, on a list of domain names. Its primary use cases revolve around reconnaissance, bug bounty hunting, and penetration testing workflows, allowing security professionals to quickly gather extensive DNS information for a given set of targets.<br><br>One of its key strengths lies in its ability to process thousands of domains concurrently, leveraging Go's concurrency model. Users can specify custom DNS resolvers, utilize a list of resolvers, or fall back to system resolvers. It supports various output formats, including plain text and JSON, making it easy to integrate with other tools in a pipeline. <b>dnsx</b> is an essential component in many automated subdomain enumeration and vulnerability scanning setups, often used in conjunction with tools like <b>subfinder</b> (for subdomain discovery) and <b>httpx</b> (for HTTP probing) to build a complete picture of an organization's attack surface.</i>


title: CAVEATS
content:
<i><b>dnsx</b> is a specialized tool not typically part of standard Linux distributions. It needs to be installed, usually via Go's package manager (e.g., <b>go install github.com/projectdiscovery/dnsx/cmd/dnsx@latest</b>).<br><br>Its performance is highly dependent on the quality and responsiveness of the DNS resolvers used. Overly aggressive concurrency (<b>-t</b> flag) or low timeouts (<b>-timeout</b> flag) with unreliable resolvers can lead to missed results or false negatives.</i>


title: <I>PIPELINE INTEGRATION</I>
content:
<i><b>dnsx</b> is often used in conjunction with other ProjectDiscovery tools, especially in a piped fashion. For instance, subdomains found by <b>subfinder</b> can be directly piped into <b>dnsx</b> to resolve their A records: <br><b>subfinder -d example.com | dnsx -a -silent</b> <br>This allows for highly efficient and automated workflow creation for asset discovery and vulnerability assessment.</i>


title: <I>CUSTOM RESOLVERS</I>
content:
<i>To improve lookup speed and accuracy, users can provide a list of custom DNS resolvers using the <b>-r</b> flag or a single resolver with the <b>-s</b> flag. Using public, fast, and reliable resolvers (e.g., Google, Cloudflare, OpenDNS) or even private resolvers can significantly enhance the effectiveness of <b>dnsx</b>.</i>


title: HISTORY
content:
<i><b>dnsx</b> is an integral part of the ProjectDiscovery open-source tool suite, widely adopted by cybersecurity professionals for automated reconnaissance. Developed in Go, it was designed to provide a fast, efficient, and flexible solution for DNS enumeration, addressing the need for bulk DNS lookups in security testing workflows. Its development aligns with ProjectDiscovery's philosophy of creating highly performant and modular tools that can be chained together via standard I/O (stdin/stdout) to build complex scanning pipelines. It has seen continuous development, with features being added to improve filtering, error handling, and performance, solidifying its position as a go-to tool for DNS-related tasks.</i>


title: SEE ALSO
content:
<b>dig(1)</b>, <b>host(1)</b>, <b>nslookup(1)</b>, <b>subfinder</b> (ProjectDiscovery), <b>httpx</b> (ProjectDiscovery), <b>massdns</b>


title: SYNOPSIS
content:
<b>sudo</b> [<I>options</I>] <I>command</I> [<I>arguments...</I>]<br><b>sudo</b> <I>-v</I> | <I>-l</I> | <I>-k</I> | <I>-K</I> | <I>-s</I> | <I>-H</I> | <I>-A</I> | <I>-b</I> | <I>-p</I> | <I>-u user</I> | <I>-g group</I> | <I>-E</I> | <I>-i</I>


title: PARAMETERS
content:
<b>-A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ask for password using an external helper program.<br><br><b>-b</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run command in the background.<br><br><b>-E</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserve the user's environment when running the command.<br><br><b>-H</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the HOME environment variable to the target user's home directory.<br><br><b>-i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run a shell as the target user with their environment (login shell).<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Invalidate the user's cached credentials. Next sudo command will require a password.<br><br><b>-K</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Completely remove the user's cached credentials.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List the commands the user is allowed to run on the current host.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Non-interactive mode; never prompt for a password.<br><br><b>-P</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserve the user's group vector rather than initializing it to the target user's groups.<br><br><b>-p <I>prompt</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a custom password prompt.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run a shell as the target user (default: root).<br><br><b>-u <I>user</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the command as the specified user instead of the default (root).<br><br><b>-g <I>group</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the command as the specified group instead of the default (root).<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Update the user's cached credentials without running a command.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the sudo version and exit.<br><br>


title: DESCRIPTION
content:
The <b>sudo</b> (short for 'superuser do') command is a fundamental utility in Unix-like operating systems, including Linux, that allows a permitted user to execute a command as the superuser (root) or another user. This capability is defined by a security policy, typically configured in the <i>sudoers</i> file. Its primary purpose is to provide a controlled and secure method for non-root users to perform administrative tasks without needing to log in directly as the root user. When a user invokes <b>sudo</b>, they are usually prompted for their <i>own</i> password, not the root's password. This design choice enhances security by minimizing the sharing of the root password and provides a clear audit trail of who executed which commands with elevated privileges. The <i>sudoers</i> file, usually edited using the <i>visudo</i> command, governs which users or groups have access to <b>sudo</b>, which commands they can run, and under what conditions (e.g., without a password).


title: CAVEATS
content:
Incorrect configuration of the <i>sudoers</i> file can lead to significant security vulnerabilities, allowing unauthorized privilege escalation. Using <i>NOPASSWD</i> for certain commands can be risky if those commands allow arbitrary code execution. Users should be cautious when granting <i>sudo</i> access and always adhere to the principle of least privilege. The timeout for cached credentials means that users might need to re-enter their password after a period of inactivity, which is a security feature.


title: CLARIFICATION: THE 'DO' KEYWORD
content:
The term 'do' by itself is not a standalone executable Linux command. Instead, '<b>do</b>' is a shell keyword commonly used in control flow statements within shell scripts, such as <i>for</i> loops, <i>while</i> loops, <i>until</i> loops, and <i>select</i> statements. It marks the beginning of the block of commands to be executed repeatedly or conditionally. For example:<br><br>for i in 1 2 3; <b>do</b> echo $i; <b>done</b><br><br>If you intended to execute a command with superuser privileges, the command you were likely thinking of is '<b>sudo</b>', which stands for 'superuser do'.


title: HISTORY
content:
<b>sudo</b> was originally written by Robert Coggeshall and released in 1980. It was later rewritten by Todd Miller and is now actively maintained by him. It was designed to provide a more granular and auditable alternative to the traditional <i>su</i> (substitute user) command, allowing administrators to grant specific users the ability to run certain commands as root or another user, without needing to share the root password. Its widespread adoption has made it a de facto standard for privilege escalation in Unix-like operating systems, emphasizing security and accountability through its detailed logging capabilities.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits.<br><br><b><b>-d</b>, <b>--devel-release</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks for a development release upgrade. Useful for upgrading from an LTS to an interim release, or to the very latest development branch.<br><br><b><b>-f</b> <i>DISTRO</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a target distribution release to upgrade to (e.g., 'focal', 'jammy'). This option is rarely used by most users.<br><br><b><b>-m</b>, <b>--mainline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows upgrading to non-LTS releases even when currently on an LTS version, if a newer mainline release is available.<br><br><b><b>-p</b>, <b>--proposed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses packages from the 'proposed' repository during the upgrade. This can lead to less stable upgrades and is generally not recommended for production systems.<br><br><b><b>-c</b>, <b>--check-dist-upgrade-only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs only the upgrade check without prompting for installation or downloading packages.<br><br><b><b>-r</b>, <b>--reboot-required</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if a reboot is necessary after the upgrade has completed.<br><br><b><b>-s</b>, <b>--status</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the current status of the release upgrade process, if one is in progress.<br><br><b><b>-D</b>, <b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output, useful for troubleshooting.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most output during the upgrade process, useful for scripting (though interactive prompts still occur unless <b>-y</b> is used).<br><br><b><b>-y</b>, <b>--assume-yes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically answers 'yes' to all prompts during the upgrade process. Use with extreme caution as this can lead to unintended configuration changes or data loss.<br><br>


title: DESCRIPTION
content:
<i><br>do-release-upgrade</i> is the command-line utility used to perform a full distribution upgrade of Ubuntu to a newer release. It's part of the <i>update-manager-core</i> package and serves as the backend for the graphical <i>Update Manager</i>.<br><br>The command first checks for a new stable release of Ubuntu. If one is found, it prepares the system for the upgrade by checking network connectivity, available disk space, and disabled third-party repositories. It then downloads all necessary packages for the new release, prompts the user about configuration file changes (allowing to keep current, install new, or compare), and handles the installation process.<br><br>It's designed to provide a guided, interactive upgrade experience, helping to migrate user settings and installed applications while minimizing potential conflicts. For LTS (Long Term Support) releases, it typically offers to upgrade only to the next LTS release by default, but options exist to upgrade to interim or development releases.


title: CAVEATS
content:
<b><br>1. Backup Your Data:</b> Always back up all critical data before initiating a distribution upgrade.<br><b>2. Stable Internet Connection:</b> A stable and reliable internet connection is crucial as gigabytes of data may be downloaded.<br><b>3. Third-Party PPAs/Repositories:</b> Custom PPAs or third-party repositories often need to be disabled or removed before the upgrade to prevent conflicts. Re-enable them after the upgrade is complete and verify their compatibility.<br><b>4. Disk Space:</b> Ensure sufficient free disk space (at least 10-15 GB is often recommended) for the new packages and temporary files.<br><b>5. Time Commitment:</b> A full release upgrade can take several hours depending on internet speed and system performance.<br><b>6. Power Source:</b> For laptops, ensure it's plugged into a power source to avoid power loss during the upgrade.<br><b>7. Server Upgrades:</b> On server systems, it is highly recommended to perform upgrades in a maintenance window with a tested backup and recovery plan.


title: PRE-UPGRADE CHECKLIST
content:
Before running <i>do-release-upgrade</i>, it's highly recommended to:<br><b>1. Update current packages:</b> Run <i><br>sudo apt update && sudo apt upgrade && sudo apt dist-upgrade<br></i> to ensure all currently installed packages are up-to-date.<br><b>2. Remove obsolete packages:</b> Use <i><br>sudo apt autoremove<br></i> to clear out unneeded dependencies.<br><b>3. Disable third-party PPAs/repositories:</b> Manually disable all third-party software sources and PPAs from your system's software sources before starting the upgrade.<br><b>4. Check system health:</b> Ensure no critical services are running that cannot tolerate an interruption.


title: LTS VS. INTERIM RELEASE UPGRADES
content:
By default, <i>do-release-upgrade</i> from an LTS (Long Term Support) release will only offer to upgrade to the *next* LTS release. For example, from Ubuntu 20.04 LTS, it will offer to upgrade to 22.04 LTS. If you wish to upgrade to an interim (non-LTS) release, you must use the <i><b>-d</b></i> (or <i><b>--devel-release</b></i>) option, e.g., <i><br>sudo do-release-upgrade -d<br></i>. This would allow an upgrade from 20.04 LTS to 21.04 (if supported by the upgrade path), and then successively to subsequent interim releases until the next LTS.


title: INTERACTIVE PROMPTS FOR CONFIGURATION FILES
content:
During the upgrade, if new versions of configuration files conflict with your modified versions, <i>do-release-upgrade</i> will prompt you. You'll typically have options to:<br><b>- Install the package maintainer's version:</b> Overwrites your changes.<br><b>- Keep your currently installed version:</b> Retains your changes, but might cause issues if the new package expects a different configuration.<br><b>- Show the differences (diff):</b> Allows you to compare the two versions.<br><b>- Merge the files:</b> Allows for interactive merging (though this can be complex for many users).


title: HISTORY
content:
The <i>do-release-upgrade</i> command is an integral part of Ubuntu's update management system, maintained by Canonical. It was developed to streamline the often complex process of upgrading an entire operating system to a new major version. Prior to its widespread adoption, users often had to manually edit sources.list and handle dependency conflicts, which was prone to errors. <i>do-release-upgrade</i>, along with its graphical counterpart <i>update-manager</i>, provides a more robust, guided, and interactive experience, automating many of the intricate steps involved in a distribution upgrade and significantly improving the reliability of the process since its introduction in earlier Ubuntu releases.


title: SYNOPSIS
content:
<i>doas</i> [<b>-aLsV</b>] [<b>-C</b> <I>config</I>] [<b>-u</b> <I>user</I>] <I>command</I> [<I>argument</I> ...]


title: PARAMETERS
content:
<b><b>-a</b> <I>argument</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify argument for the authentication function. Rarely used directly by users or for standard operations.<br><br><b><b>-C</b> <I>config</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check the syntax of the specified <I>config</I> file and exit. Useful for verifying configuration before applying it to <i>/etc/doas.conf</i>.<br><br><b><b>-L</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List the commands the current user is allowed to execute according to <i>/etc/doas.conf</i>. This is similar to <i>sudo -l</i>.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Execute a shell as the target user. If no user is specified with <b>-u</b>, it defaults to the root user's shell.<br><br><b><b>-u</b> <I>user</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Execute the command as the specified <I>user</I>. If this option is omitted, the command is executed as the root user by default.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the <i>doas</i> version information and exit.<br><br><b><I>command</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The command to be executed with elevated privileges.<br><br><b>[<I>argument</I> ...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional arguments passed directly to the <I>command</I> being executed.<br><br>


title: DESCRIPTION
content:
<i>doas</i> (<b>d</b>edicated <b>o</b>penbsd <b>a</b>pplication <b>s</b>ecurity) is a minimalist utility that allows a system administrator to delegate authority to specific users to execute commands as another user, typically the superuser (root). It was developed as a direct, simpler, and more security-focused alternative to <i>sudo</i>. The core philosophy behind <i>doas</i> is to provide essential privilege escalation capabilities with a significantly smaller codebase and fewer features, thereby reducing the potential attack surface.<br><br>Its configuration file, <i>/etc/doas.conf</i>, is designed for simplicity and clarity, using straightforward "permit" or "deny" rules to define who can run what, as whom, and under what conditions (e.g., with or without a password). When a user invokes <i>doas</i>, it checks the request against these rules, granting or denying access based on the first matching rule. This explicit configuration and "fail-safe" approach contribute to its robust security posture. <i>doas</i> has gained popularity beyond OpenBSD due to its simplicity and perceived security advantages.


title: CAVEATS
content:
<i>doas</i> is intentionally minimal, which means it lacks some advanced features found in <i>sudo</i>, such as extensive logging capabilities, complex plugin architectures, or highly granular password timeout settings. Its configuration file, <i>/etc/doas.conf</i>, must be correctly configured; syntax errors or misconfigurations can lead to a complete denial of privilege escalation or unintended access. Because it adheres to a "first match" rule processing, the order of rules in the configuration file is crucial. Users migrating from <i>sudo</i> should be aware of these differences and carefully review <i>doas</i>'s configuration requirements.


title: CONFIGURATION FILE (<I>/ETC/DOAS.CONF</I>)
content:
The behavior of <i>doas</i> is entirely controlled by its configuration file, <i>/etc/doas.conf</i>. This file contains 'permit' or 'deny' rules. For instance, '<b>permit persist :wheel</b>' allows users in the 'wheel' group to run commands as root after authenticating once per session. '<b>permit nopass :admin cmd /usr/bin/syspatch</b>' allows users in the 'admin' group to run the <i>syspatch</i> command without a password. Each rule specifies the user, target user, command, and optional arguments. The first matching rule in the file that applies to the user and command request is used.


title: SECURITY-FIRST DESIGN
content:
<i>doas</i>'s primary design goal is security through simplicity. By having a significantly smaller codebase than alternatives like <i>sudo</i>, it inherently reduces the likelihood of complex bugs and vulnerabilities. The explicit nature of its configuration forces administrators to clearly define privilege delegation, enhancing auditability and reducing the chances of accidental privilege escalation due to implicit or overly broad rules. Its design prioritizes clarity and minimal attack surface.


title: HISTORY
content:
<i>doas</i> was developed by Ted Unangst as part of the OpenBSD project. It was first introduced in OpenBSD 5.8, released in October 2015, with the explicit goal of providing a simpler, more secure, and auditable alternative to <i>sudo</i> within the OpenBSD operating system. The design philosophy emphasized minimalism to reduce the attack surface and simplify code review. Its success and adherence to Unix principles led to its porting and adoption by other Unix-like systems, including various Linux distributions, where it serves as a lightweight privilege escalation utility.


title: PARAMETERS
content:
<b>-i, --interactive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to an interactive shell (e.g., <i>bash</i>, <i>sh</i>) inside the specified container.<br><br><b>-f, --filesystem-view</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides an interactive view or browser for the container's filesystem, allowing easy navigation and inspection of files and directories.<br><br><b>-c, --command <i>&lt;CMD&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a single command <i>&lt;CMD&gt;</i> inside the container and then exits.<br><br><b>-p, --processes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists processes currently running within the target container.<br><br><b>-e, --env</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays environment variables set inside the specified container.<br><br><b>-l, --layers</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When targeting an image, shows detailed information about its underlying layers and their contents.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of the <i>dockdiver</i> utility.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a help message with available options and usage examples.<br><br>


title: DESCRIPTION
content:
<i>dockdiver</i> is a powerful, hypothetical utility designed to provide a deep, interactive exploration of running Docker containers or container images. It allows users to "dive" into the container's environment, inspect its filesystem, view running processes, and even execute temporary commands within its isolated context, often streamlining tasks that would otherwise require repetitive use of standard <b>docker exec</b> commands. This tool is particularly useful for debugging, security analysis, and understanding container behavior by offering a unified and efficient way to navigate and analyze container internals directly from the host system. Its design prioritizes ease of use and quick insights, making it an essential, imagined utility for developers and system administrators working extensively with containerized applications.


title: CAVEATS
content:
As a hypothetical command, its actual caveats would depend on implementation. However, if it existed, <i>dockdiver</i> would likely require the Docker daemon to be running and accessible. It would also demand appropriate permissions to interact with the Docker socket, potentially requiring root or <i>docker</i> group membership. Furthermore, it might experience limitations with containers that do not have a standard shell (like <i>bash</i> or <i>sh</i>) installed when attempting interactive mode. Finally, it could pose potential security risks if used carelessly or by unauthorized users, as it grants deep access to container internals.


title: INTERACTIVE SHELL
content:
When invoked with the <i>-i</i> or <i>--interactive</i> option, <i>dockdiver</i> attempts to open a shell session (e.g., <i>bash</i>, <i>sh</i>) inside the specified container. This provides a familiar command-line environment for detailed investigation without directly attaching to the container's primary process, allowing for flexible debugging.


title: FILESYSTEM NAVIGATION
content:
The <i>-f</i> or <i>--filesystem-view</i> option provides a specialized interface to browse the container's filesystem. This makes it easy to inspect files, directories, and their permissions directly from the host system, which is particularly useful for debugging application paths, missing files, or incorrect configurations within the container's isolated environment.


title: HISTORY
content:
<i>dockdiver</i> is a hypothetical command, therefore its history is entirely conceptual. It is envisioned as emerging from the need for more efficient and intuitive debugging tools within the Docker ecosystem. While <b>docker exec</b> provides basic command execution, developers often found themselves repeatedly typing commands to explore container states. <i>dockdiver</i> was thus conceptualized to provide a unified, streamlined interface for interactive exploration, filesystem browsing, and process analysis within containers, reducing the friction of traditional <b>exec</b> workflows. Its imagined development would have focused on user experience and providing quick, deep insights into complex container environments.


title: SYNOPSIS
content:
<b>docker</b> [<i>OPTIONS</i>] <i>COMMAND</i> [<i>ARG...</i>]<br><br>This synopsis shows the general syntax for invoking Docker commands. <i>OPTIONS</i> are global flags that apply to the <b>docker</b> client itself. <i>COMMAND</i> specifies the specific action to be performed (e.g., <b>run</b>, <b>build</b>, <b>pull</b>, <b>ps</b>). <i>ARG...</i> represents arguments specific to the chosen <i>COMMAND</i>.


title: PARAMETERS
content:
<b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the <b>docker</b> command or a specific subcommand.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the Docker version information (client and daemon).<br><br><b><b>--config</b> <i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the location of the client configuration files. Defaults to <i>~/.docker</i>.<br><br><b><b>-H</b>, <b>--host</b> <i>SOCKET</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to a Docker daemon listening on a specified socket. Can be a TCP, Unix, or FD socket.<br><br><b><b>--log-level</b> <i>LEVEL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging level for the Docker client. Valid levels include <i>debug</i>, <i>info</i>, <i>warn</i>, <i>error</i>, <i>fatal</i>.<br><br>


title: DESCRIPTION
content:
The <b>docker</b> command is the primary command-line interface (CLI) tool used to interact with the Docker daemon. Docker itself is an open-source platform that automates the deployment, scaling, and management of applications using <i>containerization</i>. <br><br>It allows users to perform various operations, including building, pulling, running, inspecting, and managing Docker images and containers. Docker containers package an application with all its dependencies (libraries, configuration files, etc.) into a standardized unit, ensuring that the application runs consistently across different computing environments – from a developer's laptop to a testing server, and finally to production systems.<br><br>Key benefits of using Docker and the <b>docker</b> command include enhanced application portability, strong isolation between applications, efficient resource utilization, and significantly faster application deployment and scaling.


title: CAVEATS
content:
Using the <b>docker</b> command typically requires root privileges or membership in the <i>docker</i> Unix group. While convenient, being in the <i>docker</i> group grants privileges equivalent to root access on the host system, which can pose a security risk if not managed carefully. Additionally, misconfigured containers or exposing the Docker daemon socket can lead to significant security vulnerabilities. Users must be mindful of resource consumption as containers, though lightweight, share the host's kernel and resources.


title: COMMON COMMAND STRUCTURE
content:
The <b>docker</b> command operates using subcommands, each performing a specific set of actions. For example, <b>docker run</b> starts a new container, <b>docker build</b> creates an image from a Dockerfile, <b>docker pull</b> downloads an image from a registry, and <b>docker ps</b> lists running containers. This modular approach makes the command highly versatile.


title: DOCKER DAEMON VS. CLIENT
content:
It's important to distinguish between the <b>docker</b> CLI client and the Docker daemon (<i>dockerd</i>). The CLI client is what you interact with in your terminal. It sends commands to the Docker daemon, which is a persistent background process responsible for managing containers, images, volumes, and networks. The daemon runs on the host machine and performs the actual work.


title: HISTORY
content:
Docker was initially developed by Solomon Hykes as an internal project at dotCloud, a Platform-as-a-Service (PaaS) company. It was open-sourced in March 2013 and rapidly gained popularity, fundamentally changing how applications are developed, deployed, and scaled. Initially leveraging Linux containers (LXC), Docker later developed its own runtime, <i>libcontainer</i> (now <i>runc</i>), which became the industry standard. Its widespread adoption led to the formation of the Open Container Initiative (OCI) to standardize container image formats and runtimes, ensuring interoperability across different container platforms.


title: PARAMETERS
content:
<b><b>-f</b>, <b>--file</b> <i><path></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the <i>Dockerfile</i> to use. Defaults to 'Dockerfile' in the build context.<br><br><b><b>-t</b>, <b>--tag</b> <i><name:tag></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Names and optionally tags the image in the 'name:tag' format. Multiple tags can be specified.<br><br><b><b>--build-arg</b> <i><key=value></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets build-time variables that can be used by <i>Dockerfile</i> instructions (e.g., ENV, ARG).<br><br><b><b>--no-cache</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs Docker not to use cache when building the image, forcing a fresh build for all layers.<br><br><b><b>--progress</b> <i><auto|plain|tty></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the type of progress output (e.g., 'plain' for simple text, 'tty' for interactive progress bars).<br><br><b><b>--platform</b> <i><os/arch[/variant]></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the platform of the image if the server is multi-platform capable (e.g., 'linux/amd64').<br><br><b><b>--target</b> <i><stage-name></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds only up to the specified stage defined in a multi-stage <i>Dockerfile</i>.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the build output and prints only the image ID on successful completion.<br><br><b><b>--pull</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Always attempts to pull a newer version of the image specified in the <i>FROM</i> instruction.<br><br><b><b>--rm</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes intermediate containers after a successful build. Defaults to true.<br><br>


title: DESCRIPTION
content:
The <b>docker build</b> command is a core utility for creating Docker images. It processes a <i>Dockerfile</i>, which is a plain text file containing a series of instructions that Docker executes to construct an image. These instructions can specify the base image, run commands to install software, copy files from the build context, expose network ports, and define the default command to execute when a container is launched from the image.<br><br>During the build process, Docker sends the 'build context' (the set of files and directories located at the specified PATH or URL) to the Docker daemon. Each instruction in the <i>Dockerfile</i> typically creates a new read-only layer in the image. This layered architecture enables efficient caching, allowing subsequent builds to reuse unchanged layers, significantly reducing build times.<br><br><b>docker build</b> is indispensable for developers to package their applications and their dependencies into self-contained, reproducible, and portable Docker images, ready for deployment as containers or distribution via container registries.


title: CAVEATS
content:
Optimizing your build context and effectively using a <i>.dockerignore</i> file are crucial for faster builds, especially for remote builds, as only necessary files are sent to the daemon. Understand Docker's build cache: any change to a <i>Dockerfile</i> instruction or a file copied into a layer invalidates all subsequent layers, forcing a rebuild from that point onward. Arrange your <i>Dockerfile</i> instructions to leverage caching, placing less frequently changing instructions earlier. For production, consider using multi-stage builds to create lean, secure images by discarding build-time tools and dependencies.


title: BUILD CONTEXT
content:
The build context refers to the set of files and directories at the specified PATH or URL that <b>docker build</b> sends to the Docker daemon. The <i>COPY</i> and <i>ADD</i> instructions in your <i>Dockerfile</i> can only access files that are part of this context. To prevent sending unnecessary files and speed up the build, it's highly recommended to use a <i>.dockerignore</i> file. This file functions similarly to <i>.gitignore</i>, specifying patterns of files and directories to exclude from the build context.


title: DOCKERFILE
content:
The <i>Dockerfile</i> is a script that contains all the commands a user could call on the command line to assemble an image. Each instruction in the <i>Dockerfile</i> (e.g., <i>FROM</i>, <i>RUN</i>, <i>COPY</i>, <i>EXPOSE</i>, <i>CMD</i>, <i>ENTRYPOINT</i>) creates a read-only layer in the image. This file is the primary input for the <b>docker build</b> command and dictates the entire image creation process, from the base operating system to application dependencies and runtime configurations.


title: IMAGE LAYERS AND CACHING
content:
Docker images are constructed as a stack of read-only layers, with each layer corresponding to a single instruction in the <i>Dockerfile</i>. When <b>docker build</b> processes a <i>Dockerfile</i>, it attempts to reuse existing layers from its cache. If an instruction and its corresponding inputs (e.g., the contents of files being copied) have not changed, Docker skips executing that instruction and uses the cached layer. This caching mechanism dramatically speeds up iterative builds. The cache is invalidated from the first changed instruction onwards, requiring subsequent layers to be rebuilt.


title: HISTORY
content:
The <b>docker build</b> command has been a cornerstone of the Docker platform since its inception in 2013. It provided the fundamental mechanism for converting human-readable instructions in a <i>Dockerfile</i> into reproducible container images. Early development focused on robust basic functionality and efficient layering. A significant advancement came with the introduction of multi-stage builds in Docker 17.05, which revolutionized image optimization by enabling developers to create smaller, more secure final images by separating build-time dependencies from runtime requirements. Its stable and continuously improved feature set has cemented its role as one of the most frequently used Docker commands.


