# CommandSection

title: SYNOPSIS
content:
<i>gawk</i> [<i>options</i>] [<i>-f program_file</i> | <i>'program_text'</i>] [<i>file ...</i>]<br><br>The program can be supplied either as a string on the command line (<i>'program_text'</i>) or by reading from a file (<i>-f program_file</i>). If no files are specified, <i>gawk</i> reads from standard input.


title: PARAMETERS
content:
<b><i>-F <i>fs</i></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets <i>fs</i> as the input field separator. The default is whitespace.<br><br><b><i>-v <i>var=value</i></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a value to a variable before the AWK program begins execution.<br><br><b><i>-f <i>program-file</i></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads the AWK program source from the specified <i>program-file</i>.<br><br><b><i>-e <i>program-text</i></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an AWK program directly on the command line. Useful for multiple program fragments.<br><br><b><i>--posix</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables strict POSIX compatibility for <i>gawk</i>, affecting behavior like field parsing and string conversions.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints <i>gawk</i>'s version and copyright information to standard output.<br><br><b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints a concise usage summary for <i>gawk</i> to standard output.<br><br>


title: DESCRIPTION
content:
The command <i>igawk</i> is <b>not a standard Linux command</b>. It is almost certainly a common typographical error for <i>gawk</i>, which is the GNU implementation of the <i>awk</i> programming language.<br><br><i>gawk</i> is a powerful text processing tool designed for pattern scanning and processing. It reads input line by line, attempts to match each line against a series of patterns, and performs specified actions for lines that match. It functions as a full-fledged programming language, supporting variables, arithmetic operators, string functions, control flow statements (if/else, loops), and user-defined functions.<br><br>Common uses for <i>gawk</i> include data extraction and reformatting, generating reports, processing log files, and performing complex text manipulations. Its ability to process data based on fields and records makes it exceptionally versatile for structured and semi-structured text data.


title: CAVEATS
content:
The command <i>igawk</i> itself does not exist as a standard utility in Linux distributions. If encountered, it is almost certainly a typo for <i>gawk</i>, which is the GNU implementation of <i>awk</i>. Users should ensure they are invoking <i>gawk</i> or <i>awk</i> directly. The <i>awk</i> language, while powerful, has a learning curve due to its unique syntax and processing model.


title: BASIC USAGE EXAMPLE
content:
To print the first and third fields of a comma-separated file:<br><i>gawk</i> -F',' '{print $1, $3}' <i>mydata.csv</i><br><br>To count lines matching a pattern:<br><i>gawk</i> '/<i>pattern</i>/{count++} END{print count}' <i>logfile.txt</i>


title: PROGRAMMING LANGUAGE FEATURES
content:
<i>gawk</i> supports variables, arrays (associative), built-in string and arithmetic functions, and control flow statements (<i>if</i>, <i>else</i>, <i>while</i>, <i>for</i>, <i>break</i>, <i>continue</i>). It also allows defining custom functions and including external libraries.


title: HISTORY
content:
The original <i>awk</i> language was developed at Bell Labs in the 1970s by Alfred Aho, Peter Weinberger, and Brian Kernighan (the 'AWK' acronym comes from their initials). It was designed for text processing and data manipulation. <i>gawk</i>, the GNU project's implementation of <i>awk</i>, was created to provide a free and open-source version that extends and enhances the original <i>awk</i> functionality, adhering to the POSIX standard while adding many powerful features.


title: SYNOPSIS
content:
<b>ignite</b> [<i>global-options</i>] &lt;<i>command</i>&gt; [<i>command-options</i>] [<i>arguments</i>]<br><br>Common commands include: <br><b>ignite run</b> (create and start a VM)<br><b>ignite list</b> (list running VMs)<br><b>ignite stop</b> (stop a VM)<br><b>ignite rm</b> (remove a VM)<br><b>ignite ssh</b> (SSH into a VM)


title: PARAMETERS
content:
<b>--cpus</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of virtual CPUs to assign to the VM.<br><br><b>--memory</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Amount of RAM to assign to the VM (e.g., "2GB", "512MiB").<br><br><b>--name</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unique identifier or name for the VM instance.<br><br><b>--ssh</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to an SSH public key to inject into the VM for root access.<br><br><b>--oci</b><br>&nbsp;&nbsp;&nbsp;&nbsp;OCI image to use as the VM's root filesystem.<br><br><b>--kernel-image</b><br>&nbsp;&nbsp;&nbsp;&nbsp;OCI image containing the VM's kernel.<br><br><b>--network-plugin</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the CNI network plugin to use for VM networking (e.g., "cni", "docker-bridge").<br><br><b>--log-level</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the logging verbosity (e.g., "debug", "info", "warn").<br><br>


title: DESCRIPTION
content:
<i>ignite</i> is a command-line tool developed by <I>Weaveworks</I> designed to simplify the management and operation of micro Virtual Machines (VMs) powered by <I>Firecracker</I>.<br><br>It enables users to treat OCI (Open Container Initiative) images, typically used for containers, as full-fledged VMs. This approach allows for rapid provisioning, booting, and scaling of VMs with a user experience akin to managing containers. <br><br><i>ignite</i> leverages Firecracker's minimal overhead and fast boot times to provide isolated environments. It handles the underlying complexities of setting up Firecracker, networking, and disk management, abstracting them away to provide a streamlined interface. Its primary goal is to bridge the gap between container portability and VM isolation and security.


title: CAVEATS
content:
Requires a Linux kernel with KVM support enabled.<br>Relies on <I>Firecracker</I>, which itself has specific hardware and software requirements.<br>Often requires root or privileged access to manage VMs and their associated networking components.<br>Not a general-purpose virtualization solution like QEMU/KVM; specialized for lightweight microVMs.<br>Primarily designed for server workloads, not graphical desktop environments.


title: OCI IMAGES AS VMS
content:
<i>ignite</i> redefines how OCI images are utilized. Instead of merely running processes within isolated containers, it boots a full Linux kernel and root filesystem directly from an OCI image into a <I>Firecracker</I> microVM. This provides a distinct and strongly isolated runtime environment, blurring the lines between container and VM.


title: MICROVMS EXPLAINED
content:
MicroVMs are extremely lightweight virtual machines, optimized for rapid boot times and minimal resource consumption. They achieve this by emulating only essential hardware components, unlike traditional VMs. <I>ignite</I> leverages this technology, making it ideal for use cases like serverless functions, edge computing, and highly isolated multi-tenant environments.


title: HISTORY
content:
<i>ignite</i> was developed by <I>Weaveworks</I>, with its initial public release in 2019. It emerged from the need to combine the fast boot times and low overhead characteristic of containers with the strong isolation and security provided by traditional VMs. This was achieved by leveraging Amazon's open-source <I>Firecracker</I> Virtual Machine Monitor. The project's development aimed to simplify the process of running OCI images directly as virtual machines, thereby providing a more 'container-like' workflow for virtual machine management.


title: SYNOPSIS
content:
<b>ikaros</b> [<i>OPTIONS</i>] [<i>ARGUMENTS</i>]<br><br>This is a hypothetical representation. A real <i>ikaros</i> command would have specific options and arguments relevant to its intended function.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a short help message and exits.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the command's version information and exits.<br><br><b><b>-f</b> <i>&lt;file&gt;</i>, <b>--file</b>=<i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an input file for the command to process.<br><br><b><b>-o</b> <i>&lt;output&gt;</i>, <b>--output</b>=<i>&lt;output&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs the command's output to a specified file or location.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information during execution.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulates the command's actions without making any actual changes.<br><br>


title: DESCRIPTION
content:
The term <i>ikaros</i> does not correspond to a standard, universally recognized Linux command found in typical distributions. It is highly probable that <i>ikaros</i> refers to a custom-made script, a project-specific executable, a specific application framework, or a typographical error. Without further context, its exact functionality cannot be determined.<br><br>However, if <i>ikaros</i> were to exist as a command-line utility, it would follow common Linux command conventions, typically designed to perform a specific task or manage a particular system component. This analysis provides a hypothetical structure of what such a command <i>might</i> look like, based on common CLI patterns.


title: CAVEATS
content:
It is crucial to understand that <i>ikaros</i> is <b>not</b> a built-in or standard Linux command. Any <b>ikaros</b> command you encounter in a Linux environment is likely a custom script, an executable from a specific software project (e.g., a neural network framework, a game engine, or a specialized tool), or a user-defined alias. Its behavior, options, and availability will vary widely depending on its specific implementation and the environment it runs in. Always verify the source and purpose of any unknown command before execution.


title: CUSTOM COMMANDS AND ALIASES
content:
Users and developers often create custom commands or shell aliases for specific tasks. If you encounter <b>ikaros</b>, it could be an alias (defined in your shell's configuration like <i>.bashrc</i> or <i>.zshrc</i>) or a script placed in your system's PATH. You can often check for aliases using <b>alias ikaros</b> or search for scripts in your PATH using <b>type ikaros</b> or <b>which ikaros</b>.


title: PROJECT-SPECIFIC EXECUTABLES
content:
Some software projects, especially in development or research fields, might include an executable named <b>ikaros</b> as part of their build or distribution. This executable would be specific to that project and its functionality would be defined by the project's scope. For example, a project named 'Ikaros' might have a compiled binary 'ikaros' to run simulations or specific tasks.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help message for alr or a subcommand.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print alr version information.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output for more detailed execution information.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress most output messages, showing only essential information.<br><br><b>-p &lt;path&gt;, --project-dir &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the project root directory where the alr configuration is located.<br><br>


title: DESCRIPTION
content:
<i>alr</i> is the command-line interface for <i>Alire</i>, the <b>Ada Language Repository</b>. It serves as a comprehensive tool for managing Ada projects, similar to how <i>cargo</i> works for Rust or <i>npm</i> for JavaScript. Its primary functions include initializing new Ada projects, resolving and managing project dependencies, building executables and libraries, and running project-specific tasks such as tests or examples.<br><br><i>alr</i> simplifies the development workflow by abstracting away complex build system configurations (like Makefiles) and ensuring reproducible builds across different environments. It integrates with the <i>GNAT</i> compiler collection and facilitates easy access to a wide range of Ada libraries and components available on Alire. Developers use <i>alr</i> to streamline project setup, manage versioning of dependencies, compile code, and execute their Ada applications. It aims to boost productivity by providing a consistent and intuitive interface for Ada development.


title: CAVEATS
content:
<i>alr</i> is a build tool specific to the <b>Ada programming language</b> ecosystem and is not a general-purpose Linux command. Its functionality is entirely dependent on the presence of the <i>GNAT</i> (GNU Ada) compiler and the <i>Alire</i> repository for package management. Users without an interest in Ada development will find this command irrelevant. Proper setup of the Ada toolchain and environment variables is crucial for its correct operation.


title: SUBCOMMAND-DRIVEN INTERFACE
content:
<i>alr</i> primarily operates through a series of subcommands, each performing a specific task. To get help on a specific subcommand, use <i>alr &lt;subcommand&gt; --help</i>. <br><br><b>Key Subcommands Overview:</b><br><b>init</b>: Initializes a new Ada project in the current directory.<br><b>add</b>: Adds a dependency to the current project.<br><b>build</b>: Compiles the project and its dependencies.<br><b>run</b>: Builds and executes the main program of the project.<br><b>search</b>: Searches for available packages in the Alire repository.<br><b>install</b>: Installs a specific package from Alire into the local cache.


title: HISTORY
content:
<i>alr</i> is part of the <i>Alire</i> project, which was initiated to provide a modern, centralized package manager for Ada, addressing a long-standing need in the Ada community. Before Alire, Ada projects often relied on custom build scripts or direct invocation of <i>gprbuild</i>. <i>Alire</i> and <i>alr</i> were developed to simplify dependency management and project scaffolding, drawing inspiration from successful tools in other language ecosystems like Rust's <i>cargo</i>. Its development has been driven by the AdaCore company and the broader Ada community, with continuous updates focusing on improving user experience, adding more package management features, and integrating with newer Ada language features. It has rapidly become the de-facto standard for managing contemporary Ada projects.


title: TLDR
content:
<b>Create a binary or library project</b>`alr init [--bin|--lib] [project_name]`<br><b>Add a dependency to the project</b>`alr add [crate]`<br><b>Run the compiled binary (no need to do build before)</b>`alr run`<br><b>Compile the project</b>`alr build [--release|--development|--validation]`


title: TLDR
content:
<b>Create a 20GB Block Storage Volume</b>`exo compute block-storage create [volume_name] --size 20 [[-z|--zone]] [zone]`<br><b>List Block Storage Volumes</b>`exo compute block-storage list`<br><b>Attach a Block Storage Volume to a Compute instance</b>`exo compute block-storage attach [volume_name|id] [instance_name|id] [[-z|--zone]] [zone]`<br><b>Forcefully detach a Block Storage Volume (does not require confirmation)</b>`exo compute block-storage detach [volume_name|id] [[-z|--zone]] [zone] [[-f|--force]]`<br><b>Create a snapshot of a Block Storage Volume</b>`exo compute block-storage snapshot create [volume_name|id] --name [snapshot_name] [[-z|--zone]] [zone]`<br><b>Create a Block Storage Volume from a snapshot</b>`exo compute block-storage create [volume_name] --snapshot [snapshot_name|id] [[-z|--zone]] [zone]`<br><b>Update an existing Block Storage Volume with a new name and a new volume size of 30GB</b>`exo compute block-storage update [volume_name|id] --size 30 --name [new_name]`


title: SYNOPSIS
content:
<b>exo-compute sks</b> <I>command</I> [<b>options</b>] [<b>arguments</b>]<br><br>Common <I>commands</I> include:<br><b>list</b>: List SKS clusters.<br><b>show</b> <I>&lt;cluster-id|name&gt;</I>: Show details of an SKS cluster.<br><b>create</b> <I>&lt;name&gt;</I>: Create a new SKS cluster.<br><b>delete</b> <I>&lt;cluster-id|name&gt;</I>: Delete an SKS cluster.<br><b>update</b> <I>&lt;cluster-id|name&gt;</I>: Update an SKS cluster.<br><b>kubeconfig</b> <I>&lt;cluster-id|name&gt;</I>: Generate Kubeconfig for an SKS cluster.<br><b>nodepool add</b> <I>&lt;cluster-id|name&gt;</I>: Add a node pool to an SKS cluster.<br><b>nodepool remove</b> <I>&lt;cluster-id|name&gt; &lt;nodepool-id|name&gt;</I>: Remove a node pool.<br><b>nodepool scale</b> <I>&lt;cluster-id|name&gt; &lt;nodepool-id|name&gt; &lt;node-count&gt;</I>: Scale a node pool.<br><b>nodepool show</b> <I>&lt;cluster-id|name&gt; &lt;nodepool-id|name&gt;</I>: Show details of a node pool.


title: PARAMETERS
content:
<b>--zone <I>&lt;zone&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Exoscale zone for the operation (e.g., 'ch-dk-2'). This is often required for zone-specific resources.<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the command's result in JSON format.<br><br><b>--output <I>&lt;format&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output format for the command. Supported formats include 'table', 'json', and 'yaml'.<br><br><b>--profile <I>&lt;name&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a specific named profile from the Exoscale CLI configuration file. Useful for managing multiple Exoscale accounts or configurations.<br><br><b>--config <I>&lt;path&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative path to the Exoscale CLI configuration file. By default, it looks for ~/.exoscale/exoscale.ini or similar.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help information for the command or subcommand.<br><br><b>--name <I>&lt;name&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the SKS cluster or node pool for operations like creation, showing details, or updates.<br><br><b>--id <I>&lt;id&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the unique ID of the SKS cluster or node pool. Can be used interchangeably with --name for some commands.<br><br><b>--version <I>&lt;version&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Kubernetes version for cluster creation or upgrade (e.g., '1.27.x').<br><br><b>--instance-type <I>&lt;type&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define the instance type for nodes in a node pool (e.g., 'standard.medium').<br><br><b>--node-count <I>&lt;count&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the desired number of nodes in a node pool. Used for creation and scaling.<br><br><b>--description <I>&lt;text&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provide a descriptive text for the SKS cluster or node pool.<br><br>


title: DESCRIPTION
content:
<I>exo-compute-sks</I> is a subcommand group within the <I>exoscale-cli</I> tool, designed to manage <I>Scalable Kubernetes Service (SKS)</I> clusters on the <I>Exoscale</I> cloud platform. It provides a comprehensive set of functionalities to interact with SKS clusters, allowing users to provision, configure, and operate their Kubernetes environments directly from the command line.<br><br>This includes operations such as creating new clusters, listing existing ones, showing detailed information about a specific cluster, updating cluster settings, and deleting clusters. Furthermore, it facilitates the management of node pools associated with SKS clusters, enabling actions like adding or removing node pools, scaling their size, and configuring specific properties such as instance types, disk sizes, and labels. As part of the <I>exo-compute</I> namespace, it works in conjunction with other `exo-compute` commands for managing various compute-related resources on Exoscale. Its primary purpose is to simplify Kubernetes cluster lifecycle management for Exoscale users, offering automation capabilities and integration into scripts.


title: CAVEATS
content:
The <I>exoscale-cli</I> must be installed and properly configured with Exoscale API keys and secrets to use <I>exo-compute-sks</I>.<br>Operations performed by <I>exo-compute-sks</I> (e.g., creating clusters, adding node pools) will incur costs on your Exoscale account.<br>Requires an active internet connection to communicate with the Exoscale API endpoints.<br>Some operations, like cluster deletion, are irreversible. Exercise caution when executing destructive commands.<br>The availability of specific Kubernetes versions, instance types, and features may vary by Exoscale zone.


title: PREREQUISITES
content:
Before using <I>exo-compute-sks</I>, ensure you have the <I>exoscale-cli</I> installed. Installation instructions are typically available on the Exoscale documentation website. After installation, configure the CLI by setting up your Exoscale API key and secret, usually via <b>exo configure</b> or by manually editing the configuration file.


title: USAGE EXAMPLES
content:
To list all SKS clusters:<br><b>exo compute sks list</b><br><br>To create a new SKS cluster named 'my-cluster' in 'ch-dk-2' with Kubernetes version '1.27.x' and a default node pool:<br><b>exo compute sks create my-cluster --zone ch-dk-2 --version 1.27.x --instance-type standard.medium --node-count 2</b><br><br>To generate the kubeconfig for 'my-cluster':<br><b>exo compute sks kubeconfig my-cluster > ~/.kube/config_my_cluster</b><br><br>To delete an SKS cluster:<br><b>exo compute sks delete my-cluster</b>


title: HISTORY
content:
The <I>exo-compute-sks</I> command group is an integral part of the official <I>exoscale-cli</I>, developed and maintained by Exoscale. Its development closely parallels the evolution and expansion of Exoscale's <I>Scalable Kubernetes Service (SKS)</I> offering, which was introduced to provide managed Kubernetes capabilities to its cloud users. As Exoscale continually updates and enhances its SKS platform with new features, Kubernetes versions, and instance types, the <I>exoscale-cli</I> and consequently <I>exo-compute-sks</I> are updated to support these changes. This command-line interface facilitates automation and scripting for cloud engineers and developers managing Kubernetes deployments on Exoscale.


title: SEE ALSO
content:
<I>exoscale-cli(1)</I>: The overarching command-line interface for Exoscale., <I>exo-compute(1)</I>: The parent command group for managing compute resources., <I>exo-compute-instance(1)</I>: Manages individual compute instances., <I>kubectl(1)</I>: The official Kubernetes command-line tool, used to interact with Kubernetes clusters after they are provisioned by <I>exo-compute-sks</I>., <I>helm(1)</I>: A package manager for Kubernetes, often used alongside <I>kubectl</I> for deploying applications.


title: TLDR
content:
<b>List the supported SKS cluster versions</b>`exo compute sks versions`<br><b>Create a new SKS cluster</b>`exo compute sks create [cluster_name] [[-z|--zone]] [zone]`<br><b>List all SKS clusters</b>`exo compute sks list`<br><b>Generate a Kubernetes kubeconfig file for an SKS cluster that expires in 1800 seconds</b>`exo compute sks kubeconfig [cluster_name|id] [user] --ttl 1800 [[-z|--zone]] [zone]`<br><b>Create and add a Nodepool containing 3 nodes to an SKS cluster</b>`exo compute sks nodepool add [cluster_name|id] [nodepool_name] --size 3 [[-z|--zone]] [zone]`<br><b>Remove a Nodepool from an SKS cluster</b>`exo compute sks nodepool delete [cluster_name|id] [nodepool_name|id]`<br><b>Evict a Node from a Nodepool in an SKS cluster</b>`exo compute sks nodepool evict [cluster_name|id] [nodepool_name|id] [node_name|id]`<br><b>Enable the Exoscale CSI driver for an existing SKS cluster</b>`exo compute sks update [cluster_name|id] --enable-csi-addon [[-z|--zone]] [zone]`


title: SYNOPSIS
content:
The 'exo-iam' functionality is accessed via the <code>exo</code> command-line tool. The general syntax for performing IAM operations is:<br><br><code><b>exo iam</b> <i>&lt;subcommand&gt;</i> [<i>options</i>] [<i>arguments</i>]</code><br><br>Where <i>&lt;subcommand&gt;</i> specifies the specific IAM resource to manage (e.g., <code>key</code>, <code>user</code>, <code>group</code>, <code>role</code>, <code>policy</code>) and <i>options</i> and <i>arguments</i> are specific to that subcommand's action (e.g., <code>create</code>, <code>list</code>, <code>delete</code>).


title: PARAMETERS
content:
<b><i>subcommands</i> (e.g., <code>key</code>, <code>user</code>, <code>group</code>, <code>role</code>, <code>policy</code>)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;These act as the primary 'parameters' for the <code>iam</code> group, specifying the type of IAM resource to interact with. Each subcommand then has its own set of actions and specific options.<br><br><b><code>-h</code>, <code>--help</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the <code>iam</code> command or a specific IAM subcommand, showing available actions and their respective options.<br><br><b><code>--output</code> <i>&lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format for the command's result (e.g., <code>json</code>, <code>text</code>, <code>table</code>). This is a common option across most <code>exo</code> CLI commands.<br><br><b><code>--profile</code> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an Exoscale CLI profile to use for authentication and configuration, overriding the default or environment variables.<br><br><b><code>--region</code> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Exoscale region to which the command should apply. This is generally less critical for global IAM resources but can be relevant for other <code>exo</code> commands.<br><br>


title: DESCRIPTION
content:
The 'exo-iam' functionality refers to the set of commands within the <i>Exoscale CLI</i> (<code>exo</code>) that are dedicated to managing Identity and Access Management (IAM) resources. It is not a standalone Linux command but rather a conceptual grouping under the <code>exo iam</code> subcommand.<br><br>Through this interface, users can programmatically control access to their Exoscale cloud resources. This includes managing IAM users, creating and revoking API keys, defining roles and groups, and attaching fine-grained policies to control permissions. It's an essential tool for automating IAM tasks, integrating with CI/CD pipelines, and ensuring robust security practices within an Exoscale environment.


title: CAVEATS
content:
The 'exo-iam' command is not a standard Linux utility; it is part of the <i>Exoscale Cloud CLI</i> (<code>exo</code>). To use it, you must first install the <code>exo</code> CLI tool and configure it with your Exoscale API keys. Operations performed with <code>exo iam</code> commands directly affect your Exoscale cloud infrastructure and its security, so exercise caution, especially with commands that create, modify, or delete IAM resources.


title: COMMON USAGE PATTERNS
content:
Typical usage involves chaining <code>iam</code> with subcommands and actions:<br><i>Listing IAM users:</i> <code>exo iam user list</code><br><i>Creating an IAM key:</i> <code>exo iam key create --name 'my-new-key'</code><br><i>Attaching a policy:</i> <code>exo iam policy attach --user 'my-user' --policy 'read-only'</code>


title: IAM CONCEPTS
content:
<code>exo-iam</code> commands operate on core IAM concepts such as: <br><b>Users:</b> Human or service identities.<br><b>API Keys:</b> Credentials for programmatic access.<br><b>Groups:</b> Collections of users to simplify permission management.<br><b>Roles:</b> Defines a set of permissions that can be assumed by a user or service.<br><b>Policies:</b> Documents that define permissions (what actions are allowed or denied on which resources).


title: HISTORY
content:
The <code>exo</code> CLI, including its IAM functionalities, has been developed and maintained by Exoscale as the primary command-line interface for interacting with their cloud services. It has evolved alongside the Exoscale platform, continually adding support for new services and features, including advanced IAM capabilities to meet the growing demands for secure and granular access control.


title: TLDR
content:
<b>List all of the IAM roles</b>`exo iam role list`<br><b>Create a new API key</b>`exo iam api-key create [api_key_name] [iam_role_name]`<br><b>Create a new IAM role</b>`cat [path/to/policy.json] | exo iam role create [iam_role_name] --editable --policy -`<br><b>Show the policy of an existing IAM role</b>`exo iam role show [iam_role_name] --policy [[-O|--output-format]] [json] | jq .`<br><b>Update the default Organization policy (the default Organization policy will be applied to all of the API keys within the Organization)</b>`cat [path/to/policy.json] | exo iam org-policy update -`


title: SYNOPSIS
content:
<b>wcurl</b> [<i>CURL_OPTIONS</i>] <i>URL</i><br><br><i>Note:</i> `wcurl` is commonly an alias for `curl -w "..."` or a script that wraps `curl`.


title: PARAMETERS
content:
<b>%{url_effective}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The URL that was effectively used for the request, especially after redirects.<br><br><b>%{http_code}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The numerical HTTP status code that was returned for the request.<br><br><b>%{time_total}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The total time, in seconds, that the full operation lasted, including all stages.<br><br><b>%{time_namelookup}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Time in seconds from start till name lookup was completed.<br><br><b>%{time_connect}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Time in seconds from start till TCP connection to the remote host (or proxy) was completed.<br><br><b>%{time_starttransfer}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Time in seconds from start till the first byte of the response was received.<br><br><b>%{speed_download}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The average download speed in bytes per second for the transfer.<br><br><b>%{size_download}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The total number of bytes downloaded from the remote host.<br><br><b>%{num_connects}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of new successful connections made during the transfer.<br><br><b>%{errormsg}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The error message if an error occurred during the transfer.<br><br><b>%{content_type}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The Content-Type of the downloaded document as reported by the server.<br><br><b>%{remote_ip}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The remote IP address of the connected host.<br><br><b>%{redirect_url}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The URL a redirect points to, if a redirect occurred.<br><br><b>%{local_ip}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The local IP address of the interface used for the connection.<br><br><b>%{local_port}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The local port number used for the connection.<br><br><b>%{json}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;All available variables formatted as a JSON string (requires `curl` 7.80.0 or later).<br><br>


title: DESCRIPTION
content:
<b>wcurl</b> is <I>not a standard Linux command</I> but typically an alias or shell script wrapping the powerful `curl` command. Its primary purpose is to simplify and standardize the use of `curl`'s `--write-out` (or `-w`) option, which allows users to define custom output formats for request information. Instead of repeatedly typing long `curl -w` format strings, <b>wcurl</b> might pre-define this or make it easier to access, for example, by defaulting to a useful set of metrics or allowing simple arguments to select predefined formats. This command is invaluable for scripting, automation, and debugging HTTP requests, providing precise control over the displayed metrics like response times, HTTP status, and redirect URLs. It leverages `curl`'s extensive capabilities to fetch data, but enhances the presentation of metadata about the request and response itself.


title: CAVEATS
content:
<b>wcurl</b> is <I>not a standard, standalone command</I> distributed with typical Linux distributions. It is nearly always a user-defined <I>shell alias</I> or a <I>custom script</I> that wraps the `curl` command. Its exact behavior, available options, and default output format depend entirely on how it's defined on a specific system. Consequently, its presence, functionality, and output are not guaranteed across different environments or user setups. Users should check their shell configuration (`~/.bashrc`, `~/.zshrc`, etc.) or script locations to understand its precise implementation.


title: HOW IT WORKS
content:
<b>wcurl</b> typically functions by pre-setting `curl`'s `--write-out` (`-w`) option. For example, a simple alias might be `alias wcurl='curl -w "%{{http_code}} %{{time_total}}s %{{url_effective}}\n"'`. When you run `wcurl example.com`, the shell expands this to `curl -w "%{{http_code}} %{{time_total}}s %{{url_effective}}\n" example.com`. More sophisticated <b>wcurl</b> scripts might parse additional arguments to dynamically construct the `--write-out` string or provide other conveniences, potentially adding their own specific options not native to `curl` itself.


title: COMMON USE CASES
content:
<b>wcurl</b> is particularly useful for:<br>- <I>Performance Monitoring:</I> Quickly check total request time, DNS lookup time, and connection details for web services.<br>- <I>API Testing:</I> Easily extract HTTP status codes, effective URLs, or specific headers from responses for automated tests or debugging.<br>- <I>Scripting:</I> Integrate `curl` output directly into shell scripts in a predictable, parseable format, facilitating data extraction and conditional logic.<br>- <I>Debugging:</I> Gain immediate insight into redirect chains, connection details, and error messages without sifting through verbose output.


title: HISTORY
content:
<b>wcurl</b> does not have a formal development history like standard Linux commands. Instead, its origin lies in the widespread user practice of creating convenience wrappers around powerful but verbose commands like `curl`. The `--write-out` (`-w`) option of `curl` was introduced early in its development (around `curl` 7.15.0 in 2006) to allow custom output formatting. Users, frequently needing specific metrics (like total time or HTTP status) for scripting or debugging, naturally created aliases or simple scripts (e.g., `alias wcurl='curl -w "%{{http_code}} %{{time_total}}s\n"'`) to avoid repeatedly typing long format strings. This pattern of creating <b>wcurl</b> has since become a common community practice, reflecting a need for more concise and consistent formatted `curl` output.


title: TLDR
content:
<b>Download the contents of a URL to a file indicated by the URL ("foo" in this case)</b>`wcurl [https://example.com/foo]`<br><b>Download the contents of a URL to a file with a specified name</b>`wcurl [[-o|--output]] [bar] [https://example.com/foo]`<br><b>Download the contents of a URL, enabling progress bar and defaulting to HTTP/2</b>`wcurl --curl-options "--progress-bar --http2" [https://example.com/foo]`<br><b>Resume from an interrupted download</b>`wcurl --curl-options "--clobber --continue-at -" [https://example.com/foo]`


title: SYNOPSIS
content:
<pre>nicotine-plus [<i>OPTIONS</i>]</pre><br><pre>nicotine [<i>OPTIONS</i>]</pre><br><i>Nicotine+</i> is primarily a graphical application that runs without arguments for typical use.<br>Command-line options are mostly for debugging or specific configurations.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><B>Show program's help message and exit.</B></i><br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><B>Show program's version number and exit.</B></i><br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><B>Enable verbose debugging output.</B></i><br>This sends detailed log information to the console, useful for troubleshooting.<br><br><b><b>--profile</b> <i><PATH></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><B>Specify an alternative user profile directory.</B></i><br>Allows running the client with different settings and data, separate from the default location.<br><br>


title: DESCRIPTION
content:
<i><B>Nicotine+</B></i> is a popular, open-source graphical client for the Soulseek peer-to-peer (P2P) file-sharing network.<br>It allows users to search for and download files from other users, share their own files, participate in chat rooms, and manage a wishlist of desired files.<br>Unlike the official Soulseek client, Nicotine+ is written in Python and GTK, providing a cross-platform solution primarily used on Linux and other Unix-like systems, though it can run on Windows and macOS.<br>It offers a comprehensive set of features, including advanced search filters, bandwidth control, buddy lists, and private messaging.<br>Nicotine+ aims to provide a stable, efficient, and user-friendly experience for connecting to the Soulseek network, facilitating a community-driven approach to music and media discovery and sharing.<br>Its development focuses on maintaining compatibility with the Soulseek protocol while offering enhancements and bug fixes.


title: CAVEATS
content:
<i><B>Nicotine+</B></i>'s functionality is inherently tied to the Soulseek network and its protocol, which can evolve, potentially leading to temporary compatibility issues until updates are released.<br>As with any P2P client, users must be mindful of the legal implications and potential security risks associated with sharing and downloading copyrighted content.<br>Performance can be dependent on network conditions and the availability of other users on the Soulseek network.<br>Occasional connectivity problems with the Soulseek server or specific users might occur, requiring network or application restarts.


title: CONFIGURATION FILES
content:
Nicotine+ typically stores its configuration, user profiles, and downloaded files in a directory within the user's home directory, often <i><B>~/.nicotine/</B></i> or <i><B>~/.config/nicotine/</B></i>.<br>This includes settings, chat logs, and cached data.


title: OPEN SOURCE NATURE
content:
As an open-source project, Nicotine+ benefits from community contributions, allowing for transparency, security audits, and continuous improvement.<br>It is usually distributed under the GNU General Public License (GPL).


title: NETWORK PROTOCOL
content:
Nicotine+ communicates using the proprietary Soulseek protocol, which operates over TCP/IP.<br>Users may need to configure port forwarding on their routers for optimal connectivity and sharing capabilities.


title: HISTORY
content:
<i><B>Nicotine</B></i> originated as an independent open-source client for the Soulseek P2P network, written in Python and GTK.<br>It was developed as an alternative to the official, closed-source Soulseek client, aiming to provide a cross-platform solution primarily for Linux users.<br>Over time, the original Nicotine project became less actively maintained, leading to the emergence of <i><B>Nicotine+</B></i> (Nicotine-plus).<br>Nicotine+ continued the development, incorporating bug fixes, new features, and maintaining compatibility with changes to the Soulseek protocol.<br>It has become the de facto open-source client for the Soulseek community on Linux and other platforms, known for its stability and active development.<br>Its longevity highlights the community's desire for an open and adaptable client for the niche Soulseek network.


title: SEE ALSO
content:
<i><B>Soulseek</B></i> (The underlying P2P network and protocol), <i><B>qBittorrent(1)</B></i> (A popular BitTorrent client, another P2P protocol), <i><B>Deluge(1)</B></i> (Another BitTorrent client), <i><B>netstat(8)</B></i> (Display network connections, routing tables, interface statistics, etc.), <i><B>lsof(8)</B></i> (List open files, including network connections)


title: TLDR
content:
<b>Start Nicotine+</b>`nicotine`<br><b>Start Nicotine+ in headless ([n]) mode</b>`nicotine [[-n|--headless]]`<br><b>Rescan shared files</b>`nicotine [[-r|--rescan]]`<br><b>Display help</b>`nicotine [[-h|--help]]`


title: PARAMETERS
content:
<b><b>-q</b>, <b>--query</b> <I>"TEXT"</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ask a question to the intelligent codex. The answer is provided based on the knowledge base.<br><br><b><b>-g</b>, <b>--generate</b> <I>"PROMPT"</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate code snippets or text based on a given natural language prompt.<br><br><b><b>-s</b>, <b>--search</b> <I>"KEYWORDS"</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search the codex's knowledge base for relevant entries matching the keywords.<br><br><b><b>-i</b>, <b>--info</b> <I>"TOPIC"</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retrieve detailed conceptual information about a specific topic or programming construct.<br><br><b><b>-d</b>, <b>--document</b> <I>"SCOPE"</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate documentation for a specified scope, e.g., a function, class, or general topic.<br><br><b><b>-m</b>, <b>--model</b> <I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the AI model or knowledge source to be used for the query (e.g., 'local-llm', 'openai-gpt').<br><br><b><b>-p</b>, <b>--path</b> <I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define the local path to a custom codex database or configuration file.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a comprehensive help message and usage instructions for <I>codex</I>.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the current version information of the <I>codex</I> utility.<br><br>


title: DESCRIPTION
content:
The <I>codex</I> command provides a powerful command-line interface for an intelligent knowledge assistant, primarily focused on code and technical documentation. It allows users to interactively query vast repositories of information, generate code snippets based on natural language prompts, and retrieve detailed documentation on various programming concepts, APIs, and best practices. <br><br>Utilizing advanced AI models (either locally hosted or cloud-based), <I>codex</I> aims to streamline the development workflow by offering instant access to relevant information, reducing the need to sift through extensive documentation or search online repeatedly. It can be configured to use specific knowledge bases or external AI services, making it adaptable to different project requirements and security policies. <br><br>Developers can use <I>codex</I> to quickly understand unfamiliar code, get explanations for complex algorithms, generate boilerplate code, or even troubleshoot common programming issues. Its intuitive command-line syntax makes it an invaluable tool for enhancing productivity and learning within the terminal environment.


title: CAVEATS
content:
The effectiveness of <I>codex</I> heavily relies on the quality and scope of the underlying AI model and knowledge base. For large queries or generations, response times may vary based on computational resources or API latency. <br>Users should be mindful of potential biases or inaccuracies present in the training data of the AI models. <br>Sensitive information should not be used in queries if cloud-based models are employed, unless specifically confirmed for security.


title: CONFIGURATION
content:
The behavior of <I>codex</I> can be customized via a configuration file (e.g., <I>~/.config/codex/config.json</I>) which allows specifying default AI models, API keys, preferred knowledge bases, and output formats. <br>This flexibility ensures that <I>codex</I> can adapt to various development environments and access requirements.


title: EXTENSIBILITY
content:
<I>codex</I> is designed with an extensible architecture, allowing for the integration of new AI models, custom knowledge sources, and output plugins. Developers can contribute or create their own 'codex modules' to expand its functionality to highly specialized domains.


title: HISTORY
content:
The concept of <I>codex</I> emerged from the growing need for context-aware and intelligent assistance in command-line environments, particularly for software development. Early prototypes, around 2020-2022, focused on simple text retrieval from indexed documentation. <br><br>With the rapid advancements in large language models (LLMs) from 2022 onwards, <I>codex</I> evolved to integrate powerful AI capabilities, allowing for natural language queries, code generation, and sophisticated semantic searches. Its development has been driven by the open-source community's desire for a unified, intelligent interface to manage and leverage vast amounts of technical knowledge directly from the terminal, making it a modern companion for developers and system administrators.


title: TLDR
content:
<b>Start an interactive Codex session in the current directory</b>`codex`<br><b>Run a single Codex command using a prompt</b>`codex "[your prompt]"`<br><b>Run a prompt with automatic approval of all file edits and commands</b>`codex [[-a|--approval-mode]] full-auto "[your prompt]"`<br><b>Use a specific provider and model</b>`codex --provider [provider_name] [[-m|--model]] [model_name] "[your prompt]"`<br><b>Load the entire repository as context (experimental)</b>`codex --full-context "[your prompt]"`<br><b>Show the resource usage for the current session (run this command inside a session)</b>`/cost`<br><b>Display help</b>`codex --help`


title: PARAMETERS
content:
<b><b>--launch</b> <i>category</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launch the preferred application for a specific <i>category</i>. Valid categories include <i>WebBrowser</i>, <i>MailReader</i>, <i>TerminalEmulator</i>, <i>FileManager</i>, and <i>Editor</i>.<br><br><b><b>--web-browser</b> [<i>URI</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the preferred web browser. If a <i>URI</i> is specified, it will be opened by the browser. If no <i>URI</i>, the browser is launched to its default page.<br><br><b><b>--mail-reader</b> [<i>URI</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the preferred mail reader. If a <i>URI</i> (e.g., <i>mailto:</i>) is specified, it will be opened. Otherwise, the mail reader is simply launched.<br><br><b><b>--terminal-emulator</b> [<i>directory</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the preferred terminal emulator, optionally setting the initial working <i>directory</i>.<br><br><b><b>--file-manager</b> [<i>path</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the preferred file manager, optionally navigating to the specified <i>path</i>.<br><br><b><b>--editor</b> <i>file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the specified <i>file</i> using the preferred text editor configured in Xfce.<br><br><b><b>--query</b> <i>URI</i> | <i>path</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Query and print the preferred application (its executable path) that would be used to open the given <i>URI</i> or <i>path</i>.<br><br><b><b>--show-menu</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the 'Open With...' menu for the given URI or file, allowing the user to select an application manually.<br><br><b><b>--new-window</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to open the application in a new window, if supported by the application.<br><br><b><b>--tab</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to open the application in a new tab (primarily for terminal emulators or file managers that support tabs).<br><br><b><b>--working-directory</b> <i>path</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the working <i>directory</i> for the launched application.<br><br><b><b>--daemon</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Start the <b>exo-open</b> daemon process. This is typically handled automatically by the Xfce session and not usually invoked directly by users.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
The <b>exo-open</b> command is a utility provided by the <b>exo</b> library, an essential component of the Xfce desktop environment. Its primary purpose is to launch applications and open files, directories, or URIs (Uniform Resource Identifiers) using the user's preferred applications as configured within Xfce.<br><br>Unlike general-purpose tools, <b>exo-open</b> is deeply integrated with Xfce's settings, ensuring a consistent user experience for handling various content types, such as web links, mail addresses, and local files. It abstracts the underlying mechanisms for application invocation, providing a unified interface for Xfce applications to interact with the broader system.


title: CAVEATS
content:
The <b>exo-open</b> command is primarily designed for the Xfce desktop environment. While it might function in other environments if <b>exo-utils</b> are installed, its behavior and reliance on Xfce-specific configurations (like preferred applications) may lead to unexpected results or limited functionality outside of a full Xfce session.


title: CONFIGURATION OF PREFERRED APPLICATIONS
content:
<b>exo-open</b> respects and utilizes the preferred application settings configured through Xfce's 'Preferred Applications' panel (typically found in the <b>xfce4-settings-manager</b>). This allows users to easily customize which web browser, mail client, terminal, or file manager is launched by default for various actions.


title: MIME TYPE INTEGRATION
content:
When opening files, <b>exo-open</b> relies on the system's MIME type database in conjunction with Xfce's application associations to determine the most appropriate application. This ensures that files are opened with the correct program based on their content type.


title: HISTORY
content:
The <b>exo</b> library, which includes <b>exo-open</b>, is a foundational component of the Xfce desktop environment. It was developed to provide common utility functions and abstractions for Xfce applications, ensuring consistent handling of URIs, files, and preferred applications across the desktop. Its development is tied to the evolution of Xfce itself, aiming to offer a robust and integrated solution for application launching within the Xfce ecosystem.


title: TLDR
content:
<b>Configure the exo command-line</b>`exo config`<br><b>Generate the exo autocompletion script for a specified shell</b>`exo completion [zsh]`<br><b>List all of the available zones and output them as json</b>`exo zone [[-O|--output-format]] [json]`<br><b>Quietly create a Compute instance in a specific zone (disables the non-essential command output)</b>`exo compute instance create [instance_name] --zone [zone] [[-Q|--quiet]]`<br><b>List just the name of all of the buckets in the Organization</b>`exo storage list [[-O|--output-template]] '\{\{ .Name \}\}`<br><b>Display help for a specific sub-command</b>`exo [iam] [[-h|--help]]`


title: SYNOPSIS
content:
The <b><I>exo compute instance</I></b> command group is invoked as a subcommand of the main <b><I>exo</I></b> CLI tool. It requires an <b><I>action</I></b> followed by optional arguments and options.<br><br>General Syntax:<br><b><I>exo compute instance &lt;action&gt; [arguments] [options]</I></b><br><br>Common Actions Synopses:<br><b><I>exo compute instance list [-o|--output &lt;format&gt;] [--no-headers]</I></b><br><b><I>exo compute instance show &lt;ID|name&gt; [-o|--output &lt;format&gt;]</I></b><br><b><I>exo compute instance create &lt;name&gt; [-z|--zone &lt;zone&gt;] [-t|--template &lt;template&gt;] [-s|--disk-size &lt;size&gt;] [-y|--type &lt;type&gt;] [...]</I></b><br><b><I>exo compute instance start &lt;ID|name&gt; [--force]</I></b><br><b><I>exo compute instance stop &lt;ID|name&gt; [--force]</I></b><br><b><I>exo compute instance delete &lt;ID|name&gt; [--force]</I></b>


title: PARAMETERS
content:
<b><b><I>-o &lt;format&gt;</I></b>, <b><I>--output &lt;format&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format (e.g., <b><I>text</I></b>, <b><I>json</I></b>, <b><I>table</I></b>). Useful for scripting and automation.<br><br><b><b><I>--no-headers</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the header row in table output format for commands like <b><I>list</I></b>.<br><br><b><b><I>--force</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Bypass confirmation prompts for destructive or impactful actions (e.g., <b><I>delete</I></b>, <b><I>stop</I></b>).<br><br><b><b><I>-z &lt;zone&gt;</I></b>, <b><I>--zone &lt;zone&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(For <b><I>create</I></b>) Specifies the Exoscale zone where the instance will be provisioned (e.g., <b><I>ch-dk-2</I></b>).<br><br><b><b><I>-t &lt;template&gt;</I></b>, <b><I>--template &lt;template&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(For <b><I>create</I></b>) Specifies the operating system template or image to use for the instance (e.g., <b><I>Linux Ubuntu 22.04 LTS</I></b>).<br><br><b><b><I>-s &lt;size&gt;</I></b>, <b><I>--disk-size &lt;size&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(For <b><I>create</I></b>) Sets the root disk size of the instance in GiB.<br><br><b><b><I>-y &lt;type&gt;</I></b>, <b><I>--type &lt;type&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(For <b><I>create</I></b>) Defines the instance type, which determines CPU and RAM resources (e.g., <b><I>standard.small</I></b>).<br><br><b><b><I>-g &lt;group&gt;</I></b>, <b><I>--security-group &lt;group&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(For <b><I>create</I></b>) Assigns the instance to one or more security groups for network access control.<br><br><b><b><I>-k &lt;keypair&gt;</I></b>, <b><I>--keypair &lt;keypair&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(For <b><I>create</I></b>) Specifies the SSH keypair name to inject into the instance for secure remote access.<br><br><b><b><I>--user-data &lt;path|content&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(For <b><I>create</I></b>) Provides cloud-init user data from a file path or inline content, for instance initialization tasks.<br><br>


title: DESCRIPTION
content:
The <b><I>exo compute instance</I></b> command group is a core component of the Exoscale Command Line Interface (CLI), designed for comprehensive management of virtual compute instances within the Exoscale cloud platform.<br><br>It enables users to perform a wide array of operations, including listing and viewing detailed information about instances, creating new instances with custom configurations (such as specific zones, templates, disk sizes, and instance types), and controlling their lifecycle (starting, stopping, rebooting). The command group also supports advanced actions like scaling instance resources, resetting passwords, and managing network interfaces or security group attachments. This functionality streamlines infrastructure management, allowing for powerful automation and script-based control of compute resources directly from the terminal, making it an indispensable tool for cloud engineers and developers.


title: CAVEATS
content:
The command <b><I>exo-compute-instance</I></b> as a standalone executable does not typically exist; it is part of the Exoscale CLI structure, invoked as <b><I>exo compute instance &lt;action&gt;</I></b>.<br><br>Using this command requires the Exoscale CLI to be installed and properly configured with valid API credentials.<br><br>Actions such as creating or deleting instances directly impact your Exoscale account's billing and can result in data loss. Exercise caution, especially when using the <b><I>--force</I></b> flag.<br><br>Familiarity with Exoscale cloud concepts like zones, instance types, templates, security groups, and private networks is essential for effective use.


title: COMMON ACTIONS
content:
Beyond listing and showing, the <b><I>exo compute instance</I></b> command group provides several crucial actions:<br><b><I>start &lt;ID|name&gt;</I></b>: Powers on a stopped instance.<br><b><I>stop &lt;ID|name&gt;</I></b>: Powers off a running instance (graceful shutdown if possible).<br><b><I>reboot &lt;ID|name&gt;</I></b>: Reboots a running instance.<br><b><I>scale &lt;ID|name&gt;</I></b>: Modifies the CPU and RAM resources of an instance (requires instance to be stopped).<br><b><I>reset-password &lt;ID|name&gt;</I></b>: Resets the password for the root/administrator user of an instance.<br><b><I>migrate &lt;ID|name&gt;</I></b>: Migrates an instance's network interface or security group association.


title: HISTORY
content:
The Exoscale CLI, including the <b><I>compute instance</I></b> command group, has been actively developed as the primary command-line interface for managing Exoscale cloud resources. Its design follows modern cloud CLI patterns, offering a consistent and programmatic way to interact with the Exoscale API. It's continuously updated to support new Exoscale services and features, providing a robust alternative to the web console for automation and large-scale deployments.


title: SEE ALSO
content:
<b><I>exo</I></b> (1): The main Exoscale CLI executable., <b><I>exo security-group</I></b> (1): Manage Exoscale security groups., <b><I>exo network</I></b> (1): Manage Exoscale private networks., <b><I>exo template</I></b> (1): List and manage Exoscale instance templates., <b><I>ssh</I></b> (1): Secure Shell client for connecting to instances., <b><I>cloud-init</I></b> (5): Standard for cross-platform cloud instance initialization.


title: TLDR
content:
<b>Create a Debian based Compute instance with a disk size of 10GB</b>`exo compute instance create --disk-size 10 [instance_name] [[-z|--zone]] [zone] --template '[Linux Debian 12 (Bookworm) 64-bit]'`<br><b>Log into a Compute instance via SSH</b>`exo compute instance ssh [instance_name|id]`<br><b>List all of the Compute instances</b>`exo compute instance list`<br><b>Add an instance to a Security Group</b>`exo compute instance security-group add [instance_name|id] [security_group_name|id]`<br><b>Scale the size of a Compute instance</b>`exo compute instance scale [instance_name|id] [instance_type]`<br><b>Create a snapshot of a Compute instance</b>`exo compute instance snapshot create [instance_name|id]`<br><b>Revert a Compute instance to a snapshot (the data written after the snapshot has been created will be lost)</b>`exo compute instance snapshot revert [snapshot_id] [instance_name|id]`<br><b>Resize the disk size of a Compute instance to 20GB</b>`exo compute instance resize-disk [instance_name|id] 20`


title: SYNOPSIS
content:
As 'exo-storage' is not a standard Linux command, a generic synopsis cannot be provided. Its syntax would depend entirely on its <i>specific implementation</i> by a vendor or system administrator.


title: DESCRIPTION
content:
The command 'exo-storage' is <i>not recognized as a standard Linux command-line utility</i> commonly found across various distributions (e.g., Ubuntu, Debian, CentOS, Fedora). It is highly probable that 'exo-storage' refers to:<br><br>1.  A <b>vendor-specific tool</b> provided by a particular storage solution or cloud service (e.g., Exoprise Systems, as the name might suggest).<br>2.  A <b>custom script</b> or alias created within a specific environment for managing storage-related tasks.<br>3.  A <b>misunderstanding</b> or a typo for another command.<br><br>To use or analyze 'exo-storage', you would typically need to refer to the <i>documentation provided by the specific vendor or system administrator</i> who introduced this command. It would not be part of the core GNU/Linux utilities.


title: CAVEATS
content:
Since 'exo-storage' is not a standard utility, its availability, functionality, and behavior are <i>entirely dependent on its specific source</i>. It may require special installation, specific configurations, or be part of a proprietary software suite. Users should avoid assuming its existence or functionality on arbitrary Linux systems without prior verification.


title: VERIFYING COMMAND EXISTENCE
content:
If you encounter 'exo-storage' on a system, you can attempt to verify its existence and location using standard commands like: <br><i>which exo-storage</i><br><i>type exo-storage</i><br><i>man exo-storage</i> (though a manual page is unlikely for a non-standard command unless custom-made)<br><br>If these commands return 'not found', it confirms that it's not in your system's PATH or a standard utility.


title: HISTORY
content:
There is no public or standardized history for a general 'exo-storage' command within the Linux ecosystem, as it is not a part of common Linux distributions or specifications like POSIX.


title: TLDR
content:
<b>Create a new SOS bucket</b>`exo storage mb [bucket_name]`<br><b>Upload a file to a bucket</b>`exo storage put [path/to/file] [bucket_name]/[prefix/]`<br><b>List the objects within a bucket</b>`exo storage ls [bucket_name]`<br><b>Simulate the download of an object from a bucket</b>`exo storage get [bucket_name]/[object_key] [local_path] --dry-run`<br><b>Manage the metadata of an object</b>`exo storage metadata add [bucket_name]/[object_key] [key=value]`


title: SYNOPSIS
content:
<i><b>exo-compute</b> [<i>OPTIONS</i>] <i>COMMAND</i> [<i>ARGUMENTS...</i>]</i><br><i><b>exo-compute</b> --version</i><br><i><b>exo-compute</b> --help</i>


title: PARAMETERS
content:
<b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays usage information and exits.</i><br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Shows the command's version and exits.</i><br><br><b><i>--verbose</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Increases output verbosity, showing more details about operations.</i><br><br><b><i>--profile &lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies a configuration profile for connecting to external compute resources.</i><br><br><b><i>--region &lt;region_code&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Selects the geographical region for compute operations (e.g., us-east-1).</i><br><br><b><i>--target &lt;endpoint&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Defines the specific external compute endpoint or service to interact with.</i><br><br><b><i>run &lt;script&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Executes a specified script or program on the external compute environment.</i><br><br><b><i>status &lt;job_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Checks the status of a previously submitted external computation job.</i><br><br><b><i>fetch &lt;job_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Retrieves results or output files from a completed external job.</i><br><br><b><i>upload &lt;local_path&gt; &lt;remote_path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Transfers files from the local machine to the external compute environment.</i><br><br><b><i>download &lt;remote_path&gt; &lt;local_path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Retrieves files from the external compute environment to the local machine.</i><br><br><b><i>configure</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Interactively configures connection settings for external compute services.</i><br><br>


title: DESCRIPTION
content:
<i>The <b>exo-compute</b> command is not a standard utility found in most mainstream Linux distributions. Its name suggests a hypothetical purpose: to manage or initiate computational processes that occur "externally" to the local machine, possibly on a remote server, a cloud platform, or a specialized compute cluster. If such a command existed, it would likely act as a client-side interface for submitting jobs, configuring external compute environments, monitoring remote tasks, or retrieving results. Its design would aim to abstract the complexities of distributed or cloud computing, providing a simplified command-line interface for users to interact with off-premises computational resources. This analysis is based on a hypothetical interpretation of the command's name, as no standard command with this exact name is widely documented.</i>


title: CAVEATS
content:
<i>The <b>exo-compute</b> command is not a standard, pre-installed Linux utility. This analysis provides a hypothetical interpretation based on its name. If you encounter this command, it is likely part of a specialized software development kit (SDK), a custom cloud tool, or an internal enterprise application. Its exact functionality, parameters, and behavior would depend entirely on its specific implementation by its developers. Users should consult the documentation provided with the specific software package that includes <b>exo-compute</b>.</i>


title: <I>CONCEPTUAL USE CASES</I>
content:
<i>If <b>exo-compute</b> were a real tool, it might be used for:<br><br><i>Cloud Workload Orchestration</i>: Submitting batch jobs, machine learning training tasks, or complex simulations to cloud-based virtual machines or serverless functions.<br><br><i>Remote Data Processing</i>: Offloading large-scale data transformations or analytics to powerful remote compute clusters.<br><br><i>Hybrid Cloud Management</i>: Bridging local development environments with external compute resources, allowing seamless execution of tasks across diverse infrastructures.</i>


title: HISTORY
content:
<i>As <b>exo-compute</b> is not a recognized standard Linux command, there is no public or well-documented history of its development and usage within the general open-source community. If it exists, its history would be tied to the private development cycles of a specific cloud provider, an enterprise, or a niche project aiming to streamline external computation workflows. It would likely evolve with advancements in cloud computing, distributed systems, and remote resource orchestration technologies.</i>


title: TLDR
content:
<b>Quickly create an Exoscale Compute resource (e.g., instance, Security Group, SKS cluster,...)</b>`exo compute [resource_type] create [resource_name]`<br><b>List Exoscale Compute instance types</b>`exo compute instance-type list`<br><b>Register a new SSH key that can be used to access Compute instances</b>`exo compute ssh-key register [key_name] [public_key_file]`<br><b>Create a Compute instance with an ssh-key deployed on it</b>`exo compute instance create [instance_name] [ssh_key_name]`<br><b>Register a new Compute instance template based on a Snapshot of a Compute instance (useful when you want to quickly create a replica of a Compute instance)</b>`exo compute instance template register [template_name] --from-snapshot [snapshot_id]`<br><b>Add a new rule to an existing Security Group</b>`exo compute security-group rule add [security_group_name|id] --description '[Allow SSH access]' --flow [ingress] --port [22] --network [0.0.0.0/0]`<br><b>Manage the services of an existing Network Load Balancer</b>`exo compute load-balancer service add [load_balancer_name|id] [service_name] --port [service_port]`


title: SYNOPSIS
content:
<b>exo dbaas</b> <I>command</I> [<I>options</I>...]<br><br>Common commands:<br> &nbsp; <b>exo dbaas list</b><br> &nbsp; <b>exo dbaas show</b> <I>ID|NAME</I><br> &nbsp; <b>exo dbaas create</b> [<I>options</I>...]<br> &nbsp; <b>exo dbaas update</b> <I>ID|NAME</I> [<I>options</I>...]<br> &nbsp; <b>exo dbaas delete</b> <I>ID|NAME</I>


title: PARAMETERS
content:
<b><b>list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all active DBaaS service instances in your Exoscale account.<br><br><b><b>show</b> <I>ID|NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed information for a specific DBaaS service instance identified by its ID or name.<br><br><b><b>create</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provisions a new DBaaS service instance. Requires various options to define the service.<br><br><b>&nbsp;&nbsp;<b>--type</b> <I>DB_TYPE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Required for create)</i> Specifies the type of database service (e.g., 'pg', 'mysql', 'redis').<br><br><b>&nbsp;&nbsp;<b>--name</b> <I>SERVICE_NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Required for create)</i> Assigns a unique name to the new DBaaS service instance.<br><br><b>&nbsp;&nbsp;<b>--plan</b> <I>PLAN_CODE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Required for create)</i> Defines the resource plan for the service (e.g., 'starter.micro', 'business.medium').<br><br><b>&nbsp;&nbsp;<b>--version</b> <I>VERSION</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the database engine version (e.g., '14' for PostgreSQL, '8' for MySQL).<br><br><b>&nbsp;&nbsp;<b>--zone</b> <I>ZONE_NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The Exoscale zone where the service will be provisioned (e.g., 'ch-dk-2').<br><br><b>&nbsp;&nbsp;<b>--ip-filter</b> <I>CIDR[,CIDR...]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of IP CIDR ranges allowed to connect to the database service.<br><br><b>&nbsp;&nbsp;<b>--disk-size</b> <I>GB</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The size of the disk allocated to the service instance in GiB.<br><br><b><b>update</b> <I>ID|NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modifies an existing DBaaS service instance. Options include updating name, plan, IP filters, disk size, and service version.<br><br><b><b>delete</b> <I>ID|NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Terminates and permanently deletes a DBaaS service instance.<br><br>


title: DESCRIPTION
content:
The <b>exo dbaas</b> command is a crucial component of the Exoscale Command Line Interface (CLI), designed for efficient management of Database as a Service (DBaaS) offerings within the Exoscale cloud platform. It provides a robust interface for orchestrating various database types, including <i>PostgreSQL</i>, <i>MySQL</i>, <i>Redis</i>, <i>OpenSearch</i>, and <i>Apache Kafka</i>. <br><br>Users leverage <b>exo dbaas</b> to perform a wide array of operations, from provisioning new database instances and configuring their specifications (like instance type, disk size, and service version) to managing network access via IP filters, and overseeing backups. It significantly streamlines routine database administration tasks, enabling both interactive control and automation through scripting. This command is an indispensable tool for developers, system administrators, and DevOps teams looking to deploy, scale, and maintain high-availability database solutions effortlessly on Exoscale.


title: CAVEATS
content:
The <b>exo dbaas</b> command is not a standalone executable but a subcommand of the main <b>exo</b> CLI tool. It requires the Exoscale CLI to be installed and properly configured with valid API keys. Operations interact directly with your Exoscale cloud resources, so ensure you understand the implications (e.g., billing, data loss upon deletion). Network connectivity to the Exoscale API endpoint is essential for command execution.


title: AUTHENTICATION AND CONFIGURATION
content:
Before using <b>exo dbaas</b>, ensure the <b>exo</b> CLI is authenticated using your Exoscale API key and secret. This is typically done via <code>exo configure</code> or by setting environment variables <code>EXOSCALE_API_KEY</code> and <code>EXOSCALE_API_SECRET</code>. The default zone can also be configured to avoid specifying it with every command.


title: SUBCOMMANDS FOR SPECIFIC DB TYPES
content:
Beyond the general commands, <b>exo dbaas</b> often includes type-specific subcommands for advanced configuration, for example:<br> &nbsp; <b>exo dbaas pg settings</b> <I>ID|NAME</I><br> &nbsp; <b>exo dbaas mysql users</b> <I>ID|NAME</I><br>These allow fine-grained control over database-specific parameters and user management, offering capabilities beyond the generic <b>create</b> and <b>update</b> operations.


title: HISTORY
content:
The <b>exo dbaas</b> command is an integral part of the Exoscale CLI tool, which was developed to provide a unified command-line interface for managing all Exoscale cloud services. Its development closely mirrors the expansion of Exoscale's managed database offerings, evolving to support new database types and features as they become available on the platform. It represents Exoscale's commitment to providing a robust and programmable interface for cloud resource orchestration, enabling greater automation for its users.


title: TLDR
content:
<b>List available Database Service types</b>`exo dbaas type list`<br><b>List available plans for a Database Service type</b>`exo dbaas type show [database_service_type] --plans`<br><b>Create a new Database Service (an IP filter must be specified in order to access the service)</b>`exo dbaas create [database_service_type] [database_service_type_plan] [database_service_name] --[database_service_type]-ip-filter [1.2.3.4/32]`<br><b>Show the connection URI for a Database Service</b>`exo dbaas show [database_service_name] --uri`<br><b>Set a specified maintenance time and day of the week for a Database Service</b>`exo dbaas update [database_service_name] --maintenance-dow [day_of_the_week] --maintenance-time [HH:MM:SS]`<br><b>Get help for a specific Database Service type</b>`exo dbaas [subcommand] --help-[database_service_type]`


title: SYNOPSIS
content:
<b>exo compute block-storage</b> <I>action</I> [<i>arguments</i>] [<i>options</i>]<br><br>Common actions include:<br>&nbsp;&nbsp;<b>exo compute block-storage</b> <I>list</I> [<i>options</i>]<br>&nbsp;&nbsp;<b>exo compute block-storage</b> <I>show</I> <I>VOLUME</I> [<i>options</i>]<br>&nbsp;&nbsp;<b>exo compute block-storage</b> <I>create</I> <I>NAME</I> <I>SIZE</I> [<i>options</i>]<br>&nbsp;&nbsp;<b>exo compute block-storage</b> <I>delete</I> <I>VOLUME</I> [<i>options</i>]<br>&nbsp;&nbsp;<b>exo compute block-storage</b> <I>attach</I> <I>VOLUME</I> <I>INSTANCE</I> [<i>options</i>]<br>&nbsp;&nbsp;<b>exo compute block-storage</b> <I>detach</I> <I>VOLUME</I> [<i>options</i>]


title: PARAMETERS
content:
<b><I>VOLUME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Refers to the ID or name of a block storage volume. Used with `show`, `delete`, `attach`, `detach` actions.<br><br><b><I>INSTANCE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Refers to the ID or name of a compute instance to which a volume will be attached or from which it will be detached. Used with `attach` action.<br><br><b><I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A unique name for the new block storage volume (used with the <B>create</B> action).<br><br><b><I>SIZE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The size of the volume in GiB (Gigabytes) (e.g., 100). Required when using the <B>create</B> action.<br><br><b>--description <description></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional description for the block storage volume (used with <B>create</B>, <B>update</B> actions).<br><br><b>--zone <zone></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Exoscale zone for the operation (e.g., <I>ch-gva-2</I>). Many operations require this or default to the configured zone.<br><br><b>--labels <key=value,...></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of key-value pairs to apply as labels to the resource (used with <B>create</B>, <B>update</B> actions). Example: <I>--labels env=dev,project=web</I><br><br><b>--instance <instance-id|name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly specify the compute instance ID or name for attach/detach operations. Required for the <B>attach</B> action.<br><br><b>--output <format></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output format for the command's result, e.g., <I>json</I>, <I>table</I>, <I>text</I>. This is a global option for the <B>exo</B> CLI.<br><br><b>--no-read-timeout</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the read timeout for the API client, useful for very long-running operations (a global option for the <B>exo</B> CLI).<br><br>


title: DESCRIPTION
content:
The `exo compute block-storage` command group is part of the <I>Exoscale CLI</I>, a command-line interface for interacting with the Exoscale cloud platform. This specific group of commands allows users to manage <B>block storage volumes</B> associated with Exoscale compute instances. These volumes provide persistent, scalable storage that can be attached to and detached from virtual machines, offering high-performance disk space for various applications.<br><br>Users can perform various operations such as creating new volumes with specified names and sizes, listing existing ones, showing detailed information about a specific volume, attaching volumes to compute instances, detaching them, updating volume properties (like descriptions or labels), and deleting them. This command is crucial for managing data persistence and expanding storage capacity for virtual machines within the Exoscale cloud infrastructure.


title: CAVEATS
content:
This command relies on the <I>Exoscale CLI</I> being installed and properly configured with your Exoscale API key and secret. <br><br>Block storage volumes are zone-specific; they can only be created, attached, and managed within a single Exoscale zone. <br><br>A block storage volume can only be attached to a single compute instance at any given time. <br><br>Deleting a volume is an irreversible action and will result in permanent data loss. Always ensure you have backups of critical data.


title: COMMON ACTIONS
content:
The `exo compute block-storage` group provides several key actions for managing your block storage volumes:<br><ul><li><b>list</b>: Lists all block storage volumes associated with your Exoscale account, optionally filtered by zone.</li><li><b>show</b>: Displays detailed information about a specific block storage volume using its ID or name.</li><li><b>create</b>: Creates a new block storage volume with a specified name and size in a chosen zone.</li><li><b>delete</b>: Permanently deletes a block storage volume.</li></li><li><b>attach</b>: Attaches an existing block storage volume to a specified compute instance.</li><li><b>detach</b>: Detaches a block storage volume from the compute instance it is currently attached to.</li><li><b>update</b>: Modifies properties (like description or labels) of an existing block storage volume.</li></ul>


title: PREREQUISITES
content:
Before utilizing `exo compute block-storage` commands, ensure that:<br><ul><li>The <I>Exoscale CLI</I> is installed on your operating system.</li><li>Your Exoscale API key and secret are properly configured. This is typically done interactively using `exo configure` or by setting the `EXOSCALE_API_KEY` and `EXOSCALE_API_SECRET` environment variables.</li><li>You have an active Exoscale account with the necessary permissions to perform block storage operations.</li></ul>


title: HISTORY
content:
The `exo compute block-storage` command group is an integral part of the <I>Exoscale CLI</I>, which has been continuously developed to provide comprehensive programmatic access to Exoscale's cloud services. As Exoscale's robust block storage offering evolved to provide high-performance, persistent storage, the CLI commands were introduced and refined to enable seamless management of these resources directly from the command line. Its development closely follows the iterative release cycles of the Exoscale platform and its underlying API, ensuring compatibility and access to new features.


title: PARAMETERS
content:
<b><i>PATTERN</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The regular expression or literal string to search for. Must be provided.<br><br><b><i>REPLACEMENT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The string to replace matches with. Backreferences like <b>$1</b> or <b>$P&lt;name&gt;</b> are supported for regex patterns. Must be provided.<br><br><b>[<i>PATH...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more file or directory paths to search within. If omitted, <i>fastmod</i> searches recursively from the current directory.<br><br><b><b>-p</b>, <b>--preview</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show interactive diffs before applying changes, allowing per-file approval or rejection. <b>Highly recommended for safety.</b><br><br><b><b>-d</b>, <b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a trial run with no changes written to disk. Only shows which files would be modified.<br><br><b><b>-i</b>, <b>--ignore-case</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform case-insensitive matching. Overrides <b>--match-case</b>.<br><br><b><b>-m</b>, <b>--match-case</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform case-sensitive matching (default for regex, but useful to explicitly specify).<br><br><b><b>-s</b>, <b>--literal-string</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat <i>PATTERN</i> as a literal string rather than a regular expression. Useful for simple exact matches.<br><br><b><b>--substitute-first</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replace only the first occurrence of <i>PATTERN</i> found on each line.<br><br><b><b>--substitute-all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replace all occurrences of <i>PATTERN</i> found on each line (this is the default behavior).<br><br><b><b>-e</b>, <b>--extension</b> <i>&lt;EXT&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only process files with the specified file extension(s). Can be used multiple times (e.g., <code>-e rs -e go</code>).<br><br><b><b>--exclude-dir</b> <i>&lt;REGEX&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude directories whose paths match the provided regular expression. For example, <code>--exclude-dir 'build|node_modules'</code>.<br><br><b><b>-n</b>, <b>--no-backups</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not create <code>.fastmod_backup</code> files before modifying files. Use with caution.<br><br>


title: DESCRIPTION
content:
<i>fastmod</i> is a command-line tool developed by Google, written primarily in Rust, designed for quickly and safely applying large-scale, complex code modifications across extensive codebases. Unlike traditional line-by-line tools like <i>sed</i> or <i>awk</i>, <i>fastmod</i> processes files in memory, providing significant performance benefits for large projects. It offers a powerful find-and-replace mechanism based on regular expressions, crucially featuring an interactive "preview" mode to review proposed changes before committing them. This interactive approval process, coupled with its ability to handle multiple substitutions and its focus on correctness, makes it an ideal tool for large-scale refactoring, upgrading dependencies, or performing API migrations across thousands of files. Its efficiency and safety features are particularly valuable in automated code transformation workflows within CI/CD environments.


title: CAVEATS
content:
While <i>fastmod</i> is designed for safety, especially with its <b>--preview</b> mode, it's still a powerful tool that makes irreversible changes to files. Always ensure you have backups or are working within a version-controlled environment (like Git) before executing changes. The regular expression syntax might differ slightly from other engines (e.g., PCRE) as it uses the Rust regex library.


title: INTERACTIVE PREVIEW MODE
content:
The <b>--preview</b> flag is <i>fastmod</i>'s most critical safety feature. When used, it presents a diff for each file that would be modified and prompts the user to accept (<b>y</b>), reject (<b>n</b>), or skip (<b>s</b>) the change, or quit (<b>q</b>). This allows for granular control and prevents unintended modifications, making it suitable for complex refactoring tasks.


title: BACKUP MECHANISM
content:
By default, <i>fastmod</i> creates backup files (e.g., <code>filename.ext.fastmod_backup</code>) alongside the original file before applying any changes. This provides a simple rollback mechanism in case of errors. This behavior can be disabled using the <b>--no-backups</b> flag, but it is generally recommended to keep backups enabled or rely on version control.


title: REGULAR EXPRESSION SYNTAX
content:
<i>fastmod</i> leverages the Rust regex library. This library aims for compatibility with Perl-like regexes but has some differences and limitations. Users familiar with PCRE or GNU <i>grep</i> regexes should consult the Rust regex documentation for specific syntax details, especially regarding advanced features or edge cases.


title: HISTORY
content:
<i>fastmod</i> was developed by Google as an internal tool to facilitate large-scale code transformations and refactoring across their extensive codebases. Recognizing its utility, Google open-sourced the project on GitHub, making it available to the wider development community. Its development in Rust reflects a focus on performance, memory safety, and concurrency, making it particularly efficient for modern, large-scale software projects.


title: SYNOPSIS
content:
<b>git index-pack</b> <b>[-v] [--keep | --keep-non-core] [--keep-true-parents] [--verify] [-o <I>idx-file</I>] [--stdin] [--strict] [--fsck-objects] <I>pack-file</I>


title: PARAMETERS
content:
<b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show progress during the indexing process.<br><br><b>--keep</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a <I>.keep</I> file alongside the <I>.idx</I> file, preventing the pack from being garbage collected.<br><br><b>--keep-non-core</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to <I>--keep</I>, but the <I>.keep</I> file is only written if the pack originates from a non-core source (primarily for internal Git use).<br><br><b>--keep-true-parents</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ensures parent information is available in the index. This option is used internally by Git.<br><br><b>--verify</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verify the pack file's contents against its hash to ensure integrity.<br><br><b>-o <I>idx-file</I>, --output=<I>idx-file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output path and filename for the generated <I>.idx</I> file. If not specified, the index is written to <I>&lt;pack-file&gt;.idx</I>.<br><br><b>--stdin</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read the pack file content from standard input instead of a specified file path.<br><br><b>--strict</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Abort the operation if the pack header is found to be malformed.<br><br><b>--fsck-objects</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a full filesystem check (fsck) on all objects contained within the pack. This is a resource-intensive operation.<br><br><b><I>pack-file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the existing <I>.pack</I> file that needs an index created for it. This parameter is required unless <I>--stdin</I> is used.<br><br>


title: DESCRIPTION
content:
<b>git-index-pack</b> reads an existing <I>.pack</I> file and generates a corresponding <I>.idx</I> file. This command is crucial for optimizing Git's object lookup, as <I>.idx</I> files provide a fast way to locate objects within a packed repository.<br>It is commonly used when a pack is received from a remote repository (e.g., during <b>git fetch</b> or <b>git receive-pack</b>), where the pack file is streamed, and the index needs to be built on the client side for efficient access. It also serves to create an index for pack files that might have been received without one, for instance, from older Git versions or specific transfer protocols. Essentially, it transforms raw pack data into an efficiently searchable format for Git.


title: CAVEATS
content:
The <I>--keep-non-core</I> and <I>--keep-true-parents</I> options are primarily for internal Git use and typically not required for general user interaction.<br>The <I>--fsck-objects</I> option can be very resource-intensive for large pack files, potentially impacting performance and taking significant time.


title: EXIT STATUS
content:
<b>git-index-pack</b> exits with 0 on success, indicating that the index file was created successfully. It exits with a non-zero value on errors, which allows for scripting and robust error handling in automated workflows.


title: HISTORY
content:
<b>git-index-pack</b> is a core utility within the Git version control system, integral to how Git efficiently stores and retrieves objects. Its development paralleled Git's evolution, particularly in improving packfile management and network transfer efficiency. Early Git versions might have handled pack indices differently, but <b>git-index-pack</b> became a standardized internal command to ensure fast object lookup in packed repositories, especially after network fetches or local pack creation. It's a foundational component for Git's performance.


title: SYNOPSIS
content:
<b>go build</b> [<i>build flags</i>] [<i>packages</i>]<br><br><i>Description:</i><br>Builds the specified <i>packages</i>. If no <i>packages</i> are given, builds the package in the current directory.<br><br><i>Examples:</i><br><b>go build</b><br><b>go build</b> -o myapp ./cmd/myapp<br><b>go build</b> -v github.com/my/repo/cmd/tool<br><b>GOOS=windows GOARCH=amd64 go build</b> -o myapp.exe


title: PARAMETERS
content:
<b>-o output</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the resulting executable or object to the named output file. Default is the package name (for main packages) or an empty string (for non-main packages, meaning cached).<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the names of packages as they are compiled.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the commands go toolchain executes during the build.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the commands but do not run them.<br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force rebuilding of packages that are already up-to-date.<br><br><b>-ldflags 'flags'</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Arguments to pass on to the linker (e.g., for setting version info).<br><br><b>-gcflags 'flags'</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Arguments to pass on to the go compiler.<br><br><b>-tags 'taglist'</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of build tags to consider satisfied during the build. Used for conditional compilation.<br><br><b>-race</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable data race detection. Only for supported systems.<br><br><b>-mod=mode</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls how Go modules are used. 'readonly' (default), 'vendor', 'mod'.<br><br><b>-trimpath</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove all file system paths from the compiled executable. Makes builds more reproducible.<br><br><b>-work</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the name of the temporary work directory and do not delete it when exiting.<br><br><b>-toolexec 'cmd args'</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A program to invoke before the Go toolchain's compiler, assembler, linker, or other tools.<br><br><b>-buildmode=mode</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds the packages in a specific build mode (e.g., 'exe', 'pie', 'shared', 'c-archive', 'c-shared').<br><br><b>-p N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The number of programs that can be run in parallel. Defaults to the number of CPUs available.<br><br>


title: DESCRIPTION
content:
The <b>go build</b> command compiles the Go source files or packages specified by the import path. If no package is specified, it compiles the package in the current directory. When compiling a <i>main</i> package, it produces an executable binary. For other packages, it compiles them into a cached archive that can be used by other Go commands. It handles dependency resolution automatically and uses Go modules for managing dependencies, making the build process robust and reproducible. The command leverages the Go toolchain's cross-compilation capabilities, allowing binaries for different operating systems and architectures to be built from a single machine.


title: CAVEATS
content:
When building a <i>main</i> package, <b>go build</b> creates an executable. If building a non-<i>main</i> package, it only compiles and caches the package for future use by other Go commands; it does not produce a standalone output file unless specified with <i>-o</i> and a buildmode that supports it (e.g. <i>c-archive</i>).<br>Cross-compilation requires setting the <i>GOOS</i> and <i>GOARCH</i> environment variables. Building for specific architectures or operating systems that are not the host system may require additional C compilers or libraries if CGO is involved.<br>Dependency resolution relies on Go modules. If modules are not initialized or <i>go.mod</i> is incorrect, the build might fail or use unexpected dependencies.


title: ENVIRONMENT VARIABLES
content:
<i>GOOS</i>: The target operating system (e.g., <i>linux</i>, <i>windows</i>, <i>darwin</i>).<br><i>GOARCH</i>: The target architecture (e.g., <i>amd64</i>, <i>arm</i>, <i>arm64</i>).<br>These variables are crucial for cross-compilation. For example: <b>GOOS=windows GOARCH=amd64 go build</b>.<br><i>GOPATH</i>: (Legacy/Module-aware Fallback) Defines the root of workspaces. Less critical with Go Modules, but still used for some legacy setups or specific <i>go get</i> behaviors.<br><i>GOROOT</i>: The installation directory of the Go toolchain.


title: BUILD MODES
content:
Beyond creating executables, <b>go build</b> can produce shared libraries (<i>-buildmode=shared</i>, <i>-buildmode=c-shared</i>), static archives (<i>-buildmode=c-archive</i>), and position-independent executables (<i>-buildmode=pie</i>), facilitating integration with other languages and environments.


title: HISTORY
content:
The <b>go build</b> command is a fundamental part of the Go programming language's toolchain, introduced early in Go's development to provide a simple, opinionated, and efficient way to compile Go programs. Its design reflects Go's philosophy of simplicity and built-in tooling. With the introduction of Go Modules in Go 1.11 (and becoming the default in Go 1.16), <b>go build</b> seamlessly integrated module-aware dependency resolution, enhancing reproducibility and project management without significant changes to its core usage. This evolution has made it a robust and widely-used command for Go developers.


title: SEE ALSO
content:
<i>go run(1)</i>: Compiles and runs the specified Go package., <i>go install(1)</i>: Compiles and installs packages and commands., <i>go clean(1)</i>: Removes object files and cached files., <i>go test(1)</i>: Automates testing of Go packages., <i>go mod(1)</i>: Manages module dependencies.


title: SYNOPSIS
content:
<b>gpg</b> [<I>options</I>] [<I>files</I>]<br><b>gpg</b> <I>--encrypt</I> [<I>options</I>] <I>files</I><br><b>gpg</b> <I>--decrypt</I> [<I>options</I>] <I>files</I><br><b>gpg</b> <I>--sign</I> [<I>options</I>] <I>files</I><br><b>gpg</b> <I>--clearsign</I> [<I>options</I>] <I>files</I><br><b>gpg</b> <I>--detached-sign</I> [<I>options</I>] <I>files</I><br><b>gpg</b> <I>--verify</I> [<I>options</I>] <I>files</I><br><b>gpg</b> <I>--import</I> [<I>options</I>] [<I>files</I>]<br><b>gpg</b> <I>--export</I> [<I>options</I>] [<I>keyIDs</I>]<br><b>gpg</b> <I>--list-keys</I> [<I>options</I>] [<I>keyIDs</I>]<br><b>gpg</b> <I>--delete-keys</I> [<I>options</I>] <I>keyIDs</I><br><b>gpg</b> <I>--gen-key</I> [<I>options</I>]


title: PARAMETERS
content:
<b><I>-e</I>, <I>--encrypt</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Encrypts data for specified recipients. Requires public keys of recipients.<br><br><b><I>-d</I>, <I>--decrypt</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Decrypts encrypted data. Requires the corresponding private key.<br><br><b><I>-s</I>, <I>--sign</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Makes a detached signature for a file. The signature is stored separately.<br><br><b><I>--clearsign</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Makes a clear text signature. The signature is embedded within the original text, remaining readable.<br><br><b><I>--detached-sign</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to <I>--sign</I>, creating a signature file separate from the data.<br><br><b><I>--verify</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verifies a signature against a file. Requires the signer's public key.<br><br><b><I>--import</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Imports public or private keys from a file or standard input into the keyring.<br><br><b><I>--export</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports public or private keys from the keyring to a file or standard output.<br><br><b><I>--list-keys</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all public keys (or specified ones) in the public keyring.<br><br><b><I>--gen-key</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a new PGP key pair (public and private keys).<br><br><b><I>-r</I>, <I>--recipient</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a recipient's User ID or key ID for encryption.<br><br><b><I>-u</I>, <I>--local-user</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the key to be used for signing or decrypting data.<br><br><b><I>-o</I>, <I>--output</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes output to the specified file instead of standard output.<br><br><b><I>--armor</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates ASCII armored output, which is base64 encoded and suitable for email or text transfer.<br><br>


title: DESCRIPTION
content:
The <b>gpg</b> (GNU Privacy Guard) command is a powerful, free, and complete implementation of the OpenPGP standard (RFC 4880). It provides cryptographic privacy and authentication for data communication. Users can encrypt files and emails, ensuring only intended recipients can read them, and digitally sign data, allowing recipients to verify its origin and integrity. <br><br><b>gpg</b> features an advanced key management system, enabling users to generate, import, export, and revoke cryptographic key pairs (a public key and a private key). It's widely used in Linux environments for various security tasks, including secure email, file encryption, software package verification, and secure communication channels. Its flexibility and adherence to open standards make it a cornerstone tool for digital security and privacy.


title: CAVEATS
content:
<b>Complexity:</b> <b>gpg</b> can be complex, especially for key management and understanding the Web of Trust.<br><br><b>Passphrase Security:</b> The security of your private keys heavily depends on the strength of your passphrase. A weak passphrase renders strong encryption useless.<br><br><b>Key Loss:</b> Losing your private key means losing access to encrypted data and the ability to sign data. Back up your keys securely.<br><br><b>Metadata Leakage:</b> <b>gpg</b> encrypts content but not metadata (e.g., file names, sizes, communication patterns), which can still reveal information.<br><br><b>No Perfect Forward Secrecy:</b> Standard <b>gpg</b> encryption doesn't offer perfect forward secrecy by default, meaning if your private key is compromised, past communications encrypted with that key could be retroactively decrypted.


title: KEYRINGS
content:
<b>gpg</b> maintains two primary keyrings: the <I>public keyring</I> (<I>pubring.kbx</I>) for storing public keys of others and your own, and the <I>private keyring</I> (<I>privring.kbx</I>) for storing your secret (private) keys. These keyrings are typically located in the <I>~/.gnupg/</I> directory.


title: WEB OF TRUST
content:
Instead of relying on a centralized Certificate Authority model, OpenPGP uses a 'Web of Trust'. Users sign each other's public keys to vouch for their authenticity, building a decentralized network of trust. This allows users to determine how much they trust a key based on who has signed it.


title: GPG-AGENT
content:
The <I>gpg-agent</I> is a utility that manages private keys and passphrases. It caches passphrases for a configurable period, reducing the need to enter them repeatedly when performing cryptographic operations, thus improving usability while maintaining security.


title: CONFIGURATION
content:
The main configuration file for <b>gpg</b> is <I>~/.gnupg/gpg.conf</I>. Users can define default options, preferred algorithms, key server settings, and other behaviors in this file to customize their <b>gpg</b> experience.


title: HISTORY
content:
<b>gpg</b> (GNU Privacy Guard) was started in 1997 by Werner Koch as a free replacement for the proprietary PGP software. The first stable version, 1.0.0, was released on September 7, 1999. It quickly gained traction as the open-source community's preferred tool for OpenPGP-compatible cryptography. <b>gpg</b> adheres strictly to the OpenPGP standard (RFC 4880) and has become an integral part of nearly every Linux distribution and a foundational component for securing software releases, email communication, and data storage across the internet.


title: SYNOPSIS
content:
<b>gpgv</b> [<i>options</i>] [<i>files</i>]<br><br><i>Examples:</i><br><b>gpgv</b> <i>--keyring</i> <i>./trustedkeys.gpg</i> <i>signature.sig</i> <i>file.txt</i><br><b>gpgv</b> <i>package.deb.sig</i><br><b>gpgv</b> <i>--status-fd</i> <i>1</i> <i>my_signed_document.pdf.sig</i> <i>my_signed_document.pdf</i>


title: PARAMETERS
content:
<b><i>--homedir DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative GnuPG home directory for configurations and keyrings.<br><br><b><i>--keyring FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses <i>FILE</i> as the public keyring for verification. Essential when keys are not in the default location.<br><br><b><i>--keyid-format FORMAT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls the display format of key IDs (e.g., <i>long</i>, <i>0xlong</i>).<br><br><b><i>--status-fd FD</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs status output to a specified file descriptor, useful for script parsing.<br><br><b><i>--output FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the verified (decrypted) data to <i>FILE</i>. Applies if the signature is embedded or 'clearsigned'.<br><br><b><i>--verbose</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of output, showing more details about the verification process.<br><br><b><i>--quiet</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most informational output, only showing errors.<br><br><b><i>--batch</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables interactive prompts, making it suitable for scripting and automated environments.<br><br><b><i>--no-default-keyring</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly prevents <b>gpgv</b> from using the default GnuPG keyring, enforcing isolated verification.<br><br><b><i>--ignore-time-conflict</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disregards conflicts in creation and verification times of signatures.<br><br><b><i>--ignore-valid-until</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignores the 'valid until' timestamp of keys, allowing verification with expired keys.<br><br>


title: DESCRIPTION
content:
<b>gpgv</b> is a command-line utility designed specifically for verifying cryptographic signatures generated by GnuPG. It acts as a lightweight wrapper around <i>gpg --verify</i>, but with a crucial distinction: it generally <i>does not</i> access or require the user's GnuPG keyring for signature validation. This makes <b>gpgv</b> ideal for scenarios where a quick, isolated signature check is needed, often without local access to trusted public keys.<br><br>It's commonly used by package managers and automated scripts to verify the integrity and authenticity of downloaded files or software packages against a known public key provided out-of-band. While <b>gpg</b> is a comprehensive tool for encryption, decryption, and key management, <b>gpgv</b> focuses solely on the verification aspect, offering a simpler and often more secure execution environment by minimizing external dependencies.


title: CAVEATS
content:
<b>gpgv</b> typically operates in a more restricted environment than the full <b>gpg</b> command. It generally <i>does not</i> automatically access or use the user's default GnuPG keyring for trust evaluation, requiring public keys to be explicitly provided (e.g., via <i>--keyring</i> option or by being present in the same directory for detached signatures). This isolation enhances security but means it won't perform comprehensive trust chain validation unless configured to do so. It is designed solely for signature verification, not for encryption, decryption, or key management.


title: USE CASES
content:
<b>gpgv</b> is widely used in Linux package management systems (e.g., APT, RPM, Pacman) to verify the authenticity and integrity of downloaded packages before installation. It ensures that packages originate from trusted sources and haven't been tampered with. It's also suitable for verifying software releases, ISO images, or any digitally signed file in automated scripts or restricted environments where a full GnuPG installation is not necessary or desirable.


title: KEYRING INTERACTION
content:
Unlike <b>gpg</b>, <b>gpgv</b>'s default behavior often involves <i>not</i> using the user's default keyring. For successful verification, the public key of the signer must typically be provided explicitly (e.g., via <i>--keyring</i> <i>FILE</i> or by being present in the working directory alongside the signed file) or implicitly known to the environment. This design choice contributes to its security by preventing unintended key lookups and ensuring that verification relies only on specified trust anchors.


title: HISTORY
content:
<b>gpgv</b> emerged as part of the GnuPG (GNU Privacy Guard) project, which began development in the late 1990s as a free replacement for Symantec's PGP (Pretty Good Privacy) software. While the core <b>gpg</b> command handles a wide range of cryptographic operations, the need for a simplified, verification-only tool became apparent, especially for automated scripts and package management systems.<br><br><b>gpgv</b> essentially acts as a streamlined wrapper around <i>gpg --verify</i>, offering a more minimal and often more secure footprint by intentionally limiting its interaction with keyrings and complex trust models by default. Its development reflects a focus on secure, auditable verification for public software distribution.


title: SYNOPSIS
content:
<B>gradle</B> [<I>option</I>...] [<I>task</I>...]<br><br>Examples:<br>  <I>gradle build</I><br>  <I>gradle clean test</I><br>  <I>gradle --info assemble</I>


title: PARAMETERS
content:
<b><I>--version</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays Gradle version information.<br><br><b><I>--help</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a help message for the command-line options.<br><br><b><I>--build-file <file></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the build file to use (e.g., <I>build.gradle</I>).<br><br><b><I>-b <file></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shorthand for <I>--build-file</I>.<br><br><b><I>--project-dir <dir></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the start directory for Gradle.<br><br><b><I>-p <dir></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shorthand for <I>--project-dir</I>.<br><br><b><I>--daemon</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the Gradle Daemon for faster build execution. This is the default behavior.<br><br><b><I>--no-daemon</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not use the Gradle Daemon. A new JVM process will be started for the build.<br><br><b><I>--refresh-dependencies</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Refreshes all external dependencies.<br><br><b><I>--stacktrace</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the stacktrace on error.<br><br><b><I>--info</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging level to INFO.<br><br><b><I>--debug</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging level to DEBUG.<br><br><b><I>--offline</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Works offline, without accessing network resources.<br><br><b><I>--parallel</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows tasks to be executed in parallel.<br><br><b><I>--configure-on-demand</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Configures projects only as needed by the requested tasks.<br><br>


title: DESCRIPTION
content:
The <I>gradle</I> command executes <I>Gradle</I>, an open-source build automation tool that combines the best features of Apache Ant and Apache Maven. It is renowned for its flexibility, performance, and its use of a Groovy or Kotlin-based Domain Specific Language (DSL) for defining build scripts.<br><br>Gradle is widely used for building diverse projects, including Java, Android, C/C++, and web applications. Key features include incremental builds, a build cache, and the Gradle Daemon, all contributing to faster build times. Its plugin-driven architecture allows for extensive customization and integration with various development ecosystems, making it a highly adaptable solution for complex software development workflows.


title: CAVEATS
content:
The flexibility and power of Gradle come with a potential learning curve, especially concerning its DSL and custom task definitions. For large projects, build scripts can become complex if not well-structured. The Gradle Daemon can consume significant memory, although it greatly improves subsequent build times.


title: BUILD SCRIPTS
content:
Gradle build logic is defined in files named <I>build.gradle</I> (Groovy) or <I>build.gradle.kts</I> (Kotlin). These scripts declare project dependencies, define tasks, and apply plugins to extend functionality.


title: PLUGINS
content:
Gradle's core functionality is extended via plugins. Plugins encapsulate reusable build logic for common scenarios, such as compiling Java code, packaging Android applications, or publishing libraries.


title: GRADLE DAEMON
content:
The Gradle Daemon is a long-lived background process that keeps a JVM instance running. This significantly reduces startup time for subsequent builds, as the JVM doesn't need to be initialized from scratch and project structure can be cached.


title: GRADLE WRAPPER
content:
The Gradle Wrapper (<I>gradlew</I> on Linux/macOS, <I>gradlew.bat</I> on Windows) is a script that ensures a consistent Gradle version is used across different development environments, automatically downloading it if necessary. This promotes reproducible builds.


title: HISTORY
content:
Gradle was first released in 2007. It gained significant traction, particularly after becoming the official build system for Android development in 2013. Initially using a Groovy DSL, Gradle introduced support for a Kotlin DSL in 2017, providing a more type-safe and IDE-friendly scripting experience. Continuous development has focused on performance improvements, including the introduction of the Gradle Daemon, build cache, and configuration cache.


title: PARAMETERS
content:
<b>-i, --ignore-case</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore case distinctions in the <i>EXPRESSION</i>.<br><br><b>-v, --invert-match</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Select non-matching lines instead of matching lines.<br><br><b>-n, --line-number</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prefix each output line with the 1-based line number within its respective file.<br><br><b>-c, --count</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress normal output; instead print a count of matching lines for each input file.<br><br><b>-l, --files-with-matches</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress normal output; instead print the name of each input file from which output would normally have been produced.<br><br><b>-E, --extended-regexp</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret <i>EXPRESSION</i> as an extended regular expression (ERE).<br><br><b>-F, --fixed-strings</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret <i>EXPRESSION</i> as a list of fixed strings, separated by newlines, any of which is to be matched.<br><br><b>-p NUM, --strip=NUM</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip <i>NUM</i> leading path components from file names mentioned in the diff, similar to <i>patch -p</i>.<br><br><b>--color[=WHEN]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Highlight matches. <i>WHEN</i> can be 'always', 'never', or 'auto'.<br><br><b>-h, --no-filename</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress the prefixing of file names on output when there is more than one file matched.<br><br>


title: DESCRIPTION
content:
<i>grepdiff</i> is a specialized command-line utility designed to search for a specified regular expression pattern exclusively within the lines and files affected by a diff (patch) output. Instead of performing a general search across an entire filesystem or directory, <i>grepdiff</i> intelligently parses a diff stream (from standard input or a file) to identify the modified or new content.<br><br>It then applies <i>grep</i> only to these targeted sections, effectively allowing users to find specific patterns within recent changes or proposed modifications. This command is exceptionally valuable for code reviews, debugging, and analyzing patches, as it helps narrow down searches to relevant code. It processes diff outputs typically generated by tools like <i>diff -u</i> or <i>git diff</i>, providing a powerful way to inspect the evolution of codebases.


title: CAVEATS
content:
<i>grepdiff</i> processes the <b>output</b> of a diff tool, not the files directly. It operates on the *new* state of files as represented by the diff, not the original or intermediate states. Its effectiveness relies on the diff format being correctly parsed (typically unified or context diffs).


title: INPUT HANDLING
content:
<i>grepdiff</i> expects its input to be a diff (patch) file. This input can be provided as an argument to the command or, more commonly, piped directly from the standard output of a diff-generating command (e.g., <i>diff -u file1 file2 | grepdiff 'pattern'</i> or <i>git diff | grepdiff 'pattern'</i>). It then intelligently parses this diff content to identify the files and specific lines that have been changed, added, or deleted.


title: TARGETED SEARCH EFFICIENCY
content:
The primary advantage of <i>grepdiff</i> over a recursive <i>grep</i> (e.g., <i>grep -r 'pattern' .</i>) is its highly targeted approach. Instead of searching entire directories, it focuses its search solely on the content that has been modified or newly introduced within a given diff. This significantly improves search efficiency, especially in large projects or when reviewing extensive changes, as it avoids unnecessary processing of unchanged files or irrelevant parts of code.


title: HISTORY
content:
<i>grepdiff</i> is part of the <b>patchutils</b> collection, a suite of tools designed to facilitate working with patches and diffs in Unix-like environments. It was developed to extend the functionality of standard utilities like <i>grep</i> and <i>diff</i>, providing more sophisticated methods for analyzing and manipulating code changes. Its existence addresses the need for targeted searching specifically within the context of source code modifications, complementing version control workflows.


title: PARAMETERS
content:
<b>compile</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compiles an XML resource description file into a binary GResource bundle or C source code.<br><br><b>list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the virtual paths of all resources contained within a GResource bundle.<br><br><b>cat</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the content of a specified resource from a GResource bundle to standard output.<br><br><b>extract</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts a specified resource from a GResource bundle to a file on the filesystem.<br><br><b>--output=<I>FILE</I>, -o <I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output file for compiled resources (used with <I>compile</I>) or extracted resources (used with <I>extract</I>). Defaults to standard output.<br><br><b>--generate-header</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <I>compile</I> to generate a C header file containing declarations for the compiled resources.<br><br><b>--generate-source</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <I>compile</I> to generate a C source file that can be compiled and linked directly into an application.<br><br><b>--dependency-file=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <I>compile</I> to generate a Makefile-style dependency file, listing all input files required to build the resource bundle.<br><br><b>--manual-aliases</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <I>compile</I> to prevent <I>gresource</I> from automatically generating resource aliases based on filenames. Aliases must then be explicitly defined in the XML.<br><br><b>--section=<I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <I>list</I> to filter the output, showing only resources under a specific virtual path prefix.<br><br><b>--gresource-path=<I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an additional directory to search for GResource bundles at runtime when using commands like <I>list</I> or <I>cat</I>.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information for the <I>gresource</I> command.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information and usage details for the <I>gresource</I> command.<br><br>


title: DESCRIPTION
content:
The <I>gresource</I> command-line utility, part of the GLib library, facilitates the management of GResources. These are binary containers designed to bundle various application-specific data, such as UI definitions (e.g., GTK+ .ui files), icons, images, CSS stylesheets, and translations. Its primary function is to compile an XML resource description (a .gresource.xml file) into a binary .gresource file or directly into C source code that can be linked with an application. This method simplifies application deployment by embedding or bundling all necessary assets, reducing reliance on external files and potentially improving startup performance. Beyond compilation, <I>gresource</I> also offers commands to list, extract, or display the content of resources from existing .gresource files, proving invaluable for inspection and debugging during development.


title: CAVEATS
content:
<I>gresource</I> is primarily a build-time utility; while <I>list</I> and <I>cat</I> can inspect runtime resources, its main use is compilation. The <I>.gresource.xml</I> format is specific to GLib and defines virtual paths. Resource paths are case-sensitive and must be consistently handled. It requires the GLib development headers and libraries to be available on the system for compilation.


title: <B>RESOURCE PATHS</B>
content:
<I>GResources</I> use a virtual path system, typically starting with a leading slash (e.g., <I>/org/example/app/ui/mainwindow.ui</I>). These paths are crucial for defining resources in the <I>.gresource.xml</I> file and for accessing them from application code using functions like <I>g_resources_lookup_data()</I> or <I>g_resources_open_stream()</I>.


title: <B>INTEGRATION WITH BUILD SYSTEMS</B>
content:
In modern build systems like Meson or CMake, <I>gresource</I> is frequently invoked automatically through specialized modules or custom commands (e.g., <I>gnome.compile_resources</I> in Meson). This integration ensures that <I>.gresource</I> files or compiled C source code are seamlessly generated as an integral part of the application's overall build process.


title: HISTORY
content:
GResources were introduced in GLib 2.32 (around 2012) to standardize and simplify resource management for applications, particularly those built with GTK+ and GLib. Prior to this, applications often managed assets as loose files, which complicated deployment and could lead to runtime issues. The <I>gresource</I> command-line tool was developed alongside this feature, providing essential capabilities for compiling resources into a single binary blob, thereby improving application startup times and streamlining distribution by bundling all necessary assets.


title: SYNOPSIS
content:
<b>grim</b> [OPTIONS] [FILE]<br><i>If FILE is omitted, <b>grim</b> will write to standard output.</i>


title: PARAMETERS
content:
<b><b>-g</b> &lt;geometry&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Grab a specific region of the screen. The geometry string is typically in the format 'WxH+X+Y' (width, height, x-offset, y-offset) or can be provided by <i>slurp</i>.<br><br><b><b>-o</b> &lt;output&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output name (e.g., 'DP-1', 'eDP-1') to capture a screenshot from a specific monitor. Use <i>grim -l</i> to list available outputs.<br><br><b><b>-s</b> &lt;factor&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Apply a scaling factor to the captured image. Useful for HiDPI displays.<br><br><b><b>-t</b> &lt;format&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output image format. Supported formats include <i>png</i> (default), <i>jpeg</i>, and <i>webp</i>.<br><br><b><b>-q</b> &lt;quality&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the compression quality for <i>jpeg</i> and <i>webp</i> formats. Value ranges from 0 to 100.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List available Wayland outputs (monitors) and their current configurations.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message and exit.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show version information and exit.<br><br>


title: DESCRIPTION
content:
<b>grim</b> is a command-line utility for taking screenshots on Wayland compositors. It is part of the <i>wlroots</i> project, which provides a composable Wayland compositor library.<br><br>Unlike traditional X11 screenshot tools, <b>grim</b> interacts directly with the Wayland compositor via the <i>xdg-desktop-portal</i> and <i>wlr-screencopy</i> protocols, ensuring native Wayland compatibility and security.<br><br><b>grim</b> adheres to the Unix philosophy, focusing solely on capturing pixel data from the screen. It does not provide any graphical user interface for region selection or image manipulation. For selecting a specific region, it is commonly used in conjunction with tools like <i>slurp</i>. For copying the screenshot to the clipboard, tools like <i>wl-copy</i> are employed. This modular approach allows users to combine <b>grim</b> with their preferred utilities for a customized screenshot workflow.


title: CAVEATS
content:
<b>grim</b> is designed exclusively for Wayland compositors and will not function on Xorg-based desktop environments. It relies on specific Wayland protocols (<i>wlr-screencopy</i> and <i>xdg-desktop-portal</i>) that must be supported by your compositor. It lacks built-in features for region selection or clipboard integration, requiring external tools for these functionalities.


title: USAGE EXAMPLES
content:
Here are common ways to use <b>grim</b>:<br><br><b>Full screenshot to file:</b><br><code>grim ~/screenshot_$(date +%Y%m%d_%H%M%S).png</code><br><i>Captures the entire screen and saves it with a timestamped filename.</i><br><br><b>Region screenshot to file:</b><br><code>grim -g "$(slurp)" ~/region_shot.png</code><br><i>Uses <i>slurp</i> to interactively select a region, then captures and saves it.</i><br><br><b>Full screenshot to clipboard:</b><br><code>grim - | wl-copy</code><br><i>Captures the entire screen and pipes the image data directly to <i>wl-copy</i> to put it on the Wayland clipboard.</i><br><br><b>Region screenshot to clipboard:</b><br><code>grim -g "$(slurp)" - | wl-copy</code><br><i>Selects a region, captures it, and copies it to the clipboard.</i><br><br><b>Screenshot a specific monitor:</b><br><code>grim -o DP-1 ~/monitor_screenshot.png</code><br><i>Captures only the content of the monitor named 'DP-1'.</i>


title: HISTORY
content:
<b>grim</b> was developed as a crucial part of the <i>wlroots</i> ecosystem, primarily by contributors associated with the <i>swaywm</i> project. Its creation addressed the need for a robust and secure screenshot utility on Wayland, where traditional X11 tools like <i>scrot</i> or <i>gnome-screenshot</i> are not compatible. Its development reflects the Wayland philosophy of security, simplicity, and reliance on compositors for screen access, leading to its design as a single-purpose tool that integrates well with other command-line utilities.


title: PARAMETERS
content:
<b><b>-o</b> <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs the output PDF content to the specified <I>file</I> instead of standard output.<br><br><b><b>-I</b> <I>dir</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds <I>dir</I> to the search path for input files, such as macro packages or included source files.<br><br><b><b>-m</b> <I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads the macro file `name.tmac` before processing the input.<br><br><b><b>-e</b>, <b>-p</b>, <b>-t</b>, <b>-s</b>, <b>-g</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable specific <i>groff</i> preprocessors for equations (<i>eqn</i>), pictures (<i>pic</i>), tables (<i>tbl</i>), section elimination (<i>soelim</i>), and graphs (<i>grap</i>), respectively.<br><br><b><I>file</I> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more input <i>groff</i> source files to be processed. If no files are provided, <i>gropdf</i> reads from standard input.<br><br><b><i>Any other groff option</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;All other command-line options accepted by <i>groff(1)</i> are also valid and directly passed to the underlying <i>groff</i> command.<br><br>


title: DESCRIPTION
content:
<i>gropdf</i> is a utility script designed to convert <i>groff</i> (or <i>troff</i>) formatted input directly into PDF format. It serves as a convenient wrapper around the powerful <i>groff</i> command, specifically invoking it with the <b>-Tpdf</b> device driver option. <i>groff</i> is a comprehensive document formatting system, offering a free implementation of the classic <i>troff</i> and <i>nroff</i> text processors. <br><br>The primary purpose of <i>gropdf</i> is to simplify the generation of high-quality, print-ready, or digitally viewable PDF documents from <i>groff</i> source files. These source files can contain complex formatting directives, macro packages, and instructions for various preprocessors like <i>eqn</i> for mathematical equations, <i>pic</i> for diagrams, and <i>tbl</i> for tables. <br><br><i>gropdf</i> reads its input from standard input or from specified files, processing the text and formatting commands, and then outputs the resulting PDF content to standard output or a specified file. It is particularly useful for producing technical documentation, man pages, or any structured text that benefits from precise typesetting and universal PDF accessibility.


title: CAVEATS
content:
<i>gropdf</i> relies entirely on the <i>groff</i> installation and its configuration. <br>The quality and appearance of the generated PDF depend on the correctness of the <i>groff</i> source, the fonts available to <i>groff</i>, and the capabilities of the <i>groff</i> PDF device driver. <br>While <i>groff</i> aims for high fidelity, some extremely complex graphical elements or specific PostScript features from older preprocessors might not render identically in PDF without careful adjustment or external PostScript-to-PDF conversion tools (though modern <i>groff -Tpdf</i> typically handles this directly).


title: STANDARD INPUT AND OUTPUT
content:
When no input files are specified, <i>gropdf</i> reads the <i>groff</i> source from standard input. Unless the <b>-o</b> option is used, the generated PDF content is written to standard output, allowing for command piping.


title: ENVIRONMENT VARIABLES
content:
As <i>gropdf</i> is a wrapper for <i>groff</i>, its behavior can be influenced by various environment variables that affect <i>groff</i>, such as <b>GROFF_TMAC_PATH</b> (for macro search paths), <b>GROFF_FONT_PATH</b> (for font search paths), and others that control <i>groff</i>'s preprocessors or output options.


title: HISTORY
content:
The <i>groff</i> project, a free implementation of AT&T's <i>troff</i>, was initiated by James Clark in the early 1990s. As PDF emerged as a dominant document format, the need for direct PDF output from <i>groff</i> became evident. The <b>-Tpdf</b> device driver within <i>groff</i> was developed to meet this demand, allowing <i>groff</i> to natively produce PDF. <i>gropdf</i> itself is typically not a standalone compiled binary but rather a shell script or a symbolic link provided for user convenience, acting as a simple wrapper to invoke <i>groff -Tpdf</i>. Its development and usage are intrinsically linked to the evolution and capabilities of the <i>groff</i> system itself, offering a streamlined workflow for PDF generation from <i>groff</i> sources, bypassing intermediate PostScript steps.


title: SYNOPSIS
content:
<b>grpcurl</b> [<i>GLOBAL_OPTIONS</i>] [<i>CONNECTION_OPTIONS</i>] [<i>CALL_OPTIONS</i>] <i>ADDRESS</i> [<i>METHOD</i> | <b>list</b> | <b>describe</b> [<i>SYMBOL</i>]]


title: PARAMETERS
content:
<b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for <i>grpcurl</i> or a specific subcommand.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows extra details about the RPC, including request/response headers and connection information.<br><br><b><b>-plaintext</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to the server without using TLS (plain text HTTP/2).<br><br><b><b>-insecure</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips TLS certificate verification. Useful for development or self-signed certificates.<br><br><b><b>-d</b>, <b>--data</b> <<i>string</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the request message body, typically as a JSON string or a file path (prefixed with '@').<br><br><b><b>-H</b>, <b>--header</b> <<i>name:value</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a custom HTTP header to the request (e.g., for Authorization or content-type).<br><br><b><b>-rpc-header</b> <<i>name:value</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a gRPC metadata header to the request, which is passed along with the gRPC call.<br><br><b><b>-proto</b> <<i>file</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to <i>.proto</i> source files to load service definitions when reflection is not available.<br><br><b><b>-protoset</b> <<i>file</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to a compiled <i>FileDescriptorSet</i> (protoset) file containing service definitions.<br><br><b><b>-max-time</b> <<i>duration</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum time the call is allowed to take before it is cancelled (e.g., '5s', '1m').<br><br>


title: DESCRIPTION
content:
<i>grpcurl</i> is a command-line tool designed for interacting with gRPC servers, providing a <i>curl</i>-like experience tailored specifically for gRPC. It enables developers and testers to send gRPC requests, inspect responses, and explore service definitions directly from their terminal.<br><br>A key feature of <i>grpcurl</i> is its robust support for gRPC server reflection, which allows it to query a gRPC server for its service and method definitions without requiring local <i>.proto</i> files. This capability significantly simplifies the testing and debugging of gRPC services.<br><br>When server reflection is not enabled, <i>grpcurl</i> can also utilize local <i>.proto</i> files or pre-compiled <i>descriptor sets</i> to understand the service schema. It supports various message formats, including JSON for request payloads and response display, making it intuitive to work with. Furthermore, <i>grpcurl</i> handles different authentication mechanisms, including TLS/SSL for secure communication and client-side certificates for mutual TLS. It is an indispensable tool for anyone working with gRPC-based microservices, offering powerful capabilities for development, testing, and troubleshooting.


title: CAVEATS
content:
While <i>grpcurl</i>'s server reflection capability is powerful, not all gRPC servers enable reflection (e.g., for security or performance reasons). In such cases, you must provide local <i>.proto</i> files or pre-compiled <i>protoset</i> files for <i>grpcurl</i> to understand the service schema. Additionally, interacting with client-streaming or bi-directional streaming RPCs can be more complex, requiring multiple input messages to be provided to <i>grpcurl</i>.


title: SERVER REFLECTION
content:
<i>grpcurl</i>'s most distinctive and powerful feature is its ability to interact with gRPC servers that expose the server reflection service. This allows <i>grpcurl</i> to dynamically discover available services, methods, and their message schemas without needing any local <i>.proto</i> files. This capability significantly streamlines development and testing workflows, eliminating the need to manually manage protobuf definitions on the client side.


title: DATA INPUT FORMATS
content:
For request payloads, <i>grpcurl</i> primarily accepts data in JSON format, which is automatically converted to the appropriate Protobuf message format before being sent to the server. For complex messages or nested structures, <i>grpcurl</i> can also generate a JSON template for a given method using the <b>-msg-template</b> option. This feature greatly simplifies the creation of accurate request payloads by providing a pre-filled structure with default values.


title: HISTORY
content:
<i>grpcurl</i> was developed by FullStory as a practical, open-source command-line solution to interact with gRPC services. It emerged to address the growing need for a <i>curl</i>-like tool specifically designed for the gRPC protocol, filling a significant gap in the ecosystem. Its focus on server reflection capabilities quickly made it a widely adopted and invaluable tool for developers and engineers working with gRPC-based microservices, simplifying development, testing, and debugging workflows.


title: PARAMETERS
content:
<b><b>-r</b> <i>root_dir</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Apply changes in the <i>root_dir</i> directory instead of the default root (<i>/</i>). This is useful for chrooted environments or system recovery.<br><br><b><b>--root</b> <i>root_dir</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long form of <b>-r</b> option.<br><br>


title: DESCRIPTION
content:
<i>grpunconv</i> (group unconvert) is a utility used to merge the contents of the <i>/etc/gshadow</i> (shadowed group password) file back into the <i>/etc/group</i> file. This effectively reverses the action of the <i>grpconv</i> command.<br><br>Its primary purpose is to convert a system using shadowed group passwords to a traditional setup where group passwords (or 'x' if no password) are stored directly within <i>/etc/group</i>.<br><br>When executed, <i>grpunconv</i> reads entries from both <i>/etc/group</i> and <i>/etc/gshadow</i>. For each group, it updates the <i>/etc/group</i> entry to include the password field (either the encrypted hash from <i>gshadow</i> or 'x' if <i>gshadow</i> indicates no password).<br><br>Upon successful completion, a new <i>/etc/group</i> file is created, and the <i>/etc/gshadow</i> file is then removed. The original files may be backed up, depending on system configuration. This command is typically used when transitioning away from shadow password management for groups, or on systems where group shadowing is not desired or supported.


title: CAVEATS
content:
This command modifies critical system configuration files (<i>/etc/group</i>). It is highly recommended to create manual backups of both <i>/etc/group</i> and <i>/etc/gshadow</i> before execution.<br><br>Running <i>grpunconv</i> will remove the <i>/etc/gshadow</i> file. Group password hashes will then be stored directly in <i>/etc/group</i>, making them potentially readable by any user who can read <i>/etc/group</i>.<br><br>This operation reduces the security of group password management compared to a shadowed setup. Shadowing (<i>grpconv</i>) was introduced specifically to protect hashed passwords from being easily readable by unprivileged users.<br><br>The command must be run with superuser privileges (e.g., <i>root</i>).


title: FILE MANAGEMENT
content:
Upon successful execution, <i>grpunconv</i> typically creates backup copies of the original <i>/etc/group</i> and <i>/etc/gshadow</i> files (e.g., <i>/etc/group-</i> and <i>/etc/gshadow-</i> respectively, though exact naming can vary by system or <i>shadow-utils</i> version). The <i>/etc/gshadow</i> file is then deleted, and <i>/etc/group</i> is rewritten with the merged information.


title: HISTORY
content:
The <i>grpunconv</i> command is part of the <i>shadow-utils</i> package, a suite of programs for managing user and group accounts and passwords. The <i>shadow-utils</i> package was developed to enhance system security by separating encrypted passwords into shadow files, making them inaccessible to regular users.<br><br>While <i>grpconv</i> moves group password information to a separate, restricted <i>gshadow</i> file, <i>grpunconv</i> serves the purpose of reverting this change, consolidating group data back into the main <i>/etc/group</i> file. This functionality has been a stable part of <i>shadow-utils</i> for many years, providing flexibility for system administrators to choose between shadowed and non-shadowed group password management.


title: PARAMETERS
content:
<b><i>FILE</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more files to check. The command will classify each file as an <i>image</i>, a <i>device</i>, or <i>unknown</i>.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with usage information and exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <b>grub-file</b> version information and exits.<br><br>


title: DESCRIPTION
content:
The <b>grub-file</b> command is a utility from the GRUB bootloader suite. Its primary function is to determine if a given file path refers to a GRUB-recognized image file or a device. When executed, it analyzes the specified file(s) and outputs a classification: "image", "device", or "unknown". This classification is crucial for GRUB's internal operations and can be helpful for system administrators or developers working with GRUB components. It provides a quick way to verify the type of a file in the context of GRUB's expectations. The command exits with a specific status code (0 for image, 1 for device, 2 for unknown), making it suitable for scripting and automated checks.


title: CAVEATS
content:
The classification ("image" or "device") provided by <b>grub-file</b> is specific to how GRUB recognizes these entities internally. A file classified as "image" is typically a GRUB core image, module, or other GRUB-specific binary, not a general disk image. Similarly, "device" refers to something GRUB treats as a bootable device or partition. This command does not parse general filesystem contents or determine if a file is a generic disk image (e.g., an ISO or raw disk dump).


title: EXIT STATUS CODES
content:
<b>grub-file</b> provides specific exit status codes to indicate the result of its check, making it highly suitable for scripting and automated checks:<br><i>0</i>: The <i>FILE</i> is an <i>image</i>.<br><i>1</i>: The <i>FILE</i> is a <i>device</i>.<br><i>2</i>: The <i>FILE</i> is <i>unknown</i> or an error occurred.


title: HISTORY
content:
The <b>grub-file</b> command is an integral part of the GRUB 2 bootloader project. GRUB (Grand Unified Bootloader) is a free and open-source boot loader package, with GRUB 2 being its more powerful and flexible successor to the original GRUB Legacy. Utilities like <b>grub-file</b> were developed as part of GRUB 2's modular architecture to assist with development, debugging, and system administration, offering specific tools for managing and verifying GRUB's various components and images. Its specific role has remained consistent within the GRUB 2 ecosystem since its introduction.


title: PARAMETERS
content:
<b><b>--target=</b><i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the type of information to print. <i>NAME</i> can be one of many options like <i>fs_uuid</i>, <i>fs_type</i>, <i>drive</i>, <i>part_uuid</i>, <i>bios_device</i>, etc.<br><br><b><b>--device</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat the input <i>PATH</i> as a device path. This is the default behavior.<br><br><b><b>--file</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat the input <i>PATH</i> as a regular file path, not a device.<br><br><b><b>--skip-fs-probe</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not attempt to probe for filesystem-related information.<br><br><b><b>--skip-dev-probe</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not attempt to probe for device-related information (e.g., BIOS, EFI device names).<br><br><b><b>--allow-floppy</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allow probing of floppy drives (often deprecated in modern systems).<br><br><b><b>--unrestricted-device-names</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Permit the use of non-standard or unusual device names in the input.<br><br><b><b>--root-dir=</b><i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative root directory (<i>DIR</i>) for probing, useful in chroot or rescue environments.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output version information and exit.<br><br>


title: DESCRIPTION
content:
<i>grub-probe</i> is a utility from the GRUB bootloader suite designed to inspect a given device or path and output various pieces of information relevant to GRUB. This information can include the GRUB device name, filesystem type, UUIDs, partition types, and other boot-related details. It's often used by GRUB installation scripts or administrators to gather necessary data for configuring GRUB, identifying bootable partitions, or debugging boot issues. It helps GRUB understand the underlying storage layout without needing to parse complex low-level structures manually.


title: CAVEATS
content:
<i>grub-probe</i> often requires root privileges to access raw device information. The output format and available targets can vary slightly between GRUB versions. While powerful for GRUB's needs, it's not a general-purpose disk utility and its primary use is for bootloader configuration and debugging. Using <b>--allow-floppy</b> is generally deprecated.


title: INTEGRATION WITH GRUB CONFIGURATION
content:
<i>grub-probe</i> is extensively used by other GRUB utilities like <i>grub-install</i> and <i>grub-mkconfig</i>. It provides the necessary UUIDs, labels, and device mappings that are crucial for generating the <i>grub.cfg</i> file, ensuring that GRUB can correctly locate and boot operating systems even if device names change.


title: OUTPUT AND ERROR HANDLING
content:
By default, <i>grub-probe</i> prints the requested information to standard output. If it cannot find the specified information or encounters an error, it typically exits with a non-zero status code and may print an error message to standard error, making it suitable for scripting.


title: HISTORY
content:
<i>grub-probe</i> is a core utility introduced with GRUB 2, the successor to GRUB Legacy. Its development was driven by the need for a more robust and automated way to identify devices, filesystems, and partitions for bootloader configuration. Unlike its predecessor, GRUB 2 aimed for greater flexibility and broader hardware support, and <i>grub-probe</i> plays a crucial role in enabling GRUB to adapt to diverse system layouts without manual intervention. It helps abstract the underlying storage details, making GRUB configuration more resilient to system changes.


title: PARAMETERS
content:
<b><B>list-schemas</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all installed GSettings schemas.<br><br><b><B>list-keys</B> <I>SCHEMA</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the keys (settings) available within a specified <I>SCHEMA</I>.<br><br><b><B>list-children</B> <I>SCHEMA</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the child schemas (sub-directories) of a given <I>SCHEMA</I>.<br><br><b><B>get</B> <I>SCHEMA</I> <I>KEY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the current value of the specified <I>KEY</I> within the <I>SCHEMA</I>.<br><br><b><B>set</B> <I>SCHEMA</I> <I>KEY</I> <I>VALUE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the value of the specified <I>KEY</I> in the <I>SCHEMA</I> to <I>VALUE</I>. The value must be in the correct GVariant format (e.g., 'true', 'false', '"string"', '123').<br><br><b><B>reset</B> <I>SCHEMA</I> <I>KEY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resets the specified <I>KEY</I> in the <I>SCHEMA</I> to its default value.<br><br><b><B>reset-recursively</B> <I>SCHEMA</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resets all keys within the specified <I>SCHEMA</I> and its children to their default values.<br><br><b><B>monitor</B> <I>SCHEMA</I> [<I>KEY</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors changes to a specific <I>KEY</I> or all keys within a <I>SCHEMA</I> and prints updates to standard output.<br><br><b><B>writable</B> <I>SCHEMA</I> <I>KEY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the specified <I>KEY</I> in the <I>SCHEMA</I> is writable by the current user. Returns 0 if writable, 1 otherwise.<br><br><b><B>range</B> <I>SCHEMA</I> <I>KEY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the valid range or enumeration for a specified <I>KEY</I> as defined in its schema.<br><br><b><B>--schemadir</B> <I>DIRECTORY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds <I>DIRECTORY</I> to the list of paths where <I>gsettings</I> looks for schemas.<br><br><b><B>--help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message for the command.<br><br><b><B>--version</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information for <I>gsettings</I>.<br><br>


title: DESCRIPTION
content:
<I>gsettings</I> is a command-line utility for interacting with the <B>GSettings</B> configuration system. <B>GSettings</B> provides a convenient way for applications to store and retrieve their configuration settings, primarily used within the <B>GNOME</B> desktop environment and applications built with <B>GTK</B>.<br><br>It's built on top of the <I>dconf</I> backend, which is a low-level configuration system that stores settings in a binary database. Users can use <I>gsettings</I> to query the current value of a setting, change it, or reset it to its default. It allows exploration of available schemas and keys, making it a powerful tool for system administrators and power users to customize application behavior without using graphical interfaces. Settings are organized hierarchically by schema, providing a structured approach to configuration management.


title: CAVEATS
content:
Changes made via <I>gsettings</I> are typically applied immediately to running applications that monitor those settings. Users can only modify settings for which they have the necessary permissions, usually user-specific settings. Invalid values for settings will be rejected based on the schema's type definitions.


title: SCHEMA FILES
content:
<B>GSettings</B> schemas are defined in XML files, typically located in <I>/usr/share/glib-2.0/schemas/</I> or other directories specified in <I>XDG_DATA_DIRS</I>. These files are compiled into a binary cache (<I>gschemas.compiled</I>) for efficient lookup.


title: BACKEND INTERACTION
content:
While <I>gsettings</I> is the user-facing command, it relies on the <I>dconf</I> backend for actual data storage and retrieval. <I>dconf</I> utilizes a binary database, usually located at <I>~/.config/dconf/user</I> for user-specific settings.


title: SYSTEM-WIDE VS. USER SETTINGS
content:
<I>gsettings</I> primarily interacts with user-specific settings. System-wide default settings and mandatory policies can be configured through <I>dconf</I> profiles and keyfiles found in <I>/etc/dconf/db/</I>.


title: HISTORY
content:
<B>GSettings</B> was introduced as part of the <B>GNOME 3</B> desktop environment, replacing the older <B>GConf</B> configuration system. The transition aimed to provide a more robust, performant, and D-Bus integrated configuration backend, leveraging <I>dconf</I> for efficient storage. While <B>GConf</B> stored settings in XML files, which could lead to performance issues, <B>GSettings</B> addresses these by using a binary database (<I>dconf</I>) and a transactional approach, offering better consistency and scalability for application configuration.


title: SYNOPSIS
content:
<b>handbrakecli</b> [<i>options</i>] <b>-i</b> <i><input_file_or_device></i> <b>-o</b> <i><output_file></i><br><br>Common usage examples:<br><b>handbrakecli -i</b> <i>input.mkv</i> <b>-o</b> <i>output.mp4</i> <b>--preset</b> <i>'Fast 1080p30'</i><br><b>handbrakecli -i</b> <i>/dev/dvd</i> <b>--title</b> <i>1</i> <b>-o</b> <i>movie.mp4</i> <b>--preset</b> <i>'Fast 720p30'</i>


title: PARAMETERS
content:
<b><b>-i</b> <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>input</i> video file, device, or URL to be transcoded.<br><br><b><b>-o</b> <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the <i>output</i> file path for the transcoded video.<br><br><b><b>-Z</b> <i><preset></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies a built-in <i>preset</i>. Use <b>-Z list</b> to see available presets.<br><br><b><b>-t</b> <i><title></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific <i>title</i> from the input (e.g., DVD/Blu-ray). Use <b>-t 0</b> to scan titles.<br><br><b><b>-c</b> <i><chapter></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a specific <i>chapter</i> or range of chapters to encode (e.g., 1, 1-5).<br><br><b><b>-s</b> <i><track></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects <i>subtitle</i> track(s) by index or language. Use 'none' for no subtitles.<br><br><b><b>-a</b> <i><track></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Chooses <i>audio</i> track(s) by index or language. Can be 'none' or 'all'.<br><br><b><b>-e</b> <i><encoder></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the video <i>encoder</i> (e.g., x264, x265, svt_av1).<br><br><b><b>-q</b> <i><quality></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the video <i>quality</i> (CRF value for H.264/H.265; 0-51, lower is better).<br><br><b><b>-r</b> <i><rate></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the video <i>framerate</i> (e.g., 30, 29.97, 'auto').<br><br><b><b>-f</b> <i><format></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the <i>output format</i> or container (e.g., mp4, mkv, webm).<br><br><b><b>--crop</b> <i><T:B:L:R></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manually sets the video <i>crop</i> values (Top:Bottom:Left:Right pixels).<br><br><b><b>--two-pass</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables <i>two-pass</i> encoding for better quality and smaller file sizes.<br><br><b><b>-v</b> <i><level></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the <i>verbosity</i> level of the output messages (0-3; 3 is debug).<br><br>


title: DESCRIPTION
content:
<b>handbrakecli</b> is the command-line interface (CLI) version of HandBrake, a popular open-source video transcoder. It enables users to convert video from almost any format to a selection of modern, widely supported codecs. This tool is ideal for scripting, automation, server-side processing, or situations where a graphical user interface (GUI) is not available or desired. It supports a wide range of input sources, including DVD, Blu-ray discs (with necessary libraries), and video files, and offers extensive control over video and audio settings, subtitles, chapters, and more, leveraging its powerful encoding engine.


title: CAVEATS
content:
Video transcoding is a CPU-intensive process and can take significant time depending on input/output settings and hardware. Understanding video codecs, quality settings (e.g., CRF), and audio options is crucial for optimal results. Copy-protection on commercial discs may require additional third-party libraries not included with HandBrake.


title: LISTING PRESETS AND TITLES
content:
To see all available built-in presets, use <b>handbrakecli -Z list</b>. To scan an input source (like a DVD or MKV with multiple titles) and list its available titles, use <b>handbrakecli -i</b> <i><input></i> <b>-t 0</b>. This is essential for selecting the correct content before encoding.


title: GPU ACCELERATION
content:
While <b>handbrakecli</b> primarily uses CPU for encoding, it can leverage hardware encoders (e.g., Intel Quick Sync Video, NVIDIA NVENC, AMD VCN) if supported by your system and HandBrake's build. Use <b>--encoder</b> to specify a hardware encoder like 'qsv_h264' or 'nvenc_h264'.


title: HISTORY
content:
HandBrake originated in 2003, initially developed as a tool for ripping DVDs to various formats, primarily for use on Apple devices. Over time, it evolved into a powerful general-purpose video transcoder, supporting a vast array of input and output formats beyond just DVDs and Apple targets. The command-line interface, <b>handbrakecli</b>, has always been a core component, enabling automation and server-side processing, which is crucial for large-scale video encoding tasks.


title: SYNOPSIS
content:
<b>hexdump</b> [<i>options</i>] [<i>file...</i>]<br><br><i>Common Usage Examples:</i><br><b>hexdump -C</b> [<i>file...</i>]<br><b>hexdump -n</b> <i>length</i> <b>-s</b> <i>offset</i> [<i>file...</i>]


title: PARAMETERS
content:
<b>-A <i>type</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output address format. <i>type</i> can be `d` (decimal), `o` (octal), `n` (none), or `x` (hexadecimal).<br><br><b>-b</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One-byte octal display. Displays input offset followed by 16 space-separated, three-digit octal bytes per line.<br><br><b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One-byte character display. Displays input offset followed by 16 space-separated, three-character representations of bytes per line.<br><br><b>-C</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>Canonical hex+ASCII display.</b> This is the most common and readable format, showing the input offset, 16 bytes in hexadecimal, and their ASCII equivalent in one line.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Two-byte decimal display. Displays input offset followed by 8 space-separated, five-digit unsigned decimal shorts per line.<br><br><b>-e <i>format_string</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify one or more format strings to be used for displaying data. This offers powerful custom formatting using a syntax similar to <i>printf</i>.<br><br><b>-f <i>format_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a file containing one or more format strings. Useful for complex, reusable formatting definitions.<br><br><b>-L</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>Little-endian byte order.</b> Forces the output for `-d`, `-o`, and `-x` to be little-endian. By default, byte order is system-dependent.<br><br><b>-n <i>length</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret only <i>length</i> bytes of input. Useful for examining specific data blocks or file headers.<br><br><b>-o</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Two-byte octal display. Displays input offset followed by 8 space-separated, six-digit octal shorts per line.<br><br><b>-s <i>offset</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip <i>offset</i> bytes from the beginning of the input before displaying. <i>offset</i> can be specified with suffixes like `k` (Kilo), `m` (Mega), `g` (Giga).<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>Verbose output.</b> Displays all input data. By default, <i>hexdump</i> replaces successive lines of identical output with a single `*` character to save space.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Two-byte hexadecimal display. Displays input offset followed by 8 space-separated, four-digit hexadecimal shorts per line.<br><br>


title: DESCRIPTION
content:
<i>hexdump</i> is a command-line utility used to display the contents of files or standard input in a user-specified format, typically hexadecimal, octal, decimal, or ASCII.<br>It's an indispensable tool for debugging and reverse-engineering binary files, inspecting network packets, or analyzing memory dumps. Unlike simple text editors, <i>hexdump</i> allows users to see every byte of a file, including non-printable characters, which is crucial for understanding low-level data structures and identifying inconsistencies. Its flexibility in output formatting, from simple byte-by-byte views to canonical hex+ASCII, makes it versatile for a wide range of analytical tasks.


title: CAVEATS
content:
By default, <i>hexdump</i> will suppress lines of identical output with a single `*` character. Use the <b>-v</b> option to see all data.<br>The default output format without any flags can be less intuitive, often defaulting to two-byte octal. For human-readable debugging, <b>-C</b> (canonical display) is almost always preferred.<br>Be mindful of byte order (big-endian vs. little-endian) when using <b>-d</b>, <b>-o</b>, or <b>-x</b> without <b>-L</b>, as it's system-dependent.


title: DEFAULT OUTPUT BEHAVIOR
content:
Without any specific format options, <i>hexdump</i> defaults to displaying data as two-byte octal values. This can be unexpected for new users who often anticipate a hexadecimal or ASCII representation. Always specify a format option like <b>-C</b> for clarity.


title: UNDERSTANDING BYTE ORDER
content:
When displaying multi-byte values (e.g., with <b>-d</b>, <b>-o</b>, <b>-x</b>), the order of bytes can differ between systems (big-endian vs. little-endian). Intel x86 architectures are little-endian, meaning the least significant byte is stored at the lowest memory address. The <b>-L</b> option can force little-endian output regardless of the system's native byte order, which is crucial for cross-platform consistency.


title: POWERFUL CUSTOM FORMATTING
content:
The <b>-e</b> and <b>-f</b> options allow for highly customized output using a format string syntax similar to `printf`. This enables users to define specific byte arrangements, data types, and ASCII/hex/decimal representations, making <i>hexdump</i> an incredibly powerful tool for detailed binary analysis.


title: HISTORY
content:
<i>hexdump</i> is part of the standard Unix utilities, commonly found in the `util-linux` package on Linux distributions. Its functionality is similar to the older `od` (Octal Dump) command, but <i>hexdump</i> typically provides more flexible and user-friendly formatting options, especially with its powerful custom format string capabilities.


title: PARAMETERS
content:
<b><B>ACCOUNT_QUERY</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>A pattern or name of an account (or accounts) for which the register should be displayed. This can be a full account name (e.g., "Assets:Bank:Checking") or a regular expression that matches multiple accounts (e.g., "^Expenses"). All transactions affecting matching accounts will be included in the report.</I><br><br><b><B>Other hledger register options</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I><B>hledger-aregister</B> typically acts as a thin wrapper around <B>hledger register</B>. Therefore, most options available to <B>hledger register</B> (such as <B>-f FILE</B> to specify the ledger file, <B>-p PERIOD</B> to filter by date period, <B>-D</B> to display daily running balances, <B>-O FORMAT</B> for output format, etc.) can often be passed directly to <B>hledger-aregister</B> and will be forwarded to the underlying <B>hledger register</B> command.</I><br><br>


title: DESCRIPTION
content:
<I><code>hledger-aregister</code> is a convenience wrapper script built around the core <code>hledger register</code> command. Its primary function is to display a detailed register of transactions for one or more accounts, along with their running balances. It is particularly useful for quickly inspecting the chronological financial activity of specific accounts or groups of accounts.<br><br>While <code>hledger register</code> provides similar functionality, <code>hledger-aregister</code> streamlines the process, often by automatically setting common options like the <B>--monthly</B> (<B>-M</B>) flag for a clearer, aggregated view, or by simplifying the account matching syntax. It typically parses account names or patterns provided as arguments and forwards them along with other standard <code>hledger</code> options to <code>hledger register</code>, making it easier to drill down into account-specific data within your plain text ledger.</I>


title: CAVEATS
content:
<I><B>hledger-aregister</B> is often a community-contributed script or an example provided with <B>hledger</B>, rather than a core binary. Its exact implementation may vary depending on how it's installed or written (e.g., it might be a simple <B>bash</B> script that just calls <B>hledger register -M "$@"</B>).<br><br>Its behavior is largely dependent on the underlying <B>hledger register</B> command; any limitations or features of that command apply. It typically defaults to <B>--monthly</B> (<B>-M</B>) output, which might not be desired for all use cases, though this can usually be overridden by passing conflicting <B>hledger register</B> options.</I>


title: COMMON USE CASES
content:
<I><B>Quick Account Audit:</B> Quickly review all transactions for a specific bank account, credit card, or investment account.<br><br><B>Expense Tracking:</B> Monitor spending within a particular expense category like "Expenses:Food" or "Expenses:Utilities" to understand expenditure patterns.<br><br><B>Drilling Down:</B> After viewing an overall balance report, use <B>hledger-aregister</B> to inspect the granular details of specific accounts that pique your interest.</I>


title: CUSTOMIZATION
content:
<I>Since <B>hledger-aregister</B> is often a simple shell script, users have the flexibility to modify it to suit their specific needs. This might include adding default options (e.g., always filtering by a specific period), changing output formats, or integrating it with other scripts for highly customized financial reporting workflows.</I>


title: HISTORY
content:
<I><B>hledger</B>, the plain text accounting system, was first released in 2008 by Simon Michael. The <B>hledger-aregister</B> script, like many other helper scripts in the <B>hledger</B> ecosystem (e.g., <B>hledger-baltop</B>), emerged from the community as a common utility. It was created to streamline a frequent reporting task for users – quickly viewing account-specific transaction registers – without requiring them to manually type all the options for <B>hledger register</B> repeatedly. It embodies the <B>hledger</B> philosophy of composable tools and leveraging plain text for flexible financial management.</I>


title: PARAMETERS
content:
<b><b>-f FILE, --file FILE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the journal file(s) to be processed. If not specified, <b>hledger</b> looks for standard journal files like <i>~/.hledger.journal</i>.<br><br><b><b>-p PERIOD, --period PERIOD</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters transactions to include only those within a specified period (e.g., '<i>2023/01/01 to 2023/01/31</i>', '<i>this month</i>', '<i>last year</i>').<br><br><b><b>--balance</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the running balance of each account after every transaction, similar to a register report but integrated with the printed journal.<br><br><b><b>--pending</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes transactions marked as pending (not yet reconciled) in the output. By default, pending transactions might be excluded by some reports.<br><br><b><b>--depth N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the display depth of account names to a specified number of components (e.g., '<i>expenses:food</i>' at depth 2).<br><br><b><b>--value</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Converts and displays all amounts in a common value currency, useful for mixed-currency journals.<br><br><b><b>QUERY...</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more query expressions used to filter the transactions. Queries can match account names, payees, transaction descriptions, tags, amounts, or any text within an entry (e.g., '<i>account:expenses</i>', '<i>payee:supermarket</i>', '<i>tag:reimbursable</i>').<br><br>


title: DESCRIPTION
content:
<b>hledger-print</b> is a fundamental utility within the <i>hledger</i> plain text accounting system. It is used to display and format financial transactions and entries from one or more <i>hledger</i> journal files.<br><br>This command offers extensive filtering capabilities, allowing users to view specific transactions based on accounts, payees, dates, tags, or custom queries. It also provides various formatting options, enabling the display of transaction details, balances after each entry, pending transactions, or values in a specific currency. <b>hledger-print</b> is invaluable for reviewing journal contents, debugging accounting issues, or preparing custom reports by piping its output to other command-line tools.


title: CAVEATS
content:
Due to its powerful filtering and formatting options, mastering <b>hledger-print</b>'s full capabilities can take time. Complex queries might require careful syntax. For very large journal files, filtering with specific queries can significantly improve performance by reducing the data processed.


title: QUERYING POWER
content:
The <i>QUERY</i> argument is extremely versatile, enabling highly specific transaction filtering. You can combine multiple queries, use regular expressions, and target different fields of a transaction, making <b>hledger-print</b> suitable for detailed analysis and custom reporting beyond simple display.


title: OUTPUT FORMATTING
content:
While <b>hledger-print</b> offers many built-in options, its output is designed to be easily parsable by other command-line tools. This allows users to pipe the output to tools like <i>grep</i>, <i>awk</i>, <i>sort</i>, or custom scripts for advanced processing, formatting, or integration with other systems.


title: HISTORY
content:
<b>hledger</b>, and by extension <b>hledger-print</b>, originated as a free software reimplementation of the popular <b>ledger</b> command-line accounting program. Developed with a focus on user-friendliness, robustness, and extensibility, <b>hledger-print</b> has been a core component since the early days of the <b>hledger</b> project. Its evolution has focused on enhancing filtering capabilities, output customization, and performance for large datasets, making it an indispensable tool for plain text accounting.


title: SEE ALSO
content:
<b>hledger(1)</b>, <b>hledger-add(1)</b>, <b>hledger-balance(1)</b>, <b>hledger-register(1)</b>, <b>hledger-stats(1)</b>, <b>ledger(1)</b>


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message and exit.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the version number and exit.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display more detailed information, including ignored hints.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress all suggestions, only show errors/warnings.<br><br><b>--hint=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a hint file or module to load custom hints.<br><br><b>--ignore=<I>HINT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore a specific hint by its name, e.g., 'Redundant do'.<br><br><b>--deny=<I>HINT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat a specific hint as an error, causing hlint to exit with a non-zero status if found.<br><br><b>--only=<I>HINT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only apply specific hints and ignore all others.<br><br><b>--suggestions</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display suggestions that can be applied automatically.<br><br><b>--auto</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically apply suggestions to the source files. <i>Use with extreme caution and version control!</i><br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output results in JSON format, suitable for machine parsing.<br><br><b>--report=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate an HTML report of the linting results to the specified file.<br><br><b>--color, --no-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force or disable colored output regardless of terminal capabilities.<br><br><b>--extension=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable a specific GHC language extension (e.g., 'OverloadedStrings').<br><br><b>--fail-on=<I>LEVEL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit with a non-zero status if messages of the specified level (e.g., 'warning', 'error', 'suggestion') or higher are found.<br><br><b>--git</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Analyze only the changes in git-tracked files compared to the last commit.<br><br><b>--dot-hlint=<I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative path to the <code>.hlint.yaml</code> configuration file.<br><br><b>--no-dot-hlint</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent <b>hlint</b> from reading the default <code>.hlint.yaml</code> configuration file.<br><br>


title: DESCRIPTION
content:
<b>hlint</b> is a static analysis tool for Haskell source code that identifies common errors, suggests improvements, and enforces stylistic guidelines. It reads Haskell modules and provides recommendations to make the code more concise, performant, or idiomatic. <br><br>It can detect issues like redundant parentheses, unused imports, inefficient list comprehensions, and opportunities to use more idiomatic Haskell features. <b>hlint</b> leverages GHC's parsing infrastructure to understand the code structure, allowing it to provide sophisticated suggestions beyond simple regex matching. It's an invaluable tool for developers to maintain high code quality, consistency, and learn about better Haskell patterns.


title: CAVEATS
content:
While <b>hlint</b> is powerful, it can occasionally produce false positives, especially with highly specialized domain-specific code or complex type-level programming. The <code>--auto</code> option is destructive and should only be used after committing changes to version control, as it directly modifies source files. Performance on very large codebases might be slow without proper configuration or filtering.


title: CONFIGURATION
content:
<b>hlint</b> can be configured using a <code>.hlint.yaml</code> file placed in the project root or specified via the <code>--dot-hlint</code> option. This file allows users to define custom hints, ignore specific hints globally or for certain paths, and set default options.


title: INTEGRATION
content:
<b>hlint</b> is often integrated into build systems like Cabal and Stack, CI/CD pipelines, and editor plugins (e.g., for VS Code, Emacs, Vim) to provide real-time feedback and enforce coding standards across a team.


title: HISTORY
content:
<b>hlint</b> was created by Neil Mitchell, with its initial public releases dating back to around 2008-2009. It quickly became a standard tool in the Haskell ecosystem for code quality and consistency. It has been actively developed and maintained since its inception, continually adding new hints, improving performance, and adapting to new GHC versions and language features.


title: DESCRIPTION
content:
The `hollywood` command is a humorous and theatrical utility designed to simulate intense, rapid-fire terminal activity, often resembling a 'hacking' scenario. It generates a continuous stream of seemingly complex output, including fake compilation messages, data transfers, network pings, and system logs, all scrolling at a high speed. Its primary purpose is amusement, providing an amusing visual effect for users who want to appear busy, engaged in deep technical work, or simply to prank onlookers. It does not perform any actual system operations, security breaches, or data manipulation; it merely outputs random, pre-canned, or dynamically generated text to the console to create a dramatic and visually impressive 'busy' effect.


title: CAVEATS
content:
The `hollywood` command is purely for amusement and visual effect; it performs no actual system operations or security tasks. <br>While generally light, continuous high-speed output can consume CPU and terminal buffer resources. <br>It is not a standard Linux utility and must often be installed separately. <br>It can quickly fill your terminal scrollback buffer with meaningless data.


title: INSTALLATION
content:
On many Debian/Ubuntu-based systems, `hollywood` can be installed via the `bsdgames` package: <br><br>sudo apt update<br>sudo apt install bsdgames<br><br>Alternatively, similar scripts can be found and manually installed from various online repositories or GitHub projects.


title: USAGE EXAMPLE
content:
To start the simulation, simply type: <br><br>hollywood<br><br>To stop the simulation, press Ctrl+C.


title: HISTORY
content:
The `hollywood` command, or similar scripts achieving the same effect, emerged from the desire to mimic the fast-paced, visually engaging terminal activity often depicted in movies as 'hacking.' It gained significant popularity through viral videos and online demonstrations where individuals would run it to create an impression of intense computer work or 'cybersecurity' operations. While not a part of core Unix utilities, it has become a well-known novelty in the Linux community, often implemented as simple shell scripts or small C programs, and sometimes packaged within collections like `bsdgames`.


title: SYNOPSIS
content:
<i>hp-pkservice</i><br>This command is typically run as a background service by the system's init system (e.g., <i>systemd</i>) and is not intended for direct user invocation with command-line arguments.


title: DESCRIPTION
content:
<i>hp-pkservice</i> is a core background service component of the <b>HPLIP</b> (HP Linux Imaging and Printing) driver suite. Its primary function is to facilitate secure communication and authorization for HPLIP operations through the system's <b>PolicyKit</b> (now often referred to as <i>polkit</i>) framework. PolicyKit is a robust system-wide authorization API used by Linux distributions to allow unprivileged programs to interact safely with privileged system services. <br><br> Specifically, <i>hp-pkservice</i> enables standard, non-root users to perform administrative and configuration tasks related to HP printers and multifunction devices without direct root access. This includes actions like adding or removing printers, modifying device settings, checking supply levels, and managing print queues. It acts as an essential intermediary, receiving requests from HPLIP user applications (e.g., HP Device Manager) and, after proper PolicyKit authorization checks (which might involve a password prompt for the user), relays these requests to the underlying privileged HPLIP components. This design enhances system security by adhering to the principle of least privilege, centralizing authorization, and providing a standardized, secure mechanism for privilege escalation within the HPLIP ecosystem.


title: CAVEATS
content:
Requires the <b>PolicyKit</b> (<i>polkit</i>) framework to be installed and operational on the Linux system for proper authorization. <br>Misconfigured PolicyKit policies or missing HPLIP components can prevent <i>hp-pkservice</i> from functioning correctly, leading to authorization failures for HPLIP-related tasks. <br>It is a background service and should not be manually terminated or invoked directly by users in typical scenarios.


title: SERVICE MANAGEMENT
content:
On systems using <i>systemd</i>, the <i>hp-pkservice</i> is typically managed as a `systemd` service unit. You can check its status using `systemctl status hp-pkservice.service` and restart it if needed via `systemctl restart hp-pkservice.service`.


title: DEPENDENCIES
content:
<i>hp-pkservice</i> relies heavily on the system's <b>PolicyKit</b> (<i>polkit</i>) daemon and the <b>D-Bus</b> message bus system for inter-process communication and authorization requests. Ensure these core components are functioning correctly for <i>hp-pkservice</i> to operate.


title: HISTORY
content:
The <b>HPLIP</b> project itself, of which <i>hp-pkservice</i> is a part, has been under continuous development by HP since the late 1990s to provide robust Linux support for HP devices. The integration of <i>hp-pkservice</i> signifies a move towards modern Linux privilege management via <b>PolicyKit</b> (<i>polkit</i>), which became prevalent in desktop Linux distributions from the mid-2000s onwards. This component was introduced to replace older, less secure methods of privilege escalation, ensuring that HPLIP operations adhere to contemporary security standards by leveraging the system's authorization framework.


title: PARAMETERS
content:
<b><b>-g</b>, <b>--gui</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches the graphical user interface for plugin installation. This is the default if a display environment is detected.<br><br><b><b>-c</b>, <b>--cli</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the command-line interface for plugin installation, even if a graphical environment is available.<br><br><b><b>-i</b>, <b>--install</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates the plugin installation process. This is often implied when the command is run without other specific actions.<br><br><b><b>--check</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks for missing or outdated plugins for the currently installed HPLIP version and connected devices.<br><br><b><b>--plugin</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to an already downloaded plugin file for offline installation. Useful when an internet connection is not available.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the installation or re-installation of the plugin, even if it's already present or appears to be up-to-date.<br><br><b><b>--skip</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips asking for user confirmation during the installation process, making it non-interactive. Use with caution.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulates the plugin installation process without making any actual changes to the system. Useful for testing.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits, showing available options.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the HPLIP version installed on the system and exits.<br><br>


title: DESCRIPTION
content:
The <i>hp-plugin</i> command is an essential utility within the HPLIP (HP Linux Imaging and Printing) software suite. While HPLIP provides open-source drivers for a wide range of HP printers and multi-function devices, some advanced functionalities (such as certain scanner features, fax capabilities, or specific device firmwares) rely on proprietary, closed-source binary plugins. <i>hp-plugin</i> automates the process of downloading, installing, and managing these necessary proprietary components. It typically checks for the correct plugin version required by your installed HPLIP version and connected HP device, ensuring seamless integration and full functionality for your HP hardware on Linux. It can be run interactively to guide the user through the installation, often requiring an internet connection to fetch the plugins.


title: CAVEATS
content:
Requires an active internet connection for automatic plugin download, unless using the <b>--plugin</b> option with a locally available file.<br>Must be run with root or sudo privileges to install plugins into system directories.<br>The installed plugin version must precisely match the installed HPLIP driver version to ensure compatibility and correct functionality.<br>The plugins are proprietary binary files provided by HP, which some users might consider a limitation in an otherwise open-source environment.


title: OFFLINE INSTALLATION
content:
For systems without an internet connection, you can manually download the required plugin file (typically from the HP Developer website for HPLIP) and then use the <b>--plugin</b> <i>&lt;file&gt;</i> option to install it. Ensure the downloaded plugin version matches your HPLIP installation.


title: ROOT PRIVILEGES
content:
To successfully install the proprietary plugins into system directories, <i>hp-plugin</i> must be executed with root privileges. This is commonly done by prefixing the command with <b>sudo</b> (e.g., <b>sudo hp-plugin</b>).


title: HPLIP VERSION MATCHING
content:
It is critical that the version of the proprietary plugin matches the version of your installed HPLIP drivers. Mismatched versions can lead to functionality issues or installation failures. <i>hp-plugin</i> generally handles this automatically when downloading, but it's a key consideration for manual installations.


title: HISTORY
content:
The <i>hp-plugin</i> utility has been an integral part of the HPLIP project since its early days, emerging from the necessity to support advanced features of HP devices that could not be fully implemented with open-source drivers alone. As HP continued to release new printer and multi-function models, some requiring proprietary firmware or specific algorithms, <i>hp-plugin</i> became the designated tool to bridge this gap, ensuring that Linux users could achieve full functionality from their HP hardware. Its development closely tracks the evolution of HPLIP, adapting to new device requirements and distribution environments over more than two decades.


title: SYNOPSIS
content:
Due to its extreme obscurity and likely obsolescence, a standard and universally applicable synopsis for <B>hpftodit</B> is not readily available or well-documented. It would have most likely operated as a filter within a pipeline, taking standard input and producing standard output, similar to:<br><br><I>some_troff_output</I> <B>|</B> <B>hpftodit</B> [<I>options</I>] <B>&gt;</B> <I>hp_device_format_output</I><br><br>Or perhaps taking a file as an argument:<br><br><B>hpftodit</B> [<I>options</I>] <I>input_file</I> <B>&gt;</B> <I>output_file</I>


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Due to the command's extreme obscurity and likely obsolescence, there are no well-documented or standard parameters available. Any options would have been specific to its original implementation within a particular <I>troff</I> or HP document processing environment.<br><br>


title: DESCRIPTION
content:
The command <B>hpftodit</B> is <B>not a standard or commonly available Linux command</B> found in modern distributions. Its name suggests it was an old filter or preprocessor, possibly standing for "HP Filter TO DITroff" or similar. It likely originated in the era of <I>troff</I> and <I>ditroff</I> (device independent troff) typesetting systems, specifically for processing files or converting formats for output on Hewlett-Packard (HP) devices, such as older laser printers that used proprietary page description languages (e.g., PCL).<br><br>As an extremely niche and likely deprecated utility, its functionality would have been to take input (e.g., from a <I>troff</I> preprocessor or a raw text file) and transform it into a format suitable for an HP printer or another component within an HP-specific document processing workflow. Modern Linux systems use different printing subsystems (like CUPS) and document formats (like PostScript or PDF), making such specific device filters obsolete.


title: CAVEATS
content:
The <B>hpftodit</B> command is highly specific and likely obsolete. It is <B>not part of standard Linux installations</B> or common package repositories. Attempting to use it on a modern system will likely result in a "command not found" error. Its historical context is tied to older typesetting systems and hardware, making it irrelevant for contemporary document processing and printing needs. Documentation is virtually non-existent for general users.


title: RARITY AND AVAILABILITY
content:
<B>hpftodit</B> is an extremely rare command. It is not bundled with standard <I>groff</I> (GNU troff) distributions, which is the modern open-source implementation of <I>troff</I>. If it exists anywhere, it would likely be in very old, specialized Unix or HP-UX environments, or within academic archives of historical software.


title: HISTORY
content:
The command <B>hpftodit</B> belongs to an era when Unix-based typesetting systems like <I>troff</I> and its device-independent successor <I>ditroff</I> were prevalent for document preparation. In this context, specific filters were often required to convert the <I>ditroff</I>'s generic intermediate format into device-specific instructions for various printers. Given its name, <B>hpftodit</B> was likely a filter developed by or for Hewlett-Packard systems, or specifically for HP's range of printers (e.g., LaserJet) to interpret <I>troff</I> output. With the widespread adoption of PostScript, PDF, and modern print spooling systems (like CUPS), along with the decline of direct <I>troff</I> usage for general document creation, such device-specific filters became obsolete and are no longer maintained or distributed with common operating systems.


title: SYNOPSIS
content:
<b>hping3</b> [<i>options</i>] <<i>host</i>><br>Example: <b>hping3</b> -S -p 80 <i>target.com</i><br>Example: <b>hping3</b> --flood --rand-source <i>target_ip</i>


title: PARAMETERS
content:
<b>-c <count></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stop after sending <count> packets.<br><br><b>-i <wait></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Wait <wait> seconds between packets (can be 'u' for microseconds).<br><br><b>-p <port></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the destination port (0 for random).<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the SYN flag (TCP SYN scan).<br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the ACK flag.<br><br><b>-F</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the FIN flag.<br><br><b>-R</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the RST flag.<br><br><b>-P</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the PUSH flag.<br><br><b>-U</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the URG flag.<br><br><b>-X</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set FIN, PUSH, URG flags (Xmas scan).<br><br><b>-Y</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set no flags (Null scan).<br><br><b>-d <size></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set packet data size in bytes.<br><br><b>-E <filename></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read data from <filename> to fill the packet.<br><br><b>-I <interface></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set network interface (e.g., eth0).<br><br><b>--traceroute</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable traceroute mode.<br><br><b>--flood</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Send packets as fast as possible, without showing replies.<br><br><b>--rand-source</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use random source IP addresses (requires root).<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output.<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keep source port across replies.<br><br><b>-S</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable scan mode, e.g., `-S -p 1-1024`.<br><br><b>--scan</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan mode with port range, e.g., `--scan 1-1024 -S`.<br><br>


title: DESCRIPTION
content:
<b><i>hping3</i></b> is a command-line oriented <br>TCP/IP packet assembler/analyzer. It's an enhanced version of the original <br><i>hping</i> and is widely used for network security auditing, firewall testing, <br>and various network reconnaissance tasks. Unlike the standard <br><i>ping</i> utility, <i>hping3</i> allows users to construct <br>custom network packets from scratch, enabling the manipulation <br>of TCP flags, IP addresses, packet size, and other parameters. <br>This flexibility makes it an invaluable tool for simulating <br>denial-of-service (DoS) attacks, performing advanced port scanning <br>techniques (like SYN scans, FIN scans, Xmas scans), tracerouting <br>through firewalls, and conducting network performance analysis. <br>It supports various protocols, including TCP, UDP, ICMP, and RAW-IP, <br>and can send packets over different interfaces. <br><i>hping3</i> can also act as a simple traceroute, a covert channel, <br>or a powerful network discovery tool.


title: CAVEATS
content:
<b><i>hping3</i></b> is a powerful tool that can generate significant network traffic and potentially disrupt services. <br>It often requires <b><i>root privileges</i></b> to craft raw packets and use specific network interfaces. <br>Misuse can lead to legal consequences or unintended network issues. <br>Always ensure you have explicit permission before using it against any network or system you don't own.


title: RAW PACKET CRAFTING
content:
<b><i>hping3</i></b>'s core strength lies in its ability to craft arbitrary TCP/IP packets, <br>allowing users to precisely control headers, flags, and data payloads for <br>highly customized network interactions, making it invaluable for protocol analysis <br>and vulnerability research.


title: FIREWALL AND IDS EVASION TESTING
content:
Due to its versatility, <b><i>hping3</i></b> is frequently used to test firewall rules <br>and Intrusion Detection Systems (IDS) by attempting to bypass them <br>using various packet manipulation techniques, such as sending fragmented packets <br>or setting unusual TCP flags.


title: HISTORY
content:
<b><i>hping3</i></b> was created by <b><i>Salvatore Sanfilippo</i></b> (Antirez) as an advanced <br>packet crafter, evolving from the original <b><i>hping</i></b> tool. <br>It gained significant popularity within the security community <br>for its flexibility in network testing and exploitation scenarios, <br>becoming a standard utility in many penetration testing distributions.


title: PARAMETERS
content:
<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;Show the program's version number and exit.<br><br><b>-D, --disable-remote-check</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent validation against the remote W3C Nu Html Checker service. Requires a local NuChecker instance if no other validation source is specified.<br><br><b>-L, --local</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the use of a local instance of the Nu Html Checker for validation.<br><br><b>-H HOST, --host HOST</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the hostname or IP address of the local Nu Html Checker instance. Defaults to <I>localhost</I>.<br><br><b>-p PORT, --port PORT</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the port number of the local Nu Html Checker instance. Defaults to <I>8888</I>.<br><br><b>-X, --no-url-fetch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable the fetching of URLs found within the input files during validation.<br><br><b>-P, --no-parser</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable parsing of input files; send them as raw text directly to the validator. Useful for non-standard file types.<br><br><b>-l LEVEL, --log LEVEL</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the logging level for the command's output. Common levels include <I>DEBUG</I>, <I>INFO</I>, <I>WARNING</I>, <I>ERROR</I>, and <I>CRITICAL</I>.<br><br><b>-F FORMAT, --format FORMAT</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output format for validation results. Available formats include <I>html</I>, <I>json</I>, <I>gnu</I> (for Emacs/Vim integration), and <I>text</I> (default).<br><br><b>-e ENCODING, --encoding ENCODING</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly specify the character encoding of the input files, e.g., <I>utf-8</I>.<br><br><b>-r ROOT_PATH, --root ROOT_PATH</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define a root directory for resolving relative paths within input files, particularly useful when checking files from a project.<br><br><b>-m PATTERN, --match PATTERN</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include only files whose paths match the specified regular expression pattern for validation.<br><br><b>-i PATTERN, --ignore PATTERN</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude files whose paths match the specified regular expression pattern from validation.<br><br><b>-W, --walk</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively traverse directories to find and validate all HTML files within them.<br><br><b>-A, --asciiquotes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replace fancy (curly) quotation marks with standard ASCII straight quotes before sending the content to the validator.<br><br><b>-s SUBSTRING, --skip-substring SUBSTRING</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip validation messages (warnings or errors) that contain the specified substring. This can be useful for ignoring known, non-critical issues.<br><br><b>--skip-errors</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress the reporting of error messages in the validation output.<br><br><b>--skip-warnings</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress the reporting of warning messages in the validation output.<br><br><b>--skip-info</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress the reporting of informational messages in the validation output.<br><br><b>--exit-zero</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Always exit with a status code of 0, regardless of whether validation errors or warnings were found. By default, <I>html5validator</I> exits with a non-zero status if issues are detected.<br><br>


title: DESCRIPTION
content:
The <b>html5validator</b> command is a powerful <I>command-line tool</I> for validating HTML5, XHTML, CSS, and SVG documents. It acts as a convenient wrapper around the official W3C Nu Html Checker (also known as the <I>NuChecker</I> or <I>v.Nu</I>), which is the authoritative validator for web standards. <br><br>This utility allows developers to easily check the conformance of their web documents against W3C specifications, either by sending content to the online W3C validator service or by connecting to a locally running instance of the NuChecker. It's an essential tool for ensuring the quality, accessibility, and interoperability of web content, helping to catch syntax errors, structural issues, and best practice violations during development or CI/CD pipelines.


title: CAVEATS
content:
Using <I>html5validator</I> with a local Nu Html Checker instance requires Java Runtime Environment (JRE) to be installed on the system, as the NuChecker itself is a Java application. Network connectivity is essential for remote validation. Performance can vary depending on network speed for remote checks or local machine resources for local instances. While it validates HTML, CSS, and SVG, it does not validate JavaScript or other embedded scripting languages.


title: INSTALLATION
content:
The <I>html5validator</I> tool can typically be installed using Python's package installer, <I>pip</I>:<br><I>pip install html5validator</I><br><br>For local validation, you also need to download and run the Nu Html Checker JAR file, usually from the W3C website, and ensure Java is installed.


title: EXIT STATUS
content:
By default, <I>html5validator</I> returns an exit status of <I>0</I> if no validation issues (errors, warnings, or info messages) are found. If any issues are detected, it returns a non-zero exit status (typically <I>1</I>). This behavior makes it suitable for use in shell scripts or Continuous Integration (CI) pipelines to gate builds based on HTML validity.


title: HISTORY
content:
The <I>html5validator</I> command is a Python-based wrapper developed to provide a user-friendly command-line interface to the W3C Nu Html Checker. The Nu Html Checker, often referred to as <I>v.Nu</I>, is the official open-source validator maintained by the W3C. <I>html5validator</I> emerged to streamline the process of integrating this powerful validator into development workflows, making it easier for developers to run validations locally or against the W3C's online service without needing to manage the NuChecker's standalone JAR file directly. Its development reflects the community's need for accessible and automated web standards validation.


title: SYNOPSIS
content:
<b>iceauth</b> [ <i>-f authority_file</i> ] [ <i>command</i> [ <i>arg ...</i> ] ]<br><br><b>Commands include:</b><br><i>add displayname protocolname authtype authdata</i><br><i>remove displayname protocolname</i><br><i>list</i><br><i>extract filename displayname ...</i><br><i>merge filename ...</i><br><i>generate protocolname authtype [options]</i><br><i>source filename</i><br><i>exit</i><br><i>quit</i><br><i>help</i><br><i>info</i>


title: PARAMETERS
content:
<b><b>-f</b> <i>authority_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the authority file to be used instead of the default <i>~/.ICEauthority</i>.<br><br><b><b>add</b> <i>displayname protocolname authtype authdata</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new authentication entry to the authority file. <i>displayname</i> is the display (e.g., <i>hostname:0</i>), <i>protocolname</i> is the ICE protocol (e.g., <i>MIT-MAGIC-COOKIE-1</i>), <i>authtype</i> is the authentication type, and <i>authdata</i> is the hexadecimal string representing the authentication data.<br><br><b><b>remove</b> <i>displayname protocolname</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes a specific authentication entry matching the provided <i>displayname</i> and <i>protocolname</i>.<br><br><b><b>list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all authentication entries currently stored in the authority file.<br><br><b><b>extract</b> <i>filename displayname ...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts specified authentication entries into a new authority file named <i>filename</i>. One or more <i>displayname</i>s must be provided.<br><br><b><b>merge</b> <i>filename ...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Merges authentication entries from one or more specified <i>filename</i>s into the current authority file.<br><br><b><b>generate</b> <i>protocolname authtype [options]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a new authentication entry for a given <i>protocolname</i> and <i>authtype</i>. Optional <i>options</i> include <i>trusted</i>, <i>untrusted</i>, and <i>timeout timeout_in_seconds</i>.<br><br><b><b>source</b> <i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads and executes <i>iceauth</i> commands from the specified <i>filename</i>.<br><br><b><b>exit</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits the <i>iceauth</i> program (interactive mode).<br><br><b><b>quit</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for the <i>exit</i> command.<br><br><b><b>help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a summary of <i>iceauth</i> commands and usage.<br><br><b><b>info</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays information about the server's ICE security extension, if available.<br><br>


title: DESCRIPTION
content:
<i>iceauth</i> is a utility used to manage authentication information for the Inter-Client Exchange (ICE) protocol. The ICE protocol provides a framework for building distributed applications and is utilized by various X Window System components and extensions, such as the X Display Manager Control Protocol (XDMCP).<br><br>Similar in purpose to <i>xauth</i> for X authority files, <i>iceauth</i> specifically handles <i>ICEauthority</i> files, typically located at <i>~/.ICEauthority</i>. These files contain authentication credentials that ICE-aware applications use to establish secure connections.<br><br>The command allows users to perform various operations, including adding new authentication entries, removing existing ones, listing the contents of an authority file, extracting specific entries into a new file, and merging entries from multiple files. It can also generate new authentication data. Proper management of these authority files is crucial for ensuring secure and authorized access for applications communicating via the ICE protocol.


title: CAVEATS
content:
ICE authority files contain sensitive authentication data. Incorrect permissions or misuse of <i>iceauth</i> can lead to security vulnerabilities, allowing unauthorized access to ICE services. It is crucial to protect these files with appropriate file system permissions. While <i>iceauth</i> is a powerful tool, it is generally used for specific X Window System configuration or troubleshooting tasks, often by administrators or scripts, rather than everyday end-user interaction. The <i>generate</i> command's effectiveness can depend on the specific ICE implementation and the X server's capabilities.


title: DEFAULT AUTHORITY FILE
content:
By default, <i>iceauth</i> operates on the <i>.ICEauthority</i> file located in the user's home directory (<i>~/.ICEauthority</i>). This file stores the authentication credentials for various ICE connections.


title: INTERACTIVE MODE
content:
If no command is specified on the command line, <i>iceauth</i> enters an interactive mode, presenting a prompt where users can type commands one by one.


title: AUTHENTICATION DATA FORMAT
content:
The <i>authdata</i> argument for the <i>add</i> command, and similarly the data managed by <i>iceauth</i>, is typically provided and stored as a hexadecimal string.


title: HISTORY
content:
<i>iceauth</i> is a long-standing utility within the X.Org project, typically distributed as part of the <i>xorg-x11-apps</i> package. Its origins trace back to the development of the Inter-Client Exchange (ICE) protocol, which was introduced to standardize communication between clients and servers in distributed X environments. The command's functionality has remained largely stable over many years, reflecting the mature and relatively unchanged nature of the underlying ICE protocol. It continues to be an essential tool for managing authentication within complex X Window System setups.


title: PARAMETERS
content:
<b>-u, --udid &lt;UDID&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Targets a specific device by its unique 40-digit UDID. If not specified, the command will attempt to connect to the first available device.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a concise usage summary and available commands for <i>idevicediagnostics</i>.<br><br><b>-d, --debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output, useful for troubleshooting connection or command issues.<br><br><b>diagnostics [&lt;MODE&gt;]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to the device's diagnostic interface. The optional &lt;MODE&gt; can be <b>&quot;normal&quot;</b>, <b>&quot;basic&quot;</b>, <b>&quot;gasgauge&quot;</b>, or <b>&quot;nand&quot;</b>. If no mode is specified, it defaults to <b>&quot;normal&quot;</b> and provides basic device information.<br><br><b>sleep</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs the connected iOS device to enter sleep mode, effectively locking the screen.<br><br><b>restart</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates a full restart of the connected iOS device.<br><br><b>shutdown</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Commands the connected iOS device to shut down completely.<br><br><b>mobilegestalt &lt;SELECTORS&gt;...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Queries specific MobileGestalt keys from the device. Multiple selectors can be provided as arguments to retrieve various hardware and software properties. For example: <i>ProductType</i>, <i>DeviceClass</i>, <i>ChipID</i>.<br><br><b>query [&lt;QUERY_KEYS&gt;...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retrieves specific diagnostic information. Examples of &lt;QUERY_KEYS&gt; include <b>WiFi</b>, <b>Power</b>, <b>Battery</b>. Use <b>--all</b> to query all available diagnostic data.<br><br><b>--all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used in conjunction with the <b>query</b> command to retrieve all available diagnostic data from the device.<br><br><b>version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of the <i>idevicediagnostics</i> utility.<br><br>


title: DESCRIPTION
content:
<i>idevicediagnostics</i> is a command-line utility for interacting with the diagnostics interface of iOS devices. It is part of the <i>libimobiledevice</i> project, an open-source suite of libraries and tools that enable communication with Apple devices on Linux, macOS, and Windows, serving as an alternative to Apple's proprietary MobileDevice framework. This command allows users to query various system information, control device states such as putting the device to sleep, restarting, or shutting it down, and initiating specific diagnostic modes like &quot;gasgauge&quot; or &quot;nand&quot;. It's a powerful tool for developers, system administrators, and advanced users who need to perform low-level interactions or gather detailed device information without relying on iTunes or Xcode. Its capabilities range from retrieving basic device properties to detailed hardware and software diagnostics.


title: CAVEATS
content:
<i>idevicediagnostics</i> requires the target iOS device to be connected via USB and trusted by the host computer (usually confirmed by accepting a &quot;Trust This Computer&quot; prompt on the device). Some operations, particularly <b>restart</b> and <b>shutdown</b>, can interrupt ongoing device operations and should be used with caution. The availability and specific output of diagnostic queries (<b>mobilegestalt</b>, <b>query</b>) can vary depending on the iOS version and device model. Debug mode (<b>-d</b>) can produce a large amount of output, which may be overwhelming for general use but invaluable for debugging.


title: DIAGNOSTIC MODES EXPLAINED
content:
<i>idevicediagnostics</i> supports specific diagnostic modes through its <b>diagnostics</b> subcommand, allowing for targeted data retrieval:<br><b>&quot;normal&quot;</b>: The default mode, often used to establish a connection and gather basic device info.<br><b>&quot;basic&quot;</b>: Provides fundamental diagnostic details.<br><b>&quot;gasgauge&quot;</b>: Focuses on battery-related diagnostics, including charge cycles, temperature, and current capacity. This is vital for battery health analysis.<br><b>&quot;nand&quot;</b>: Provides information related to the device's NAND flash storage, useful for assessing storage health and usage.


title: TRUST RELATIONSHIP
content:
For <i>idevicediagnostics</i> to function, a &quot;trust&quot; relationship must be established between the host computer and the iOS device. This typically involves connecting the device, unlocking it, and tapping &quot;Trust&quot; when prompted on the device's screen. Without this, the device will reject connection attempts from the utility, resulting in errors.


title: HISTORY
content:
The <i>libimobiledevice</i> project, which includes <i>idevicediagnostics</i>, was initiated to reverse-engineer Apple's proprietary communication protocols for iOS devices. It emerged as a crucial open-source effort to provide Linux and other Unix-like systems with the ability to interact with iPhones, iPads, and iPods without relying on Apple's software. Development has been ongoing for over a decade, with contributions from a global community, continually adapting to new iOS versions and device models to maintain compatibility and extend functionality. This commitment has made <i>libimobiledevice</i> an indispensable toolkit for cross-platform iOS development and management.


title: PARAMETERS
content:
<b>-u, --udid UDID</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects the target device by its unique device identifier (UDID). This is useful when multiple iOS devices are connected to the host computer.<br><br><b>-f, --format FORMAT</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output image format. Supported formats include <b>png</b>, <b>tiff</b>, and <b>jpeg</b>. The default format is <b>tiff</b>.<br><br><b>-s, --screen SCREEN</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Designates which screen to capture. Possible values are <b>main</b> (for the device's primary display) or <b>external</b> (if an external display is connected).<br><br><b>-t, --timeout TIMEOUT</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a timeout for the operation in milliseconds. If the specified timeout is reached before the screenshot is captured, the operation will abort.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief usage message and available options for the command.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of the <i>idevicescreenshot</i> utility.<br><br>


title: DESCRIPTION
content:
<i>idevicescreenshot</i> is a command-line utility from the <b>libimobiledevice</b> suite, designed for interacting with iOS devices. It enables users to capture the current screen content of an attached Apple device (iPhone, iPad, iPod touch) and save it as an image file on the local computer. This tool offers a convenient and programmatic method to obtain visual feedback from the device without requiring direct interaction with the device's screen or proprietary software like Xcode.<br><br>It's particularly valuable for automation scripts, quality assurance testing, or documentation purposes where capturing device states is essential. The utility establishes a connection to the iOS device via USB and leverages Apple's MobileDevice protocol to request and retrieve the screenshot data.


title: CAVEATS
content:
For <i>idevicescreenshot</i> to function correctly, the connected iOS device must be unlocked and 'trusted' by the host computer (i.e., you must have tapped 'Trust' on the device when prompted).<br><br>The tool may not work on devices in specific low-level modes (like DFU or Recovery mode) or with certain highly restricted iOS versions. The default output format, TIFF, can result in very large file sizes; consider using <b>png</b> or <b>jpeg</b> for more efficient storage or web usage.


title: OUTPUT FILENAME
content:
If no <i>FILE</i> argument is provided, <i>idevicescreenshot</i> will automatically generate a default filename for the output image, typically in the format <i>screenshot-<timestamp>.tiff</i>, where <i><timestamp></i> reflects the time of capture.


title: USAGE WITH MULTIPLE DEVICES
content:
When multiple iOS devices are connected to the same computer, it is crucial to use the <b>-u</b> or <b>--udid</b> option to specify which device should have its screenshot captured. Without this, the command's behavior might be undefined or it might fail if it cannot determine the target device.


title: HISTORY
content:
<i>idevicescreenshot</i> is an integral part of the <b>libimobiledevice</b> project, an open-source initiative that began in the late 2000s. Its primary goal was to create a free, cross-platform alternative to Apple's proprietary MobileDevice framework, enabling communication with iOS devices on Linux, macOS, and Windows. The command, like other tools in the suite, has undergone continuous development to maintain compatibility with new iOS versions and device models, ensuring its utility for developers, testers, and power users interacting with Apple's ecosystem.


title: SYNOPSIS
content:
<b>ifconfig</b> <br><b>ifconfig</b> <I>interface</I><br><b>ifconfig</b> <I>interface</I> <I>options</I> | <I>address</I> ...


title: PARAMETERS
content:
<b><i>(no arguments)</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays information for all active network interfaces configured on the system.<br><br><b><i>interface</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular network interface (e.g., <b>eth0</b>, <b>wlan0</b>) to display its configuration or apply changes to.<br><br><b><b>up</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates the specified network interface, making it ready to send and receive network traffic.<br><br><b><b>down</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deactivates the specified network interface, bringing it offline and preventing it from sending or receiving traffic.<br><br><b><i>address</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns an IP address to the network interface. Can be used in conjunction with <b>netmask</b> and <b>broadcast</b>.<br><br><b><b>netmask</b> <i>address</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the network mask for the interface, defining the network and host portions of the IP address.<br><br><b><b>broadcast</b> <i>address</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the broadcast address for the interface's subnet.<br><br><b><b>mtu</b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Maximum Transmission Unit (MTU) for the interface to <i>N</i> bytes, which is the largest packet size that can be transmitted.<br><br><b><b>hw</b> <i>type</i> <i>address</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the hardware address (e.g., MAC address) for the interface. Common types include <b>ether</b> for Ethernet interfaces.<br><br><b><b>add</b> <i>address</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds an additional IP address (an alias) to the specified interface.<br><br><b><b>del</b> <i>address</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes a previously assigned IP address (an alias) from the interface.<br><br><b><b>txqueuelen</b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the length of the transmit queue for the interface. A larger queue can help with bursty traffic but may increase latency.<br><br>


title: DESCRIPTION
content:
The <b>ifconfig</b> command is a legacy command-line utility used for network interface configuration on Unix-like operating systems. It allows administrators to configure, view, and control network interfaces. While still found in many systems and scripts, it has largely been superseded by the more powerful and modern <b>ip</b> command from the <b>iproute2</b> suite on contemporary Linux distributions.<br><br><b>ifconfig</b> can display the current configuration of network interfaces, including IP addresses, netmasks, broadcast addresses, MAC addresses, MTU settings, and I/O statistics. It also provides the functionality to assign IP addresses, set netmasks and broadcast addresses, enable or disable interfaces, change the MTU, and manipulate other interface properties. Despite its age, it remains a common tool for quick network checks or in environments where the <b>ip</b> command is not preferred or available.


title: CAVEATS
content:
The <b>ifconfig</b> command is considered deprecated on modern Linux systems. It is part of the <b>net-tools</b> package, which is no longer actively developed. Many advanced networking features (e.g., network namespaces, more complex routing policies) are not supported by <b>ifconfig</b>. New installations of Linux distributions often do not include <b>net-tools</b> by default, preferring the <b>iproute2</b> utilities.


title: USAGE EXAMPLES
content:
<ul><li>To display configuration for all active interfaces:<br><b>ifconfig</b></li><li>To display configuration for a specific interface (e.g., <b>eth0</b>):<br><b>ifconfig</b> <b>eth0</b></li><li>To bring an interface up and assign an IP address with netmask:<br><b>ifconfig</b> <b>eth0</b> <i>192.168.1.100</i> <b>netmask</b> <i>255.255.255.0</i> <b>up</b></li><li>To change the MTU of an interface:<br><b>ifconfig</b> <b>eth0</b> <b>mtu</b> <i>1500</i></li><li>To bring an interface down:<br><b>ifconfig</b> <b>eth0</b> <b>down</b></li></ul>


title: PERMISSIONS
content:
Modifying network interface configurations with <b>ifconfig</b> typically requires superuser (root) privileges. Displaying information can often be done by non-root users, though this can vary by system configuration.


title: HISTORY
content:
<b>ifconfig</b> has a long history, originating from BSD Unix and becoming a standard utility across various Unix-like operating systems. It was the primary tool for network interface management for decades. With the advent of the <b>iproute2</b> suite in the Linux kernel around the early 2000s, the newer <b>ip</b> command began to replace <b>ifconfig</b>. The <b>iproute2</b> tools provide a more consistent and powerful way to manage networking, including support for modern features like policy routing, namespaces, and advanced traffic control. Despite its deprecation, <b>ifconfig</b> is still widely encountered in older documentation, scripts, and embedded systems.


title: SYNOPSIS
content:
<b><I>IFS</I></b> is an environment variable, not a command. Its usage involves setting its value.<br><br><b>Default Behavior (when <b><I>IFS</I></b> is unset or set to its default value)</b>:<br><code>$ # Default: space, tab, newline</code><br><code>$ # Example: var="  a   b
  c  "<br>$ for i in $var; do echo "[$i]"; done</code><br><br><b>Setting <b><I>IFS</I></b> to a custom value</b>:<br><code>$ <b><I>IFS</I></b>=':' <br>$ path_elements=$(echo "$PATH" | tr ':' '
') <br>$ # This example shows how <b><I>IFS</I></b> is used for splitting output of command substitution.</code><br><br><b>Temporarily changing <b><I>IFS</I></b> for a single command</b>:<br><code>$ <b><I>IFS</I></b>=',' read -r name age city <<< "John,30,New York"</code><br><br><b>Saving and restoring <b><I>IFS</I></b></b>:<br><code>$ OLD_IFS="$<b><I>IFS</I></b>" <br>$ <b><I>IFS</I></b>=',' <br>$ # ... perform operations ... <br>$ <b><I>IFS</I></b>="$OLD_IFS"</code><br>or using a subshell:<br><code>$ (<b><I>IFS</I></b>=',' ; read -r a b c <<< "x,y,z"; echo "[$a] [$b] [$c]")</code>


title: PARAMETERS
content:
<b>Default or Unset <b><I>IFS</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When <b><I>IFS</I></b> is unset or explicitly set to its default value (space, tab, newline), it splits on any sequence of these characters. Multiple delimiters are treated as a single delimiter, and leading/trailing delimiters are ignored.<br><br><b>Empty <b><I>IFS</I></b> (<code><b><I>IFS</I></b>=''</code>)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Setting <b><I>IFS</I></b> to an empty string completely disables word splitting. The entire string is treated as a single word. This is useful when you want to preserve all whitespace and newline characters in a variable or command output.<br><br><b>Single Character <b><I>IFS</I></b> (e.g., <code><b><I>IFS</I></b>=','</code>)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When <b><I>IFS</I></b> contains only one character, that character becomes the sole delimiter. All occurrences of this character will cause a split. Unlike the default behavior, multiple consecutive delimiters will result in empty fields, and leading/trailing delimiters will create leading/trailing empty fields.<br><br><b>Multiple Custom Characters <b><I>IFS</I></b> (e.g., <code><b><I>IFS</I></b>=':;'</code>)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;If <b><I>IFS</I></b> contains multiple custom characters, each character acts as a delimiter. Similar to a single character <b><I>IFS</I></b>, multiple consecutive delimiters (even if they are different <b><I>IFS</I></b> characters) will generate empty fields, and leading/trailing delimiters will create empty fields.<br><br>


title: DESCRIPTION
content:
The term "ifs" often refers to <b><I>IFS</I></b> (Internal Field Separator), which is not a command but a crucial environment variable in Unix-like shells (like Bash, Zsh, Ksh).<br><br><b><I>IFS</I></b> defines the characters used by the shell to perform word splitting. This process occurs during several shell operations, including:<br><ul><li><b>Parameter Expansion</b>: When variables are expanded (e.g., `"$var"` prevents this, but `$var` allows it).</li><li><b>Command Substitution</b>: Output from `$(command)` or `` `command` `` is split.</li><li><b>Arithmetic Expansion</b>: Less common but can apply.</li><li><b>Line Reading</b>: Most notably, the <b><I>read</I></b> command uses <b><I>IFS</I></b> to split input lines into fields.</li></ul><br>By default, <b><I>IFS</I></b> contains a space, a tab, and a newline character. Understanding and manipulating <b><I>IFS</I></b> is fundamental for robust shell scripting, especially when parsing structured data like CSV files or command outputs.


title: CAVEATS
content:
<ul><li><b>Global Effect</b>: Changing <b><I>IFS</I></b> affects all subsequent word splitting operations in the current shell context. Always localize changes (e.g., within a subshell <code>(...)</code> or by saving and restoring its value) to prevent unintended side effects.</li><li><b>Subtleties of Default vs. Custom</b>: The rules for how multiple delimiters are treated (as one vs. generating empty fields) and whether leading/trailing delimiters are ignored differ significantly between the default <b><I>IFS</I></b> behavior and when <b><I>IFS</I></b> is explicitly set to a custom value (even if that custom value includes space/tab/newline).</li><li><b>Quoting Prevents Splitting</b>: Enclosing variables in double quotes (e.g., <code>"$var"</code>) prevents word splitting and pathname expansion (globbing), regardless of the <b><I>IFS</I></b> value. This is a common and highly recommended practice.</li></ul>


title: IMPACT ON THE <B><I>READ</I></B> COMMAND
content:
The <b><I>read</I></b> command specifically uses <b><I>IFS</I></b> to determine how to split an input line into fields before assigning them to variables. For instance, `<b><I>IFS</I></b>=',' read -r var1 var2 var3` will split an input line by commas. If <b><I>IFS</I></b> is unset or default, `<b><I>read</I></b>` will split on whitespace. `<b><I>IFS</I></b>= read -r line` is a common idiom to read an entire line without any word splitting, preserving all whitespace.


title: DISABLING WORD SPLITTING
content:
Setting `<b><I>IFS</I></b>=''` (an empty string) is the standard way to completely disable word splitting for expansions. This can be crucial when dealing with filenames or other strings that might contain spaces, tabs, or newlines that you want to treat as part of the data, not as delimiters.


title: BEST PRACTICES FOR <B><I>IFS</I></B>
content:
<ul><li>Always localize <b><I>IFS</I></b> changes using a subshell `(...)` or by saving and restoring its original value.</li><li>Use `"$var"` to quote variables unless you explicitly intend for word splitting to occur.</li><li>Be explicit about `<b><I>IFS</I></b>` when parsing structured data; do not rely on its default value if your delimiters are not space/tab/newline.</li><li>For simple comma-separated or similar parsing, `<b><I>IFS</I></b>=',' read -r ...` is often cleaner than complex regex or external commands like `awk` for simple cases.</li></ul>


title: HISTORY
content:
The concept of an Internal Field Separator has been a fundamental part of Unix shells since the early days of the Bourne shell (sh). It was designed to provide a flexible mechanism for parsing and processing text, a common task in shell scripting. Subsequent shells like Korn shell (ksh), Bash, and Zsh inherited and expanded upon this mechanism, making <b><I>IFS</I></b> a consistent and powerful feature across most modern Unix-like environments.


title: PARAMETERS
content:
<b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show statistics for all network interfaces, including inactive ones.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List interfaces in a single line, reducing the verbosity of the output.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not resolve hostnames in output, if applicable (less common for <i>ifstat</i>).<br><br><b><b>-t</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a timestamp for each line of output, showing when the statistics were recorded.<br><br><b><b>-T</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display total bandwidth across all monitored interfaces in an additional summary line.<br><br><b><b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provide parseable output, making it easier for scripts or other programs to process the data.<br><br><b><b>-i</b> <i>interval</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the sampling interval in seconds (default is 1 second). Subsequent arguments will be treated as count and interfaces.<br><br><b><b>-S</b> <i>unit</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the unit for output. Common units include 'k' for Kilobytes/sec, 'm' for Megabytes/sec, 'g' for Gigabytes/sec.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quiet mode; suppress the header lines, showing only the data.<br><br><b><b>-z</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not show lines for interfaces with zero traffic; only display active interfaces with data.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
<i>ifstat</i> is a command-line utility used to display real-time network interface bandwidth usage statistics. It provides a quick overview of traffic flowing through network interfaces, showing incoming and outgoing data rates. This tool is similar in concept to <i>vmstat</i> or <i>iostat</i> but focuses specifically on network traffic.<br><br>It can monitor all active interfaces or specific ones defined by the user. The output is typically updated at regular intervals, making it useful for monitoring network activity over time. <i>ifstat</i> is lightweight and provides a clear, concise view of network throughput, helping administrators identify network bottlenecks or unusual traffic patterns. It's particularly useful for quickly assessing network health or debugging connectivity issues by observing live traffic.


title: CAVEATS
content:
<i>ifstat</i> provides instantaneous snapshots of network activity; it is not designed for long-term data collection or historical trend analysis. For persistent logging or advanced graphing, dedicated monitoring systems or tools like <i>sar</i> are more appropriate. Its output can become verbose on systems with many interfaces unless specific ones are selected or filters like <b>-z</b> are used.


title: OUTPUT FORMAT
content:
The default output of <i>ifstat</i> typically shows columns for the interface name (IFACE), incoming traffic (In), and outgoing traffic (Out). Traffic is usually measured in bytes per second by default, though this can be adjusted with the <b>-S</b> option. For example:<br><pre>IFACE       In      Out<br>lo        0.00   0.00<br>eth0    10.50k  2.30k</pre><br>When <b>-t</b> is used, a timestamp column is added. When <b>-T</b> is used, a total line summarizing all monitored interfaces is added at the bottom of the output.


title: USAGE WITH INTERVAL AND COUNT
content:
You can specify a sampling interval and a count of iterations after the options and interface names. For example, to update every 2 seconds, for a total of 5 times, for the <i>eth0</i> interface:<br><code>ifstat eth0 2 5</code><br>If only one number is provided, it is treated as the interval, and <i>ifstat</i> will run indefinitely until interrupted (e.g., with Ctrl+C). If no interfaces are specified, these arguments apply to all active interfaces.


title: HISTORY
content:
<i>ifstat</i> is a simple, single-purpose command-line utility primarily developed for the Linux ecosystem. It provides a quick and lightweight way to monitor network throughput in real-time, focusing on active interfaces. Unlike more complex networking tools that have evolved significantly (e.g., <i>netstat</i> being superseded by <i>ss</i> and <i>ip</i>), <i>ifstat</i>'s core functionality has remained largely consistent, reflecting its clear and focused objective of displaying live network statistics directly in the terminal.


title: PARAMETERS
content:
<b><b>-M</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan using IKEv1 <i>Aggressive Mode</i>. This mode is faster but can potentially leak information like group names or usernames if not securely configured on the target.<br><br><b><b>-P</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan using IKEv1 <i>Main Mode</i>. This mode is slower due to more round trips but offers better privacy as it does not leak initial identity information.<br><br><b><b>-A</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt authentication against the target using specified credentials (e.g., pre-shared key) to test for valid credentials or weak key enforcement.<br><br><b><b>-2</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force <i>IKEv2 mode</i> scanning. This instructs <i>ike-scan</i> to interact with targets using the IKEv2 protocol.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable <i>verbose output</i>. Increases the level of detail displayed during the scan, showing more negotiation steps and results.<br><br><b><b>-f</b> <i>&lt;filename&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read a list of hosts or networks to scan from the specified <i>file</i>, with one host/network per line.<br><br><b><b>-r</b> <i>&lt;num&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the <i>number of retries</i> for each host. Specifies how many times <i>ike-scan</i> should retransmit a packet if no response is received (default is 3).<br><br><b><b>--trans=</b><i>&lt;transforms&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a comma-separated list of IKEv1 <i>transforms</i> to use for the scan. This allows custom negotiation proposals for encryption, hash, authentication, and DH group.<br><br><b><b>--auto-trans</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically select and try a comprehensive list of IKEv1 transforms. This is useful for discovering all supported parameters without manual specification.<br><br><b><b>--id=</b><i>&lt;string&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the <i>local IKE ID</i> to use in negotiation. This can be an arbitrary string or a specific identity like a FQDN or IP address.<br><br><b><b>--idtype=</b><i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the <i>type of the local IKE ID</i>. Common types include `FQDN`, `USER_FQDN`, `IPADDR`, `ASN1_DN`, etc.<br><br><b><b>--psk=</b><i>&lt;key&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a <i>pre-shared key</i> to use for authentication attempts. This is often used with `-A` to test for valid PSKs.<br><br><b><b>--nat-t</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable <i>NAT-Traversal</i> (NAT-T) support. This option encapsulates IKE packets in UDP port 4500, which is necessary for IPsec VPNs operating behind NAT devices.<br><br>


title: DESCRIPTION
content:
<i>ike-scan</i> is a command-line tool designed for discovering, fingerprinting, and testing hosts that support the Internet Key Exchange (IKE) protocol. IKE is a fundamental component of IPsec VPNs, responsible for establishing secure tunnels by negotiating cryptographic algorithms, exchanging keys, and authenticating peers.<br><br>This tool is invaluable for network administrators and security professionals to audit the security posture of VPN gateways. It can identify the IKE version (IKEv1 or IKEv2), retrieve detailed information about supported encryption algorithms (e.g., AES, 3DES), hashing algorithms (e.g., SHA1, MD5), authentication methods (e.g., pre-shared keys, certificates), and Diffie-Hellman groups. By understanding these capabilities, users can identify potential misconfigurations, weak cryptographic settings, or vulnerabilities. <i>ike-scan</i> can also be used to test for common security issues, such as sensitive information leakage in IKEv1 Aggressive Mode.


title: CAVEATS
content:
<i>ike-scan</i> performs active probing, which may be detected by Intrusion Detection/Prevention Systems (IDS/IPS) or security monitoring tools. It typically requires raw socket access, meaning it must be run with root privileges or appropriate capabilities.<br><br>Be aware that IKEv1 Aggressive Mode can reveal client identities (e.g., usernames, group names) if the VPN gateway is not configured to protect this information, which is a significant security concern.<br><br>Its IKEv2 support, while present, might not be as exhaustive or robust as its IKEv1 capabilities due to the complexity and variations in IKEv2 implementations.


title: PURPOSE OF IKE
content:
The Internet Key Exchange (IKE) protocol is a critical component of the IPsec suite. Its primary purpose is to establish a Security Association (SA) between two peers. An SA is a set of parameters that define how two parties will communicate securely, including the cryptographic algorithms (encryption, hashing), keys, and other security parameters necessary for secure communication within a VPN tunnel.


title: IKEV1 MODES
content:
IKEv1 supports two main modes for SA establishment: <i>Main Mode</i> and <i>Aggressive Mode</i>.<br><b>Main Mode</b> involves six messages (three exchanges) and provides identity protection for the communicating parties. It is generally more secure but requires more round trips.<br><b>Aggressive Mode</b> uses three messages (one exchange) and is faster, but it does not provide identity protection, meaning the initiator's identity (e.g., username, FQDN) can be sent unencrypted, potentially leaking sensitive information to an eavesdropper.


title: HISTORY
content:
<i>ike-scan</i> was originally developed by Simon Wilkinson, becoming a widely recognized and essential tool in the network security and penetration testing communities. It has maintained a strong focus on providing a robust and effective way to interact with and analyze IKE services, particularly for auditing VPN infrastructure. Its development has continuously adapted to cover various IKE implementations and address evolving security concerns related to IPsec VPNs.


title: PARAMETERS
content:
<b><b>-gamma</b> <i>value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adjusts the output gamma to the specified <i>value</i>. <br> This is particularly useful for correcting the brightness and contrast <br> perception of images originating from different display systems, <br> such as the <i>Amiga</i>'s native gamma.<br><br><b><b>-truecolor</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the output to be a TrueColor (24-bit) <i>PPM</i> image, <br> even if the input <i>ILBM</i> uses a paletted color depth. <br> This ensures maximum color fidelity in the output, avoiding palette quantization.<br><br><b><b>-nointerleave</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the command from interleaving the output data. <br> By default, ilbmtoppm might interleave output planes for certain <br> <i>ILBM</i> types; this option disables that behavior.<br><br><b><b>-verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, causing the command to print <br> informational messages and status updates to standard error <br> during processing. Useful for debugging or understanding <br> the conversion process.<br><br><b><b>-transparent</b> <i>transparentcolor</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a <i>transparentcolor</i> for the output <i>PPM</i>. <br> This option is only applicable to 24-bit TrueColor images. <br> The <i>transparentcolor</i> must be specified as an <i>ILBM</i> color map index <br> (0-255) for paletted images, or as a hexadecimal RGB value <br> (e.g., <i>#RRGGBB</i>) for TrueColor images.<br><br><b><b>-noheader</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Deprecated)</i> <br> Prevents the command from writing the <i>PPM</i>/<i>PGM</i> header. <br> This option is deprecated and its use is discouraged as it produces <br> non-standard <i>Netpbm</i> output, which is generally not compatible <br> with other <i>Netpbm</i> tools.<br><br><b><b>-norunlen</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the command from interpreting run-length encoded (RLE) data <br> within the <i>ILBM</i> file. This is rarely used and typically <br> only for debugging or specific compatibility needs.<br><br>


title: DESCRIPTION
content:
ilbmtoppm is a powerful command-line utility within the <i>Netpbm</i> suite, designed for converting image files from the <i>IFF ILBM</i> (Interchange File Format <br> Image Layer and BitMap) format to the <i>Netpbm</i> family of image formats, specifically <i>PPM</i> (Portable Pixmap) or <i>PGM</i> (Portable Graymap). <br> The <i>IFF ILBM</i> format was notably used on <i>Amiga</i> computers. <br><br> This tool reads an <i>ILBM</i> image file, processing its bitmap data, color palettes, and other associated information to reconstruct the image <br> in a standard <i>Netpbm</i> format. <i>PPM</i> is used for true-color or paletted images, while <i>PGM</i> is used if the input <i>ILBM</i> is a grayscale image. <br> The resulting <i>PPM</i> or <i>PGM</i> data is typically written to standard output, making it easy to pipe to other <i>Netpbm</i> tools for further <br> manipulation, such as scaling, format conversion, or combining with other images. <br><br> ilbmtoppm handles various <i>ILBM</i> features, including different bitplane depths and compression types. It's an essential <br> bridge for users working with legacy <i>Amiga</i> graphics or those who need to integrate <i>ILBM</i> files into modern image <br> processing workflows that rely on <i>Netpbm</i>'s versatile toolkit.


title: CAVEATS
content:
ilbmtoppm generally produces <i>PPM</i> or <i>PGM</i> output to standard output. <br> This means that to save the output to a file, redirection <br> (e.g., `ilbmtoppm image.ilbm > image.ppm`) is necessary. <br> The <b>-noheader</b> option is deprecated and should be avoided <br> as it creates malformed <i>Netpbm</i> files. <br> Handling of all possible <i>ILBM</i> sub-formats or non-standard <br> <i>ILBM</i> files might not be exhaustive, and some exotic <i>ILBM</i> <br> variations could cause issues or produce incorrect output. <br> The <b>-transparent</b> option expects a specific color representation, <br> either an <i>ILBM</i> palette index or a hexadecimal RGB value.


title: INPUT SOURCE
content:
If no <i>ilbmfile</i> is specified, ilbmtoppm reads the <i>ILBM</i> <br> image data from standard input. This allows for piping <br> output from other commands directly into ilbmtoppm.


title: OUTPUT FORMAT DETERMINATION
content:
The output format (<i>PPM</i> or <i>PGM</i>) is automatically <br> determined by ilbmtoppm based on the characteristics <br> of the input <i>ILBM</i> file. If the <i>ILBM</i> contains color <br> information or is a true-color image, <i>PPM</i> is produced. <br> If it's a grayscale image, <i>PGM</i> is produced.


title: HISTORY
content:
ilbmtoppm is a component of the <i>Netpbm</i> project, <br> a venerable and widely used toolkit for graphics manipulation <br> on Unix-like operating systems. <br> <i>Netpbm</i> itself evolved from <i>Pbmplus</i>, a package created <br> by <i>Jef Poskanzer</i> in the late 1980s. <br> The inclusion of ilbmtoppm reflects the importance of <br> converting images from popular legacy formats like <i>IFF ILBM</i> <br> (prevalent on <i>Amiga</i> systems) into a universal, easily <br> processable format like <i>Netpbm's</i> <i>PPM</i>/<i>PGM</i>. <br> Its development is part of <i>Netpbm's</i> ongoing effort to provide <br> a comprehensive set of tools for various image formats and <br> operations, maintaining compatibility with historical data <br> while enabling modern image processing pipelines.


title: SYNOPSIS
content:
im-config [ -a | -c | -d | -x | -s | -m ] [ -n <I>im_prog</I> ] [ -r <I>im_prog</I> ] [ -o <I>filename</I> ]


title: PARAMETERS
content:
<b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables automatic mode. <i>im-config</i> attempts to automatically select the best available input method based on installed packages and locale settings.<br><br><b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the interactive configuration mode. This presents a curses-based menu (or a GUI dialog if available) allowing the user to choose their preferred input method from a list of installed options.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the input method configuration. This effectively prevents any input method from being loaded by <i>im-config</i>.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current X Input Method (XIM) configuration, including the selected input method program and the environment variables that would be set.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a list of all input method programs currently supported and detected on the system.<br><br><b>-m</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates manual configuration mode. This advanced mode allows users to specify an input method not automatically detected or to fine-tune settings.<br><br><b>-n <I>im_prog</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the specified input method program (e.g., 'ibus', 'fcitx') as the default. This is a non-interactive way to select an IM.<br><br><b>-r <I>im_prog</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the specified input method program from the default configuration. Useful for reverting or cleaning up settings.<br><br><b>-o <I>filename</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects the generated configuration output to the specified <i>filename</i> instead of the default user or system configuration files. Useful for testing or custom setups.<br><br>


title: DESCRIPTION
content:
<i>im-config</i> is a utility designed to simplify the setup and management of input method (IM) frameworks for the X Window System on Linux. It provides a standardized way for users to select their preferred IM system, such as IBus, Fcitx, SCIM, or UIM, ensuring that applications correctly load the chosen input method modules. The command manages crucial environment variables like <b>XMODIFIERS</b>, <b>GTK_IM_MODULE</b>, and <b>QT_IM_MODULE</b>, which are essential for input methods to function across various toolkits (e.g., GTK+, Qt). It aims to alleviate the complexities of manually configuring these settings, especially for new users or those switching between different IMs. <i>im-config</i> can operate in various modes, allowing for automatic configuration, interactive selection, disabling IMs, or displaying current settings, making it a flexible tool for both system administrators and end-users. It typically generates configuration files like <i>~/.xinputrc</i> or modifies system-wide settings, ensuring that the selected input method is activated upon logging into a graphical session.


title: CAVEATS
content:
<b>Locale settings:</b> Incorrect locale settings can prevent <i>im-config</i> from functioning correctly or displaying the desired input methods. Users should ensure their system locale is properly configured for the languages they intend to type.<br><br><b>X session startup:</b> For the configuration to take effect, the user's X session typically needs to be restarted or the generated configuration file (e.g., <i>~/.xinputrc</i>) must be sourced.<br><br><b>Program availability:</b> The tool relies on the actual input method programs (like <i>ibus-daemon</i>, <i>fcitx</i>) being installed on the system; <i>im-config</i> itself does not install them.


title: HOW IT WORKS
content:
<i>im-config</i> typically generates or modifies the <i>~/.xinputrc</i> file in the user's home directory. This file is then sourced by X session managers (like <i>startx</i> or display managers like GDM, LightDM, SDDM) when an X session starts, ensuring that the <b>XMODIFIERS</b>, <b>GTK_IM_MODULE</b>, and <b>QT_IM_MODULE</b> environment variables are set correctly for the chosen input method.


title: SYSTEM-WIDE VS. USER-SPECIFIC
content:
When run as a regular user, <i>im-config</i> configures settings for that specific user. When run with root privileges, it can modify system-wide defaults, typically by placing configuration snippets in <i>/etc/X11/xinit/xinputrc.d/</i> or similar locations, which are then processed for all users on the system.


title: HISTORY
content:
<i>im-config</i> was developed primarily within the Debian and Ubuntu ecosystems to standardize and simplify the process of setting up input methods for the X Window System. Before its introduction, configuring input methods often involved manual editing of environment variables and X startup scripts, which could be complex and error-prone. <i>im-config</i> provides a consistent user interface and automated backend processes to manage the selection and activation of various IM frameworks (like IBus, Fcitx, SCIM), aiming to make the desktop experience more accessible for users needing to type in multiple languages. Its development reflects a broader effort to improve internationalization and localization support in popular Linux distributions.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help message and exit.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print verbose output during execution.<br><br><b>-l, --log</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write log messages to a file.<br><br><b>--xim-off</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable the X Input Method (XIM) server.<br><br><b>--disable-gsettings</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not use GSettings for IM configuration.<br><br><b>--input-method=IM</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the input method to use (e.g., 'ibus', 'fcitx').<br><br>


title: DESCRIPTION
content:
<i>im-launch</i> is a fundamental utility on Linux systems, designed to properly set up and launch an input method (IM) framework, such as <b>IBus</b> or <b>Fcitx</b>, for a user's graphical session. Its primary purpose is to enable users to input characters for various languages, especially those requiring complex input methods like East Asian scripts or emojis. It plays a crucial role in internationalized computing by ensuring that applications can correctly handle diverse text input.<br><br>Upon execution, <i>im-launch</i> typically detects the preferred input method configured through tools like <i>im-config</i>. It then starts the necessary input method daemon (e.g., <i>ibus-daemon</i>) and, critically, sets various environment variables. These include <b>XMODIFIERS</b>, <b>GTK_IM_MODULE</b>, and <b>QT_IM_MODULE</b>, which inform graphical applications (GTK, Qt-based) about which input method module to use. This command is frequently invoked automatically during the desktop environment's startup or through login scripts, making input methods seamlessly functional across all compatible GUI applications and ensuring a consistent input experience.


title: CAVEATS
content:
<i>im-launch</i> heavily relies on the system's <i>im-config</i> setup for determining the default input method. Incorrect configurations, especially involving multiple input method frameworks, can lead to input issues or conflicts. Proper locale settings are also essential for its correct functioning. The environment variables set by <i>im-launch</i> are critical; if they are overridden or not correctly propagated, applications may fail to use the input method.


title: DESKTOP ENVIRONMENT INTEGRATION
content:
<i>im-launch</i> is typically executed automatically by display managers or desktop session startup scripts (e.g., from <i>/etc/X11/Xsession.d/</i> or within GNOME/KDE session startup). Users rarely need to run it manually.


title: ENVIRONMENT VARIABLES
content:
Key environment variables set by <i>im-launch</i> include <b>XMODIFIERS</b> (specifies the XIM server), <b>GTK_IM_MODULE</b>, and <b>QT_IM_MODULE</b> (which tell GTK and Qt applications which IM module to load). These variables are fundamental for proper input method functionality.


title: HISTORY
content:
<i>im-launch</i> emerged as a versatile wrapper to manage various input method frameworks, notably <b>IBus</b>, which gained prominence as a successor to older systems like <b>SCIM</b>. <b>IBus</b> itself was developed by Google and became a default choice for internationalized input in many Linux distributions, making <i>im-launch</i> a crucial part of the modern Linux desktop's internationalization stack, providing a consistent launching mechanism across different IMs.


title: PARAMETERS
content:
<b>--host1 <i>&lt;host&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the hostname or IP address of the source IMAP server.<br><br><b>--user1 <i>&lt;user&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the username for authentication on the source IMAP server.<br><br><b>--pass1 <i>&lt;password&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the password for the source IMAP server. Use with caution due to security implications; consider interactive input or passfile.<br><br><b>--host2 <i>&lt;host&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the hostname or IP address of the destination IMAP server.<br><br><b>--user2 <i>&lt;user&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the username for authentication on the destination IMAP server.<br><br><b>--pass2 <i>&lt;password&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the password for the destination IMAP server. Use with caution.<br><br><b>--ssl1</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enforces the use of SSL/TLS for the connection to the source IMAP server.<br><br><b>--ssl2</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enforces the use of SSL/TLS for the connection to the destination IMAP server.<br><br><b>--port1 <i>&lt;port&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the port number for the source IMAP server (default: 143 or 993 for SSL).<br><br><b>--port2 <i>&lt;port&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the port number for the destination IMAP server (default: 143 or 993 for SSL).<br><br><b>--exclude <i>&lt;pattern&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes folders whose names match the given Perl regular expression pattern from synchronization.<br><br><b>--include <i>&lt;pattern&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes only folders whose names match the given Perl regular expression pattern for synchronization, excluding all others.<br><br><b>--synckey <i>&lt;key&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a unique key to resume a previously interrupted synchronization, ensuring continuity.<br><br><b>--delete</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes messages on the destination server if they no longer exist on the source server. Use with extreme caution as this action is irreversible.<br><br><b>--dry</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a dry run, simulating the synchronization process without making any actual changes to the mailboxes. Useful for testing and verification.<br><br><b>--noflags</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the synchronization of message flags (e.g., \Seen, \Answered, \Flagged) to the destination server.<br><br><b>--justfolders</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Synchronizes only the folder structure, without transferring any messages.<br><br><b>--skipsize</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips messages if they have the same size on both servers, assuming they are identical.<br><br><b>--useuid</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>imapsync</i> to use UIDs (Unique Identifiers) instead of message sequence numbers for message identification, which is generally more robust.<br><br><b>--automap</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to automatically map common special folder names (e.g., 'INBOX.Sent' to 'Sent Items') between servers.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output, providing detailed information about the synchronization process.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>imapsync</i> version information and exits.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>imapsync</i> usage instructions and a list of available options.<br><br>


title: DESCRIPTION
content:
<i>imapsync</i> is a powerful and versatile Perl script designed for robust synchronization and migration of mailboxes between two IMAP servers. It is widely utilized for transferring email accounts from one hosting provider to another, consolidating multiple accounts, or creating reliable backups of IMAP mailboxes. The tool meticulously preserves all aspects of the mailbox data, including message content, headers, flags (e.g., seen, answered, flagged, deleted), and the complete folder hierarchy. It operates by connecting to both a source and a destination IMAP server, systematically reading messages from the source, and then efficiently writing them to the destination. <i>imapsync</i> excels at managing large mailboxes and offers essential features such as resume capabilities, allowing transfers to pick up seamlessly after interruptions. Its extensive set of options also enables selective synchronization, such as excluding specific folders or messages based on criteria, making it a flexible and reliable choice for managing complex IMAP data transfers.


title: CAVEATS
content:
<i>imapsync</i> requires Perl and several essential Perl modules to be installed on the system where it is executed. Users should be aware that specifying passwords directly on the command line using <b>--pass1</b> and <b>--pass2</b> can be a security risk, as they might be exposed in process lists or shell history. It is highly recommended to use environment variables, password files (e.g., <b>--passfile1</b>), or rely on interactive password prompts for enhanced security. The <b>--delete</b> option is irreversible and should be used with extreme caution, as it will permanently remove messages from the destination server that are not present on the source. Performance can vary significantly based on network latency, the capabilities of both IMAP servers, and the number and size of messages being transferred. It is strongly advised to perform thorough testing with the <b>--dry</b> run option before executing a full synchronization, especially for critical data.


title: SUPPORTED SERVERS
content:
<i>imapsync</i> is designed to work with virtually any IMAP4rev1 compliant server. This includes popular services and platforms such as Gmail, Microsoft Exchange, Dovecot, Courier-IMAP, Zimbra, and many others, making it highly versatile for diverse environments.


title: SECURITY AND PASSWORD HANDLING
content:
For improved security, instead of directly providing passwords via <b>--pass1 &lt;password&gt;</b> and <b>--pass2 &lt;password&gt;</b>, users can opt to specify password files using <b>--passfile1 &lt;file&gt;</b> and <b>--passfile2 &lt;file&gt;</b>. Alternatively, omitting the password options will prompt <i>imapsync</i> to request passwords interactively at runtime, preventing them from being exposed in shell history or process listings.


title: RESUME CAPABILITY
content:
The <b>--synckey</b> option is a critical feature for resuming interrupted synchronizations. By providing a unique key, <i>imapsync</i> can intelligently pick up exactly where it left off, significantly saving time and bandwidth, especially when dealing with very large mailboxes or unreliable network connections.


title: HISTORY
content:
<i>imapsync</i> was originally created by Gilles Lamiral and has been developed as an open-source Perl script over many years. It has evolved into a highly respected and widely adopted tool for IMAP mailbox transfers. Its ongoing development has prioritized reliability, performance, and the ability to gracefully handle the numerous intricacies of diverse IMAP server implementations. It gained significant popularity due to its capability to preserve all aspects of mailboxes, from message content and headers to complex flags and complete folder structures, making it a de-facto standard solution for system administrators and users engaged in critical email migrations or consolidations.


title: SYNOPSIS
content:
<b><code>img2pdf</code></b> [<I>OPTIONS</I>] <I>IMAGE</I> [<I>IMAGE</I> ...] [<B>-o</B> <I>OUTPUT.pdf</I>]<br><b><code>img2pdf</code></b> [<I>OPTIONS</I>] <B>-o</B> <I>OUTPUT.pdf</I> [<I>IMAGE</I> ...]


title: PARAMETERS
content:
<b><b>-o</b>, <b>--output</b> <I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output PDF filename. If not given, output goes to standard output.<br><br><b><b>-S</b>, <b>--pagesize</b> <I>SIZE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the PDF page size (e.g., A4, Letter, 210mmx297mm, or 'fit' to fit the largest image).<br><br><b><b>--fit-width</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale images to fit the page width, maintaining aspect ratio. Requires <b>--pagesize</b> to be set.<br><br><b><b>--fit-height</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale images to fit the page height, maintaining aspect ratio. Requires <b>--pagesize</b> to be set.<br><br><b><b>--rotation</b> <I>DEG</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rotate images by a specified angle (90, 180, 270 degrees). Applied before fitting.<br><br><b><b>--border</b> <I>SIZE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a border around images. Can be a single value for all sides or four values (left, top, right, bottom).<br><br><b><b>--dpi</b> <I>DPI</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the DPI for rasterizing vector graphics or scaling images without explicit DPI information.<br><br><b><b>--img-dpi</b> <I>DPI</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Override the DPI information for images that have it embedded, used for scaling.<br><br><b><b>--jpeg-quality</b> <I>QUALITY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set JPEG quality for non-JPEG images that need re-encoding (0-100). Ignored for JPEG input.<br><br><b><b>--viewer-page-layout</b> <I>LAYOUT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the initial page layout for the PDF viewer (e.g., OneColumn, TwoPageLeft, TwoPageRight, SinglePage).<br><br><b><b>--viewer-non-full-screen-page-mode</b> <I>MODE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the initial document outline/thumbnail panel mode for the PDF viewer (e.g., UseNone, UseOutlines, UseThumbs, UseOC).<br><br><b><b>--title</b> <I>TEXT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the PDF document title metadata.<br><br><b><b>--author</b> <I>TEXT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the PDF document author metadata.<br><br><b><b>--creationdate</b> <I>YYYYMMDDHHMMSS[+|-HH'MM']</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the creation date for the PDF document.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's version number and exit.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a help message and exit.<br><br>


title: DESCRIPTION
content:
<i>img2pdf</i> is a powerful and efficient command-line tool designed to convert one or multiple image files into a single PDF document. Unlike many other converters, <i>img2pdf</i> aims for lossless conversion by directly embedding JPEG and JPEG2000 images into the PDF without re-encoding, preserving the original image quality and metadata. For other image formats (like PNG, TIFF, GIF, BMP), it converts them to uncompressed raw pixel data within the PDF. It supports various image formats and offers extensive options for controlling page size, image fitting, rotation, metadata, and PDF viewer settings, making it highly flexible for professional and archival use.


title: CAVEATS
content:
<i>img2pdf</i> requires a Python 3 environment. While it excels at lossless conversion for JPEG/JPEG2000, other image formats (PNG, TIFF, GIF, BMP) are converted to uncompressed pixel data, which can result in significantly larger PDF file sizes. Processing very large image files or many images simultaneously might consume considerable memory.


title: PIPING INPUT
content:
<i>img2pdf</i> can accept image data from standard input, making it suitable for piping with other commands (e.g., <I>curl example.com/image.jpg | img2pdf -o output.pdf</I>). When using standard input, only one image can be processed.


title: MULTIPLE IMAGES
content:
You can specify multiple image files as arguments, and <i>img2pdf</i> will concatenate them into a single multi-page PDF document. Each image will occupy a new page in the order they are provided.


title: HISTORY
content:
<i>img2pdf</i> was created with the primary goal of providing a simple, fast, and <I>lossless</I> way to convert images to PDF, specifically addressing the common issue where other converters re-encode JPEG images, leading to quality degradation and increased file sizes. Its development focused on leveraging the PDF standard's ability to embed JPEG data directly, ensuring maximum quality preservation and efficiency. It is written in Python and gained popularity for its straightforward approach and reliable results.


title: PARAMETERS
content:
<b>-w <width></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum width of the output image in pixels. Aspect ratio is maintained by default.<br><br><b>-h <height></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum height of the output image in pixels. Aspect ratio is maintained by default.<br><br><b>-p <colors></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the maximum number of colors to use in the SIXEL palette, typically a value from 1 to 256. Controls color quantization.<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keeps the aspect ratio of the input image, even if both width and height are specified. This is often the default behavior.<br><br><b>-o <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the generated SIXEL data to the specified file instead of standard output (stdout).<br><br><b>-u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays usage information and exits.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing progress and detailed information during conversion.<br><br>


title: DESCRIPTION
content:
<b>img2sixel</b> is a command-line utility that converts various image formats (like PNG, JPEG, GIF, BMP, etc.) into <I>SIXEL</I> graphics. <BR>SIXEL is an ancient but recently revitalized bitmap graphics format, originally developed by Digital Equipment Corporation (DEC) in the 1980s for their VT-series terminals. The tool outputs a series of <I>terminal escape sequences</I> representing the image, which can then be rendered directly within a compatible terminal emulator (e.g., xterm, mlterm, mintty, foot, wezterm).<BR><BR>Its primary purpose is to enable users to display images directly within the command-line interface, which is particularly useful for scripting, remote SSH sessions, or integrating image previews into CLI applications. <b>img2sixel</b> handles aspects like color quantization, dithering, and image resizing to adapt the input image for optimal display on a character-based terminal environment. It is a core component of the <I>libsixel</I> project, aiming to bring powerful graphics capabilities to modern terminals.


title: CAVEATS
content:
<b>img2sixel</b> requires a <I>SIXEL-compatible terminal emulator</I> to display images directly. Without one, the output will appear as unreadable escape sequences.<BR><BR>The quality and fidelity of the displayed image are highly dependent on the terminal's capabilities, including its color depth and character cell resolution.<BR><BR>Performance may vary for very large images or complex conversions.<BR><BR>The SIXEL output consists of terminal escape sequences, which means it will interfere with or be corrupted by other text output if not handled carefully (e.g., redirecting only the SIXEL output).


title: TERMINAL REQUIREMENTS
content:
To view images converted by <b>img2sixel</b>, your terminal emulator must explicitly support the SIXEL graphics protocol. Popular choices include <I>xterm</I> (when compiled with SIXEL support), <I>mlterm</I>, <I>mintty</I>, <I>foot</I>, and <I>wezterm</I>. Always verify your terminal's capabilities if images do not display correctly.


title: OUTPUT MECHANISM
content:
The command outputs a stream of <I>ANSI escape sequences</I> (specifically DEC private modes for SIXEL) to standard output. These sequences are interpreted by a SIXEL-aware terminal to draw the image. This means you can pipe the output to a file or another command, or simply let your terminal process it directly.


title: HISTORY
content:
The SIXEL graphics format originated with <B>Digital Equipment Corporation (DEC)</B> in the 1980s, primarily for their VT240, VT330, and VT340 series of graphics terminals. It allowed bitmap images to be transmitted over serial lines and rendered directly in the terminal window. After a period of decline with the rise of GUI environments, SIXEL has experienced a resurgence in recent years, largely driven by the <I>libsixel</I> project. This library, along with its associated command-line tool <b>img2sixel</b>, aims to modernize and standardize SIXEL support, making it accessible on contemporary terminal emulators and allowing for image display in CLI environments, SSH sessions, and embedded systems. <b>img2sixel</b> is the flagship tool for converting various image formats into this classic yet revived graphics format.


title: PARAMETERS
content:
<b><i>input_files</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more input image files (e.g., .png, .jpg, .tiff, .webp) to be converted. The order in which files are listed determines the animation sequence.<br><br><b><b>-o</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the path for the output animated WebP file. This option is mandatory.<br><br><b><b>-q</b> <i>&lt;float&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compression quality (0-100). Higher values result in better visual quality but larger file sizes. Default is 75.<br><br><b><b>-loop</b> <i>&lt;int&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of times the animation should loop. Use 0 for an infinite loop. Default is 0.<br><br><b><b>-duration</b> <i>&lt;int&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Duration of each frame in milliseconds. This value applies to all frames unless specified individually per frame. Default is 100ms.<br><br><b><b>-kmin</b> <i>&lt;int&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Minimum distance between keyframes (inclusive). Keyframes are frames that are encoded completely without reference to previous frames. Default is 9.<br><br><b><b>-kmax</b> <i>&lt;int&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Maximum distance between keyframes (inclusive). Default is 17.<br><br><b><b>-lossy</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use lossy compression for all frames. This is the default if <b>-q</b> is used.<br><br><b><b>-lossless</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use lossless compression for all frames. This option overrides <b>-q</b> if both are present.<br><br><b><b>-mixed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically decide between lossy and lossless compression for each frame, aiming for optimal compression based on content.<br><br><b><b>-min_size</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optimize the animation for minimal file size, potentially at the cost of some quality. This option implies <b>-mixed</b>.<br><br><b><b>-f</b> <i>&lt;int&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter strength (0-100) for lossy compression. Higher values apply more deblocking and smoothing during encoding.<br><br><b><b>-mt</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use multi-threading for encoding, which can significantly speed up the conversion process on multi-core systems.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing encoding progress, statistics for each frame, and any warnings.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a detailed help message with all command-line options and exit.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information of the <i>img2webp</i> tool and the underlying <i>libwebp</i> library, then exit.<br><br>


title: DESCRIPTION
content:
<i>img2webp</i> is a command-line tool designed for converting a sequence of input image files (such as PNG, JPEG, TIFF, and existing WebP images) into a single animated WebP file.<br>It is part of the official <i>libwebp</i> codec library, developed by Google, which focuses on efficient image compression. This utility provides comprehensive control over the animation parameters, including frame duration, looping count, quality settings, and various compression modes (lossy or lossless).<br>It's particularly useful for web developers and content creators who need to optimize animated graphics for web delivery, balancing file size with visual fidelity. By leveraging WebP's advanced compression algorithms, <i>img2webp</i> helps reduce bandwidth consumption and improve page load times on the web.


title: CAVEATS
content:
The order of input files on the command line is crucial as it directly defines the sequence of frames in the resulting animated WebP file.<br>Memory usage can be substantial for very long animations or extremely high-resolution input images, as frames might be loaded into RAM during processing.<br>Input image format support (e.g., PNG, JPEG, TIFF) depends on the specific image decoding libraries that <i>img2webp</i> was compiled with on your system.


title: PER-FRAME OPTIONS
content:
For more granular control, options like <b>-duration</b> or compression modes (<b>-lossy</b>, <b>-lossless</b>, <b>-mixed</b>) can be specified for individual frames by interleaving them with input filenames on the command line.<br>For example: <code>img2webp -duration 100 frame1.png -duration 200 frame2.png -q 80 frame3.png -o output.webp</code>


title: INPUT FILE FLEXIBILITY
content:
<i>img2webp</i> can accept various image formats as input, including commonly used PNG, JPEG, and TIFF files, as well as existing WebP images. It automatically detects the format of each input file based on its headers.


title: HISTORY
content:
<i>img2webp</i> is an integral component of the <i>libwebp</i> project, which was open-sourced by Google in 2010. Initially, the project focused on optimizing static image compression with tools like <i>cwebp</i>. As the demand for efficient animated web content grew, the WebP format was extended to support animations. <i>img2webp</i> was developed to enable the creation of these animated WebP files, offering a modern, highly efficient alternative to older formats like GIF. Its ongoing development aims to continuously improve compression efficiency, encoding speed, and promote broader adoption of WebP on the web.


title: SYNOPSIS
content:
<i>imgcat</i> [<i>options</i>] &lt;<i>file</i>&gt;<br>or<br>&lt;<i>some_command</i>&gt; | <i>imgcat</i> [<i>options</i>]


title: PARAMETERS
content:
<b>--width &lt;N&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the width of the displayed image. &lt;<i>N</i>&gt; can be a number of columns, pixels, or a percentage (e.g., '<i>50%</i>').<br><br><b>--height &lt;N&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the height of the displayed image. &lt;<i>N</i>&gt; can be a number of lines, pixels, or a percentage.<br><br><b>--align &lt;value&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies horizontal alignment for the image. Common values include '<i>left</i>', '<i>center</i>', or '<i>right</i>'.<br><br><b>--preserve-aspect-ratio</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the image to maintain its original aspect ratio, potentially overriding explicit width/height settings.<br><br><b>--filename &lt;name&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When reading image data from stdin, provides a filename hint to the terminal. Useful for display or saving purposes.<br><br>


title: DESCRIPTION
content:
<i>imgcat</i> is a utility that enables the display of images directly within certain modern terminal emulators, such as <i>iTerm2</i> and <i>Kitty</i>. Instead of opening an external image viewer, <i>imgcat</i> leverages special terminal escape codes (e.g., <i>iTerm2's</i> image protocol or <i>Kitty's</i> graphics protocol) to render image data inline.<br><br>This functionality is particularly useful for quickly previewing images without interrupting a command-line workflow, for displaying visual output from scripts, or for integrating image viewing into shell environments. It processes image files and converts them into a format that the compatible terminal can interpret and render as a graphical element within the text-based interface. It typically supports common image formats like JPEG, PNG, and GIF.


title: CAVEATS
content:
<i>imgcat</i> is <b>not</b> a standard POSIX command; its availability and functionality depend entirely on the terminal emulator being used. It primarily functions with <i>iTerm2</i>, <i>Kitty</i>, and some other niche terminals that support specific image display protocols. Users of standard terminals like <i>Gnome Terminal</i>, <i>Konsole</i>, or <i>xterm</i> will typically not see images but rather sequences of control characters or raw binary data. Performance can vary based on image size, terminal, and system resources.


title: TERMINAL COMPATIBILITY
content:
The primary prerequisite for using <i>imgcat</i> is a terminal emulator that supports its underlying image display protocol. The most widely known implementations are found in <i>iTerm2</i> (using its proprietary image protocol) and <i>Kitty</i> (using its graphics protocol). Other terminals, like <i>WezTerm</i>, are also developing similar capabilities. Without a compatible terminal, <i>imgcat</i> will not display images correctly.


title: HOW IT WORKS
content:
<i>imgcat</i> typically reads image data, encodes it (often Base64 or similar), and then wraps it in special terminal escape sequences (e.g., <code>OSC 1337 ; File=... ; base64_data_here ; BEL</code> for <i>iTerm2</i> or <code>CSI _G...</code> for <i>Kitty</i>). These sequences instruct the terminal to interpret the encoded data as an image and render it at the current cursor position.


title: HISTORY
content:
<i>imgcat</i> originated as part of <i>iTerm2's</i> shell integration scripts, allowing users to display images directly within the terminal window. Its success and utility led other terminal emulators, notably <i>Kitty</i>, to develop their own, often compatible or similarly purposed, image display protocols and utilities. It represents a significant step in blurring the lines between traditional text-based terminal interaction and richer graphical displays.


title: PARAMETERS
content:
<b>--recursive, -r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Process images in subdirectories recursively.<br><br><b>--output <DIR>, -o <DIR></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output directory. Defaults to 'imgp_out' or current directory.<br><br><b>--quality <PERCENT>, -q <PERCENT></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the output quality for lossy formats (e.g., JPEG, WebP) from 1 to 100.<br><br><b>--size <WxH | W% | H% | Wx | xH | W | H>, -s <DIM></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resize images. Examples: 1920x1080, 50%, 1200x, x900.<br><br><b>--mode <MODE>, -m <MODE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resizing mode: contain (default, fit within bounds), cover, crop, stretch.<br><br><b>--format <FORMAT>, -f <FORMAT></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Convert output format (e.g., jpeg, png, webp).<br><br><b>--verbose, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display verbose output during processing.<br><br><b>--no-metadata</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip all EXIF, ICC, and other metadata from images.<br><br><b>--auto-rotate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically rotate images based on EXIF orientation data.<br><br><b>--max-files <N></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limit the number of files to process.<br><br><b>--log-file <FILE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write detailed log information to a specified file.<br><br><b>--preserve-filenames</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keep original filenames in the output directory.<br><br><b>--skip-existing</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip processing if an identically named output file already exists.<br><br><b>--skip-larger</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip processing if the output file would be larger than the input.<br><br><b>--skip-compressed</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip processing if the image is already highly compressed (e.g., JPEG quality < 80).<br><br><b>--suffix <SUFFIX></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a suffix to the output filenames.<br><br><b>--prefix <PREFIX></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a prefix to the output filenames.<br><br><b>--lower</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Convert output filenames to lowercase.<br><br><b>--upper</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Convert output filenames to uppercase.<br><br><b>--flatten</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output all images directly into the output directory, ignoring input directory structure.<br><br><b>--strip-icc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip ICC color profiles from images.<br><br><b>--keep-mtime</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserve the modification time of the original files for the output files.<br><br><b>--replace</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replace input files with processed output files. Use with caution.<br><br><b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message and exit.<br><br><b>--version, -V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's version number and exit.<br><br>


title: DESCRIPTION
content:
<i>imgp</i> is a versatile command-line utility designed for efficient batch processing of images. It allows users to perform various operations such as resizing, compressing, converting formats, and stripping metadata from image files. Written in Python, <i>imgp</i> excels at handling large collections of images, making it ideal for web developers, photographers, and anyone needing to optimize or standardize image assets quickly. It supports recursive processing of directories and offers fine-grained control over output quality, dimensions, and file naming conventions. <i>imgp</i> aims to simplify common image manipulation tasks without requiring a graphical interface, providing a lightweight yet powerful alternative for command-line enthusiasts. Its core strength lies in its ability to automate repetitive image processing workflows.


title: CAVEATS
content:
<i>imgp</i> relies on Python and the Pillow (PIL Fork) library for image processing, so these dependencies must be installed. While powerful for batch operations, it may not offer the same low-level pixel manipulation capabilities or exhaustive format support as larger suites like ImageMagick. Some advanced operations might require chained commands or external tools. Using the --replace option should be done with caution, as it overwrites original files.


title: <B>BATCH PROCESSING</B>
content:
<i>imgp</i> excels at processing multiple files or entire directories recursively, making it highly efficient for optimizing large image collections. It automatically handles file naming and output directory structures unless specified otherwise.


title: <B>SUPPORTED FORMATS</B>
content:
<i>imgp</i> primarily supports popular raster image formats including JPEG, PNG, WebP, and GIF. While it can read other formats supported by Pillow, its core optimization features are most effective with JPEGs and PNGs.


title: <B>ERROR HANDLING</B>
content:
The command provides clear error messages for invalid inputs or processing failures. When processing multiple files, it attempts to continue with the next image even if one fails, logging the issues.


title: HISTORY
content:
<i>imgp</i> emerged as a modern, user-friendly command-line tool primarily written in Python. Its development was likely driven by the need for a simpler, more accessible batch image processing utility compared to the often complex syntax of traditional tools like ImageMagick, particularly for common tasks such as resizing and compression. Being open-source, it benefits from community contributions and is actively maintained, focusing on ease of use and efficient performance for standard image optimization workflows. It has gained popularity among users looking for a lightweight, dependency-minimal solution that integrates well into shell scripts.


title: PARAMETERS
content:
<b><b><I>-verbose</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides verbose output, showing details about the conversion process, such as the detected image type and dimensions.<br><br><b><i>imgfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input image file to be converted. If this argument is omitted, <I>imgtoppm</I> reads the image data from standard input.<br><br>


title: DESCRIPTION
content:
<I>imgtoppm</I> is a utility from the Netpbm project designed to convert image files from several older or less common formats into the Portable PixMap (PPM) format. PPM is a simple, plain-text or binary format for storing pixel-based images, part of the Netpbm suite of graphics manipulation tools.<br><br>Specifically, <I>imgtoppm</I> handles formats such as GEM .IMG files (common on Atari ST and Amiga), and PC Paintbrush .IMG files. The Netpbm tools are often used in shell scripts for batch processing or piping image data between different utilities.<br><br>While <I>imgtoppm</I> is specialized for specific .IMG variants, the broader <I>anytopnm</I> command or more general tools like ImageMagick's <I>convert</I> are typically used for wider image format conversion. <I>imgtoppm</I> outputs a PPM image to standard output, making it suitable for piping to other Netpbm commands or redirecting to a file.


title: CAVEATS
content:
<I>imgtoppm</I> is specific to older GEM .IMG and PC Paintbrush .IMG formats. It does not support other common image formats like JPEG, PNG, GIF, or modern TIFF variants. For broader image conversion needs, more versatile tools like <I>anytopnm</I> (also from Netpbm) or <I>convert</I> (from ImageMagick) are generally more suitable. The input file must strictly adhere to one of the supported .IMG variations; otherwise, the command will likely fail with an error indicating an unrecognized or corrupt file.


title: <I>USAGE WITH PIPELINES</I>
content:
<I>imgtoppm</I> is designed to be used effectively within shell pipelines. It reads the input image file (or standard input) and writes the resulting PPM data to standard output. This design allows its output to be directly piped as input to another Netpbm utility or any command that accepts PPM data on standard input (e.g., <I>ppmtopgm</I>, <I>pnmnoraw</I>, or a display program).<br><br>For instance, to convert an .IMG file to a PNG format, you might use a pipeline like:<br><code><I>imgtoppm</I> input.img | <I>ppmtopgm</I> | <I>pnmtopng</I> &gt; output.png</code>


title: HISTORY
content:
<I>imgtoppm</I> is an integral part of the Netpbm package, a venerable suite of graphics utilities that evolved from Jef Poskanzer's Pbmplus utilities in the late 1980s. The core philosophy of Netpbm emphasizes simple, pipe-friendly tools, each performing a single, specific task efficiently. <br><br><I>imgtoppm</I> was developed to specifically handle the conversion of older GEM .IMG files, which were prevalent on platforms like the Atari ST, and PC Paintbrush .IMG files, common in early DOS environments. Its inclusion reflects the need to integrate these historical image formats into the Netpbm ecosystem, allowing them to be manipulated by other Netpbm tools. While its specific .IMG format support is niche today, it remains a testament to Netpbm's comprehensive approach to image format interoperability and its commitment to preserving access to legacy image data.


title: SYNOPSIS
content:
impacket-getadusers [[<I>domain</I>/]<I>username</I>[:<I>password</I>]@]<I>target</I> [-h] [-target-ip <I>IP</I>] [-port <I>PORT</I>] [-k] [-no-sspi] [-hashes <I>LMHASH</I>:<I>NTHASH</I>] [-dc-ip <I>IP</I>] [-outputfile <I>FILE</I>] [-users] [-groups] [-all]


title: PARAMETERS
content:
<b><I>target</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target host (IP or hostname) and optional authentication credentials. Format: [[<I>domain</I>/]<I>username</I>[:<I>password</I>]@]<I>target</I><br><br><b>-target-ip <I>IP</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;IP address of the target machine, useful when DNS resolution is not available or for direct targeting.<br><br><b>-port <I>PORT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Port number to connect to on the target (default is 389 for LDAP).<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use Kerberos authentication instead of NTLM. Requires a Kerberos ticket in the credential cache.<br><br><b>-no-sspi</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable SSPI (Security Support Provider Interface) authentication mechanisms.<br><br><b>-hashes <I>LMHASH</I>:<I>NTHASH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provide LM and NT hashes for NTLM authentication instead of a plaintext password. Format: <I>LMHASH</I>:<I>NTHASH</I>.<br><br><b>-dc-ip <I>IP</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;IP address of the Domain Controller to query. If not specified, the tool attempts to resolve it via DNS.<br><br><b>-outputfile <I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save the gathered information to the specified file.<br><br><b>-users</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enumerate Active Directory user accounts. This is the default behavior.<br><br><b>-groups</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enumerate Active Directory groups and their members.<br><br><b>-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enumerate both Active Directory users and groups.<br><br>


title: DESCRIPTION
content:
<b>impacket-getadusers</b> is a powerful Python-based utility from the <b>Impacket</b> library, designed for security professionals and penetration testers to enumerate user and group information from Active Directory domains. It leverages LDAP (Lightweight Directory Access Protocol) queries against a specified Domain Controller to gather details such as usernames, user properties, group memberships, and other crucial Active Directory attributes. This tool is invaluable for reconnaissance phases, helping to identify valid user accounts, find privileged users, and build a comprehensive understanding of the target's Active Directory environment before attempting further attacks. It supports various authentication methods, including password-based, NTLM hash-based, and Kerberos.


title: CAVEATS
content:
Using <b>impacket-getadusers</b> can generate network traffic and logs on the Domain Controller, potentially alerting defenders. It requires network connectivity to the target DC and appropriate credentials (or anonymous LDAP access, which is rare in secure environments). Overly aggressive usage or queries for non-existent accounts can lead to account lockouts or detection. Results are dependent on the permissions of the provided credentials.


title: COMMON USAGE
content:
Typically used in the reconnaissance phase of a penetration test or red team engagement to gather information about users and groups within an Active Directory domain. It helps identify potential targets for credential stuffing, password spraying, or to locate privileged accounts. <br><br><b>Example:</b> <br><i>impacket-getadusers 'domain.local/adminuser:Password123@dc01.domain.local' -all -outputfile all_ad_users_groups.txt</i>


title: HISTORY
content:
<b>impacket-getadusers</b> is part of the widely recognized <b>Impacket</b> library, a collection of Python classes developed by Core Security for programmatic access to network protocols. Impacket originated in the early 2000s and has evolved into a staple tool in offensive security and red teaming for Windows network exploitation and reconnaissance. <b>getadusers</b> specifically provides a specialized interface for Active Directory enumeration, building upon Impacket's robust LDAP and SMB capabilities.


title: SYNOPSIS
content:
<b>impacket-getarch</b> [<i>options</i>] <i>target</i><br><br>The <i>target</i> argument specifies the host and optionally credentials in the format: <i>[[domain/]username[:password]@]&lt;targetName or address&gt;</i>


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>-debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables detailed debug output for troubleshooting.<br><br><b><b>-no-pass</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the tool from prompting for a password when authentication is required (useful with Kerberos).<br><br><b><b>-k</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the use of Kerberos authentication for the target.<br><br><b><b>-no-k</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly disables Kerberos authentication (default behavior).<br><br><b><b>-dc-ip</b> <i>ip address</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP address of the domain controller for Kerberos authentication. If omitted, it attempts to resolve the domain from the target name.<br><br><b><b>-rpc-auth</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables RPC authentication, primarily for Windows 2008 and newer systems.<br><br><b><b>-hashes</b> <i>LMHASH:NTHASH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides NTLM hashes for authentication instead of a plaintext password.<br><br><b><b>-aesKey</b> <i>hex key</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the AES key (128 or 256 bits) to use for Kerberos authentication.<br><br><b><b>-port</b> <i>[destination port]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the destination port to connect to. Defaults to 445 (SMB) or 3389 (RDP).<br><br><b><i>target</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The required positional argument specifying the target host, optionally including domain, username, and password.<br><br>


title: DESCRIPTION
content:
The <b>impacket-getarch</b> command, part of the widely-used <i>Impacket</i> toolkit, is a specialized utility designed to identify the CPU architecture (32-bit or 64-bit) of a remote Windows target. It primarily achieves this by probing the Server Message Block (SMB) service on TCP port 445, and in some contexts, can infer information from RDP (Remote Desktop Protocol) on TCP port 3389.<br><br>This tool is particularly critical in exploit development and penetration testing, especially for vulnerabilities like <i>EternalBlue</i> (MS17-010) or <i>BlueKeep</i> (CVE-2019-0708). These exploits often require architecture-specific payloads to succeed, making accurate prior identification of the target's bitness essential. By sending carefully crafted packets and analyzing the target's responses, <b>impacket-getarch</b> provides quick and reliable architectural insights, facilitating the selection of the correct exploit payload.


title: CAVEATS
content:
The command requires direct network access to the target host's SMB (TCP 445) and/or RDP (TCP 3389) ports. Firewalls or network restrictions can prevent it from functioning.<br>While generally reliable, certain network configurations or patched systems might lead to inaccurate results or prevent detection.<br>As a component of a penetration testing toolkit, <b>impacket-getarch</b> should only be used in authorized environments for legitimate security assessments.


title: USAGE EXAMPLES
content:
<br>To detect the architecture of a remote host without credentials:<br><i>impacket-getarch 192.168.1.100</i><br><br>To detect the architecture using a username and password:<br><i>impacket-getarch domain/username:password@target_hostname</i><br><br>To specify NTLM hashes for authentication:<br><i>impacket-getarch -hashes :0a0b0c0d0e0f10111213141516171819 username@192.168.1.101</i>


title: OUTPUT FORMAT
content:
<br>The command typically outputs a concise message indicating the detected architecture, such as:<br><i>Architecture: x64</i><br>or<br><i>Architecture: x86</i><br><br>If detection fails or the host is unreachable, it will report an error or 'Unknown'.


title: HISTORY
content:
<b>impacket-getarch</b> is an integral part of the <i>Impacket</i> framework, an open-source collection of Python classes developed by SecureAuth (now Fortra) for programmatic access to network protocols. Impacket's development began with a focus on Windows network protocols like SMB, MSRPC, and DCERPC, making it a staple in offensive security.<br><br>The <b>getarch.py</b> script (the underlying component of <b>impacket-getarch</b>) gained significant prominence, particularly in the mid to late 2010s, due to its crucial role in the successful exploitation of vulnerabilities like <i>EternalBlue</i>. Before deploying architecture-specific exploits, accurately determining the target's bitness became a mandatory preliminary step, and <b>getarch.py</b> provided a reliable means to achieve this, solidifying its place as a key reconnaissance tool.


title: SEE ALSO
content:
nmap(1): A powerful network scanner that can also identify OS and service versions, indirectly providing architecture clues.


title: SYNOPSIS
content:
<b>impacket-getnpusers.py</b> [options] <target><br><br><i>target</i> is typically specified as <i>[domain/]username[:password]@<host or ip></i>. For unauthenticated scans, the <i>username:password</i> part is often omitted, relying on connection to the Domain Controller via its IP or domain name, and optionally providing a file of users.


title: PARAMETERS
content:
<b>target</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target, typically in the format <i>[domain/]username[:password]@<host or ip></i>. For unauthenticated scans, the <i>username:password</i> part is often omitted, connecting to the Domain Controller via its IP or domain name.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the command's help message and exits.<br><br><b>-debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output for troubleshooting and detailed information.<br><br><b>-format {hashcat,john}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Determines the output format for the extracted hashes, either <i>hashcat</i> (default) or <i>john</i> (John the Ripper).<br><br><b>-outputfile FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a file to write the extracted hashes to.<br><br><b>-usersfile FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a file containing a list of usernames to query for the <i>DONT_REQUIRE_PREAUTH</i> flag. Each username should be on a new line.<br><br><b>-request-user USERNAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requests a TGT specifically for the given <i>USERNAME</i> instead of attempting to enumerate and query all potential vulnerable users.<br><br>


title: DESCRIPTION
content:
<i>impacket-getnpusers</i> is a Python script, part of the <b>Impacket</b> toolkit, designed for security assessments and penetration testing. Its primary function is to identify and extract Kerberos AS-REP hashes for Active Directory user accounts that have the <i>DONT_REQUIRE_PREAUTH</i> attribute enabled. This attribute is a common misconfiguration or legacy setting, allowing Kerberos pre-authentication to be bypassed for a user.<br><br>The tool exploits this vulnerability, known as AS-REPRoasting, by sending an unauthenticated Kerberos AS-REQ (Authentication Service Request) for such users to a Domain Controller. Since pre-authentication is not required, the KDC (Key Distribution Center) responds with an AS-REP (Authentication Service Response) containing an encrypted TGT (Ticket Granting Ticket) which is encrypted with the target user's NTLM hash. <i>impacket-getnpusers</i> captures this AS-REP and extracts the crackable hash, typically in formats suitable for offline brute-forcing tools like Hashcat or John the Ripper. This allows attackers to obtain domain user credentials without requiring any prior authentication or interaction with the target user, making it a powerful initial access or privilege escalation technique in unauthenticated scenarios.


title: CAVEATS
content:
<i>impacket-getnpusers</i> requires direct network connectivity to the target Domain Controller on port 88 (Kerberos). The attack is only successful if there are user accounts configured with the <i>DONT_REQUIRE_PREAUTH</i> flag in Active Directory. While no prior authentication is needed for the tool itself, the extracted hashes still need to be cracked offline using tools like Hashcat or John the Ripper to reveal the plaintext passwords. Kerberos AS-REQ attempts, even failed or unauthenticated ones, can be logged by Domain Controllers and potentially trigger alerts in Security Information and Event Management (SIEM) systems.


title: AS-REPROASTING ATTACK
content:
The <i>AS-REPRoasting</i> attack is a specific type of Kerberos attack that <i>impacket-getnpusers</i> automates. It targets user accounts in Active Directory that have the <i>DONT_REQUIRE_PREAUTH</i> attribute enabled. When this flag is set, the Kerberos Key Distribution Center (KDC) will issue a Ticket Granting Ticket (TGT) to a user without requiring a pre-authentication step (i.e., without verifying the user's password). An attacker can request a TGT for such a user; the KDC's response (AS-REP) contains the TGT encrypted with the target user's NTLM hash. By capturing this response, the attacker can then brute-force the encrypted portion offline to recover the user's plaintext password. This attack is particularly valuable as it allows for credential acquisition from the domain without needing any prior legitimate credentials or direct interaction with the user.


title: HISTORY
content:
<i>impacket-getnpusers</i> is a component of the comprehensive <b>Impacket</b> Python library, originally developed by SecureAuth Corp (now Core Security). The Impacket toolkit is renowned for its collection of Python classes and scripts for working with network protocols, particularly those used in Windows environments. This specific script implements the client-side functionality for the AS-REPRoasting attack, a well-documented technique in cybersecurity that targets a specific misconfiguration in Active Directory. Its development and inclusion in Impacket underscore the library's focus on providing practical tools for penetration testing, red teaming, and security research against Windows infrastructure, enabling efficient discovery and exploitation of common Active Directory vulnerabilities.


title: SEE ALSO
content:
impacket-secretsdump.py (used for extracting various credentials from Active Directory, requiring prior authentication), impacket-lookupsid.py (for enumerating SIDs and usernames in Active Directory), hashcat(1) (a powerful password recovery utility, used for cracking the extracted hashes), john(1) (John the Ripper, another popular password cracker), nmap(1) (a network scanner used for host discovery and port scanning to locate Domain Controllers), ldapsearch(1) (a command-line utility for making LDAP queries against directories, including Active Directory)


title: SYNOPSIS
content:
impacket-getuserspns [[<I>domain</I>/]<I>username</I>[:<I>password</I>]@]<I>target_ip_or_domain</I> [<I>options</I>]


title: PARAMETERS
content:
<b><I>identity</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the authentication identity in the format: <I>[[domain/]username[:password]@]<target_ip_or_domain</I>. The <I>target_ip_or_domain</I> can be either an IP address or a domain name.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br><b>-debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turns on debug output for more detailed information.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output.<br><br><b>-ts</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a timestamp to every log message, useful for chronological analysis.<br><br><b>-target-ip <I>IP</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP Address of the target machine. If omitted, the domain name provided in the identity will be used for resolution.<br><br><b>-port <I>PORT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the destination port to connect to. While the help states 'SMB', Kerberos primarily uses port 88.<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables Kerberos authentication. Credentials will be obtained from a ccache file (specified by <I>KRB5CCNAME</I> environment variable), KDC_PROXY, or prompted if necessary. Requires <I>-no-pass</I> if no password is provided in identity.<br><br><b>-no-pass</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not prompt for a password. Particularly useful when using Kerberos authentication (<I>-k</I>) or NTLM hashes (<I>-hashes</I>).<br><br><b>-hashes <I>LM:NT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides NTLM hashes for authentication in the format <I>LMhash:NThash</I>. If the LM hash is not available, leave it blank (e.g., <I>:NThash</I>).<br><br><b>-aesKey <I>hex key</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the AES key (128 or 256 bits, in hexadecimal format) to be used for Kerberos Authentication.<br><br><b>-dc-ip <I>IP</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP Address of the Domain Controller. If omitted, the script will attempt to resolve the DC from the domain name provided.<br><br><b>-request-user <I>USERNAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requests a TGS ticket specifically for the specified <I>USERNAME</I> instead of attempting to retrieve SPNs for all users in the domain.<br><br><b>-outputfile <I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the extracted hashes to the specified output <I>FILE</I>. If not specified, hashes are printed to standard output.<br><br><b>-no-format</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables formatting of the output, useful for scripting or piping to other tools that expect raw data.<br><br>


title: DESCRIPTION
content:
<i>impacket-getuserspns</i> is a specialized script within the <I>Impacket</I> toolkit designed to perform the <B>Kerberoasting</B> attack against Microsoft Active Directory. It leverages legitimate Kerberos functionality to request Ticket Granting Service (TGS) tickets for Service Principal Names (SPNs) that are associated with user accounts.<br><br>When a TGS ticket is successfully requested for an SPN, a portion of the ticket is encrypted with the NTLM hash of the service account's password. <I>impacket-getuserspns</I> extracts this encrypted hash, which can then be saved to a file (often in a format compatible with tools like <I>Hashcat</I> or <I>John the Ripper</I>) and subjected to offline password cracking.<br><br>This attack is highly effective because it allows an attacker, possessing even low-privileged domain credentials, to obtain potentially crackable password hashes without requiring direct interaction with the target service account's machine or elevated privileges on a Domain Controller. It exploits a common misconfiguration where service accounts are given weak or reused passwords.


title: CAVEATS
content:
<ul><li>Requires valid domain credentials (even low-privileged) to perform the initial Kerberos TGS request.</li><li>Generates network traffic that can be detected by network monitoring solutions (e.g., IDS/IPS, SIEMs) looking for suspicious Kerberos activity.</li><li>Repeated attempts with incorrect credentials can lead to account lockouts, especially if targeting specific users with <I>-request-user</I>.</li><li>Only targets SPNs associated with user accounts, not computer accounts, as computer account passwords are typically long and random, making them uncrackable.</li><li>Offline cracking of the extracted hashes can be computationally intensive and time-consuming, depending on password complexity and available cracking resources.</li></ul>


title: KERBEROASTING ATTACK
content:
Kerberoasting is an attack where an attacker attempts to extract Active Directory user password hashes from Kerberos service tickets (TGS-REP messages). It exploits the fact that any authenticated domain user can request a TGS ticket for any registered Service Principal Name (SPN). If an SPN is associated with a user account, the TGS ticket is encrypted with the NTLM hash of that user's password. The attacker can then take this encrypted portion offline and brute-force or dictionary-attack the hash to recover the plaintext password.


title: OUTPUT FORMAT
content:
The hashes extracted by <I>impacket-getuserspns</I> are typically output in a format suitable for widely-used password cracking tools. For <I>Hashcat</I>, this often means a format similar to <B>$krb5tgs$23$*<I>user</I>$<I>service</I>$<I>domain</I>$<I>hash</I></B>, where the various fields provide context for the cracking process.


title: MITIGATION STRATEGIES
content:
To defend against Kerberoasting, organizations should:<ul><li>Enforce strong, unique passwords for all service accounts, especially those associated with SPNs.</li><li>Regularly rotate service account passwords.</li><li>Monitor for anomalous Kerberos Ticket Granting Service (TGS) requests, particularly those from unusual sources or for a large number of SPNs.</li><li>Where possible, utilize Group Managed Service Accounts (gMSAs) or Managed Service Accounts (MSAs) for services. These account types have automatically managed, complex passwords that are difficult to compromise via Kerberoasting.</li><li>Ensure service accounts have the 'Do not require Kerberos preauthentication' setting disabled unless absolutely necessary for specific legacy services.</li></ul>


title: HISTORY
content:
<i>impacket-getuserspns</i> is a component of the widely-used <I>Impacket</I> Python library, developed by SecureAuth Corporation. Impacket is a collection of tools and classes for programmatically working with network protocols. This specific script implements the <B>Kerberoasting</B> attack, a technique that gained significant attention and widespread adoption in offensive security, particularly after public presentations and tools by researchers like Harmj0y. Its development reflects the ongoing evolution of attack vectors against Active Directory, providing a robust and accessible method for extracting password hashes from service accounts.


title: PARAMETERS
content:
<b><I>&lt;target&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The IP address or hostname of the MQTT broker to check.<br><br><b>-p <I>&lt;port&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the TCP port to connect to. Default is 1883 for MQTT, or 8883 if <I>--tls</I> is used.<br><br><b>-u <I>&lt;username&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provide a username for authentication to the MQTT broker.<br><br><b>-P <I>&lt;password&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provide a password for authentication to the MQTT broker.<br><br><b>--tls</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable TLS/SSL encryption for the connection (often uses port 8883).<br><br><b>--ca-file <I>&lt;file&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a CA certificate file (PEM format) for verifying the server's TLS certificate.<br><br><b>-t <I>&lt;topic&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a specific topic to interact with (e.g., for subscribing or publishing).<br><br><b>--cid <I>&lt;client_id&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a specific MQTT client ID to use for the connection.<br><br><b>--subscribe</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Subscribe to the specified topic (<I>-t</I>). If no topic is given, defaults to '#'.<br><br><b>--publish <I>&lt;message&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Publish a message to the specified topic (<I>-t</I>).<br><br><b>--list-topics</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to enumerate and list accessible topics on the broker. This often relies on specific broker configurations or vulnerabilities.<br><br><b>--anonymous</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to connect to the broker without providing any credentials.<br><br><b>--client-id-prefix <I>&lt;prefix&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a specified prefix when generating client IDs for certain checks (e.g., client ID enumeration).<br><br><b>--subscribe-wildcard <I>&lt;wildcard&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Subscribe using a wildcard topic (e.g., 'sensors/#').<br><br><b>--dump-all-topics</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Subscribe to the '#' wildcard topic and dump all messages received.<br><br><b>--check-auth</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform various authentication-related checks, including common weak credentials or bypasses.<br><br><b>--check-anonymous</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifically check if anonymous access is permitted on the broker.<br><br><b>--check-topic-enum</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check for vulnerabilities allowing unauthorized topic enumeration.<br><br><b>--check-qos-bypass</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Test for Quality of Service (QoS) bypass vulnerabilities.<br><br><b>--check-retained-messages</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Examine retained message functionality for potential issues.<br><br><b>--check-lwt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check Last Will and Testament (LWT) messages for security implications.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the program's help message and exit.<br><br>


title: DESCRIPTION
content:
<I>impacket-mqtt_check</I> is a specialized command-line utility from the <I>Impacket</I> toolkit, designed for security auditing and penetration testing of MQTT (Message Queuing Telemetry Transport) brokers. It allows security professionals to interact with MQTT services, enumerate topics, check for anonymous access, test authentication mechanisms, and identify common misconfigurations or vulnerabilities.<br><br>This tool is particularly useful in environments where MQTT is used for IoT devices, industrial control systems (ICS), or general messaging, helping to ensure the integrity and confidentiality of communication channels by proactively identifying potential weaknesses in the MQTT broker's security posture. It supports both standard MQTT (port 1883) and MQTT over TLS/SSL (port 8883).


title: CAVEATS
content:
1. <B>Ethical Use:</B> This tool is intended for authorized security assessments. Never use it against systems you do not have explicit permission to test.<br>2. <B>Network Connectivity:</B> Requires direct network access to the target MQTT broker on the specified port.<br>3. <B>Broker Variations:</B> The effectiveness and results of checks can vary significantly depending on the MQTT broker software, version, and configuration.<br>4. <B>Passive vs. Active:</B> Some checks are active and may generate logs or trigger alerts on the target system.


title: INSTALLATION
content:
<I>impacket-mqtt_check</I> is part of the <I>Impacket</I> library. It can typically be installed via pip:<br><B>pip install impacket</B><br>or by cloning the GitHub repository and installing manually.


title: COMMON USE CASES
content:
<ul><li><B>Anonymous Access Check:</B> <I>impacket-mqtt_check &lt;target&gt; --check-anonymous</I></li><li><B>Dump All Topics:</B> <I>impacket-mqtt_check &lt;target&gt; --dump-all-topics</I> (Warning: can generate significant output)</li><li><B>Check Authentication:</B> <I>impacket-mqtt_check &lt;target&gt; --check-auth</I></li><li><B>Subscribe to a Specific Topic with Credentials:</B> <I>impacket-mqtt_check &lt;target&gt; -u &lt;user&gt; -P &lt;pass&gt; -t my/sensor/data --subscribe</I></li></ul>


title: HISTORY
content:
The <I>Impacket</I> library, developed by SecureAuth, is a renowned collection of Python classes for programmatic access to network protocols. <I>mqtt_check</I> was introduced as MQTT's prevalence grew, particularly in IoT and ICS environments, necessitating specialized tools for security assessments. It reflects the ongoing commitment of the Impacket project to address new protocol vulnerabilities and expand its capabilities for penetration testing and incident response.


title: SEE ALSO
content:
nmap(1) - Network exploration tool and security / port scanner, mosquitto_pub(1) - Mosquitto command line publisher, mosquitto_sub(1) - Mosquitto command line subscriber, netcat(1) - arbitrary TCP and UDP connections and listens


title: PARAMETERS
content:
<b><disk_image_or_device></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the raw disk image file (e.g., <i>/path/to/disk.img</i>) or block device (e.g., <i>/dev/sda1</i>) containing the NTFS volume to be read.<br><br><b>-r, --recursive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the contents of directories recursively, displaying all subdirectories and files within the specified path.<br><br><b>-x <OUTPUT_DIR>, --extract <OUTPUT_DIR></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts files or directories to the specified <i>OUTPUT_DIR</i>. If used with <i>--path</i>, only the specified path is extracted; otherwise, the entire volume (or selected path) is extracted.<br><br><b>-p <PATH>, --path <PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular path within the NTFS volume to operate on (e.g., <i>/Users/JohnDoe/Documents</i>). If omitted, the root of the volume is used.<br><br><b>-s <SECTOR_SIZE>, --sector-size <SECTOR_SIZE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overrides the auto-detected sector size of the disk image or device. Useful if the auto-detection fails or for unusual configurations.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the program's help message and exits.<br><br>


title: DESCRIPTION
content:
<i>impacket-ntfs-read</i> is a utility from the <B>Impacket</B> toolkit designed for interacting with NTFS file systems directly from a raw disk image or block device. It allows users to list directory contents, navigate through the file system, and extract specific files or entire directories.<br><br>This tool is particularly valuable in digital forensics and penetration testing scenarios where direct access to a disk's file system is required, bypassing the operating system's normal file access mechanisms. It can be used to recover deleted files (if still present), extract sensitive documents, or examine file system metadata, offering a low-level view of an NTFS volume without mounting it.


title: CAVEATS
content:
This tool requires raw access to the disk or image, often necessitating <B>root privileges</B> when operating on block devices. It is a read-only tool, meaning it will not modify the target NTFS volume. However, incorrect usage or targeting a live system without proper understanding could lead to instability or data corruption if other processes are also writing to the disk.<br><br>It may not recover all deleted files, as their data blocks might have been overwritten.


title: PREREQUISITES
content:
The tool is written in Python and requires the <B>Impacket library</B> to be installed. It typically runs on Linux systems, but can run on any OS with Python and Impacket installed, provided it has access to the raw disk or image.


title: USE CASES
content:
Beyond basic file extraction, <i>impacket-ntfs-read</i> can be used for tasks such as identifying remnants of deleted files, extracting Windows Registry hives (e.g., SAM, SYSTEM), or recovering configuration files from compromised systems.


title: HISTORY
content:
<i>impacket-ntfs-read</i> is part of the <B>Impacket</B> collection, a set of Python classes for programmatic access to network protocols. Developed by <B>SecureAuth Corp.</B>, Impacket has grown into a vital toolkit for network security professionals, enabling low-level interaction with various Windows services and file systems. Its NTFS reading capabilities were introduced to facilitate forensic analysis and penetration testing tasks that require direct examination of disk contents, evolving with the needs of the security community.


title: SYNOPSIS
content:
<b>impacket-ping</b> [-h] [-timeout <i>&lt;seconds&gt;</i>] [-count <i>&lt;count&gt;</i>] [-interface <i>&lt;interface IP&gt;</i>] <i>&lt;target_ip&gt;</i>


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the program's help message and exits.<br><br><b><b>-timeout</b> <i>&lt;seconds&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the timeout in seconds for receiving an ICMP Echo Reply. Default is typically 1 second.<br><br><b><b>-count</b> <i>&lt;count&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the number of ICMP Echo Request packets to send. The command will exit after sending this many packets.<br><br><b><b>-interface</b> <i>&lt;interface IP&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP address of the local interface to bind to for sending packets. Useful when multiple network interfaces are present.<br><br>


title: DESCRIPTION
content:
<b>impacket-ping</b> is a Python-based utility included in the <b>Impacket</b> library, a robust collection of network protocol manipulation tools. Unlike the standard <b>ping</b> command, <b>impacket-ping</b> is designed for more specialized scenarios, often in the context of penetration testing, security research, or network debugging where low-level ICMP protocol interaction is required.<br><br>It allows users to send ICMP Echo Request packets to a target host and receive Echo Reply packets, thereby checking host reachability. Its Python foundation and integration within <b>Impacket</b> make it flexible for scripting and incorporating into custom security tools, providing a granular approach to ICMP communications. It is particularly relevant in environments where Windows protocols are prevalent, as <b>Impacket</b> excels at interacting with such services.


title: CAVEATS
content:
<b>impacket-ping</b> often requires root privileges (or equivalent capabilities) to create raw sockets for sending and receiving ICMP packets. It is part of the <b>Impacket</b> library, so a Python environment with the installed library are prerequisites. It should not be confused with the standard <b>ping(8)</b> utility, which provides more generic network troubleshooting functionalities. Its primary use case revolves around security assessments and low-level protocol interaction.


title: USAGE CONTEXT
content:
While it performs basic host reachability checks similar to <b>ping(8)</b>, <b>impacket-ping</b> is typically used by security professionals for active reconnaissance, network discovery, and testing network segmentation during penetration tests. Its integration within the <b>Impacket</b> framework makes it valuable when combined with other tools for specific protocol interactions.


title: HISTORY
content:
<b>impacket-ping</b> is an integral part of the <b>Impacket</b> library, which originated from Core Security (later acquired by SecureAuth). The library was developed to provide programmatic access to network protocols, primarily focusing on Microsoft's network protocols like SMB, DCE/RPC, and MSRPC. While <b>impacket-ping</b> specifically handles ICMP, its inclusion supports the broader goal of offering low-level control over network communications for security research, penetration testing, and exploit development.


title: SYNOPSIS
content:
<b>impacket-ping6</b> [-h] [-v] [-i <i>interface</i>] [-t <i>timeout</i>] [-c <i>count</i>] [-r <i>router_alert</i>] <i>target</i>


title: PARAMETERS
content:
<b><i>target</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The IPv6 address or hostname of the target host to ping.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the program's help message and exit.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increase output verbosity to display more details about the packets sent and received.<br><br><b><b>-i</b> <i>interface</i>, <b>--interface</b> <i>interface</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the local network interface to use for sending packets. For example, 'eth0' or 'enp0s3'.<br><br><b><b>-t</b> <i>timeout</i>, <b>--timeout</b> <i>timeout</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the timeout in seconds to wait for an ICMPv6 Echo Reply packet after sending a request. Default is typically 1 second.<br><br><b><b>-c</b> <i>count</i>, <b>--count</b> <i>count</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the number of ICMPv6 Echo Request packets to send. The command will exit after sending this many packets or receiving replies.<br><br><b><b>-r</b> <i>router_alert</i>, <b>--router-alert</b> <i>router_alert</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a Router Alert option to the ICMPv6 packet. This option is used by routers to indicate that they should process the packet further, even if it's not destined for them directly.<br><br>


title: DESCRIPTION
content:
<i>impacket-ping6</i> is a specialized Python-based utility from the <b>Impacket</b> toolkit, designed for network reconnaissance and host discovery in IPv6 environments. Unlike the standard <i>ping6</i> command, this tool provides low-level control over ICMPv6 Echo Request packets, making it particularly useful for penetration testers and security researchers.<br><br>It functions by sending ICMPv6 Echo Request packets to a specified IPv6 target and listens for replies, thereby identifying live hosts on a network. Its integration within the Impacket framework means it can be used in conjunction with other tools for more advanced network protocol manipulation and security assessments. It is not intended as a general system diagnostic tool but rather as a focused utility for identifying active IPv6 addresses for security auditing purposes.


title: CAVEATS
content:
Requires the <b>Impacket</b> Python library to be installed.<br><br>Often requires root or elevated privileges to perform raw socket operations for sending and receiving ICMPv6 packets.<br><br>Primarily a security and testing tool, not a standard system diagnostic utility. Its use may be detected by network monitoring systems.


title: USE IN SECURITY AUDITS
content:
<i>impacket-ping6</i> is a valuable tool for penetration testers and red teamers. It helps in mapping out IPv6 network segments, identifying active hosts, and understanding network topology during reconnaissance phases of security assessments. Its ability to craft specific ICMPv6 packets can sometimes reveal information or bypass simple filtering that standard ping utilities might not.


title: RAW SOCKET CAPABILITIES
content:
One of the key strengths of <b>Impacket</b> tools, including <i>impacket-ping6</i>, is their direct interaction with raw sockets. This allows for fine-grained control over packet headers and content, enabling advanced techniques for network analysis, spoofing, and protocol manipulation that are crucial for security research and ethical hacking.


title: HISTORY
content:
<b>Impacket</b>, the suite to which <i>impacket-ping6</i> belongs, was initially developed by SecureAuth Corporation (formerly Core Security). It was designed as a collection of Python classes and scripts for manipulating network protocols and providing low-level programmatic access to packets. <i>impacket-ping6</i> specifically emerged as part of this toolkit to address the need for advanced IPv6 host discovery and network reconnaissance within the security community, offering capabilities beyond standard system utilities for penetration testing and vulnerability research.


title: SYNOPSIS
content:
<b>impacket-rpcdump</b> [-h] [-debug] [-ts] [-silent] [-ip <ip address>] [-port <port>] [-domain <domain>] [-user <user>] [-password <password>] [-hashes <LM:NT>] [-aesKey <hex key>] [-no-sspi] [-k] [-no-remote-auth] [-dc-ip <ip address>] <target> [interfaces ...]


title: PARAMETERS
content:
<b>target</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The IP address or hostname of the target system to enumerate.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the command's help message and exit.<br><br><b>-debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turn debug output on, providing more verbose information during execution.<br><br><b>-ts</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds timestamp to every log output line.<br><br><b>-silent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not show any output, useful for scripting or automated tasks.<br><br><b>-ip <ip address></b><br>&nbsp;&nbsp;&nbsp;&nbsp;IP address of the client's interface to bind to for outgoing connections.<br><br><b>-port <port></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target TCP port to connect to the Endpoint Mapper (default: 135).<br><br><b>-domain <domain></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The domain to authenticate against when providing credentials.<br><br><b>-user <user></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The username to use for authentication on the target system.<br><br><b>-password <password></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The password for the specified username.<br><br><b>-hashes <LM:NT></b><br>&nbsp;&nbsp;&nbsp;&nbsp;NTLM hashes (LM hash:NT hash) to use for authentication, bypassing plain password.<br><br><b>-aesKey <hex key></b><br>&nbsp;&nbsp;&nbsp;&nbsp;AES key (hex string) to use for Kerberos authentication (RC4/AES128/AES256).<br><br><b>-no-sspi</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not use SSPI (Security Support Provider Interface) for authentication; use native Impacket NTLM.<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use Kerberos authentication. This requires a Kerberos ticket in the default ccache or specifying a domain controller IP.<br><br><b>-no-remote-auth</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't perform remote authentication; only local operations (typically used with Kerberos for specific scenarios).<br><br><b>-dc-ip <ip address></b><br>&nbsp;&nbsp;&nbsp;&nbsp;IP address of the domain controller to use for Kerberos authentication.<br><br><b>interfaces ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. Specifies one or more specific RPC interface UUIDs to dump, rather than all found interfaces.<br><br>


title: DESCRIPTION
content:
<i>impacket-rpcdump</i> is a Python-based tool from the Impacket library designed to enumerate the Remote Procedure Call (RPC) interfaces and methods exposed by a target system, typically Microsoft Windows servers. It connects to the target's Endpoint Mapper (EPM) service, usually on TCP port 135, to query for registered RPC services.<br><br>This allows a network reconnaissance specialist or penetration tester to discover potentially vulnerable services, gather information about the target's operating system and installed applications, and identify paths for further interaction or exploitation. The tool supports various authentication methods, including anonymous, username/password, and NTLM hashes, making it versatile for different network environments. It can also be used to target specific RPC interfaces if desired, providing detailed information about their UUIDs, version numbers, and the methods they expose.


title: CAVEATS
content:
<ul><li>Requires Python and the Impacket library to be installed on the executing machine.</li><li>Primarily designed for Microsoft Windows targets; functionality and output may vary or be non-applicable for other operating systems.</li><li>Requires network connectivity to the target's RPC Endpoint Mapper service (typically TCP port 135) and potentially other dynamically assigned RPC ports.</li><li>Firewall rules on the target system or network infrastructure can block RPC communication, preventing successful enumeration.</li><li>Some RPC services may require authenticated access. Providing appropriate credentials (username/password, NTLM hashes, or Kerberos tickets) is necessary in such cases.</li><li>The output can be verbose, requiring familiarity with RPC interface UUIDs and Windows services to interpret effectively.</li></ul>


title: PURPOSE IN PENETRATION TESTING
content:
<i>impacket-rpcdump</i> is a valuable reconnaissance tool for penetration testers. By enumerating RPC interfaces, it helps identify services that might be vulnerable, misconfigured, or simply provide useful information about the target's role and installed software. For example, discovering the 'Remote Registry' or 'Service Control Manager' interfaces indicates potential avenues for further interaction or exploitation, revealing a richer attack surface.


title: RPC ENDPOINT MAPPER (EPM)
content:
The command primarily interacts with the RPC Endpoint Mapper (EPM) service, typically listening on TCP port 135. The EPM acts as a dynamic directory for RPC services, allowing clients to query for the specific dynamic port numbers on which particular RPC interfaces are listening. After querying the EPM, <i>impacket-rpcdump</i> might then connect to these dynamic ports to dump more detailed information about the found interfaces and their exposed methods.


title: HISTORY
content:
The Impacket library was created by Core Security Technologies (now Fortra) and later open-sourced. It is a comprehensive collection of Python classes for programmatic interaction with network protocols, primarily focusing on Windows-specific protocols such as SMB, MSRPC, DCE/RPC, and Kerberos. <i>rpcdump.py</i>, which <i>impacket-rpcdump</i> invokes, has been a foundational component of this toolkit for many years. It has evolved with new protocol features and security research to aid in network penetration testing, security auditing, and forensics. Its development is community-driven and ongoing, adapting to changes in operating systems and security landscapes.


title: SYNOPSIS
content:
<I>impacket-rpcmap</I> [ <I>options</I> ] [ <I>domain/</I> ] <I>username</I> [ <I>:password</I> ] <I>@target</I> | <I>target</I><br><br>Common options include network and authentication parameters:<br><I>-p &lt;PORT&gt;</I>, <I>-hashes &lt;LMHASH:NTHASH&gt;</I>, <I>-k</I>, <I>-rpc-protocol &lt;PROTOCOL&gt;</I><br><br>To list all options: <I>impacket-rpcmap -h</I>


title: PARAMETERS
content:
<b><I>target</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The target host's IP address or hostname. Can also be formatted as <I>[domain/]username[:password]@target</I> for direct authentication.<br><br><b><I>-h</I>, <I>--help</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the help message and exits.<br><br><b><I>-debug</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turns debug output on, providing more detailed information about the execution.<br><br><b><I>-ts</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a timestamp to every logging output line.<br><br><b><I>-td</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a timestamp and date to every logging output line.<br><br><b><I>-v</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output.<br><br><b><I>-p &lt;PORT&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target SMB port (default: 445). Useful if SMB is listening on a non-standard port.<br><br><b><I>-username &lt;USERNAME&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The username to authenticate with on the target system.<br><br><b><I>-password &lt;PASSWORD&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The password to authenticate with. If not provided and authentication is needed, the tool may prompt for it.<br><br><b><I>-domain &lt;DOMAIN&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The domain to authenticate with. Relevant for Active Directory environments.<br><br><b><I>-hashes &lt;LMHASH:NTHASH&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides NTLM hashes for authentication in the format <I>LMHASH:NTHASH</I>.<br><br><b><I>-aesKey &lt;hexkey&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the AES key to use for Kerberos authentication.<br><br><b><I>-k</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates Kerberos authentication for the connection.<br><br><b><I>-no-pass</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the tool from asking for a password, useful when using Kerberos (<I>-k</I>) or other non-password authentication.<br><br><b><I>-dc-ip &lt;DC_IP&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP address of the Domain Controller to be used for authentication.<br><br><b><I>-kdcHost &lt;KDCHOST&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the KDC (Key Distribution Center) host for Kerberos authentication. Can be an IP address or hostname.<br><br><b><I>-rpc-protocol {ncacn_np,ncacn_ip_tcp,ncacn_http}</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the RPC protocol to use for communication (default: <I>ncacn_ip_tcp</I>). Other options include <I>ncacn_np</I> (Named Pipes) and <I>ncacn_http</I> (RPC over HTTP).<br><br><b><I>-rpc-port &lt;RPC_PORT&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular RPC port to connect to for endpoint mapping (default: 135).<br><br><b><I>-rpc-max-connections &lt;RPC_MAX_CONNECTIONS&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum number of concurrent RPC connections to use (default: 10).<br><br>


title: DESCRIPTION
content:
<b>impacket-rpcmap</b> is a powerful Python-based utility, part of the <I>Impacket</I> framework, designed for enumerating Remote Procedure Call (RPC) endpoints on a target Windows host. It functions by querying the Endpoint Mapper service (typically on port 135 or 445 for SMB) to discover what RPC interfaces and associated port numbers are listening.<br><br>This enumeration is critical for network security assessments and penetration testing, as it helps identify active services like LSARPC, SAMR, WMI, and various DCOM services. By mapping these endpoints, security professionals can gain insight into the target's attack surface, understand the services running, and identify potential vulnerabilities or misconfigurations. The tool supports various authentication methods, including plaintext passwords, NTLM hashes, and Kerberos, making it versatile for both internal network assessments and external engagements where credentials might be available.


title: CAVEATS
content:
<b>impacket-rpcmap</b> requires the Python <I>Impacket</I> library to be installed. Accurate results often depend on network connectivity to the target's RPC ports (e.g., 135, 445). Firewalls on the target or network can impede the discovery process. Some RPC endpoints might require valid authentication credentials to be fully enumerated.


title: EXAMPLE USAGE
content:
To map RPC endpoints on a target host without authentication, simply provide the target IP or hostname:<br><br><I>impacket-rpcmap 192.168.1.100</I><br><br>To map RPC endpoints on a target requiring authentication using a username and password:<br><br><I>impacket-rpcmap -username myuser -password 'MyP@ssw0rd' 192.168.1.100</I><br><br>To map RPC endpoints against a domain controller using Kerberos authentication:<br><br><I>impacket-rpcmap -k -no-pass 'DOMAIN/user@dc.example.com'</I><br><br>To specify a different RPC protocol, for instance, RPC over HTTP:<br><br><I>impacket-rpcmap -rpc-protocol ncacn_http 192.168.1.100</I>


title: HISTORY
content:
<b>impacket-rpcmap</b> is part of the <I>Impacket</I> framework, a collection of Python classes for working with network protocols. Impacket was developed by SecureAuth (formerly Core Security) to provide programmatical access to network protocols, primarily SMB, MSRPC, and DCE/RPC, commonly used in Windows environments. It has become an indispensable toolkit for penetration testers, security researchers, and developers, continually evolving to support new protocols and attack techniques. <b>rpcmap</b> specifically addresses the need for efficient RPC endpoint enumeration, a foundational step in many Windows-based security assessments.


title: SYNOPSIS
content:
<i>impacket-secretsdump.py</i> [[-hashes LMHASH:NTHASH] | [-no-pass] | [-k] | [-aesKey hexkey]] <br>    [[-just-dc] | [-just-dc-user <I>username</I>]] [-use-vss] [-outputfile <I>file</I>] <br>    <I>target_name</I>/<I>username</I>[:<I>password</I>]@<I>target_ip_or_hostname</I><br><b>OR</b><br><i>impacket-secretsdump.py</i> -system <I>SYSTEM_FILE</I> -ntds <I>NTDS_FILE</I> <br>    [-security <I>SECURITY_FILE</I>] [-sam <I>SAM_FILE</I>] [-bootkey <I>BOOTKEY</I>] [-outputfile <I>file</I>]


title: PARAMETERS
content:
<b>-hashes LMHASH:NTHASH</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the NTLM hash to use for authentication instead of a password.<br><br><b>-no-pass</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not ask for a password; use an empty string. Useful for anonymous or guest access.<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses Kerberos authentication instead of NTLM. A TGT (Ticket Granting Ticket) must be available in the Kerberos cache.<br><br><b>-aesKey hexkey</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the AES key to use for Kerberos authentication (128 or 256 bits in hex format).<br><br><b>-just-dc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps only domain controller accounts (hashes and Kerberos keys). This method attempts to use DRSUAPI.<br><br><b>-just-dc-user <I>username</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps only the specified user's information from the domain controller.<br><br><b>-use-vss</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the Volume Shadow Copy Service (VSS) to access the NTDS.dit database, allowing dumping without locking issues.<br><br><b>-outputfile <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the dumped credentials to the specified file.<br><br><b>-system <I>SYSTEM_FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the local SYSTEM registry hive file for offline parsing. Required for offline mode.<br><br><b>-ntds <I>NTDS_FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the local NTDS.dit database file for offline parsing. Required for offline mode.<br><br><b>-security <I>SECURITY_FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the local SECURITY registry hive file for offline parsing.<br><br><b>-sam <I>SAM_FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the local SAM registry hive file for offline parsing.<br><br><b>-bootkey <I>BOOTKEY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the bootkey (syskey) for decrypting offline data. If not provided, the tool attempts to extract it from the SYSTEM hive.<br><br><b>-user-history</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps password history hashes for accounts, if available.<br><br><b>-format <I>format</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format for hashes, e.g., 'john' for John the Ripper compatible format, or 'hashcat'.<br><br><b>-dc-ip <I>ip address</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;IP address of the domain controller when target is a member server or different from target IP.<br><br><b>-target-ip <I>ip address</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;IP address of the target machine, helpful when hostname resolution issues exist.<br><br>


title: DESCRIPTION
content:
<i>impacket-secretsdump</i> is a powerful Python-based utility from the Impacket toolkit designed for extracting sensitive credential material from Windows machines, primarily domain controllers. It leverages various Windows authentication protocols (such as SMB, WMI, DRSUAPI, and SAMR) to remotely dump user hashes (NTLM), Kerberos AES keys, and LSA secrets. The tool can operate in two primary modes: remotely connecting to a live target system (e.g., a Domain Controller) or parsing offline system files (NTDS.dit, SYSTEM, SAM, SECURITY registry hives). It's a critical tool for penetration testers, red teamers, and security auditors to assess an organization's internal network security posture by identifying and extracting valuable credential data that can be used for further lateral movement or privilege escalation. Successful execution typically requires administrative or domain administrative privileges on the target.


title: CAVEATS
content:
Using <i>impacket-secretsdump</i> requires appropriate ethical authorization. Unauthorized use against systems is illegal. <br>The tool needs administrative privileges on the target Windows machine for remote dumping. <br>Its network activity can be detected by Intrusion Detection Systems (IDS), Intrusion Prevention Systems (IPS), or Endpoint Detection and Response (EDR) solutions. <br>Offline parsing requires direct access to specific system files (NTDS.dit, registry hives) and potentially the bootkey.


title: USAGE SCENARIOS
content:
<b>Remote Dumping:</b> Connects to a live Windows machine (typically a Domain Controller) over the network to extract credentials. This mode requires valid administrative credentials on the target and relies on protocols like SMB, RPC, and DRSUAPI. <br><b>Offline Dumping:</b> Parses previously extracted system files (NTDS.dit, SYSTEM, SAM, SECURITY hives) from a compromised machine to recover credentials without live network interaction. This method often requires the system's bootkey for decryption.


title: OUTPUT FORMAT
content:
The default output for NTLM hashes typically follows the format: <I>username:id:lmhash:nthash:::</I>. This format is compatible with many hash cracking tools. Kerberos keys (RC4/AES) are usually presented alongside the NTLM hash for relevant accounts, especially for domain users/machines.


title: HISTORY
content:
<i>impacket-secretsdump</i> (originally <i>secretsdump.py</i>) is a prominent utility within the Impacket framework, developed by SecureAuth (now part of Fortra/Core Security). Impacket was initially created to provide Python classes for working with network protocols, with a strong focus on SMB, RPC, and Kerberos. <i>secretsdump.py</i> emerged as one of its most impactful tools for post-exploitation, allowing security professionals to mimic techniques used by attackers to extract credential material from Windows systems. Its development has continuously adapted to changes in Windows security, maintaining its relevance in offensive security and red teaming engagements.


title: SYNOPSIS
content:
impacket-smbclient <I>[-h] [-debug] [-hashes LMHASH:NTHASH] [-no-pass] [-k] [-aesKey hexkey] [-dc-ip ip address] [-target-ip ip address] [-port [destination port]] [-s [share_name]] [-file [file_name]] [-conf-file [config_file]] [-rdns] [-r] [-c [command]] [-p [path]] [-W [domain]] [-U [username]] [-P [password]]</I> <B><target></B>


title: PARAMETERS
content:
<b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br><b>-debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turns on debug output, providing more verbose information during execution.<br><br><b>-hashes LMHASH:NTHASH</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>LMHASH:NTHASH</I> Allows specifying LM and NT hashes for authentication (Pass-the-Hash), bypassing the need for a plaintext password.<br><br><b>-no-pass</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't ask for a password (useful for anonymous/null sessions or when using hashes).<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses Kerberos authentication instead of NTLM.<br><br><b>-aesKey hexkey</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>hexkey</I> The AES key to use for Kerberos authentication (hex string).<br><br><b>-dc-ip ip address</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>ip address</I> IP address of the domain controller to use for Kerberos authentication.<br><br><b>-target-ip ip address</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>ip address</I> IP address of the target host. This option bypasses DNS resolution and connects directly to the specified IP.<br><br><b>-port [destination port]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>destination port</I> The destination port to connect to on the target host (default is 445).<br><br><b>-s [share_name]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>share_name</I> Specifies the name of the SMB share to connect to directly.<br><br><b>-file [file_name]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>file_name</I> Reads commands from the specified file and executes them in sequence.<br><br><b>-conf-file [config_file]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>config_file</I> Specifies a configuration file to load.<br><br><b>-rdns</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a reverse DNS lookup on the target IP address.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with `del` and `rmdir` commands to perform recursive deletion.<br><br><b>-c [command]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>command</I> Executes a single command directly and then exits.<br><br><b>-p [path]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>path</I> Specifies the initial path within the share to operate on.<br><br><b>-W [domain]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>domain</I> Specifies the domain (or workgroup) to authenticate against.<br><br><b>-U [username]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>username</I> Specifies the username to use for authentication.<br><br><b>-P [password]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>password</I> Specifies the password for authentication. If not provided, the user will be prompted.<br><br><b><target></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>target</I> The IP address or hostname of the SMB server to connect to. This is a mandatory argument.<br><br>


title: DESCRIPTION
content:
impacket-smbclient is a powerful Python-based client for interacting with SMB/CIFS (Server Message Block / Common Internet File System) shares. It is part of the widely-used <I>Impacket</I> framework, a collection of Python classes for working with network protocols. Unlike the traditional `smbclient` utility, `impacket-smbclient` is specifically designed with a focus on security assessments, penetration testing, and network forensics. It provides functionalities to authenticate against SMB servers, list available shares, browse directories, upload and download files, create and delete directories, and execute various commands. Its ability to perform Pass-the-Hash, Kerberos authentication, and operate with fine-grained control over authentication parameters makes it an invaluable tool for ethical hackers and security researchers to analyze and exploit SMB vulnerabilities, often in scenarios where direct password access is not available. It can be used both interactively or to execute single commands.


title: CAVEATS
content:
impacket-smbclient is primarily designed for security analysis and penetration testing, offering advanced authentication mechanisms like Pass-the-Hash and Kerberos. While functional as a general SMB client, it may lack some of the user-friendly features or broader protocol support found in the native `smbclient` utility provided by Samba. It is a Python application and requires the Impacket framework to be installed. Misuse of this tool for unauthorized access is illegal and unethical. Users should ensure they have proper authorization before targeting any systems.


title: <B>INTERACTIVE MODE AND COMMON COMMANDS</B>
content:
When `impacket-smbclient` is invoked without the `-c` option, it enters an interactive shell, allowing users to issue multiple commands against the connected SMB share. Common commands include:<br><B>ls</B> / <B>dir</B>: List directory contents.<br><B>cd <directory></B>: Change current directory.<br><B>get <remote_file></B>: Download a file from the share.<br><B>put <local_file></B>: Upload a file to the share.<br><B>mkdir <directory></B>: Create a new directory.<br><B>rmdir <directory></B>: Remove a directory (use with `-r` for recursive).<br><B>del <file></B>: Delete a file (use with `-r` for recursive).<br><B>exit</B> / <B>quit</B>: Exit the client.


title: HISTORY
content:
impacket-smbclient is a component of the <B>Impacket</B> framework, developed by <B>SecureAuth</B> (later acquired by Core Security). Impacket was created to provide a programmatic way to interact with network protocols, with a strong emphasis on capabilities useful for security research and penetration testing. The `smbclient` module within Impacket was specifically designed to handle the nuances of SMB/CIFS, including its various authentication mechanisms, making it a robust tool for analyzing and exploiting SMB vulnerabilities. Its development has focused on supporting features like Pass-the-Hash, Kerberos, and various NTLM authentication quirks, which are crucial in modern Active Directory environments. Being Python-based, it offers cross-platform compatibility and extensibility.


title: SYNOPSIS
content:
<b>impacket-sniff</b> [-h] [-i <interface>] [-t <type>] [-f <filter>] [-o <output_file>] [sniffing_options]


title: PARAMETERS
content:
<b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a help message and exit.<br><br><b>-i <interface></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the network interface to listen on (e.g., eth0, wlan0).<br><br><b>-t <type></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define the type of traffic to sniff. Common options include <i>ALL</i>, <i>SMB</i>, <i>KRB5</i>, <i>NETLOGON</i>.<br><br><b>-f <filter></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Apply a BPF (Berkeley Packet Filter) expression to filter captured packets.<br><br><b>-o <output_file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write extracted information (hashes, etc.) to a specified file.<br><br><b>--output-pcap <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save captured raw packets to a PCAP file for offline analysis.<br><br><b>--output-json <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save parsed output in JSON format to a specified file.<br><br><b>--no-smb-info</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not display verbose SMB information.<br><br><b>--no-netlogon</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not display verbose NetLogon information.<br><br><b>--no-krb-hash</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not display extracted Kerberos hashes.<br><br><b>--no-smb-hash</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not display extracted SMB (NTLM) hashes.<br><br><b>--netlogon-rdc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable support for Netlogon Remote Differential Compression (RDC).<br><br><b>--skip-useless-smb</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip displaying SMB information deemed less useful for credential extraction.<br><br><b>--skip-useless-krb</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip displaying Kerberos information deemed less useful for credential extraction.<br><br>


title: DESCRIPTION
content:
<i>impacket-sniff</i> is a powerful network sniffing tool that is part of the widely-used Impacket library. Its primary function is to intercept and analyze network traffic, with a particular focus on Windows authentication protocols such as SMB, MSRPC, NetLogon, and Kerberos.<br><br>While it can capture general network packets, its specialized parsers make it exceptionally effective at extracting sensitive information like NTLM hashes, Kerberos tickets, and other credentials transmitted over the network. This makes it an invaluable utility for penetration testers, security auditors, and red teamers who need to identify and exploit weaknesses in network authentication mechanisms.<br><br>The tool operates by listening on a specified network interface, applying optional BPF filters, and then parsing the captured data to highlight relevant authentication attempts and extracted credentials. It can output information directly to the console or save it to files in various formats, including PCAP for later analysis with tools like Wireshark, or JSON for programmatic processing.


title: CAVEATS
content:
Using <i>impacket-sniff</i> often requires root privileges or equivalent capabilities to access raw network sockets. Ethical considerations are paramount; this tool should only be used on networks where you have explicit authorization. Its effectiveness in modern environments can be limited by the widespread use of TLS/SSL encryption, which prevents direct credential sniffing unless man-in-the-middle techniques are employed. Network segmentation and secure authentication protocols can also mitigate its impact.


title: CREDENTIAL EXTRACTION FOCUS
content:
Unlike general-purpose sniffers, <i>impacket-sniff</i> includes built-in parsers designed to recognize and extract NTLM hashes from SMB authentication, Kerberos hashes from Kerberos authentication, and other sensitive data from protocols like NetLogon. This direct focus on authentication mechanisms makes it highly efficient for identifying credentials in transit, often presenting them in formats suitable for offline cracking.


title: PROTOCOL SPECIFICITY
content:
The tool's strength lies in its deep understanding of Windows-specific protocols. While it can capture any packet, its detailed output for SMB, MSRPC, and Kerberos conversations sets it apart, providing insights into domain authentication flows that are critical for understanding and exploiting Windows environments.


title: HISTORY
content:
<i>impacket-sniff</i> is an integral part of the Impacket toolkit, a collection of Python classes developed by SecureAuth (now Fortra). Impacket was created to programmatically construct and decode network packets, with a strong emphasis on Windows network protocols. Since its inception, Impacket has become a de facto standard in offensive security for interacting with Windows services, and <i>impacket-sniff</i> specifically leverages this capability to perform highly targeted network traffic analysis for credential harvesting.


title: SYNOPSIS
content:
<b>impacket-sniffer.py</b> [-h] [-i <I>interface</I>] [-p <I>port</I>] [-r <I>pcap_file</I>] [-w <I>output_file</I>] [-v <I>level</I>]


title: PARAMETERS
content:
<b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the help message and exits.<br><br><b><b>-i <I>interface</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the network interface to sniff on (e.g., eth0, wlan0). If not specified, it may try to listen on all available interfaces or require a specific one depending on the environment.<br><br><b><b>-p <I>port</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters traffic by a specific destination or source port number.<br><br><b><b>-r <I>pcap_file</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads packets from a Wireshark/tcpdump PCAP file instead of performing live capture.<br><br><b><b>-w <I>output_file</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes captured raw packets to a PCAP file.<br><br><b><b>-v <I>level</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the verbosity level for output (e.g., 0 for minimal, 1 for normal, 2 for verbose dissection of protocol details).<br><br>


title: DESCRIPTION
content:
<i>impacket-sniffer</i> is a network sniffing tool provided by the <I>Impacket</I> library, a collection of Python classes for working with network protocols. Unlike generic sniffers like <i>tcpdump</i>, <i>impacket-sniffer</i> specializes in parsing and displaying details of various Windows-centric network protocols such as SMB, MSRPC, DCE/RPC, and NTLM authentication.<br><br>It's widely used by security professionals, penetration testers, and researchers to analyze network traffic for vulnerabilities, credential capture, or to understand protocol interactions. It can capture live traffic or read from PCAP files, offering different levels of verbosity for protocol dissection, making it an invaluable tool for analyzing complex Windows network communication.


title: CAVEATS
content:
<b><I>Caveats and Limitations:</I></b><br>1. Requires root privileges for live packet capture on most Linux systems.<br>2. Requires the <I>Impacket</I> Python library and its dependencies to be installed.<br>3. Primarily focused on parsing Windows-specific protocols (SMB, MSRPC, NTLM), so its generic packet dissection capabilities are less comprehensive than tools like <I>Wireshark</I> or <I>tcpdump</I>.<br>4. Output can be very verbose, especially with higher verbosity levels, which might be overwhelming for quick analysis.


title: PYTHON-BASED TOOL
content:
<i>impacket-sniffer</i> is a Python script and part of a larger Python library. This allows for easy extensibility, integration into other Python security tools, and cross-platform compatibility where Python is supported.


title: PROTOCOL SPECIALIZATION
content:
Unlike general-purpose sniffers, its strength lies in its deep understanding and dissection capabilities for complex Windows authentication and communication protocols, making it a go-to tool for analyzing Active Directory and Windows network interactions.


title: HISTORY
content:
<I>Impacket</I> is a Python library developed by SecureAuth (formerly Core Security) primarily for working with network protocols. It emerged as a powerful tool for low-level programmatic access to network protocols, particularly those common in Windows environments.<br><br><i>impacket-sniffer</i> is one of the many examples/scripts built on top of the <I>Impacket</I> library, showcasing its capabilities in network traffic analysis. Its development has focused on providing robust implementations of protocols like SMB, DCE/RPC, LDAP, and NTLM, making it invaluable for security research, red teaming, and penetration testing.


title: SYNOPSIS
content:
<I>import</I> [options] [filename]<br>If <I>filename</I> is not specified, the captured image is written to standard output. If no options specify a window or region, <I>import</I> allows interactive selection by clicking on a window or dragging a rectangle.


title: PARAMETERS
content:
<b><b>-window</b> <I>id_or_name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Captures a specific window. <I>id_or_name</I> can be the window's numerical ID (e.g., <I>0x1234567</I>), its name, or the special keyword <I>root</I> to capture the entire desktop.<br><br><b><b>-display</b> <I>host:display.screen</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the X server to connect to. This is typically used in environments where the X server is not on the local machine or when targeting a specific display.<br><br><b><b>-frame</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes the window manager frame (e.g., title bar, borders) when capturing a window. By default, the frame is excluded.<br><br><b><b>-silent</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the command from ringing the X bell when capturing, which can be useful in scripts.<br><br><b><b>-crop</b> <I>geometry</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Crops the captured image to the specified <I>geometry</I>. Geometry is typically in the format <I>width</I>x<I>height</I>+<I>x</I>+<I>y</I>, where <I>x</I> and <I>y</I> are optional offsets.<br><br><b><b>-quality</b> <I>value</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the compression quality for image formats that support it (e.g., JPEG, MIFF, PNG). <I>value</I> is an integer from 1 (lowest quality, highest compression) to 100 (highest quality, lowest compression).<br><br><b><b>-screen</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Captures the entire screen, including virtual desktops if applicable. This is an alternative to using <I>-window root</I>.<br><br><b><b>-verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints detailed information about the image capture process to standard error.<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the ImageMagick version number and build information.<br><br><b><b>-help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a concise list of command-line options and their descriptions.<br><br>


title: DESCRIPTION
content:
The <b>import</b> command is a powerful utility from the <I>ImageMagick</I> suite, designed to capture images from an X server. It allows users to take screenshots of the entire screen, a specific window (by ID, name, or interactive selection), or a defined rectangular region of the screen. The captured image can be saved in various popular image formats, such as PNG, JPEG, GIF, and more. <b>import</b> is particularly useful in scripting environments, automated workflows, or when a command-line tool is preferred over a graphical screenshot utility. It provides fine-grained control over the capture process, including options for cropping, resizing, and adjusting image quality before saving.


title: CAVEATS
content:
The <b>import</b> command primarily relies on the X Window System. It may not function natively or effectively in environments exclusively running Wayland, unless Xwayland is in use. For Wayland, alternative screenshot utilities designed for that compositor are generally recommended. Additionally, as part of the ImageMagick suite, <b>import</b> must be installed separately from the core Linux system utilities.


title: INTERACTIVE CAPTURE
content:
When <b>import</b> is invoked without <b>-window</b> or <b>-crop</b> options and without a specific <I>filename</I> to redirect standard output, it enters an interactive mode. In this mode, the mouse cursor changes, allowing the user to either click on a desired window to capture it, or click and drag to define a rectangular region of the screen to capture.


title: WAYLAND COMPATIBILITY
content:
On Linux distributions using Wayland as their default display server, <b>import</b> (and other X-based screenshot tools) may not directly capture content. While Xwayland can bridge some functionality, native Wayland screenshot tools like <I>grim</I> (for raw Wayland compositors) or desktop environment specific tools (e.g., <I>gnome-screenshot</I>, <I>spectacle</I>) are generally more reliable and performant.


title: HISTORY
content:
The <b>import</b> command is an integral part of <I>ImageMagick</I>, a free and open-source software suite for displaying, converting, and editing raster image files. ImageMagick was first released in 1990 by John Cristy at DuPont. Over the decades, <b>import</b> has remained a staple for command-line screen capturing in X11 environments, evolving with ImageMagick's continuous development. While its direct use might have decreased in modern Wayland-centric desktop environments, it remains a robust and flexible tool for X11 users and automated scripting tasks.


title: PARAMETERS
content:
<b><b>-window</b> <i>id_or_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the window to capture. The <i>id_or_name</i> can be a window ID (e.g., 0x40000a) or the window's name.<br><br><b><b>-frame</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes the window manager's frame (borders and title bar) when capturing a window.<br><br><b><b>-silent</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the bell sound that normally rings after a successful capture.<br><br><b><b>-display</b> <i>display</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the X server display to connect to (e.g., ':0.0').<br><br><b><b>-delay</b> <i>seconds</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Waits for the specified number of seconds before capturing the image. Useful for setting up the screen before capture.<br><br><b><b>-quality</b> <i>value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the compression quality for JPEG/MIFF formats (0-100). Higher values mean better quality but larger files.<br><br><b><b>-screen</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Captures the entire screen, ignoring any window selection. This often implies capturing the root window.<br><br><b><b>-geometry</b> <i>WxH+X+Y</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a rectangular region of the screen to capture. If not provided, the cursor changes to allow interactive selection.<br><br><b><b>-format</b> <i>image_format</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output image format (e.g., PNG, JPEG, GIF). By default, it's inferred from the output file extension.<br><br><b><b>-verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints detailed information about the image capture process to standard error.<br><br><b><b>-help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief description of the command options and arguments.<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the ImageMagick version and copyright information.<br><br>


title: DESCRIPTION
content:
<i>import.im6</i> is a command-line utility from the ImageMagick 6 suite designed to capture screenshots or images directly from an X Window System display. It allows users to capture an entire screen, a specific window by ID or name, or an arbitrary rectangular region defined interactively or by geometry. This tool is fundamental for creating documentation, tutorials, or simply capturing visual content from an X session.<br><br>The <i>.im6</i> suffix explicitly indicates it belongs to ImageMagick version 6, differentiating it from later versions (like ImageMagick 7, where the command is typically just <i>import</i> or <i>import.im7</i>). It's a versatile tool for image acquisition in a Unix-like environment with an active X server.


title: CAVEATS
content:
This command relies on an active X Window System display. It cannot capture content from Wayland sessions directly without an X compatibility layer (XWayland). The <i>.im6</i> suffix indicates it's from an older ImageMagick 6 installation; modern systems might use the <i>import</i> command which is part of ImageMagick 7 and might have slight behavioral differences or additional features.<br><br>Capturing certain hardware-accelerated overlays or full-screen applications might be problematic.


title: INTERACTIVE SELECTION
content:
If no <b>-window</b> or <b>-geometry</b> option is specified, <i>import.im6</i> changes the mouse cursor to a crosshair. The user can then click on a window to capture it, or click and drag a rectangle to capture a specific region of the screen. Pressing Enter captures the entire screen; pressing Space captures the clicked window; pressing Escape aborts the capture.


title: OUTPUT FILE NAMING
content:
When an <i>output_file</i> is not specified, <i>import.im6</i> defaults to writing the captured image to a file named <i>untitled.png</i> (or another default format depending on configuration, typically PNG) in the current directory.


title: HISTORY
content:
ImageMagick, the suite containing <i>import</i>, was first released in 1990. The <i>import</i> utility has been a core component since its early days, providing a robust command-line method for screen capture.<br><br>The explicit <i>.im6</i> suffix for the executable came into prominence with the release of ImageMagick 7, which introduced significant architectural changes. This naming convention helped users and package managers differentiate between binaries from the two major versions installed simultaneously, ensuring compatibility and preventing conflicts.


title: DESCRIPTION
content:
The command 'importctl' is not a standard or commonly recognized utility across mainstream Linux distributions such as Ubuntu, Debian, CentOS, or Fedora. It does not have official manual pages (e.g., `man importctl`) and is not typically included in standard system packages. It is possible that this command is part of a very specific, niche application, a custom script, a deprecated feature, or a typo in the command name. Due to its non-existence in the standard Linux ecosystem, detailed analysis of its syntax, options, or typical usage is not feasible without additional context regarding the software or system it is intended for.


title: CAVEATS
content:
As 'importctl' is not a standard command, attempting to execute it on most Linux systems will result in a 'command not found' error. Users encountering this command in a specific environment should consult documentation for that particular system or application.


title: HISTORY
content:
<i>No historical information available for 'importctl' as it is not a recognized standard command.</i>


title: SYNOPSIS
content:
There is no standard standalone Linux command named <i>'in'</i>, therefore no direct command synopsis applies. It operates as a keyword integrated into shell syntax for various control flow and iteration purposes.


title: DESCRIPTION
content:
The term <i>'in'</i> is <b>not</b> a standalone executable command in standard Linux distributions. Instead, it functions as a crucial keyword primarily used within various shell scripting constructs and programming contexts. Its most common applications involve iterating through lists or ranges in <i>'for'</i> loops (e.g., <i>'for item <b>in</b> list; do ... done'</i>) or defining patterns in <i>'case'</i> statements (e.g., <i>'case $variable <b>in</b> pattern) ... esac'</i>).<br><br>Users often encounter or search for <i>'in'</i> when conceptually trying to put something <i>'in'</i> a directory, or install software <i>'in'</i> a specific location, which can lead to confusion. It serves as a grammatical preposition or a logical operator within shell syntax, rather than an executable utility. Consequently, there is no manual page or executable file associated with a direct command named <i>'in'</i>.


title: CAVEATS
content:
The primary caveat is that <i>'in'</i> does not exist as an executable command on Linux systems. Attempting to run <i>'in'</i> directly in a terminal will typically result in a <i>'command not found'</i> error. Its sole function is as a syntactic element within shell scripts and programming languages, not as a utility that can be invoked independently.


title: USAGE IN SHELL SCRIPTING
content:
The most prevalent use of <i>'in'</i> is within shell <i>'for'</i> loops to iterate over a list of items. For example:<br><i>'for file <b>in</b> *.txt; do echo "Processing $file"; done'</i><br><br>It is also commonly used in <i>'case'</i> statements to match a value against a list of patterns:<br><i>'case $answer <b>in</b> yes|y) echo "Agreed.";;<br>no|n) echo "Disagreed.";;<br>*) echo "Invalid input.";;<br>esac'</i>


title: COMMON MISCONCEPTIONS
content:
Many users new to Linux or scripting might incorrectly assume <i>'in'</i> is a command for actions like 'installing' or 'placing something into' a directory. This is not the case. Commands such as <i>'cp'</i> (copy), <i>'mv'</i> (move), <i>'install'</i>, or package managers like <i>'apt'</i>, <i>'yum'</i>, or <i>'dnf'</i> are used for such operations. The term <i>'in'</i> is exclusively used for specifying membership or iteration within a defined set or list.


title: SYNOPSIS
content:
<b>in-toto-record</b> <b>--name</b> <i>&lt;step_name&gt;</i> <b>--key</b> <i>&lt;path_to_private_key&gt;</i> [<b>--materials</b> <i>&lt;path&gt;</i>...] [<b>--products</b> <i>&lt;path&gt;</i>...] [<b>--byproducts</b> <i>&lt;path&gt;</i>...] [<b>--exclude</b> <i>&lt;path&gt;</i>...] [<b>--lstrip-paths</b> <i>&lt;num&gt;</i>] [<b>--template</b> <i>&lt;path&gt;</i>] [<b>--base-path</b> <i>&lt;path&gt;</i>] [<b>--log-level</b> <i>&lt;level&gt;</i>] [<b>--record-environ</b> <i>&lt;VAR&gt;</i>...] [<b>--preserve-environ</b>] [<b>--debug</b>] [<b>--verbose</b>] <b>--</b> <i>&lt;command&gt;</i> [<i>arguments...</i>]


title: PARAMETERS
content:
<b><b>--name</b> <i>&lt;step_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the unique name for the supply chain step being recorded (e.g., '<i>compile</i>', '<i>test</i>'). This is a mandatory parameter.<br><br><b><b>--key</b> <i>&lt;path_to_private_key&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the path to the private key used to sign the generated <i>link</i> metadata file. This key authenticates the actor performing the step and is mandatory.<br><br><b><b>--materials</b> <i>&lt;path&gt;</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to input files or directories (materials) used by the command. Cryptographic hashes of these paths are recorded, and they are crucial for verification.<br><br><b><b>--products</b> <i>&lt;path&gt;</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to output files or directories (products) generated by the command. Cryptographic hashes of these paths are recorded, verifying the step's results.<br><br><b><b>--byproducts</b> <i>&lt;path&gt;</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to additional files or directories (byproducts) to record. These are usually non-critical outputs like logs or temporary files whose hashes are recorded for auditing but are not strictly checked for verification.<br><br><b><b>--exclude</b> <i>&lt;path&gt;</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Paths to exclude from the material, product, or byproduct collections. This is useful for ignoring specific files within a specified directory.<br><br><b><b>--lstrip-paths</b> <i>&lt;num&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of leading path components to strip when recording materials and products. This helps in achieving path consistency across different environments.<br><br><b><b>--template</b> <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a step template file to use. The template can define expected materials, products, and other properties for the step.<br><br><b><b>--base-path</b> <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a base directory to resolve all relative material, product, and byproduct paths against.<br><br><b><b>--log-level</b> <i>&lt;level&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging level (e.g., '<i>DEBUG</i>', '<i>INFO</i>', '<i>WARNING</i>', '<i>ERROR</i>', '<i>CRITICAL</i>').<br><br><b><b>--record-environ</b> <i>&lt;VAR&gt;</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A list of specific environment variables to record as part of the link metadata.<br><br><b><b>--preserve-environ</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Records all environment variables present during execution. Use with caution as this can expose sensitive information.<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output for troubleshooting.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the recording process.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version information and exits.<br><br><b><b>--</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Separates <b>in-toto-record</b>'s own options from the command and its arguments that are to be executed and recorded. All arguments following this double dash will be treated as part of the command to run.<br><br>


title: DESCRIPTION
content:
<b>in-toto-record</b> is a crucial command within the in-toto framework, designed to enhance software supply chain security. It allows users to execute a command (representing a specific step in the software supply chain, e.g., compilation, testing, packaging) and automatically record essential metadata about that execution. This metadata includes cryptographic hashes of input files (<i>materials</i>), output files (<i>products</i>), and any additional files (<i>byproducts</i>) generated during the step. The command also captures details like the executed command itself, its arguments, and relevant environment variables.<br><br>After successful execution, <b>in-toto-record</b> creates a cryptographically signed "<i>link</i>" metadata file. This link file serves as an attestation, proving that a specific step was performed, by whom (via the signing key), and with what inputs and outputs. These link files are foundational for building a verifiable supply chain "<i>layout</i>" which can later be checked by <b>in-toto-verify</b>, ensuring that all steps were executed as expected and that no unauthorized modifications occurred. It replaced the <b>in-toto-run</b> command to clarify its specific role in recording.<br><br>By using <b>in-toto-record</b>, developers and integrators gain transparency and tamper-evidence, mitigating risks associated with compromised software components or unauthorized build processes. It's an essential tool for implementing robust supply chain integrity policies.


title: CAVEATS
content:
<b>Key Management</b>: The private key used for signing the <i>link</i> file must be securely managed. Compromise of this key can undermine the integrity of your supply chain attestations.<br><br><b>Accurate Path Specification</b>: Correctly identifying and specifying <b>--materials</b> and <b>--products</b> is critical. Errors or omissions can lead to a supply chain that cannot be properly verified or allows undetected tampering.<br><br><b>Path Normalization Consistency</b>: When using <b>--lstrip-paths</b> or <b>--base-path</b>, ensure consistency between recording and subsequent verification steps, otherwise, path mismatches will cause verification failures.<br><br><b>Environment Variables</b>: Be cautious when using <b>--preserve-environ</b> as it can inadvertently record sensitive environment variables into the publicly viewable <i>link</i> metadata.


title: OUTPUT LINK FILE
content:
Upon successful execution, <b>in-toto-record</b> generates a cryptographically signed metadata file, commonly referred to as a "<i>link</i>" file. This file contains the cryptographic hashes of all specified materials, products, and byproducts, along with the details of the executed command and its environment. The link file is named using a combination of the step name and the key ID, typically following the pattern <i>&lt;step_name&gt;.&lt;key_id&gt;.link</i>.


title: THE IMPORTANCE OF "--"
content:
The double dash (<b>--</b>) is a standard convention in shell commands. For <b>in-toto-record</b>, it's critical because it explicitly separates the options meant for <b>in-toto-record</b> itself from the command and its arguments that <b>in-toto-record</b> is meant to execute. Any argument after <b>--</b> will be treated as part of the command to be run, not as an option for <b>in-toto-record</b>.


title: HISTORY
content:
The in-toto project originated from research at <i>New York University (NYU)</i>, specifically by the <i>Secure Systems Group</i>, led by Justin Cappos. Its development began around 2015-2016, aiming to address critical software supply chain security vulnerabilities. The project was later incubated by the <i>Linux Foundation's Cloud Native Computing Foundation (CNCF)</i> and is now a widely adopted standard for securing software supply chains. <b>in-toto-record</b> specifically evolved from an earlier command, <b>in-toto-run</b>, consolidating its role as the primary utility for creating signed attestations of individual supply chain steps. Its adoption reflects a growing industry focus on provenance and integrity throughout the software development lifecycle.


title: PARAMETERS
content:
<b><B>-n</B> <I>NAME</I>, <B>--name</B>=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the unique name for this step, as defined in the <I>in-toto</I> layout. This is a mandatory option.<br><br><b><B>-p</B> <I>PATH</I>, <B>--key</B>=<I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the private key used for signing the generated link metadata. This is a mandatory option unless <B>--gpg</B> is used.<br><br><b><B>-k</B> <I>KEYID</I>, <B>--keyid</B>=<I>KEYID</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The ID of the private key used for signing. Can be omitted if the key path is unique for the signing key.<br><br><b><B>-m</B> <I>MATERIALS</I>, <B>--materials</B>=<I>MATERIALS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Files or directories consumed by the command. Multiple paths can be provided separated by commas. These will be hashed and recorded.<br><br><b><B>-o</B> <I>PRODUCTS</I>, <B>--products</B>=<I>PRODUCTS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Files or directories produced by the command. Multiple paths can be provided separated by commas. These will be hashed and recorded.<br><br><b><B>--lstrip-paths</B>=<I>NUM</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes <I>NUM</I> leading path components from all material and product paths before recording them in the link metadata. Useful for creating portable layouts.<br><br><b><B>--normalize-line-endings</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Normalizes line endings (LF vs. CRLF) for text files before hashing, ensuring consistent hashes across different operating systems.<br><br><b><B>--no-command-output</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the output (stdout and stderr) of the executed command.<br><br><b><B>--gpg</B>=<I>KEYID</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses GPG to sign the link metadata instead of an in-toto private key. <I>KEYID</I> specifies the GPG key to use.<br><br><b><B>--gpg-home</B>=<I>DIR</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the GPG home directory when using <B>--gpg</B>.<br><br><b><B>--metadata-directory</B>=<I>DIR</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where the generated link metadata file will be stored. Defaults to current directory.<br><br><b><B>--exclude</B>=<I>PATTERN</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes paths matching the given <I>PATTERN</I> from being hashed within materials or products. Can be specified multiple times.<br><br><b><B>--allow-other-as-owner</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows files and directories owned by other users or groups to be included as materials or products. By default, <I>in-toto-run</I> only processes files owned by the current user.<br><br><b><B>--attest</B>=<I>ATTESTATION_PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a file containing additional attestation data to be embedded in the link metadata. The content is recorded as 'byproducts'.<br><br><b><B>--attest-in</B>=<I>ATTESTATION_INPUT_PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a file containing additional attestation data related to the input materials. The content is recorded as 'byproducts'.<br><br><b><B>--attest-out</B>=<I>ATTESTATION_OUTPUT_PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a file containing additional attestation data related to the output products. The content is recorded as 'byproducts'.<br><br>


title: DESCRIPTION
content:
The <I>in-toto-run</I> command is a core component of the <I>in-toto</I> framework, designed to enhance software supply chain security. It executes a specified command and securely records evidence of its execution as a <I>link metadata</I> file. This evidence includes the exact command executed, cryptographic hashes of all files consumed (<B>materials</B>) and produced (<B>products</B>) by the command, and a digital signature from the responsible party. <br><br>By creating these signed link files, <I>in-toto-run</I> provides an auditable and verifiable record of each step in a software supply chain. This is crucial for detecting unauthorized modifications, ensuring integrity, and promoting transparency throughout the build and release process. The generated link files are later used by <I>in-toto-verify</I> to attest that the software was produced according to a predefined supply chain <I>layout</I>.


title: CAVEATS
content:
<B>Key Management:</B> Requires proper management of private keys for signing. Compromised keys undermine security guarantees.<br><br><B>Completeness:</B> Integrity guarantees depend on correctly identifying <B>all</B> materials and products. Omissions can lead to verification failures.<br><br><B>Execution Environment:</B> While <I>in-toto-run</I> records, it does not sandbox the command; it runs with the invoking user's privileges.<br><br><B>Error Handling:</B> If the wrapped command fails, <I>in-toto-run</I> still generates a link file, capturing the failure. Verification depends on the layout's expectations.<br><br><B>Metadata Size:</B> Hashing many files, especially large ones, can consume significant time and produce large link metadata files.


title: LINK METADATA FILES
content:
Upon successful execution, <I>in-toto-run</I> generates a JSON-formatted <I>link metadata</I> file (typically with a <B>.link</B> extension). This file contains: <br><br><B>&bull; </B>The name of the step (<B>-n</B>).<br><B>&bull; </B>The exact command that was executed.<br><B>&bull; </B>Cryptographic hashes (e.g., SHA256) of all input materials and output products, indexed by their paths.<br><B>&bull; </B>A timestamp of execution.<br><B>&bull; </B>The digital signature of the key used to sign the metadata.<br><br>This file serves as irrefutable evidence of a specific supply chain step's execution.


title: ROLE IN SUPPLY CHAIN SECURITY
content:
<I>in-toto-run</I> empowers developers and operators to create a cryptographically verifiable 'trail of custody' for their software. Each time a build, test, or packaging step is performed, <I>in-toto-run</I> records what happened and signs it. When a consumer receives the software, they can use <I>in-toto-verify</I> to check if all steps in the supply chain were executed as expected, by authorized parties, and without unauthorized modifications. This helps mitigate risks like backdoor injection, dependency hijacking, and tampering during transit or distribution.


title: HISTORY
content:
<I>in-toto-run</I> is a key component of the <I>in-toto</I> framework, an open-source project initiated at New York University (NYU) and TU Delft, with contributions from various organizations including Google and Purdue University. The project's primary motivation was to address prevalent vulnerabilities in software supply chains, where untrusted or compromised steps can introduce malicious code. <I>in-toto</I> gained significant attention as a solution to enhance the integrity and security of software artifacts from source code to deployment. <I>in-toto-run</I> was developed early on as the mechanism for recording cryptographic evidence of discrete supply chain steps, forming the foundation for auditable and verifiable software delivery.


title: SYNOPSIS
content:
<b>in-toto-sign</b> [<i>OPTIONS</i>] <i>&lt;METADATA_PATH&gt;</i><br>Example: <b>in-toto-sign</b> --key <i>my-private-key.pem</i> <i>unsigned-layout.json</i> --output <i>signed-layout.json</i>


title: PARAMETERS
content:
<b>--key <i>&lt;KEY_PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the private key file used for signing the metadata. This key is typically generated beforehand using <i>in-toto-keygen</i>.<br><br><b>--output <i>&lt;OUTPUT_PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path where the signed metadata file will be saved. If omitted, the input metadata file is often modified in place or the signed content is printed to standard output.<br><br><b><i>&lt;METADATA_PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the unsigned <i>in-toto</i> layout or link metadata file that needs to be signed. This is a mandatory positional argument.<br><br><b>--prompt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prompts for the private key's passphrase if the key is encrypted. Useful for interactive signing.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the program's version number and exits.<br><br>


title: DESCRIPTION
content:
<i>in-toto-sign</i> is a crucial command within the <br><i>in-toto</i> supply chain security framework. Its primary function is to cryptographically sign in-toto metadata files, ensuring their authenticity and integrity. These metadata files can be either <b>"layout"</b> metadata, which defines the entire supply chain workflow, or <b>"link"</b> metadata, which records a specific step performed by a functionary. By signing these files with a private key, <i>in-toto-sign</i> allows downstream consumers to verify that the metadata originated from a trusted source and has not been tampered with. This command is a fundamental building block for establishing verifiable and secure software supply chains, enabling the detection of unauthorized modifications or steps throughout the software development and deployment lifecycle. It is often used by human functionaries or automated systems to attest to their actions within the supply chain.


title: CAVEATS
content:
The security of the signed metadata heavily relies on the security of the private key used for signing. Keep private keys secure and do not expose them. <i>in-toto-sign</i> only signs the provided metadata; it does not verify the contents or structure of the metadata against a layout during the signing process.


title: SIGNING PROCESS
content:
<i>in-toto-sign</i> reads the specified <i>in-toto</i> metadata file (typically a JSON document), cryptographically signs its contents using the provided private key, and then embeds the resulting signature into the metadata structure. This process appends a <b>"signatures"</b> field to the JSON metadata, containing information about the key used (e.g., key ID) and the actual signature data, allowing for later verification.


title: KEY MANAGEMENT
content:
Users are responsible for securely managing their private keys. If the private key is passphrase-protected, <i>in-toto-sign</i> will typically prompt for the passphrase unless specified otherwise. Best practices dictate keeping private keys encrypted and isolated.


title: HISTORY
content:
The <i>in-toto</i> framework was initially developed at NYU Tandon School of Engineering with significant contributions from the Google Open Source Security Team (GOST). It was created to address vulnerabilities in software supply chains, such as those exposed by the Heartbleed bug. The project officially launched around 2017 and has since become a CNCF (Cloud Native Computing Foundation) sandbox project, gaining adoption in various security initiatives like SLSA. <i>in-toto-sign</i> is a core utility that has been part of the <i>in-toto</i> toolset since its early development, providing the fundamental capability to attest to the authenticity of supply chain steps.


title: SYNOPSIS
content:
<b>incus</b> [<i>options</i>] [<i>subcommand</i>] [<i>subcommand-options</i>] [<i>arguments</i>]<br><b>incus</b> <i>help</i> [<i>subcommand</i>]


title: PARAMETERS
content:
<b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Show debug messages for troubleshooting.<br><br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Display general help or help for a specific subcommand.<br><br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Print the Incus client version.<br><br><br><b>--remote <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Specify the remote Incus server to connect to.<br><br><br><b>--project <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Specify the project within Incus to operate within.<br><br><br><b>--format <format></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Specify the output format (e.g., <b>json</b>, <b>yaml</b>, <b>table</b>).<br><br><br><b>--quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Suppress progress indicators and non-essential output.<br><br><br>


title: DESCRIPTION
content:
Incus is an open-source system container and virtual machine manager that provides a unified experience for managing compute workloads. It allows users to run isolated Linux containers (LXC) and virtual machines (KVM) with ease. Incus is a community-driven fork of the LXD project, created to continue its development under a fully open-source model. It integrates with various underlying technologies like LXC, QEMU, ZFS, Btrfs, and Ceph to offer a robust and flexible environment. Incus provides a REST API, a command-line client, and supports features such as live migration, snapshots, image management, network management, and storage pools, making it a powerful tool for developers, system administrators, and cloud environments. It aims to offer a secure, scalable, and intuitive way to manage diverse compute resources.


title: CAVEATS
content:
Incus is a relatively new fork of LXD, so its community and ecosystem are still developing. While striving for compatibility, some features or configurations might differ from LXD. Compatibility with older LXD configurations and images should be tested. As it's under active development, specific API or CLI features may evolve.


title: KEY SUBCOMMANDS
content:
Incus operates primarily through subcommands, each managing a specific aspect of containers or VMs. Common subcommands include:<br><b>launch</b>: Create and start new instances (containers or VMs).<br><b>list</b>: List existing instances, images, networks, or storage pools.<br><b>start</b>/<b>stop</b>/<b>restart</b>: Control instance lifecycle.<br><b>exec</b>: Run commands inside an instance.<br><b>delete</b>: Delete instances, images, networks, or storage pools.<br><b>network</b>: Manage Incus networks.<br><b>storage</b>: Manage storage pools and volumes.<br><b>image</b>: Manage instance images.<br><b>config</b>: Manage global Incus configuration and instance-specific settings.


title: HISTORY
content:
Incus was created in late 2023 as a community fork of Canonical's LXD project. The split occurred due to Canonical's decision to change LXD's licensing and contribute its development solely to Canonical, moving it out of the Linux Containers project. Incus was established under the Linux Containers umbrella, aiming to continue LXD's original vision as a fully open-source, community-driven project, ensuring its long-term availability and development outside of corporate control. It maintains API and feature compatibility with recent LXD versions to facilitate migration for existing users.


title: SYNOPSIS
content:
<b>indent</b> [<i>OPTIONS</i>] [<i>FILE...</i>]<br><b>indent</b> [<i>OPTIONS</i>] [<i>INPUT_FILE</i>] [<b>-o</b> <i>OUTPUT_FILE</i>]


title: PARAMETERS
content:
<b><b>-i</b><i>N</i>, <b>--indent-level=</b><i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the indentation level to <i>N</i> spaces (default is 8).<br><br><b><b>-ts</b><i>N</i>, <b>--tab-size=</b><i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the size of tabs in spaces (default is 8).<br><br><b><b>-nut</b>, <b>--no-tabs</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replaces all tabs with an equivalent number of spaces.<br><br><b><b>-l</b><i>N</i>, <b>--line-length=</b><i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum line length to <i>N</i> characters (default is 78).<br><br><b><b>-kr</b>, <b>--k-and-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the Kernighan & Ritchie (K&R) style for formatting.<br><br><b><b>-gnu</b>, <b>--gnu</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the GNU coding style.<br><br><b><b>-orig</b>, <b>--original-k-and-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the original K&R style (less strict than <b>-kr</b>).<br><br><b><b>-br</b>, <b>--braces-on-if-line</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Puts opening braces for `if`, `for`, `while`, etc., on the same line.<br><br><b><b>-bl</b>, <b>--braces-on-func-line</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Puts opening braces for function definitions on the line after the function header.<br><br><b><b>-cs</b>, <b>--cuddle-else</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Cuddles `else` with the preceding `}`.<br><br><b><b>-o</b> <i>FILE</i>, <b>--output=</b><i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes output to <i>FILE</i> instead of modifying the input file in place.<br><br><b><b>-st</b>, <b>--standard-output</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes output to standard output, without modifying input files.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version number of <b>indent</b> and exits.<br><br><b><b>-bad</b>, <b>--blank-lines-after-declarations</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a blank line after local variable declarations.<br><br><b><b>-bap</b>, <b>--blank-lines-after-parameters</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a blank line after parameter declarations.<br><br>


title: DESCRIPTION
content:
<b>indent</b> is a command-line utility used to reformat C, C++, and Objective-C source code to a consistent style. Its primary purpose is to improve code readability and enforce coding standards across projects or individual files. <b>indent</b> offers extensive customization options, allowing users to control various aspects of code formatting, including indentation levels, brace placement, blank line usage, comment formatting, and more. It can apply predefined styles like GNU, K&R (Kernighan & Ritchie), and original K&R, or a user-defined style through a multitude of switches. While it's a classic tool, commonly found on Unix-like systems, it remains a powerful option for maintaining code uniformity, especially in projects where specific coding conventions are crucial. <b>indent</b> can process files in place or write to standard output/a specified output file.


title: CAVEATS
content:
<b>indent</b> is primarily designed for C code and may have limited or imperfect support for more complex C++ features or Objective-C syntax. It can sometimes produce unexpected formatting for intricate preprocessor directives or highly unusual code structures. While powerful, users should review the output, especially for critical projects, as the tool applies stylistic changes rather than semantic ones. Modern IDEs often provide integrated, language-aware formatters that might be more convenient for contemporary development workflows.


title: <I>CONFIGURATION FILE</I>
content:
<b>indent</b> can read default options from a personal configuration file named <b>.indent.pro</b> in the user's home directory or the current directory. Options specified on the command line override those in the configuration file. This allows users or projects to define custom default formatting styles without explicitly listing all options every time.


title: <I>STYLISTIC PRESETS</I>
content:
Beyond explicit options, <b>indent</b> provides predefined style presets like <b>-gnu</b> (GNU style), <b>-kr</b> (Kernighan & Ritchie style), and <b>-orig</b> (Original K&R style). These presets automatically configure a large number of <b>indent</b> options to conform to widely recognized coding conventions, offering a quick way to apply a consistent style without mastering every individual flag.


title: HISTORY
content:
<b>indent</b> is one of the oldest and most enduring utilities for code formatting on Unix-like systems. It originated in the early days of C programming, designed to enforce consistent coding styles, particularly the Kernighan & Ritchie (K&R) style. Over decades, it has evolved to support additional conventions, most notably the GNU coding style, which is often its default. Its widespread adoption led to its inclusion in GNU Emacs and its availability as a standard tool on most Linux distributions, solidifying its place as a classic Unix utility for code beautification and standardization.


title: PARAMETERS
content:
<b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Discard common words during indexing. This is often the default behavior, but this option explicitly ensures it.<br><br><b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do <b>not</b> discard common words; index all words in the bibliography records.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do <b>not</b> create the dictionary (<i>.d</i>) and vocabulary (<i>.v</i>) files. Only the inverted index (<i>.i</i>) file will be generated.<br><br><b><b>-o</b> <i>index</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the base name for the output index files. Instead of <i>file</i>.i, <i>file</i>.d, <i>file</i>.v, the output files will be named <i>index</i>.i, <i>index</i>.d, <i>index</i>.v. This is useful for combining multiple bibliography sources into a single index.<br><br>


title: DESCRIPTION
content:
<i>indxbib</i> is a utility within the <b>groff</b> typesetting system, designed to create an inverted index for bibliographic databases used by the <b>refer</b> preprocessor. It processes one or more bibliography <i>file</i>s, which typically contain records formatted with <b>refer</b>'s conventions (e.g., lines starting with %A, %T, etc., for author, title). For each bibliography <i>file</i>, <i>indxbib</i> generates three associated files: <i>file</i>.i (the inverted index itself), <i>file</i>.d (a sorted dictionary of unique words), and <i>file</i>.v (a vocabulary list with word counts). This index allows <b>lookbib</b> to efficiently search and retrieve bibliographic entries, making the <b>refer</b> citation process much faster when dealing with large bibliographies. It intelligently discards common words by default to optimize search results and index size, though this behavior can be toggled.


title: CAVEATS
content:
The <i>indxbib</i> command does <i>not</i> provide an option to specify a custom file for common words directly via the command line. It relies on a default system-wide common words list.


title: OUTPUT FILES
content:
For each input <i>file</i> (or for the combined index specified by <b>-o</b>), <i>indxbib</i> creates three distinct output files:<br><i>file</i>.i: The core inverted index, mapping words to bibliography entries.<br><i>file</i>.d: A sorted dictionary of all unique indexed words.<br><i>file</i>.v: A vocabulary list showing each indexed word and its frequency count.


title: BIBLIOGRAPHY FORMAT
content:
<i>indxbib</i> expects bibliography files to be structured according to <b>refer</b>'s conventions. Records are separated by blank lines, and each field within a record begins with a percent sign (<b>%</b>) followed by a key letter (e.g., <b>%A</b> for Author, <b>%T</b> for Title) and a space.


title: HISTORY
content:
<i>indxbib</i> is a long-standing utility, originating from the original AT&T Unix <b>troff</b> typesetting system. It was developed as part of the <b>refer</b> preprocessor suite to enable efficient searching and retrieval of bibliographic references embedded within <b>roff</b> documents. With the advent of <b>groff</b> (GNU <b>roff</b>), an open-source reimplementation of <b>troff</b>, <i>indxbib</i> was included as a core component, maintaining its original functionality and purpose within the <b>groff</b> ecosystem for academic and technical document preparation. Its design reflects the Unix philosophy of small, focused tools.


title: PARAMETERS
content:
<b>--threads <num></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of parallel processes to use for mutation testing. Optimizes execution time for large projects.<br><br><b>--mutators <mutator_name(s)></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows specifying which mutators (types of code changes) should be applied. Can be a comma-separated list.<br><br><b>--show-mutations</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed diffs of all killed, escaped, and not covered mutants in the console output.<br><br><b>--coverage <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the path to an existing code coverage report (e.g., Clover XML) to optimize the mutation process by only mutating covered lines.<br><br><b>--min-msi <percentage></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the minimum acceptable Mutation Score Indicator (MSI) percentage. If the actual MSI falls below this, <I>Infection</I> will fail.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a simulation without actually applying mutations or running tests. Useful for checking configuration.<br><br><b>--log-verbosity <level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls the level of detail in the log output (e.g., <I>none</I>, <I>default</I>, <I>debug</I>).<br><br>


title: DESCRIPTION
content:
The <I>infection</I> command refers to <I>PHP's Infection</I>, a sophisticated mutation testing framework for PHP codebases. While not a core Linux operating system utility, it is a command-line application designed to run on Linux (and other OSes) typically invoked via Composer's <I>vendor/bin</I> directory or a global installation.<br><br>Mutation testing aims to identify weaknesses and gaps in a project's test suite. <I>Infection</I> works by introducing small, targeted changes (mutations) into your source code and then running your existing unit tests. If the tests still pass after a mutation is introduced, it indicates that the test suite failed to 'kill' the mutant, thereby exposing a missing or insufficient test case. This process helps developers improve the robustness and effectiveness of their tests, leading to higher quality and more reliable code.


title: CAVEATS
content:
The <I>infection</I> command is not a standard Linux system utility. It is an application written in PHP, requiring a PHP runtime and Composer dependency manager to be installed on the Linux system. Its primary use is in software development for improving code quality, not for system administration or security. Running it on large codebases can be resource-intensive and time-consuming.


title: CONFIGURATION FILE
content:
<I>Infection</I> typically uses a configuration file named <B>infection.json</B> or <B>infection.json.dist</B> in the project's root directory. This JSON file allows developers to specify detailed settings, including paths to source code and test files, custom mutator settings, log outputs, and minimum MSI requirements.


