# CommandSection

title: DESCRIPTION
content:
GNU <b>parallel</b> is a shell tool for executing jobs in parallel using one or more computers. It reads arguments from standard input or arguments given on the command line, and then executes commands for each argument. It can replace <i>xargs</i> and <i>for</i> loops for parallel processing, often drastically speeding up operations by utilizing all available CPU cores. <b>parallel</b> excels at distributing workloads across multiple processors, machines, or even remote systems via SSH. It provides robust features for managing job output, errors, and execution order, making it a versatile "swiss army knife" for various parallel computing tasks, from data processing to batch operations. Its flexibility allows users to control the number of simultaneous jobs, resource allocation, and even interact with other programs for complex workflows.


title: CAVEATS
content:
<b>Quoting and Escaping:</b> Special characters and spaces in arguments often require careful quoting to ensure they are passed correctly to the executed command, especially when using shell interpretation.<br><b>Shell Interpretation:</b> By default, <b>parallel</b> executes commands through a shell. This can lead to unexpected behavior if commands contain shell-specific syntax or unquoted variables. Using <code>--shell /bin/sh -c</code> can help clarify.<br><b>Resource Consumption:</b> While efficient, running too many parallel jobs without sufficient system resources (CPU, RAM, I/O) can lead to performance degradation or instability. Careful tuning of the <code>--jobs</code> parameter is crucial.<br><b>Dependency:</b> GNU <b>parallel</b> is primarily written in Perl and is usually a separate package that might not be installed by default on all Linux distributions.


title: INPUT SOURCES AND ARGUMENT HANDLING
content:
<b>parallel</b> is incredibly flexible in handling input. It can take arguments directly on the command line using <code>:::</code>, read them from standard input (one argument per line), or process files directly. Understanding how <b>parallel</b> handles arguments, particularly with the replacement strings like <code>{}</code> (full argument), <code>{.}</code> (basename without extension), <code>{/}</code> (dirname), <code>{#}</code> (job number), and <code>{%}</code> (job percentage), is crucial for advanced usage. Proper quoting and argument transformation are essential for correctness.


title: REMOTE EXECUTION
content:
A significant feature of <b>parallel</b> is its ability to execute commands on remote hosts via <i>ssh</i> or <i>rsh</i>. This allows for distributed computing without complex setup, using simple shell commands to spread a workload across multiple machines.


title: PROGRESS AND ETA
content:
For long-running tasks, <b>parallel</b> provides excellent feedback, including progress bars and estimated time of arrival (with <code>--eta</code>), which greatly aids in monitoring and managing large-scale operations.


title: HISTORY
content:
GNU <b>parallel</b> was created by Ole Tange and first released around 2007. It was designed to fill a gap between <i>xargs</i> and more complex job schedulers, providing a simple yet powerful way to parallelize shell commands. Its development has been continuous, making it a very mature and feature-rich tool. It gained significant popularity due to its flexibility, ease of use, and ability to drastically speed up common command-line tasks by leveraging multi-core processors. It is widely adopted across various fields, from scientific computing to system administration.


title: SYNOPSIS
content:
<I><b>parallel-lint</b> [options] [-- <I>paths...</I>]<br><b>parallel-lint</b> --stdin [options]<br><b>parallel-lint</b> --diff [options] [<I>paths...</I>]</I>


title: PARAMETERS
content:
<b>-p <I>num</I>, --process <I>num</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of parallel processes to use. Defaults to the number of CPU cores.<br><br><b>--exclude <I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude files or directories matching the given path (can be used multiple times).<br><br><b>--lint-extensions <I>ext1,ext2,...</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of file extensions to lint. Overrides default extensions for a given linter.<br><br><b>--stdin</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read file paths from standard input, one path per line.<br><br><b>--diff</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only lint files that have changed according to a Git diff (defaulting to HEAD vs. local changes).<br><br><b>--staged</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only lint files that are currently staged in Git.<br><br><b>--checkstyle</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output results in Checkstyle XML format.<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output results in JSON format.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show verbose output, including commands being executed.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show debug output for troubleshooting.<br><br><b>--ansi, --no-ansi</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force or disable ANSI color output.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not actually run linters, just print commands that would be executed.<br><br><b>--php-syntax</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform only PHP syntax checks (default for .php files).<br><br><b>--symlinked</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Follow symlinked directories when discovering files.<br><br><b>--<I>linter-name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a specific linter (e.g., <I>--phpcs</I>, <I>--eslint</I>, <I>--phpstan</I>, <I>--pylint</I>). Many such options exist for various languages and tools.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program version and exit.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show this help message and exit.<br><br>


title: DESCRIPTION
content:
<i><b>parallel-lint</b></i> is a powerful command-line tool designed to significantly speed up code linting processes. It acts as a wrapper around various static analysis tools (linters) such as PHP_CodeSniffer, ESLint, PHPStan, and many others, allowing them to run concurrently across multiple CPU cores.<br><br>By parallelizing the execution of linting tasks, it drastically reduces the total time required to analyze large codebases, making it ideal for continuous integration (CI) environments and development workflows where fast feedback is crucial. It automatically discovers files to lint, supports various output formats (like Checkstyle and JSON), and offers flexible configuration options for excluding paths, specifying file types, and integrating with version control systems to lint only changed files. This tool enhances productivity by providing quicker validation of code quality and adherence to coding standards.


title: CAVEATS
content:
<i><b>parallel-lint</b></i> requires the underlying linters (e.g., <I>phpcs</I>, <I>eslint</I>) to be installed and accessible in your system's PATH. It does not install these linters itself. Running with a high number of parallel processes can be resource-intensive, consuming significant CPU and memory.


title: HOW IT WORKS
content:
<i><b>parallel-lint</b></i> internally spawns multiple processes, each responsible for linting a subset of the target files. It efficiently distributes the workload and aggregates the results from all parallel runs, presenting them in a unified output. It typically uses file discovery mechanisms to find relevant files.


title: DEPENDENCIES
content:
While <i><b>parallel-lint</b></i> itself is usually installed via Composer (for PHP projects) or other language-specific package managers, its primary function relies on the <I>presence</I> and <I>correct configuration</I> of the specific linters it's asked to run (e.g., <I>phpcs</I>, <I>eslint</I>, <I>black</I>). These underlying linters must be installed separately by the user.


title: HISTORY
content:
<i><b>parallel-lint</b></i> was developed to address the growing need for faster feedback loops in modern software development, especially in projects with large codebases that might take a long time to lint sequentially. It aims to reduce the waiting time for static analysis results, making it more practical to integrate linting into pre-commit hooks or continuous integration pipelines without significantly slowing them down. Its design focuses on being a generic parallel runner for <I>any</I> command-line linter.


title: PARAMETERS
content:
<b>cat</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads and prints the content of a Parquet file to standard output. Useful for viewing the data rows.<br><br><b>schema</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the schema of a Parquet file. Shows the column names, types, and nullability.<br><br><b>meta</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints detailed metadata of a Parquet file, including information about row groups, columns, and data pages. Essential for debugging.<br><br><b>head</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the first N records of a Parquet file. Similar to the Unix `head` command. Default is 10 records.<br><br><b>show</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays records from a Parquet file, often with more structured output options (e.g., JSON).<br><br><b>dump</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the raw, internal structure of a Parquet file for deep-level debugging.<br><br><b>merge</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Merges multiple Parquet files into a single output file.<br><br>


title: DESCRIPTION
content:
`parquet-tools` is a command-line utility designed for interacting with Apache Parquet files. It provides various subcommands to inspect, debug, and understand the structure and content of these columnar data files. Users can view schemas, metadata, read data, and perform basic operations, making it an invaluable tool for developers and data engineers working with big data ecosystems that utilize Parquet as a storage format, such as Apache Spark, Hive, or Impala. It helps in validating data, troubleshooting schema evolution issues, and quickly peeking into file contents without needing to load them into a full data processing framework.


title: CAVEATS
content:
<b>Java Dependency</b>: `parquet-tools` typically requires a Java Runtime Environment (JRE) to be installed on the system, as it's often distributed as a Java JAR application (e.g., invoked via `java -jar parquet-tools-<version>.jar`). A wrapper script named `parquet-tools` often makes it appear as a standard command.<br><b>Memory Usage</b>: For very large Parquet files, especially when using subcommands like `cat` or `show` without limits, the tool might consume significant memory or take a long time to process.<br><b>No Modification</b>: The primary `parquet-tools` suite is designed for inspection and debugging; it does not offer robust capabilities for modifying or writing Parquet files in place. For such operations, a data processing framework like Apache Spark or PyArrow/Pandas is usually required.


title: COMMON SUBCOMMAND OPTIONS
content:
Many subcommands support options to control their behavior. For example:<br>- `parquet-tools head -n 20 <file>`: Show the first 20 records. (`-n` for number of records)<br>- `parquet-tools cat --json <file>`: Output data in JSON format (available for `cat`, `show`).<br>- `parquet-tools schema --json <file>`: Output schema in JSON format.<br>- `parquet-tools show -r <file>`: Show raw data without decoding (for debug).


title: FILE PATHS
content:
`parquet-tools` can often read files directly from the local filesystem or, if configured, from distributed file systems like HDFS by providing the full HDFS path (e.g., `hdfs:///user/data/file.parquet`).


title: INSTALLATION
content:
`parquet-tools` is typically downloaded as a standalone JAR from Apache mirrors or can be built from source. Some distributions might package a wrapper script for easier invocation.


title: HISTORY
content:
`parquet-tools` emerged as a part of the Apache Parquet project, which started in 2013 as a columnar storage format optimized for analytical queries. As Parquet gained widespread adoption in the big data ecosystem (especially with Apache Spark, Hive, and Impala), the need for a simple command-line utility to inspect and debug these files became evident. `parquet-tools` fills this gap, providing a quick way to examine file structure and content without requiring a full-fledged data processing framework to be spun up. Its development has been driven by the community around the Apache Parquet project to support its growing usage.


title: PARAMETERS
content:
<b><b>-l</b> <i><changelog-file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the changelog file to parse. Defaults to <i>debian/changelog</i>.<br><br><b><b>--changelog-file</b> <i><changelog-file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long option for specifying the changelog file.<br><br><b><b>-f</b> <i><format></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the format of the changelog file (e.g., <i>dpkg</i>, <i>gnus</i>). Default is <i>dpkg</i>.<br><br><b><b>--format</b> <i><format></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long option for specifying the changelog format.<br><br><b><b>-v</b> <i><version></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Parses the changelog entry for a specific package <i>version</i>.<br><br><b><b>--version</b> <i><version></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long option for specifying the version entry to parse.<br><br><b><b>-s</b> <i><since-version></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Parses entries that are more recent than the specified <i>since-version</i>.<br><br><b><b>--since</b> <i><since-version></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long option for parsing entries since a specific version.<br><br><b><b>-u</b> <i><until-version></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Parses entries up to and including the specified <i>until-version</i>.<br><br><b><b>--until</b> <i><until-version></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long option for parsing entries until a specific version.<br><br><b><b>-o</b> <i><offset></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts parsing from an <i>offset</i> number of entries from the latest one.<br><br><b><b>--offset</b> <i><offset></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long option for specifying an offset from the latest entry.<br><br><b><b>-c</b> <i><count></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the number of changelog entries parsed, starting from the selected point.<br><br><b><b>--count</b> <i><count></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long option for limiting the number of entries parsed.<br><br><b><b>-F</b> <i><field></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints only the value of a specific <i>field</i> (e.g., <i>Version</i>, <i>Distribution</i>, <i>Urgency</i>).<br><br><b><b>--field</b> <i><field></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long option for printing a specific field's value.<br><br><b><b>--no-conf</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <i>parsechangelog</i> from reading any configuration files.<br><br><b><b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs change descriptions without processing them (e.g., line wrapping).<br><br><b><b>--follow-symlinks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Follows symbolic links when attempting to locate the changelog file.<br><br>


title: DESCRIPTION
content:
<i>parsechangelog</i> is a utility primarily used to extract structured information from Debian changelog files, typically located at <i>debian/changelog</i> within a source package. It can parse various fields such as the package version, target distribution, upload urgency, maintainer details, and the date of the entry, as well as the change descriptions themselves.<br><br>While often seen as a standalone command, <i>parsechangelog</i> on many modern Debian-based systems is a symlink or wrapper for <i>dpkg-parsechangelog</i>, which provides more robust and feature-rich parsing capabilities. Its main purpose is to provide machine-readable output for scripts and build tools, enabling automated processes (like <i>dpkg-buildpackage</i>) to determine the current package version and integrate changelog entries into the build and release workflow.


title: CAVEATS
content:
This command is primarily designed for Debian-style changelog files and may not work correctly with other changelog formats. Its exact behavior and available options can vary slightly depending on the specific version of <i>dpkg-dev</i> installed, as <i>parsechangelog</i> is often an alias or symlink to <i>dpkg-parsechangelog</i>. Malformed changelog entries can lead to parsing errors or unexpected output.


title: <I>OUTPUT FIELDS</I>
content:
When <i>parsechangelog</i> extracts an entry, it can provide various structured fields. Common fields that can be retrieved, especially using the <b>-F</b> or <b>--field</b> option, include:<br> <b>Version</b>: The package's full version string.<br> <b>Distribution</b>: The target distribution for the upload (e.g., <i>unstable</i>, <i>stable</i>, <i>testing</i>).<br> <b>Urgency</b>: The urgency level of the upload (e.g., <i>low</i>, <i>medium</i>, <i>high</i>, <i>emergency</i>).<br> <b>Maintainer</b>: The name and email address of the package maintainer.<br> <b>Date</b>: The date and time when the changelog entry was made.<br> <b>Changes</b>: The actual list of changes or bug fixes described in the entry. This field often contains multi-line text.


title: <I>USAGE IN BUILD SYSTEMS</I>
content:
One of the most significant uses of <i>parsechangelog</i> is within automated build systems, particularly by <i>dpkg-buildpackage</i>. It allows build scripts to dynamically retrieve the exact version number of the package being built directly from the <i>debian/changelog</i> file. This ensures that the version embedded in the generated Debian package (<i>.deb</i>) is always synchronized with the latest entry in the source's changelog, streamlining the release management process and reducing manual errors.


title: HISTORY
content:
The functionality to parse Debian changelog files has been a cornerstone of Debian's packaging system since its early inception. The <i>parsechangelog</i> command, or its underlying capabilities, evolved to become a crucial component of the <i>dpkg</i> suite. Over time, <i>dpkg-parsechangelog</i> emerged as the canonical and more feature-rich implementation within the <i>dpkg-dev</i> package, providing robust parsing and advanced options. Its development is inherently tied to the evolution of Debian's packaging standards and tools, ensuring consistent versioning and change tracking for software packages.


title: PARAMETERS
content:
<b><code>-h</code>, <code>--help</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with command usage and options.<br><br><b><code>-v</code>, <code>--version</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version information of <i>parted</i>.<br><br><b><code>-s</code>, <code>--script</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Never prompts for user input. This makes <i>parted</i> suitable for scripting and automated tasks, but requires precise command construction.<br><br><b><code>-m</code>, <code>--machine</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays output in a machine-readable format, useful for parsing by other programs.<br><br><b><code>-a</code> <i>alignment-type</i>, <code>--align</code> <i>alignment-type</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the alignment type for new or resized partitions. Common types include <i>none</i>, <i>cylinder</i>, <i>minimal</i>, and <i>optimal</i>.<br><br><b><code>-l</code>, <code>--list</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the partition layout on all detected block devices. This option bypasses the need to specify a <i>device</i> argument.<br><br>


title: DESCRIPTION
content:
<i>parted</i> is a powerful command-line utility for managing disk partitions. It allows users to <b>create</b>, <b>delete</b>, <b>resize</b>, <b>move</b>, <b>copy</b>, and <b>check</b> partitions on various storage devices.<br><br>Unlike older tools like <i>fdisk</i>, <i>parted</i> supports modern partition table formats such as <b>GUID Partition Table (GPT)</b> in addition to traditional <b>MS-DOS (MBR)</b>, enabling it to work with disks larger than 2TB and offering more flexible partitioning schemes.<br><br>It can operate in an interactive mode, guiding the user through commands, or in a non-interactive (script) mode for automation. <i>parted</i> is frequently used for setting partition flags (e.g., bootable, LVM) and ensuring optimal partition alignment for performance.<br><br><b><i>Caution:</i></b> Partitioning tools can lead to permanent data loss if used incorrectly. Always back up important data before making any changes to disk partitions.


title: CAVEATS
content:
<b><i>Data Loss Risk:</i></b> Incorrect usage of <i>parted</i> can lead to irreversible data loss. Always back up critical data before performing disk operations.<br><br><b><i>Filesystem Resizing:</i></b> While <i>parted</i> can resize partitions, it typically does <b>not</b> resize the filesystem contained within that partition. A separate utility (e.g., <i>resize2fs</i> for extN filesystems, <i>xfs_growfs</i> for XFS) is usually required to adjust the filesystem size after partition changes.<br><br><b><i>Device Naming:</i></b> Ensure the correct device is specified (e.g., <i>/dev/sda</i>, <i>/dev/nvme0n1</i>). Targeting the wrong device can lead to severe data corruption.


title: INTERACTIVE VS. NON-INTERACTIVE MODE
content:
When invoked with only a device (e.g., <code>parted /dev/sda</code>), <i>parted</i> enters an interactive prompt where users can issue commands like <code>print</code>, <code>mklabel</code>, <code>mkpart</code>, etc. For automation, the <code>-s</code> or <code>--script</code> option allows commands to be passed directly on the command line, enabling non-interactive operation.


title: COMMON INTERNAL COMMANDS
content:
While <i>parted</i>'s main options control its overall behavior, specific partition operations are performed using internal commands when in interactive mode or passed as arguments in non-interactive mode. Some common ones include:<br><b><code>mklabel</code></b> <i>type</i>: Creates a new partition table (e.g., <i>gpt</i>, <i>msdos</i>).<br><b><code>mkpart</code></b> <i>part-type</i> [<i>fs-type</i>] <i>start</i> <i>end</i>: Creates a new partition.<br><b><code>rm</code></b> <i>number</i>: Removes a partition.<br><b><code>resizepart</code></b> <i>number</i> <i>end</i>: Resizes a partition.<br><b><code>print</code></b>: Displays the current partition table.<br><b><code>set</code></b> <i>number</i> <i>flag</i> <i>state</i>: Changes a partition flag (e.g., <i>set 1 boot on</i>).


title: HISTORY
content:
<i>parted</i> was originally developed by <i>Andrew Clausen</i> and <i>Lennert Buytenhek</i>, with its first release in 1998. It was conceived as a more advanced partitioning tool to overcome the limitations of utilities like <i>fdisk</i>, particularly concerning disk sizes larger than 2TB and the ability to resize partitions. As a GNU project, it has evolved to support modern standards like <b>GPT (GUID Partition Table)</b>, making it an indispensable tool for contemporary disk management.


title: PARAMETERS
content:
<b><I>DEVICE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The disk device (e.g., `/dev/sda`, `/dev/nvme0n1`) to be operated on. If omitted, `parted` may prompt for a device or use the first available.<br><br><b>`-h`, `--help`</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>`-v`, `--version`</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br><b>`-s`, `--script`</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operates in script (non-interactive) mode. This option is explicitly against the interactive usage but is a fundamental command-line option for `parted`.<br><br><b>`-l`, `--list`</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists partition tables and partitions on all block devices. Can be used interactively or non-interactively.<br><br>


title: DESCRIPTION
content:
The term `parted-interactive` typically refers to running the GNU `parted` command in its default interactive mode, rather than a separate distinct binary. `parted` is a powerful command-line utility used for managing disk partitions. In interactive mode, `parted` presents a prompt (e.g., `(parted)`) where users can enter commands sequentially to perform various disk operations. This mode is particularly useful for tasks such as creating, deleting, resizing, copying, and checking partitions, as well as modifying partition table types (like MBR or GPT). Its interactive nature allows for immediate feedback and step-by-step execution of commands, providing granular control over disk layout. However, this also means it carries a significant risk of data loss if not used carefully, as changes are often applied directly to the disk without an "undo" option.


title: CAVEATS
content:
<b><I>Data Loss Risk</I></b>: `parted` is extremely powerful and dangerous. Mistakes can lead to irreversible data loss. Always back up critical data before using.<br><b><I>Root Privileges</I></b>: Requires root (sudo) privileges to operate on disk devices.<br><b><I>Device Naming</I></b>: Be absolutely certain of the correct device name (e.g., `/dev/sda`, `/dev/sdb`) to avoid modifying the wrong disk.<br><b><I>No Undo</I></b>: Most changes are applied immediately to the disk; there is no "undo" button.<br><b><I>Filesystem Integrity</I></b>: Modifying partitions with active filesystems can lead to corruption; unmount filesystems before modifying their partitions.


title: COMMON INTERACTIVE COMMANDS
content:
Once in interactive mode, `parted` offers a range of commands:<br><b><I>select <I>DEVICE</I></I></b>: Selects the disk device to operate on (e.g., `select /dev/sdb`).<br><b><I>print</I></b>: Displays the current partition table and partitions of the selected device.<br><b><I>mklabel <I>LABEL_TYPE</I></I></b>: Creates a new partition table (e.g., `gpt`, `msdos`). <b><I>WARNING: This will erase all existing partitions on the device!</I></b><br><b><I>mkpart <I>PART_TYPE</I> [<I>FS_TYPE</I>] <I>START</I> <I>END</I></I></b>: Creates a new partition. `PART_TYPE` can be `primary`, `logical`, `extended`. `FS_TYPE` is optional (e.g., `ext4`, `fat32`). `START` and `END` define the partition's size in MB, GB, etc.<br><b><I>rm <I>NUMBER</I></I></b>: Deletes the specified partition by its number.<br><b><I>resizepart <I>NUMBER</I> <I>END</I></I></b>: Resizes a partition to a new end position.<br><b><I>quit</I></b>: Exits the `parted` interactive prompt.


title: HISTORY
content:
GNU Parted was developed as part of the GNU project with the goal of providing a free and open-source utility for disk partition management. It was designed to handle various partition table types, including the traditional Master Boot Record (MBR) and the newer GUID Partition Table (GPT), which offers more flexibility and support for larger disks. Due to its power and flexibility, `parted` has become a widely used and essential tool in Linux distributions for both manual and automated disk management tasks.


title: SYNOPSIS
content:
<b>particle</b> [<i>&lt;global_options&gt;</i>] <i>&lt;command&gt;</i> [<i>&lt;command_options&gt;</i>] [<i>&lt;arguments&gt;</i>]<br><br>This general syntax indicates that the `particle` command usually requires a specific `command` (subcommand) to perform an action. Global options modify the overall behavior of the CLI, while command-specific options and arguments are passed to the chosen subcommand.


title: PARAMETERS
content:
<b>--version, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the installed Particle CLI version.<br><br><b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show general help, or help for a specific command (e.g., `particle help flash`).<br><br><b>--api &lt;url&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a custom Particle API URL to interact with (e.g., for local development servers).<br><br><b>--access_token &lt;token&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a specific access token for authentication instead of the logged-in user's token.<br><br><b>--proxy &lt;url&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a proxy server to use for all network requests made by the CLI.<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output command results in JSON format, useful for scripting and automation.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output for more detailed information during command execution.<br><br>


title: DESCRIPTION
content:
The `particle` command-line interface (CLI) is a powerful, cross-platform tool designed to interact with Particle IoT hardware and the Particle Cloud ecosystem. It serves as an essential utility for developers, enabling them to seamlessly manage their Particle devices, including flashing firmware over USB or wirelessly (OTA), compiling code locally or via the Particle Cloud, and interacting with cloud functions and variables exposed by their devices. The CLI provides a comprehensive suite of commands for device setup, debugging, accessing device logs, managing private keys, configuring webhooks, and integrating with community or custom libraries. It streamlines the development workflow for anyone working with Particle Photon, Electron, Argon, Boron, or Xenon devices, offering both high-level control and granular interaction with the platform.


title: CAVEATS
content:
The `particle` command is not a standard Linux utility included with most distributions; it must be installed separately, typically via `npm` (Node.js package manager). It requires the Node.js runtime environment to be installed on the system. Many operations rely heavily on connectivity to the Particle Cloud (e.g., cloud compilation, OTA flashing, device listing). Some direct device interactions (e.g., serial communication, USB flashing) may require appropriate USB drivers and permissions.


title: INSTALLATION
content:
The `particle` CLI is typically installed using Node.js's package manager, `npm`. Ensure Node.js and `npm` are installed on your system, then open a terminal and run:<br><code><b>npm install -g particle-cli</b></code><br>This command installs the CLI globally, making the `particle` command available from any directory.


title: KEY SUBCOMMANDS
content:
The `particle` command works with various subcommands, each performing specific tasks. Some frequently used subcommands include:<br><ul><li>`<b>particle login</b>`: Authenticate with the Particle Cloud using your account credentials.</li><li>`<b>particle compile &lt;platform&gt; &lt;source&gt;</b>`: Compile firmware code either locally (if supported tools are installed) or in the Particle Cloud.</li><li>`<b>particle flash &lt;device&gt; &lt;firmware&gt;</b>`: Flash firmware to a specific device, either wirelessly (Over-the-Air) or via USB.</li><li>`<b>particle serial monitor</b>`: Open a serial monitor connection to a connected Particle device for debugging and logging.</li><li>`<b>particle device list</b>`: List all Particle devices associated with your account.</li><li>`<b>particle function call &lt;device&gt; &lt;function&gt; [args]</b>`: Call a specific cloud function exposed by a running device.</li><li>`<b>particle variable get &lt;device&gt; &lt;variable&gt;</b>`: Read the current value of a cloud variable from a device.</li><li>`<b>particle doctor</b>`: Runs a diagnostic check on your development environment to identify common issues.</li></ul>


title: HISTORY
content:
The `particle` CLI originated from the `spark-cli` tool, developed by Particle (formerly Spark). It was created to provide developers with a robust command-line interface to interact with their early IoT devices like the Spark Core and later the Photon. As Particle's ecosystem grew to include more sophisticated hardware (Electron, Argon, Boron, Xenon) and cloud services, the CLI evolved significantly. Its development is closely tied to the Particle platform's growth, offering functionalities for managing device firmware, keys, integrations, and cloud resources, making it an indispensable tool for Particle developers.


title: PARAMETERS
content:
<b><i>DEVICE...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more block devices (e.g., <i>/dev/sda</i>, <i>/dev/nvme0n1</i>) for which the kernel should re-read the partition table. If no devices are specified, <b>partprobe</b> attempts to re-read the partition tables for all known block devices.<br><br><b><b>-d</b>, <b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a dry run. It shows what <b>partprobe</b> would do without actually informing the kernel of any changes. This is useful for testing or debugging.<br><br><b><b>-s</b>, <b>--script</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all output from <b>partprobe</b>. This option is particularly useful when integrating <b>partprobe</b> into automated scripts where verbose output is not desired.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a concise help message detailing the command's usage and available options, then exits.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of the <b>partprobe</b> utility and then exits.<br><br>


title: DESCRIPTION
content:
The <b>partprobe</b> command is a crucial utility used in Linux to inform the operating system kernel about changes made to partition tables on block devices. When you modify a disk's partition structure using tools like <i>fdisk</i>, <i>sfdisk</i>, or <i>gparted</i>, the kernel often caches the old partition layout.<br><br>Without notifying the kernel, the system might continue to see the old partitions or fail to recognize new ones, even though the changes have been written to the disk. <b>partprobe</b> addresses this by instructing the kernel to re-read the partition table for specified devices, or for all devices if none are specified. This allows the system to recognize new or modified partitions without requiring a reboot, which is essential for dynamic storage management and scripting.


title: CAVEATS
content:
<b>In-use Partitions:</b> <b>partprobe</b> cannot successfully re-read a partition table on a device if any partition on that device is currently in use (e.g., mounted, open for swap, or actively accessed by a process). You might need to unmount partitions or stop services before running <b>partprobe</b>.<br><br><b>Root Privileges:</b> This command requires superuser (root) privileges to execute, as it interacts directly with the kernel's block device subsystem.<br><br><b>No Modification:</b> <b>partprobe</b> does not create, delete, or modify partitions on a disk. It only informs the kernel about partition table changes that have already been written to the disk by other partitioning tools.<br><br><b>Complex Setups:</b> For more complex storage configurations like Logical Volume Management (LVM), software RAID, or multipath devices, <b>partprobe</b> alone might not be sufficient. Other dedicated tools (e.g., <i>pvscan</i>, <i>vgscan</i>, <i>mdadm</i>) may be required to update the kernel's view of these structures.


title: PERMISSIONS
content:
Executing <b>partprobe</b> requires elevated privileges, typically root, because it needs to interact directly with the kernel to modify its understanding of block devices and their partition layouts. Without sufficient permissions, the command will fail.


title: WHEN TO USE
content:
Use <b>partprobe</b> immediately after using a partitioning tool (like <i>fdisk</i>, <i>gparted</i>, <i>sgdisk</i>) to write new partition changes to disk. It ensures the kernel is aware of the new layout before attempting to create file systems (<i>mkfs</i>) or mount the new partitions.


title: HISTORY
content:
<b>partprobe</b> is an integral part of the <i>util-linux</i> project, a widely used collection of essential Linux system utilities. Its development became critical as Linux systems evolved towards more dynamic and hot-pluggable storage management, reducing the need for system reboots after disk partitioning changes.


title: SYNOPSIS
content:
<b>partx</b> [<i>options</i>] <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<i>&lt;device&gt;</i> [<i>&lt;partition&gt;...</i>]]


title: PARAMETERS
content:
<b><i>&lt;device&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The block device (e.g., <i>/dev/sda</i> or <i>/dev/nvme0n1</i>) whose partition table should be rescanned or queried.<br><br><b><i>&lt;partition&gt;...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional: Specific partition numbers to add or delete. If omitted with <i>-a</i> or <i>-d</i>, all partitions are considered.<br><br><b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add the specified partitions (or all found partitions) to the kernel's partition table.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete the specified partitions (or all found partitions) from the kernel's partition table.<br><br><b><b>-u</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Update the kernel's view of the partitions on the specified device. This is the most common use case, forcing a re-read of the partition table.<br><br><b><b>--nr</b> <i>&lt;N&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a partition number or range (e.g., <i>--nr 1-5</i>) for actions like add or delete.<br><br><b><b>-t</b> <i>&lt;TYPE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the partition table type (e.g., <i>dos</i>, <i>gpt</i>). Useful when auto-detection fails.<br><br><b><b>--show</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List the partitions on the specified device in a human-readable format. Similar to <i>fdisk -l</i> output.<br><br><b><b>--bytes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <i>--show</i>, print sizes in bytes instead of human-readable units.<br><br><b><b>--json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <i>--show</i>, output partition information in JSON format.<br><br><b><b>--pairs</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <i>--show</i>, output partition information in key="value" pairs.<br><br><b><b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <i>--show</i>, output partition information in raw, column-based format suitable for scripting.<br><br>


title: DESCRIPTION
content:
The <b>partx</b> command is a utility used to inform the Linux kernel about changes made to a disk's partition table without requiring a system reboot. When you modify partitions using tools like <i>fdisk</i>, <i>parted</i>, or <i>gdisk</i>, the kernel doesn't automatically detect these changes. <b>partx</b> forces the kernel to re-read the partition table of a specified disk device, making the new or modified partitions visible and usable by the system. This is crucial for managing storage on a running system, especially in server environments where reboots are undesirable. It's important to note that <b>partx</b> does not modify the partition table itself; it only tells the kernel to rescan it. If partitions are in use (e.g., mounted or used for swap), <b>partx</b> might fail, and those resources may need to be unmounted or deactivated first.


title: CAVEATS
content:
<b>partx</b> requires root privileges to operate. It does not create or destroy partitions; it merely informs the kernel about existing changes. If a partition is currently in use (e.g., mounted or part of a LVM volume group), <b>partx</b> might fail to update its status in the kernel. For complex scenarios involving device-mapper (like LVM or software RAID), <b>kpartx</b> may be a more appropriate tool to manage device-mapper entries.


title: COMMON USAGE EXAMPLE
content:
After creating a new partition (e.g., <i>/dev/sdb1</i>) on <i>/dev/sdb</i> using <i>fdisk</i>, you would typically run: <br><i><b>sudo partx -u /dev/sdb</b></i><br>This command ensures the kernel sees the new <i>/dev/sdb1</i>, allowing you to format and mount it.<br><br>To simply list partitions on a device: <br><i><b>sudo partx --show /dev/sda</b></i>


title: HISTORY
content:
<b>partx</b> is part of the <i>util-linux</i> project, a collection of essential utilities for Linux systems. Its development has focused on providing a robust and reliable way to manage kernel-level visibility of disk partitions, becoming a standard tool in system administration for live partition adjustments without the need for disruptive reboots. It evolved from simpler utilities to integrate more advanced features like various output formats and support for different partition table types.


title: SYNOPSIS
content:
<b>pass</b> [<i>options</i>] <i>command</i> [<i>arguments</i>]<br><br>Common commands:<br><b>pass init</b> [<i>gpg-id</i>...]<br><b>pass ls</b> [<i>path</i>]<br><b>pass show</b> [<b>-c|-q|-p</b>] [<i>path</i>]<br><b>pass insert</b> [<b>-e|-m</b>] [<i>path</i>]<br><b>pass generate</b> [<b>-s</b> <i>size</i>] [<b>-n</b>] [<i>path</i>]<br><b>pass rm</b> [<b>-r|-f</b>] [<i>path</i>]<br><b>pass cp</b> [<b>-r|-f</b>] <i>old-path</i> <i>new-path</i><br><b>pass mv</b> [<b>-r|-f</b>] <i>old-path</i> <i>new-path</i><br><b>pass find</b> <i>search-string</i><br><b>pass grep</b> <i>search-string</i><br><b>pass edit</b> [<i>path</i>]<br><b>pass git</b> <i>git-command</i> [<i>git-args</i>]<br><b>pass help</b> [<i>command</i>]<br><b>pass version</b>


title: PARAMETERS
content:
<b><b>-c</b>, <b>--clip</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used primarily with <b>show</b>. Copies the first line (the password) to the clipboard instead of printing it to standard output. The clipboard is cleared after a short configurable delay.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used primarily with <b>show</b>. Suppresses all output to standard output, often used in conjunction with <b>-c</b> when only clipboard copying is desired without displaying the password on screen.<br><br><b><b>-p</b>, <b>--password</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used primarily with <b>show</b>. Only prints the first line (the password) to standard output, omitting any subsequent lines or metadata stored in the password file.<br><br><b><b>-e</b>, <b>--echo</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <b>insert</b>. Echos the password back to standard output after it has been inserted, useful for scripting or confirmation in non-interactive environments.<br><br><b><b>-m</b>, <b>--multiline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <b>insert</b>. Allows for multiline input for the password. The first line is treated as the password, and subsequent lines are stored as notes or additional information.<br><br><b><b>-s</b> <i>size</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <b>generate</b>. Specifies the desired length for the randomly generated password. The default length is 24 characters if this option is not provided.<br><br><b><b>-n</b>, <b>--no-symbols</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <b>generate</b>. Instructs <i>pass</i> to generate a password composed only of letters (uppercase and lowercase) and numbers, excluding special symbols.<br><br><b><b>-r</b>, <b>--recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with commands like <b>rm</b>, <b>cp</b>, and <b>mv</b>. Performs the operation recursively on directories, affecting all contents within the specified path.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with commands like <b>rm</b>, <b>cp</b>, and <b>mv</b>. Bypasses confirmation prompts, allowing for non-interactive execution of commands, which can be useful in scripts.<br><br>


title: DESCRIPTION
content:
The <i>pass</i> command is a lightweight, command-line based password manager that adheres to the Unix philosophy of doing one thing well. It stores passwords in individual GnuPG encrypted files, organized in a simple plaintext directory tree. This structure allows for easy management using standard file system utilities and optional version control with Git.<br><br>By leveraging GnuPG for robust encryption and Git for history and synchronization, <i>pass</i> provides a secure, flexible, and highly scriptable solution for managing sensitive credentials. It supports core functionalities like adding, retrieving, generating, editing, searching, copying, moving, and synchronizing passwords across multiple devices.


title: CAVEATS
content:
The security of <i>pass</i> is inherently tied to the security of your GnuPG private key and its passphrase. A compromised GnuPG key means compromised passwords.<br><br>While passwords are encrypted at rest, they are decrypted into memory and may be written to temporary files during operations like editing or display. This temporary exposure could potentially leave sensitive data accessible to forensic analysis.<br><br>When using the clipboard option (<b>-c</b>), be aware that clipboard managers might retain sensitive data longer than intended or make it accessible to other applications. Ensure your clipboard manager's security practices align with your risk tolerance.<br><br>Regular backups of your password store (especially when integrated with Git) are crucial for data integrity and recovery in case of system failures or accidental deletion.


title: ENVIRONMENT VARIABLES
content:
<i>pass</i> recognizes several environment variables that can alter its behavior. The most commonly used include <b>PASSWORD_STORE_DIR</b> to specify an alternative location for the password store (default: <i>~/.password-store</i>), and <b>PASSWORD_STORE_GPG_OPTS</b> to pass additional options directly to GnuPG commands used by <i>pass</i>.


title: EXTENSIBILITY
content:
<i>pass</i> is designed to be highly extensible. Users can place custom scripts in the <i>~/.password-store/.extensions</i> directory. These scripts are then invokable as <i>pass</i> subcommands (e.g., a script named `foo` becomes `pass foo`), allowing for automation of complex tasks or integration with other utilities.


title: HISTORY
content:
The <i>pass</i> utility was created by Jason A. Donenfeld and first publicly released in 2012. Its development was driven by the desire for a simple, standards-compliant password manager that leverages existing, robust Unix tools like GnuPG for encryption and Git for version control. It quickly gained popularity within the Unix and open-source communities for its minimalist design, scriptability, and adherence to the 'Keep It Simple, Stupid' (KISS) principle.


title: SYNOPSIS
content:
<b>pass otp</b> <I>show</I> [<B>-c</B>] <I>password-entry</I><br><b>pass otp</b> <I>generate</I> [<B>-i</B>] <I>password-entry</I><br><b>pass otp</b> <I>uri add</I> [<B>-q</B>|<B>-s</B>] <I>password-entry</I> [<I>URI</I>]<br><b>pass otp</b> <I>uri edit</I> [<B>-q</B>|<B>-s</B>] <I>password-entry</I> [<I>URI</I>]<br><b>pass otp</b> <I>uri remove</I> <I>password-entry</I>


title: PARAMETERS
content:
<b><I>password-entry</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name or path of the password entry in the pass store where the OTP secret is stored or will be stored.<br><br><b>-c, --clip</b><br>&nbsp;&nbsp;&nbsp;&nbsp;For the <B>show</B> command, copy the generated OTP to the system clipboard instead of printing it to standard output.<br><br><b>-i, --increment</b><br>&nbsp;&nbsp;&nbsp;&nbsp;For the <B>generate</B> command, this option is used with HOTP (HMAC-based One-Time Password) to increment the counter before generating the next OTP, crucial for HOTP's stateful nature.<br><br><b>-q, --qr-scan</b><br>&nbsp;&nbsp;&nbsp;&nbsp;For <B>uri add</B> and <B>uri edit</B>, scan a QR code from the screen or a specified image file to extract the <B>otpauth://</B> URI. Requires an external QR scanning utility like <I>zbarimg</I>.<br><br><b>-s, --stdin</b><br>&nbsp;&nbsp;&nbsp;&nbsp;For <B>uri add</B> and <B>uri edit</B>, read the <B>otpauth://</B> URI from standard input, allowing piping from other commands or manual input.<br><br><b>[<I>URI</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional <B>otpauth://</B> URI directly provided as an argument for <B>uri add</B> or <B>uri edit</B>. If not provided, the command may prompt for it or expect input via <B>-q</B> or <B>-s</B>.<br><br>


title: DESCRIPTION
content:
<i>pass-otp</i> is a powerful extension for the <I>pass</I> (password-store) command-line password manager. It integrates seamlessly to allow users to store, retrieve, and generate Time-based One-Time Passwords (TOTP) and HMAC-based One-Time Passwords (HOTP) directly within their encrypted password store.<br><br>This extension leverages <I>pass</I>'s existing GPG encryption to secure OTP secrets alongside your regular passwords, providing a centralized and secure solution for managing all your authentication credentials. Users can add OTP secrets either manually (e.g., as <B>otpauth://</B> URIs) or by scanning QR codes, and then generate the current valid OTP directly from the command line, optionally copying it to the clipboard.<br><br><i>pass-otp</i> enhances the usability of two-factor authentication (2FA) by making it as accessible and convenient as retrieving any other password from your <I>pass</I> repository, promoting better security practices without sacrificing ease of use. It's an essential tool for anyone relying on <I>pass</I> for comprehensive secret management.


title: CAVEATS
content:
<b>Dependencies:</b> <i>pass-otp</i> requires the main <I>pass</I> (password-store) application to be installed. For QR code scanning (<B>-q</B>), an external utility like <I>zbarimg</I> is necessary. <br><b>Secret Storage:</b> The OTP secret (e.g., the base32 key in an <B>otpauth://</B> URI) is stored as plaintext within the encrypted <I>pass</I> entry file. Its security relies entirely on the strength of your GPG encryption and passphrase. <br><b>Time Synchronization:</b> For TOTP (Time-based One-Time Passwords), accurate system time synchronization is crucial. Skewed clocks can lead to invalid OTPs. <br><b>Hotp Counter:</b> When using HOTP, ensure you understand and correctly manage the counter. Incorrectly incrementing or failing to increment it can lead to synchronization issues with the authenticator.


title: INTEGRATION WITH PASS ENTRIES
content:
<i>pass-otp</i> typically stores the OTP secret within the <I>pass</I> entry file itself. The most common method is by adding an <B>otpauth://</B> URI on a new line within the password file. For example, a file might contain:<br><br><pre>MySecretPassword<br>otpauth://totp/Example:user@example.com?secret=JBSWY3DPEHPK3PXP</pre><br>When you run <b>pass otp show MyEntry</b>, <i>pass-otp</i> reads this URI, extracts the secret, and generates the current OTP. This approach keeps your OTP secrets encrypted alongside your passwords.


title: HISTORY
content:
<i>pass-otp</i> emerged as a community-driven extension to the popular <I>pass</I> password manager. Recognizing the growing need for robust two-factor authentication (2FA) solutions and the desire to keep all sensitive credentials within a single, GPG-encrypted repository, developers created this script to seamlessly integrate OTP management. Its development has mirrored the evolution of 2FA standards, adapting to support both TOTP and HOTP protocols. Over time, it has become one of the most widely used and essential extensions for <I>pass</I> users, solidifying <I>pass</I>'s position as a comprehensive command-line secret management tool.


title: PARAMETERS
content:
<b><b>-d</b>, <b>--delete</b> <i>username</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete the password for the specified user account. This makes the account accessible without a password. Only available to the <i>root</i> user.<br><br><b><b>-e</b>, <b>--expire</b> <i>username</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Immediately expire the password for the specified user, forcing them to change it upon their next login. Only available to the <i>root</i> user.<br><br><b><b>-i</b>, <b>--inactive=DAYS</b> <i>username</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the number of days after a password has expired before the account becomes permanently inactive. Only available to the <i>root</i> user.<br><br><b><b>-l</b>, <b>--lock</b> <i>username</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lock the password of the specified user account, preventing login. This is done by prepending an '!' to the password hash in <i>/etc/shadow</i>. Only available to the <i>root</i> user.<br><br><b><b>-n</b>, <b>--mindays=DAYS</b> <i>username</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the minimum number of days that must pass before a user is allowed to change their password again. Only available to the <i>root</i> user.<br><br><b><b>-S</b>, <b>--status</b> <i>username</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the password status information for the specified user account. This includes password last changed date, minimum/maximum days, warning period, and account status (e.g., P for password set, NP for no password, L for locked).<br><br><b><b>-u</b>, <b>--unlock</b> <i>username</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unlock the password of the specified user account. This removes the '!' prepended by the <b>-l</b> option. Only available to the <i>root</i> user.<br><br><b><b>-x</b>, <b>--maxdays=DAYS</b> <i>username</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of days a password remains valid. After this period, the user will be forced to change their password. Only available to the <i>root</i> user.<br><br><b><b>--stdin</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read the new password from standard input. This is commonly used in scripts to automate password changes, but care must be taken to prevent the password from being exposed in process listings.<br><br>


title: DESCRIPTION
content:
<b>passwd</b> is a fundamental Linux utility used to change a user's authentication token, typically their password. It prompts the user for their current password (if changing their own) and then for the new password twice to ensure accuracy.<br><br>The command enforces system-wide password policies, which are often managed by Pluggable Authentication Modules (PAM), dictating rules like minimum length, complexity, and history. For unprivileged users, <b>passwd</b> allows changing only their own password. The <i>root</i> user has elevated privileges and can change the password for any account on the system without knowing the current password, and can also manipulate password aging settings (e.g., force password expiry, lock/unlock accounts).<br><br>Password information is stored securely, primarily in the <i>/etc/shadow</i> file, which contains encrypted password hashes and aging details, while <i>/etc/passwd</i> lists user accounts without password hashes. Using <b>passwd</b> correctly is crucial for maintaining system security and managing user access.


title: CAVEATS
content:
When changing another user's password, <b>passwd</b> does not require knowledge of the old password; this functionality is exclusive to the <i>root</i> user.<br><br>Password complexity and aging rules are not handled directly by <b>passwd</b> itself, but by system-wide configuration files (e.g., <i>/etc/login.defs</i>) and Pluggable Authentication Modules (PAM) such as <i>pam_pwquality</i> or <i>pam_cracklib</i>.<br><br>Using the <b>--stdin</b> option can be a security risk if not handled properly, as the password might be exposed in shell history or process lists. It should be used with extreme caution in automated scripts.<br><br>For more fine-grained control over password aging policies, the <b>chage(1)</b> command is often preferred.


title: PASSWORD AGING POLICIES
content:
The <b>passwd</b> command, particularly when used by the <i>root</i> user, allows setting various password aging parameters. These include the minimum (<b>-n</b>) and maximum (<b>-x</b>) number of days between password changes, the warning period before expiry, and inactivity periods (<b>-i</b>). These settings are crucial for enforcing security policies and ensuring regular password updates.


title: SECURITY IMPLICATIONS
content:
The primary security function of <b>passwd</b> is to manage authentication credentials. Its shift to using <i>/etc/shadow</i> significantly improved security by preventing unauthorized access to password hashes. Additionally, its reliance on PAM allows for enforcement of strong password policies, including complexity, length, and history checks, which mitigate risks from common password attacks.


title: HISTORY
content:
The <b>passwd</b> command has been a core component of Unix-like operating systems since their early days. Initially, encrypted passwords were stored directly in the publicly readable <i>/etc/passwd</i> file.<br><br>However, to enhance security and prevent brute-force attacks on password hashes, the concept of 'shadow passwords' was introduced. This led to the separation of encrypted password hashes into a restricted-access file, <i>/etc/shadow</i>, while <i>/etc/passwd</i> retained only user account information.<br><br>Modern Linux distributions integrate <b>passwd</b> with Pluggable Authentication Modules (PAM), allowing system administrators to implement flexible and robust password policies without modifying the core <b>passwd</b> utility.


title: PARAMETERS
content:
<b>user</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The username whose password is to be changed. If omitted, the current user's password is changed.<br><br><b>-S, --status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the password status for the specified user (e.g., locked, unlocked, last changed, minimum/maximum days).<br><br><b>-l, --lock</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lock the password of the specified user. This prevents the user from logging in with their password.<br><br><b>-u, --unlock</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unlock the password of the specified user, allowing them to log in.<br><br><b>-d, --delete</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete the password for the specified user. This effectively allows the user to log in without a password. (<i>Use with caution!</i>)<br><br><b>-e, --expire</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Immediately expire the password of the specified user, forcing them to change it upon next login.<br><br><b>-n, --mindays <i>DAYS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the minimum number of days between password changes to <i>DAYS</i>.<br><br><b>-x, --maxdays <i>DAYS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of days a password remains valid to <i>DAYS</i>. After this, the user must change their password.<br><br><b>-w, --warndays <i>DAYS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the number of days of warning before a password expires to <i>DAYS</i>.<br><br><b>-i, --inactive <i>DAYS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the number of days after password expiry when the account becomes inactive and locked.<br><br>


title: DESCRIPTION
content:
The <i>passwd</i> command is used to change a user's password. A regular user can only change their own password, and they will be prompted for their current password before setting a new one. The new password must satisfy system-defined complexity rules (e.g., minimum length, character types), which are often enforced by PAM modules. <br><br>The root user, however, can change any user's password without knowing the current one, and can also set various password aging parameters like expiration dates, minimum/maximum days between changes, and warning periods. This command modifies entries in the <i>/etc/passwd</i> and <i>/etc/shadow</i> files, where sensitive password hashes and aging details are stored.


title: CAVEATS
content:
The <i>passwd</i> command directly modifies sensitive system files (<i>/etc/passwd</i>, <i>/etc/shadow</i>). Incorrect usage can lead to account lockouts or security vulnerabilities. Password complexity rules are enforced by Pluggable Authentication Modules (PAM) and are system-dependent. When deleting a password (<i>-d</i>), the user can log in without providing any password. This is a severe security risk and should only be used for specific, controlled purposes. Changes made by <i>passwd</i> might not immediately apply if the system caches authentication information (e.g., using nscd).


title: <B>PASSWORD AGING</B>
content:
Password aging parameters (minimum days, maximum days, warning days, inactive days) control how often users must change their passwords and how accounts behave after password expiry. These can be managed by the root user using <i>passwd</i> or <i>chage</i>.


title: <B>PERMISSIONS AND SECURITY</B>
content:
The <i>passwd</i> binary typically has the SUID bit set, allowing it to run with root privileges temporarily for modifying password files, even when executed by a non-root user. This is crucial for its functionality but requires careful security considerations.


title: HISTORY
content:
The <i>passwd</i> command has been a fundamental part of Unix-like operating systems since their early days, evolving with security needs. Originally, password hashes were stored directly in <i>/etc/passwd</i>. The introduction of the <i>shadow password suite</i> (and the <i>/etc/shadow</i> file) significantly enhanced security by separating password hashes from publicly readable user information, making brute-force attacks much harder.


title: PARAMETERS
content:
<b><b><I>-d LIST, --delimiters=LIST</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use specified characters from LIST as delimiters, cycling through them for each subsequent column.<br><br><b><b><I>-s, --serial</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Paste lines from a single input file onto a single output line. If multiple files are provided, each file's lines are pasted onto a separate output line sequentially.<br><br><b><b><I>--zero-terminated</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat input and output lines as NUL-terminated strings instead of newline-terminated.<br><br><b><b><I>-</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read input from standard input (stdin) for a file.<br><br>


title: DESCRIPTION
content:
The <b><I>paste</I></b> command in Linux is used to merge corresponding lines from multiple input files, or multiple lines from a single file, into a single output stream. By default, it joins lines using a tab character as a delimiter. This horizontal concatenation contrasts with commands like <b><I>cat</I></b>, which concatenate files vertically. <br><br><b><I>paste</I></b> is particularly useful for combining columnar data from different sources, creating new data sets from existing ones, or preparing data for further processing by other utilities. It can read from standard input if a hyphen (<b><I>-</I></b>) is specified as a filename. The command supports custom delimiters and also offers a 'serial' mode (<b><I>-s</I></b>) for processing lines within a single file or multiple files sequentially onto distinct output lines.


title: CAVEATS
content:
The default delimiter is a tab character. When merging files in parallel (default behavior), <b><I>paste</I></b> outputs lines until all input files are exhausted; shorter files are conceptually padded with empty fields.<br><br>When using <b><I>-s</I></b>, each file's content is joined into a single line before output. If multiple files are provided with <b><I>-s</I></b>, each file's lines are joined into <i>separate</i> output lines.<br><br><b><I>paste</I></b> is primarily for simple horizontal concatenation; for more complex joining or field-based operations, commands like <b><I>join</I></b> or <b><I>awk</I></b> are more suitable.


title: PARALLEL VS. SERIAL PASTING
content:
<I>Parallel Pasting (default)</I>: <br>When invoked as `<b><I>paste file1 file2 file3</I></b>`, it combines the first line of `<b><I>file1</I></b>`, `<b><I>file2</I></b>`, and `<b><I>file3</I></b>` on one output line, then the second line from each, and so on, until all files are exhausted. Shorter files are padded with empty fields.<br><br><I>Serial Pasting (<b><I>-s</I></b> option)</I>: <br>When invoked as `<b><I>paste -s file1 file2</I></b>`, it combines all lines of `<b><I>file1</I></b>` onto a single output line. Then, if `<b><I>file2</I></b>` is specified, it combines all lines of `<b><I>file2</I></b>` onto a *separate* output line, and so on. Each file's content is joined into its own distinct output line.


title: DELIMITER CYCLING
content:
When using the <b><I>-d LIST</I></b> option, <b><I>paste</I></b> cycles through the characters provided in <b><I>LIST</I></b> as delimiters. For example, `<b><I>paste -d ',-_' file1 file2 file3 file4</I></b>` would use `,` between `<b><I>file1</I></b>` and `<b><I>file2</I></b>`, `-` between `<b><I>file2</I></b>` and `<b><I>file3</I></b>`, `_` between `<b><I>file3</I></b>` and `<b><I>file4</I></b>`, and then cycle back to `,` if there were more files.


title: HISTORY
content:
<b><I>paste</I></b> is a fundamental Unix utility that has been part of the operating system since its early versions. It is standardized by POSIX, ensuring its consistent behavior across various Unix-like systems. Its design reflects the Unix philosophy of providing simple, powerful tools that can be combined to perform complex text processing tasks.


title: SEE ALSO
content:
<b><I>cat</I></b>(1), <b><I>cut</I></b>(1), <b><I>join</I></b>(1), <b><I>pr</I></b>(1), <b><I>awk</I></b>(1)


title: SYNOPSIS
content:
<b>pastel</b> [<i>OPTIONS</i>] <i>SUBCOMMAND</i> [<i>ARGS</i>...] <br><br><i>pastel</i> operates via subcommands, each performing a specific color-related task. <br><br>Common invocation examples:<br><b>pastel color</b> <i>COLOR</i> [...]<br><b>pastel convert</b> <i>COLOR</i><br><b>pastel gradient</b> <i>COLOR1</i> <i>COLOR2</i> [<i>STEPS</i>]<br><b>pastel pick</b><br><b>pastel random</b> [<i>N</i>]<br><b>pastel lighten</b> <i>FACTOR</i> <i>COLOR</i> [...]<br><b>pastel blend</b> <i>COLOR1</i> <i>COLOR2</i>


title: PARAMETERS
content:
<b><b>--output</b> <i>&lt;FORMAT&gt;</i> | <b>-o</b> <i>&lt;FORMAT&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the desired output format for colors (e.g., <i>hex</i>, <i>rgb</i>, <i>hsl</i>, <i>lch</i>, <i>ansi</i>). Available with many subcommands.<br><br><b><b>--raw</b> | <b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs raw color values without ANSI escape codes, comments, or additional formatting. Useful for scripting.<br><br><b><b>--rgb-space</b> <i>&lt;SPACE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the RGB color space for certain operations (e.g., <i>srgb</i>, <i>display-p3</i>). Affects how RGB values are interpreted.<br><br><b><b>--lightness-space</b> <i>&lt;SPACE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the lightness space (e.g., <i>lch</i>, <i>oklch</i>, <i>lab</i>, <i>oklab</i>) for operations like <b>lighten</b> or <b>darken</b>. Different spaces perceive lightness differently.<br><br><b><b>--hue-space</b> <i>&lt;SPACE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Determines the hue space (e.g., <i>lch</i>, <i>oklch</i>, <i>hsl</i>, <i>hwb</i>) for operations such as <b>rotate</b>. Influences how hue adjustments are made.<br><br><b><b>--seed</b> <i>&lt;VALUE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a seed for pseudo-random number generation, ensuring reproducible results for commands like <b>random</b>.<br><br>


title: DESCRIPTION
content:
<i>pastel</i> is a versatile command-line utility for working with colors. It allows users to parse, convert, generate, and manipulate colors directly from the terminal. Supporting various color spaces like RGB, HSL, LCh, Lab, OkLab, and OkLCh, <i>pastel</i> can read colors from input arguments or standard input. Its extensive set of subcommands enables operations such as creating gradients, blending colors, finding distinct colors, random color generation, and adjusting saturation, lightness, and hue. It's an indispensable tool for developers, designers, and anyone needing to interact with color data in a scripting or command-line environment, providing precise control and a wide range of output formats including hexadecimal, RGB, HSL, and ANSI escape codes for terminal display.


title: CAVEATS
content:
<i>pastel</i>'s extensive subcommand structure, while powerful, can require some initial learning to navigate its many functionalities and specific options. Accurate color representation in the terminal depends heavily on the terminal's capabilities and its support for true color (24-bit) ANSI escape codes.


title: PIPING AND SCRIPTING CAPABILITIES
content:
<i>pastel</i> is designed to integrate seamlessly into command-line workflows. It can read colors from standard input and output results to standard output, making it highly suitable for piping with other utilities like <i>grep</i>, <i>awk</i>, or <i>sed</i>. This allows for complex color manipulation and processing within shell scripts, automating tasks like generating color palettes, adjusting themes, or dynamically coloring terminal output.


title: HISTORY
content:
<i>pastel</i> was created by Daniel P. Luppi (<i>@sharkdp</i>), known for developing other popular command-line utilities like <i>bat</i> and <i>fd</i>. Written in Rust, it debuted around late 2019/early 2020, aiming to provide a robust and feature-rich color manipulation tool with strong support for modern color spaces and reliable parsing, a gap previously present in many CLI ecosystems. Its development has been active, continually adding new subcommands and improving color handling.


title: PARAMETERS
content:
<b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message and exit for <b>pasuspender</b> itself.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show version information and exit for <b>pasuspender</b> itself.<br><br><b>--</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A mandatory separator indicating that all subsequent arguments are for the <i>PROGRAM</i> to be executed, not for <b>pasuspender</b> itself.<br><br><b>PROGRAM</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The command or script to execute while PulseAudio is suspended.<br><br><b>ARGUMENTS...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional arguments to pass to the <i>PROGRAM</i>.<br><br>


title: DESCRIPTION
content:
The <b>pasuspender</b> command is a utility designed to temporarily suspend the PulseAudio sound server while a specified program runs. This is particularly useful for applications that require direct access to the audio hardware, bypassing PulseAudio's control.<br><br>When <b>pasuspender</b> executes, it instructs PulseAudio to suspend all its active sinks and sources, thereby releasing control of the sound devices. This allows the wrapped <i>PROGRAM</i> to utilize audio hardware directly, often through ALSA or other low-level interfaces, without interference from PulseAudio. Once the <i>PROGRAM</i> exits, <b>pasuspender</b> automatically signals PulseAudio to resume its normal operation, restoring its control over the audio devices. This ensures compatibility for legacy applications, games, or professional audio software that may not integrate well with PulseAudio or require exclusive hardware access for optimal performance.


title: CAVEATS
content:
Requires PulseAudio to be running for <b>pasuspender</b> to have any effect.<br>Applications run via <b>pasuspender</b> will not be able to use PulseAudio features (e.g., routing, volume control) during their execution.<br>It releases <i>all</i> PulseAudio devices; other running applications that depend on PulseAudio will lose audio during the suspension.


title: TYPICAL USE CASE
content:
Often used for running older games or professional audio software (like JACK, Ardour, or specific ALSA-only utilities) that require direct, low-latency access to sound hardware, which might otherwise conflict with PulseAudio's abstraction layer. It provides a simple, command-line solution to temporarily resolve such conflicts without manually stopping and restarting the PulseAudio daemon.


title: HISTORY
content:
Introduced as part of the PulseAudio suite, <b>pasuspender</b> addresses the common need for applications to temporarily bypass the sound server. Its development reflects PulseAudio's evolution as a default sound server in many Linux distributions, providing a compatibility layer for programs that might not be designed to interact with a sound daemon or require exclusive hardware access.


title: SYNOPSIS
content:
<b>patator</b> [<i>global_options</i>] <i><module></i> [<i>module_specific_options</i>]<br><br><i>Examples:</i><br><b>patator</b> <i>ssh_login</i> -u <i>username</i> -P <i>passwords.txt</i> --scan-ports <i>22,2222</i><br><b>patator</b> <i>http_fuzz</i> url=<i>http://example.com/FUZZ</i> <i>0=./wordlist.txt</i> --valid-code <i>200</i>


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's help message and exit. Can be used with modules (e.g., <b>patator</b> <i>ssh_login</i> <b>-h</b>) to see module-specific options.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increase verbosity level. Use multiple times for more detailed output (e.g., <b>-vvv</b>).<br><br><b>-x, --execute</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Execute system commands (e.g., payload generation from external scripts).<br><br><b>--output <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save the output to a specified file instead of printing to standard output.<br><br><b>--delay <i><seconds></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a delay in seconds between each request to avoid overwhelming the target or detection.<br><br><b>--concurrency <i><num></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the number of concurrent connections or threads to use for attacks. Increasing this can speed up attacks but also increase network load and detection risk.<br><br><b>--proxy <i><type>://<host>:<port></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Route all traffic through a specified proxy (e.g., SOCKS5, HTTP).<br><br><b>--user-agent <i><string></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a custom User-Agent header for HTTP-based attacks.<br><br><b>--timeout <i><seconds></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum time in seconds to wait for a server response.<br><br><b>--stop-on-success</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stop the attack immediately after finding the first valid combination of credentials or successful payload.<br><br><b>--ignore-ssl-certs</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore SSL/TLS certificate validation errors, useful for self-signed certificates or specific test environments.<br><br><b>--follow-redirects</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically follow HTTP redirects during web-based attacks.<br><br><b><i><module_specific_options></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Each module (e.g., <i>ssh_login</i>, <i>http_fuzz</i>) has its own set of specific options for configuring the attack (e.g., target, usernames, passwords, custom headers, success/failure indicators).<br><br>


title: DESCRIPTION
content:
<i><b>Patator</b></i> is a Python-based, multi-purpose brute-forcer and vulnerability scanner. It's designed to be flexible and modular, allowing users to perform various types of attacks, primarily password guessing, but also enumeration and fuzzing against a wide range of network protocols and services.<br><br>It supports numerous modules for services like HTTP, HTTPS, FTP, SSH, Telnet, SMTP, POP3, IMAP, SQL, SMB, and more. <i>Patator</i> can utilize different attack methods, including dictionary attacks, brute-force attacks, and hybrid attacks. Its strength lies in its ability to generate highly customizable payloads from files, ranges, or command outputs, and its support for proxies, concurrency, and specific network configurations. It is a powerful tool for penetration testers and security professionals to test the robustness of authentication mechanisms.


title: CAVEATS
content:
<i>Patator</i> is a powerful tool designed for legitimate security testing. Misuse of this tool against systems for which you do not have explicit authorization is illegal and unethical. Using it can generate significant network traffic, potentially trigger intrusion detection/prevention systems (IDS/IPS), and may cause performance degradation or denial-of-service on target systems if not used carefully.<br><br>Always ensure you have proper authorization and understand the potential impact before using <i>Patator</i> in any environment.


title: MODULES
content:
<i><b>Patator</b></i> operates based on a modular architecture, where each module corresponds to a specific service or attack type. Examples include <i>ssh_login</i> (for SSH authentication), <i>ftp_login</i> (for FTP authentication), <i>http_fuzz</i> (for web application fuzzing), <i>smtp_enum</i> (for SMTP user enumeration), and many others. Users select a module based on the target service they wish to test.


title: PAYLOADS
content:
Payloads are the actual values <i>Patator</i> iterates through during an attack (e.g., usernames, passwords, directory names). <i>Patator</i> offers flexible payload generation:<br><i>FILE[N]</i>: Read payloads from a file (e.g., <i>FILE0=usernames.txt</i>).<br><i>RANGE[N]</i>: Generate payloads from a numerical or character range (e.g., <i>RANGE0=0-999</i>).<br><i>COMMAND[N]</i>: Generate payloads dynamically from the output of an external command (e.g., <i>COMMAND0='cat /etc/passwd | cut -d: -f1'</i>).<br>Payloads can be combined to form complex attack vectors.


title: HISTORY
content:
<i><b>Patator</b></i> was developed by Laurent Gaffié, a security researcher, and first released around 2012-2013. It was created with the aim of providing a more flexible and modular brute-forcing framework compared to existing tools at the time. Written in Python, it quickly gained popularity within the penetration testing and ethical hacking communities due to its extensibility, support for a wide array of protocols, and powerful payload generation capabilities. While its core functionality remains robust, its development and maintenance may vary over time depending on the contributor activity.


title: SYNOPSIS
content:
<b>patch</b> [<i>options</i>] [<i>originalfile</i> [<i>patchfile</i>]]<br>Common usage:<br><b>patch</b> [<i>options</i>] < <i>patchfile</i>


title: PARAMETERS
content:
<b><b>-p</b> <i>NUM</i>, <b>--strip=</b><i>NUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip <i>NUM</i> leading slash-separated components from pathnames in the patch file. This is crucial when the patch file contains paths relative to a different root than where you're applying the patch.<br><br><b><b>-i</b> <i>FILE</i>, <b>--input=</b><i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read the patch from <i>FILE</i> instead of standard input.<br><br><b><b>-o</b> <i>FILE</i>, <b>--output=</b><i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the output to <i>FILE</i> instead of modifying the original file in place.<br><br><b><b>-R</b>, <b>--reverse</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Apply the patch in reverse, effectively undoing changes.<br><br><b><b>-E</b>, <b>--remove-empty-files</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove any output files that become empty after patching.<br><br><b><b>-N</b>, <b>--forward</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore patches that appear to be already applied.<br><br><b><b>-F</b> <i>NUM</i>, <b>--fuzz=</b><i>NUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of lines that can be ignored at the start and end of a hunk when looking for a place to install a patch. Defaults to 2.<br><br><b><b>-t</b>, <b>--batch</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not ask any questions; skip files that do not match and exit if the patch file is not well-formed.<br><br><b><b>-d</b> <i>DIR</i>, <b>--directory=</b><i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Change the current directory to <i>DIR</i> before looking for files.<br><br><b><b>-l</b>, <b>--ignore-whitespace</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore white space differences when comparing.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the version number of <i>patch</i>.<br><br>


title: DESCRIPTION
content:
The <i>patch</i> command applies changes to text files, typically source code. It reads instructions from a <i>diff</i> file (also known as a "patch file"), which contains a list of differences between an original file and a modified file. <i>Patch</i> then modifies the original file(s) according to these instructions. It's a fundamental utility in Unix-like systems, widely used in software development for distributing bug fixes, new features, or updates without needing to distribute entire new versions of files. Common <i>diff</i> formats supported include unified, context, and normal diffs. When <i>patch</i> cannot apply a change cleanly (e.g., if the original file has been modified in the same area), it will create "reject" files (with a <i>.rej</i> extension) indicating the failed portions. Its ability to strip leading directory components from filenames within the patch file makes it highly flexible for applying patches generated from different directory structures.


title: CAVEATS
content:
<b>Merge Conflicts</b>: <i>Patch</i> is a line-oriented tool and does not perform sophisticated three-way merges. If the context surrounding a change in the original file has been modified, <i>patch</i> might fail to apply the hunk and create a <i>.rej</i> (reject) file, which requires manual resolution.<br><b>File Naming</b>: The patch file must correctly identify the original file. If the file paths in the patch do not match the local file system (even after stripping leading components), <i>patch</i> will fail.<br><b>No Rollback</b>: Unless you keep a backup of the original file, there's no automatic rollback mechanism if a patch causes issues. Using version control is highly recommended.<br><b>Whitespace Sensitivity</b>: While `<b>-l</b>` can help, <i>patch</i> can be sensitive to differing whitespace styles (tabs vs. spaces, line endings) between the patch and the target file.


title: TYPICAL WORKFLOW
content:
The common workflow involves first creating a patch file using `<b>diff</b>` (e.g., `<b>diff -u original_file modified_file > my_changes.patch</b>`) and then applying it with `<b>patch</b>` (e.g., `<b>patch -p0 < my_changes.patch</b>` or `<b>patch -p1 < my_changes.patch</b>` if the patch paths include a base directory).


title: UNDERSTANDING <I>-P</I> (STRIP)
content:
The `<b>-p</b> <i>NUM</i>` option tells <i>patch</i> how many leading directory components to ignore from the filenames listed in the patch file. If a patch file lists `<i>a/src/main.c</i>` and your `<i>src/main.c</i>` is in the current directory, you'd use `<b>-p1</b>` to strip `<i>a/</i>`. If the patch lists `<i>src/main.c</i>` and you are in the parent directory of `<i>src/</i>`, you'd use `<b>-p0</b>`.


title: REJECT FILES (<I>.REJ</I>)
content:
When <i>patch</i> encounters a hunk (a block of changes) it cannot apply cleanly, it skips that hunk and writes the failed portion to a "reject" file, typically named by adding <i>.rej</i> to the original filename (e.g., `<i>main.c.rej</i>`). These files contain the original line numbers from the patch and the content of the failed hunk, requiring manual intervention to apply the changes.


title: HISTORY
content:
The <i>patch</i> utility was originally written by <b>Larry Wall</b> (the creator of Perl) in 1985. It quickly became a standard and indispensable tool in Unix-like operating systems.<br>Before the widespread adoption of distributed version control systems like Git and Mercurial, <i>patch</i> was the primary method for sharing and applying changes to source code in open-source projects. Developers would generate <i>diff</i> files and email them to maintainers or upload them to bug trackers.<br>Despite the rise of modern VCS, <i>patch</i> remains relevant for applying simple fixes, handling patches generated outside of a VCS, or when working in environments where full VCS installations are not practical. Its robust handling of various <i>diff</i> formats contributed to its enduring utility.


title: SYNOPSIS
content:
<b>pwclient</b> [<I>GLOBAL_OPTIONS</I>] <I>COMMAND</I> [<I>COMMAND_OPTIONS</I>] [<I>ARGUMENTS</I>]<br>Example: <b>pwclient list --project kernel --state new</b><br>Example: <b>pwclient download 12345 --output-dir ./patches</b>


title: PARAMETERS
content:
<b><I>GLOBAL_OPTIONS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Options that apply to all <b>pwclient</b> commands and usually precede the command itself. Common global options include specifying the Patchwork instance URL or an API token.<br><br><b><b>--url</b> <I>URL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the base URL of the Patchwork instance to connect to. Overrides any configured default URL.<br><br><b><b>--token</b> <I>TOKEN</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the API authentication token for accessing the Patchwork instance. Required for most write operations or accessing private instances.<br><br><b><b>--project</b> <I>PROJECT_NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default project name to operate on for commands that support a project filter, such as <b>list</b> or <b>series</b>.<br><br><b><b>--no-verify</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables SSL certificate verification when connecting to the Patchwork instance. Use with caution.<br><br><b><I>COMMAND</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific operation to perform. Examples include <b>list</b> (to show patches), <b>show</b> (to display details of a specific patch), <b>download</b> (to fetch patch files), <b>apply</b> (to apply patches locally), <b>series</b> (to manage patch series), and <b>config</b> (to manage client configuration).<br><br><b><I>COMMAND_OPTIONS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Options specific to the chosen <b>COMMAND</b>. These vary widely depending on the command. For instance, <b>list</b> may have <b>--state</b>, <b>--submitter</b>, or <b>--limit</b> options.<br><br><b><I>ARGUMENTS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Positional arguments required by the <b>COMMAND</b>. For example, <b>show</b> and <b>download</b> commands typically require a patch or series <I>ID</I> as an argument.<br><br>


title: DESCRIPTION
content:
<b>pwclient</b>, often simply invoked as <b>pw</b>, is the official command-line interface for interacting with a Patchwork instance. Patchwork is a powerful, web-based system designed for tracking and managing software patches, widely used in large-scale open-source projects like the Linux kernel for collaborative development.<br><br>The <b>pwclient</b> utility empowers developers and maintainers to perform various patch-related operations directly from their terminal, eliminating the need to constantly navigate the web interface. It allows users to browse available patches, filter them by state or submitter, download individual patches or entire patch series, apply them locally, and check their status.<br><br>By providing a programmatic interface, <b>pwclient</b> streamlines common development workflows, such as fetching pending patches for review, automating patch application for testing, or quickly surveying the state of contributions to a project. It acts as a bridge between the local development environment and the remote Patchwork server, enhancing productivity in distributed development teams.


title: CAVEATS
content:
<b>pwclient</b> is not a standard utility found in most Linux distributions by default. It typically requires manual installation, often via Python's <b>pip</b> package manager (e.g., `pip install patchwork-cli`).<br><br>Its functionality is entirely dependent on a running Patchwork web instance and the specific API version it exposes. Compatibility issues might arise between older <b>pwclient</b> versions and newer Patchwork server versions, or vice versa. Proper configuration, including the Patchwork URL and an API token (for authenticated operations), is crucial for its operation.


title: CONFIGURATION
content:
<b>pwclient</b> typically stores its configuration in a file, often located at <I>~/.config/pwclient/config.ini</I>. This file allows users to set default values for common options like the Patchwork instance URL (<I>url</I>) and API token (<I>token</I>), simplifying command invocation by not requiring these to be specified every time. The <b>pwclient config</b> command can be used to manage these settings directly.


title: AUTHENTICATION
content:
For most interactive or modifying operations, especially when connecting to private Patchwork instances or performing actions like submitting patches, <b>pwclient</b> requires authentication. This is typically done using an API token, which can be generated from the user's profile settings within the Patchwork web interface. The token can be passed via the <b>--token</b> global option or configured in the <I>config.ini</I> file.


title: EXTENSIBILITY
content:
As a Python-based tool, <b>pwclient</b> can often be extended or scripted by developers to automate complex patch management tasks beyond its built-in commands. Its integration with Python's ecosystem allows for custom scripts that leverage its capabilities alongside other development tools.


title: HISTORY
content:
The <b>pwclient</b> command-line utility emerged as a crucial component of the broader Patchwork project, an initiative to provide a robust, web-based system for managing and tracking software patches. Its development began to address the need for a programmatic interface to interact with the Patchwork server, complementing the web user interface. This allowed developers to integrate patch management directly into their scripting and automation workflows, which is particularly vital for large open-source projects like the Linux kernel, where thousands of patches are submitted, reviewed, and applied. The <b>pwclient</b>'s evolution closely mirrors the feature enhancements and API changes of the Patchwork platform itself, aiming to provide seamless integration and efficient patch lifecycle management from the command line.


title: PARAMETERS
content:
<b><b>-p</b>, <b>--portability</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks the path for portability according to the <b>POSIX.1-2001</b> standard. This imposes stricter rules on characters and length, such as limiting characters to the portable filename character set.<br><br><b><i>PATHNAME</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more pathnames to be checked for validity and portability. Multiple pathnames should be separated by spaces.<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;Outputs version information and exits.<br><br>


title: DESCRIPTION
content:
<i>pathchk</i> is a utility that checks the validity and portability of one or more pathnames. It assesses whether a given path conforms to file system naming conventions and length restrictions, and if it's portable across different systems, specifically according to <b>POSIX.1-2001</b> standards when the <b>-p</b> option is used. Without <b>-p</b>, it checks against the underlying operating system's rules.<br><br>The command examines aspects like character sets, maximum component length (filename or directory name), and total path length. It is crucial for developing portable shell scripts or applications that create files and directories, ensuring they will function correctly on various Unix-like systems. If all specified pathnames are valid and portable, <i>pathchk</i> exits silently with a status of zero. Otherwise, it prints diagnostic messages to standard error and exits with a non-zero status.


title: CAVEATS
content:
<i>pathchk</i> only performs a <b>syntactic check</b> of the pathname based on character set and length constraints. It does <b>not</b> check if the path actually exists on the filesystem, if the user has permissions to create the path, or if the path is otherwise semantically valid in the current filesystem context. The definition of 'portable' depends heavily on the presence of the <b>-p</b> option; without it, checks are specific to the local system's limitations.


title: EXIT STATUS
content:
Returns <b>0</b> if all specified pathnames are valid and portable according to the checks performed. Returns a <b>non-zero</b> value if any pathname is found to be invalid or non-portable.


title: STANDARD OUTPUT/ERROR
content:
On success (exit status 0), <i>pathchk</i> produces <b>no output</b> to standard output or standard error. On failure (non-zero exit status), diagnostic error messages describing the issues are printed to <b>standard error</b>.


title: HISTORY
content:
The <i>pathchk</i> command is part of the <b>POSIX.1-2001</b> standard, which specifies its behavior for checking pathname validity and portability. It is widely implemented across Unix-like operating systems, most notably as part of the <b>GNU Coreutils</b> package, ensuring its availability and consistent behavior on Linux distributions and other systems that adopt GNU utilities. Its inclusion in POSIX underscores its importance for writing robust and cross-platform shell scripts and applications.


title: SYNOPSIS
content:
<b>patool</b> [<i>OPTIONS</i>] <i>COMMAND</i> [<i>ARCHIVE_OR_FILES...</i>]<br><br>Common commands:<br><b>patool</b> <b>extract</b> [<i>OPTIONS</i>] <i>&lt;ARCHIVE&gt;</i>: Extracts files from an archive.<br><b>patool</b> <b>create</b> [<i>OPTIONS</i>] <i>&lt;ARCHIVE&gt; &lt;FILES_OR_DIR...&gt;</i>: Creates an archive from files or directories.<br><b>patool</b> <b>list</b> [<i>OPTIONS</i>] <i>&lt;ARCHIVE&gt;</i>: Lists the contents of an archive.<br><b>patool</b> <b>test</b> [<i>OPTIONS</i>] <i>&lt;ARCHIVE&gt;</i>: Tests the integrity of an archive.<br><b>patool</b> <b>compare</b> [<i>OPTIONS</i>] <i>&lt;ARCHIVE1&gt; &lt;ARCHIVE2&gt;</i>: Compares the contents of two archives.


title: PARAMETERS
content:
<b>-o <DIR>, --outdir=<DIR></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output directory for extraction. If not specified, files are extracted to the current directory.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increase verbosity level, showing more details about the operation.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a trial run with no changes made to the system. Useful for testing commands.<br><br><b>--force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overwrite existing files without prompting during extraction or creation.<br><br><b>--path=<PATH_IN_ARCHIVE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a path inside the archive to operate on (e.g., extract only a specific folder).<br><br><b>--recurse</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recurse into subdirectories when creating an archive (for supported formats).<br><br><b>--flat</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extract all files into a single flat directory, ignoring the original directory structure within the archive.<br><br><b>--program=<PROGRAM_PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly specify the path to the backend program to use for the operation (e.g., '/usr/bin/tar').<br><br><b>--assume-type=<TYPE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force <i>patool</i> to assume a specific archive type (e.g., 'zip', 'tar.gz'), overriding automatic detection.<br><br><b>--compress-program=<PROG></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a custom program to use for compression of specific archive types (e.g., for .tar.gz, use <i>gzip</i>).<br><br><b>--decompress-program=<PROG></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a custom program to use for decompression of specific archive types (e.g., for .tar.gz, use <i>gunzip</i>).<br><br><b>--do-not-delete-input</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent <i>patool</i> from deleting input archives after a successful extraction or creation operation.<br><br>


title: DESCRIPTION
content:
<i>patool</i> is a Python-based command-line tool that provides a unified interface for managing various archive formats. Instead of requiring users to remember specific commands and options for <i>tar</i>, <i>zip</i>, <i>rar</i>, <i>7z</i>, <i>gzip</i>, <i>bzip2</i>, <i>xz</i>, and many others, <i>patool</i> automatically detects the archive type and utilizes the appropriate backend program to perform the requested operation. This greatly simplifies tasks like creating, extracting, listing, testing, and comparing archives across different formats.<br><br>It aims to make archive management portable and user-friendly by abstracting away the complexities of diverse archiving utilities, ensuring a consistent user experience regardless of the underlying archive technology. <i>patool</i> itself does not contain the compression/decompression algorithms; it acts as a wrapper around the actual tools that must be installed on the system.


title: CAVEATS
content:
<i>patool</i> relies heavily on the availability of underlying archive tools (e.g., <i>tar</i>, <i>zip</i>, <i>unrar</i>, <i>p7zip</i>) on the system. If the required backend tool for a specific archive format is not installed, <i>patool</i> will not be able to process that format. While <i>patool</i> simplifies usage, it might not expose every fine-grained option available in the individual backend tools, limiting advanced or very specific operations. Its Python-based nature and external calls can sometimes result in slower performance compared to directly invoking native archiving utilities for very large operations.


title: SUPPORTED FORMATS
content:
<i>patool</i> supports a wide range of archive formats including, but not limited to, <i>.zip</i>, <i>.tar</i>, <i>.tar.gz</i>, <i>.tar.bz2</i>, <i>.tar.xz</i>, <i>.7z</i>, <i>.rar</i>, <i>.iso</i>, <i>.dmg</i>, <i>.rpm</i>, <i>.deb</i>, <i>.exe</i> (self-extracting archives), and many others, provided the corresponding backend utility is installed on the system.


title: DEPENDENCIES
content:
<i>patool</i> itself is a Python script, but its functionality is entirely dependent on external, command-line archiving programs installed on the system. For example, to handle <i>.zip</i> files, you need <i>zip</i> and <i>unzip</i>; for <i>.rar</i>, you need <i>unrar</i>; for <i>.7z</i>, <i>p7zip</i>; and for <i>.tar.gz</i>, <i>tar</i> and <i>gzip</i>. Users must ensure these tools are present in their system's PATH for <i>patool</i> to function correctly.


title: HISTORY
content:
<i>patool</i> was created by Christoph Gohlke as a cross-platform solution to standardize archive management across different operating systems and numerous archive formats. Developed in Python, its primary motivation was to provide a simple, unified command-line interface that abstracts the complexities of individual archiving utilities. Its development focused on ensuring portability and ease of use, allowing users to perform common archive operations without needing to know the specific syntax or existence of various backend tools.


title: SYNOPSIS
content:
<i>pax</i> [<b>-options</b>] [<i>file...</i>]<br><i>pax</i> <b>-r</b> [<b>-options</b>] [<i>pattern...</i>]<br><i>pax</i> <b>-w</b> [<b>-options</b>] [<i>file...</i>]<br><i>pax</i> <b>-rw</b> [<b>-options</b>] [<i>file...</i>] <i>directory</i>


title: PARAMETERS
content:
<b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read from the archive (extract or list mode). If no file operands are given, it extracts all files; otherwise, it extracts files matching the specified patterns.<br><br><b><b>-w</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write to the archive (archive mode). If no file operands are given, <i>pax</i> reads from standard input; otherwise, it archives the specified files.<br><br><b><b>-rw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Copy files to a destination directory. This mode copies the file hierarchy from the source <i>file(s)</i> to the specified <i>directory</i>, effectively acting like an enhanced <b>cp</b>.<br><br><b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Append to the archive. This option can only be used with <b>-w</b> mode and requires a seekable archive (e.g., a regular file).<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create intermediate directories as needed during extraction or copying.<br><br><b><b>-f </b><i>archive</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the path to the archive file. If omitted, <i>pax</i> uses standard input (for reading) or standard output (for writing).<br><br><b><b>-i</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interactively rename files. For each file, <i>pax</i> prompts the user for a new name or to skip the file. Useful for selective extraction or when managing name conflicts.<br><br><b><b>-k</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not overwrite existing files. When extracting or copying, if a file with the same name already exists, it is not overwritten.<br><br><b><b>-p </b><i>string</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserve specified file attributes during extraction or copying. Common characters in <i>string</i> include: <b>e</b> (everything: mode, access time, modification time, owner, group, extended attributes), <b>m</b> (modification time), <b>o</b> (owner and group), <b>a</b> (access time).<br><br><b><b>-s </b><i>replstr</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modify file or archive member names using a substitution expression similar to <b>sed</b>. Example: <b>-s '/old/new/'</b>.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verbose output. List files being processed by name, useful for monitoring progress and debugging.<br><br><b><b>-x </b><i>format</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the archive format to use when writing. Common values include <b>cpio</b> (old cpio format), <b>ustar</b> (old tar format), and <b>pax</b> (the POSIX.1-2001 format, also known as POSIX tar).<br><br><b><b>-X</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not cross device boundaries. When archiving or copying, <i>pax</i> will not descend into directories on different file systems.<br><br>


title: DESCRIPTION
content:
<i>pax</i> (Portable Archive eXchange) is a powerful and versatile command-line utility for archiving, extracting, listing, and copying files. It was standardized by POSIX.1-2001 to unify and supersede the functionalities of both <b>tar</b> and <b>cpio</b>. <br><br><i>pax</i> can read and write archives in various formats, including both <b>tar</b> (USTAR, POSIX.1-2001) and <b>cpio</b> (old and new). This flexibility makes it an excellent tool for ensuring portability of archives across different Unix-like systems. It operates in four primary modes: list, extract, archive, and copy, determined by the presence or absence of the <b>-r</b> (read) and <b>-w</b> (write) options.


title: CAVEATS
content:
While <i>pax</i> is a powerful and POSIX-compliant utility, its rich set of options can make it complex to master. Users often need to consult its man page frequently. <br><br>Unlike some versions of <b>tar</b> and <b>cpio</b>, <i>pax</i> does not natively support built-in compression (e.g., gzip or bzip2). Compression is typically achieved by piping the output of <i>pax</i> to a compression utility like <b>gzip</b> or <b>bzip2</b>, and decompressing the input accordingly.


title: MODES OF OPERATION
content:
<i>pax</i> operates in four distinct modes:<br>1. <b>List Mode</b> (no <b>-r</b> or <b>-w</b>): Lists the contents of an archive.<br>2. <b>Extract Mode</b> (<b>-r</b>): Reads an archive and extracts its contents to the current directory.<br>3. <b>Archive Mode</b> (<b>-w</b>): Creates an archive from specified files or standard input.<br>4. <b>Copy Mode</b> (<b>-rw</b>): Copies a file hierarchy from one location to another, typically to a new directory.


title: ARCHIVE FORMATS
content:
<i>pax</i> supports reading and writing to several archive formats, making it highly interoperable:<br><b>cpio</b>: Reads/writes old ASCII, old binary, and new ASCII cpio formats.<br><b>tar</b>: Reads/writes old tar (pre-USTAR) and USTAR (POSIX.1-1988) formats.<br><b>pax</b>: The default POSIX.1-2001 format, which is an extension of USTAR, supporting larger files, longer pathnames, and extended attributes.


title: HISTORY
content:
<i>pax</i> was developed as part of the POSIX.2 standard (IEEE Std 1003.2-1992) to provide a unified archive utility that could handle the various incompatible formats of both <b>tar</b> and <b>cpio</b>. Its goal was to address portability issues and inconsistencies inherent in the existing archiving tools, offering a single, standardized interface for file archiving and exchange across different Unix-like systems. It's designed to be forward and backward compatible with a wide range of archive formats.


title: PARAMETERS
content:
<b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help message and exit.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output version information and exit.<br><br>


title: DESCRIPTION
content:
The <b>pax11publish</b> command is a specialized utility designed to work within a <I>PaX</I> or <I>grsecurity</I> hardened Linux environment. Its primary purpose is to publish critical <I>X11</I> display and related environment variables (like <I>$DISPLAY</I>) into a shared memory segment.<br><br>This information is then accessible to other PaX-related tools, such as <I>paxrat</I>, which might need to connect to the X server from a highly restricted or chrooted environment. By providing a secure and controlled method for sharing X11 session details, <I>pax11publish</I> helps in maintaining the integrity and security of applications running under PaX protections, especially those interacting with the graphical user interface.


title: CAVEATS
content:
<b>pax11publish</b> is a highly specialized command primarily found in systems utilizing the <I>PaX</I> or <I>grsecurity</I> security enhancements for the Linux kernel. It is not a standard utility on most general-purpose Linux distributions.<br><br>Its functionality is dependent on the presence of a PaX-enabled kernel and related user-space tools. Without this specific security infrastructure, the command is likely to be absent or non-functional.


title: INTERACTION WITH PAXRAT
content:
The primary consumer of information published by <b>pax11publish</b> is the <I>paxrat</I> utility. <I>paxrat</I> is designed to run applications in a highly restricted environment, often with chroot and other security measures. For these applications to interact with the X server, they need access to the <I>$DISPLAY</I> variable and potentially other X11-related environment variables. <b>pax11publish</b> provides this information via a shared memory segment, allowing <I>paxrat</I> to securely transfer it to the sandboxed application.


title: SHARED MEMORY SEGMENT
content:
<b>pax11publish</b> writes the X11 environment variables (e.g., <I>$DISPLAY</I>, <I>$XAUTHORITY</I>) to a specific shared memory segment. The name or ID of this segment is typically predefined or configured by the PaX/grsecurity setup. This allows other PaX tools with appropriate permissions to read this information without relying on less secure methods like passing environment variables directly, which might be stripped in hardened environments.


title: HISTORY
content:
The <I>PaX</I> project was initiated in 2000 as a pioneering effort to provide memory protection features for Linux, including Address Space Layout Randomization (ASLR), Non-Executable (NX) pages, and other exploit mitigation techniques. <I>grsecurity</I> later integrated many of these PaX features, along with additional hardening.<br><br><b>pax11publish</b> emerged as a utility within this ecosystem to address the specific challenge of securely sharing X11 session details with highly restricted processes (like those run by <I>paxrat</I>) without compromising the overall system's security posture. Its development is tied to the evolution of the PaX/grsecurity project and its focus on fine-grained application hardening.


title: SYNOPSIS
content:
<br><i>List Archive Contents:</i><br><b>pax</b> [ <i>options</i> ] [ <i>pattern ...</i> ]<br><i>Extract Files from Archive:</i><br><b>pax</b> -r [ <i>options</i> ] [ <i>pattern ...</i> ]<br><i>Create New Archive:</i><br><b>pax</b> -w [ <i>options</i> ] [ <i>pathname ...</i> ]<br><i>Copy Files and Directories:</i><br><b>pax</b> -rw [ <i>options</i> ] [ <i>pathname ...</i> ]


title: PARAMETERS
content:
<b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads files from the archive. This activates the 'extract' mode.<br><br><b><b>-w</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes files to an archive. This activates the 'create' mode.<br><br><b><b>-rw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads and writes files, enabling 'copy' mode. Files are copied from the source pathnames to the destination pathnames.<br><br><b><b>-f</b> <i>archive</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the archive file. If omitted, <b>pax</b> reads from standard input or writes to standard output.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verbose output. Displays a list of pathnames processed and additional information.<br><br><b><b>-x</b> <i>format</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output archive format. Common formats include <i>cpio</i>, <i>tar</i>, <i>ustar</i>, and <i>pax</i>. Default varies by system.<br><br><b><b>-s</b> <i>replstr</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modifies filenames using a regular expression substitution string, similar to the 's' command in <b>sed</b>. Example: <b>-s '/old/new/'</b>.<br><br><b><b>-p</b> <i>string</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserves file properties during extraction or copying. Common values include 'a' (all attributes), 'm' (modification times), 'o' (ownership), 'p' (permissions). Multiple values can be combined, e.g., <b>-p amp</b>.<br><br><b><b>-L</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Follows symbolic links. If a symbolic link is encountered, <b>pax</b> archives or copies the file pointed to by the link, rather than the link itself.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates intermediate directories for extracted files if they do not already exist.<br><br><b><b>-k</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents overwriting existing files when extracting from an archive.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects the first archive member that matches each pattern parameter. No more than one archive member is matched for each pattern.<br><br>


title: DESCRIPTION
content:
<br><b>pax</b> (Portable Archive eXchange) is a versatile command-line utility specified by POSIX, designed for creating, reading, and writing archive files. It aims to unify the functionalities of both the traditional <b>tar</b> and <b>cpio</b> commands, providing a single, consistent interface for archive operations.<br><br>With <b>pax</b>, users can list the contents of an archive, extract files from an archive, create new archives, or even copy files and directory hierarchies directly from one location to another, much like <b>cp</b> or <b>cpio</b>. It supports various archive formats, including its own <b>pax</b> format, as well as <b>ustar</b> (a common <b>tar</b> variant) and <b>cpio</b>. This multi-format support enhances its portability and interoperability across different Unix-like systems.<br><br>Its strength lies in its standardization and ability to handle different archive types, making it a robust choice for managing file backups and transfers in a portable manner.


title: CAVEATS
content:
While <b>pax</b> offers powerful and standardized archiving capabilities, its extensive options and multiple operational modes can make its usage complex for beginners. Interoperability with non-standard <b>tar</b> or <b>cpio</b> extensions might occasionally lead to minor discrepancies. Users should always verify the behavior for specific archive formats and desired preservation of extended file attributes.


title: ARCHIVE FORMATS (<B>-X</B> OPTION)
content:
The <b>-x</b> option allows specifying the output archive format. Key formats supported by <b>pax</b> typically include:<br><br><i>cpio</i>: The traditional <b>cpio</b> format.<br><i>tar</i>: The traditional <b>tar</b> format, often limited in features compared to <b>ustar</b>.<br><i>ustar</i>: The POSIX.1-1988 standard version of the <b>tar</b> format, supporting longer pathnames and user/group names. This is often the default or preferred <b>tar</b> variant for portability.<br><i>pax</i>: The POSIX.1-2001 standard format, which extends <b>ustar</b> to support arbitrary metadata (e.g., extended attributes, sparse files) through extended headers. This is the most flexible format.


title: PRESERVING FILE ATTRIBUTES (<B>-P</B> OPTION)
content:
The <b>-p</b> option is crucial for controlling which file attributes are preserved during extraction or copying. It accepts a string composed of single-character flags:<br><br><i>a</i>: Preserves all attributes, equivalent to <b>-p 'elmop'</b>.<br><i>e</i>: Preserves additional extended attributes, if supported by the system.<br><i>l</i>: Preserves file access times.<br><i>m</i>: Preserves file modification times.<br><i>o</i>: Preserves user and group ownership. Requires appropriate privileges.<br><i>p</i>: Preserves file permissions (mode bits).


title: HISTORY
content:
The <b>pax</b> command was standardized by POSIX.1-2001, aiming to provide a unified and portable archiving utility that merges the functionalities of both <b>tar</b> and <b>cpio</b>. Its development addressed the inconsistencies and portability challenges faced when using separate <b>tar</b> and <b>cpio</b> implementations across different Unix-like systems. It has since become a widely available and robust archiving tool on POSIX-compliant operating systems, including most modern Linux distributions.


title: SYNOPSIS
content:
<b>pbmclean</b> [<i>-1</i>] [<i>-2</i>] [<i>-all</i>] [<i>-white</i>] [<i>-black</i>] [<i>-keepblack</i>] [<i>-keepwhite</i>] [<i>-verbose</i>]


title: PARAMETERS
content:
<b><i>-1</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Cleans pixels connected to at most one other pixel.<br><br><b><i>-2</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Default) Cleans pixels connected to at most two other pixels.<br><br><b><i>-all</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes all pixels not connected to the border of the image.<br><br><b><i>-white</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Default) Changes isolated black pixels to white.<br><br><b><i>-black</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes isolated white pixels to black.<br><br><b><i>-keepblack</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes isolated white pixels while keeping isolated black pixels.<br><br><b><i>-keepwhite</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes isolated black pixels while keeping isolated white pixels.<br><br><b><i>-verbose</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints processing information to standard error.<br><br>


title: DESCRIPTION
content:
<i>pbmclean</i> is a utility from the Netpbm package designed to clean up Portable BitMap (PBM) images by removing isolated pixels or small groups of pixels. It reads a PBM image from standard input and writes the cleaned image to standard output. This command is particularly useful for reducing "noise" or artifacts in scanned or converted monochrome images. It identifies pixels based on their connectivity to neighboring pixels. By default, it removes black pixels that are isolated or only connected to one other pixel. Users can specify different connectivity rules, choose to remove isolated white pixels instead, or even preserve certain types of isolated pixels. Its primary function is to enhance the visual clarity of monochrome images by smoothing out unwanted single-pixel disruptions.


title: CAVEATS
content:
<i>pbmclean</i> operates exclusively on PBM (Portable BitMap) format. While it's part of the Netpbm suite which handles other formats (PGM, PPM), <i>pbmclean</i> is specific to 1-bit monochrome images.<br>The definition of "isolated" depends on the chosen connectivity (<i>-1</i>, <i>-2</i>) and whether a pixel is connected to the image border (<i>-all</i>). Misunderstanding these options can lead to unexpected image modifications.<br>It processes input from stdin and writes to stdout, requiring redirection for file operations.


title: I/O HANDLING
content:
<i>pbmclean</i> reads its input PBM image from standard input and writes the processed PBM image to standard output. This allows it to be easily integrated into shell pipelines, for example: <code>cat image.pbm | pbmclean > cleaned_image.pbm</code> or <code>scanimage --format=pbm | pbmclean -all > borderless.pbm</code>.


title: HISTORY
content:
<i>pbmclean</i> is a component of the Netpbm graphics suite, which originated from Jef Poskanzer's Pbmplus utilities. The Netpbm project has been continuously developed since the early 1990s, providing a robust and flexible set of command-line tools for manipulating various image formats, particularly the portable pixmap formats (PBM, PGM, PPM). <i>pbmclean</i> itself is an older, established tool within this suite, serving its specific purpose of image noise reduction for monochrome bitmaps. Its design reflects the Unix philosophy of small, specialized tools that do one thing well.


title: SYNOPSIS
content:
<b>pbmlife</b> [<i>-generations N</i>] [<i>-speed N</i>] [<i>-newborn RULE</i>] [<i>-sick RULE</i>] [<i>pbmfile</i>]


title: PARAMETERS
content:
<b><i>-generations N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulates the game for <i>N</i> generations. The default is 100 generations.<br><br><b><i>-speed N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs an image every <i>N</i> generations. A value of 1 outputs every generation, while higher values skip intermediate states. The default is 1.<br><br><b><i>-newborn RULE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the rule for a dead cell to become alive (birth rule). <i>RULE</i> is a comma-separated list of digits representing the exact number of live neighbors a dead cell must have to become alive. The default is '3' (a dead cell with exactly 3 live neighbors becomes alive).<br><br><b><i>-sick RULE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the rule for an alive cell to survive (survival rule). <i>RULE</i> is a comma-separated list of digits representing the exact number of live neighbors an alive cell must have to remain alive. If an alive cell doesn't meet this rule, it dies. The default is '2,3' (an alive cell with 2 or 3 live neighbors survives).<br><br><b><i>pbmfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input PBM image file. If omitted, <b>pbmlife</b> reads the PBM data from standard input.<br><br>


title: DESCRIPTION
content:
<b>pbmlife</b> is a utility from the Netpbm toolkit that simulates Conway's Game of Life. It interprets an input Portable BitMap (PBM) image, where white pixels represent 'alive' cells and black pixels represent 'dead' cells, as the initial state for the cellular automaton. The program then applies the classic rules of Conway's Game of Life, or custom variations thereof, for a specified number of generations.<br><br>The primary output is a new PBM image reflecting the final state after the simulation. Users can control parameters such as the number of generations to simulate, the frequency of outputting intermediate states, and even modify the birth and survival rules of the game. It provides a visual and interactive way to explore cellular automata, demonstrating how complex patterns and behaviors can emerge from simple underlying rules.


title: CAVEATS
content:
<b>pbmlife</b> exclusively processes PBM (Portable BitMap) format files. Input images in other Netpbm formats (PGM, PPM) or other image formats must be converted to PBM beforehand. Complex or large initial patterns, combined with a high number of generations, can lead to significant processing time and memory consumption.


title: INPUT INTERPRETATION
content:
In the input PBM image, white pixels are treated as 'alive' cells and black pixels as 'dead' cells. The dimensions of the PBM image define the grid size for the simulation.


title: DEFAULT GAME OF LIFE RULES
content:
By default, <b>pbmlife</b> implements the standard Conway's Game of Life rules (often denoted B3/S23):<br>- Any live cell with fewer than two live neighbours dies (underpopulation).<br>- Any live cell with two or three live neighbours lives on to the next generation.<br>- Any live cell with more than three live neighbours dies (overpopulation).<br>- Any dead cell with exactly three live neighbours becomes a live cell (reproduction).<br>These correspond to the default <i>-newborn 3</i> and <i>-sick 2,3</i> parameters.


title: HISTORY
content:
Conway's Game of Life, the cellular automaton that <b>pbmlife</b> simulates, was created by British mathematician John Horton Conway in 1970. It quickly became a classic example of emergent behavior in simple rule-based systems. <b>pbmlife</b> itself is part of the Netpbm project, a comprehensive suite of graphics manipulation tools for Unix-like systems. Netpbm evolved from Jef Poskanzer's `pbmplus` package, first released in the late 1980s, which standardized the PBM, PGM, and PPM image formats. <b>pbmlife</b> integrates this classic mathematical concept with a widely adopted image format, providing a practical way to visualize cellular automata within the command-line environment.


title: PARAMETERS
content:
<b><b>-white</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a solid white PBM image.<br><br><b><b>-black</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a solid black PBM image.<br><br><b><i>width</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The horizontal dimension of the PBM image in pixels. Must be a positive integer.<br><br><b><i>height</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The vertical dimension of the PBM image in pixels. Must be a positive integer.<br><br>


title: DESCRIPTION
content:
<b>pbmmake</b> is a command-line utility from the Netpbm package.<br>It is used to create a Portable BitMap (PBM) image with specified dimensions. PBM images are typically used for black and white, one-bit-per-pixel graphics.<br><b>pbmmake</b> can generate images that are entirely black, entirely white, or filled with random black and white pixels. It reads no input, acting purely as an image generator.<br>The output PBM image is written to standard output, making it suitable for piping to other Netpbm tools or redirecting to a file. It's a foundational tool for quickly generating simple monochrome image data for testing or further manipulation.


title: CAVEATS
content:
<b>pbmmake</b> only generates monochrome (black and white) PBM images. For grayscale or color images, use <b>pgmmake</b> or <b>ppmmake</b> respectively.<br>It cannot generate complex patterns or images from external data; its output is limited to solid colors or random noise.


title: STANDARD OUTPUT
content:
<b>pbmmake</b> writes the generated PBM image to standard output (<i>stdout</i>). This allows for seamless piping with other Netpbm tools. For example: <b>pbmmake 100 50 | pbmtojpeg > <i>random.jpg</i></b>


title: DEFAULT BEHAVIOR
content:
If neither <b>-white</b> nor <b>-black</b> options are specified, <b>pbmmake</b> generates an image filled with random black and white pixels.


title: HISTORY
content:
<b>pbmmake</b> is a consistent component of the Netpbm package, a suite of graphics utilities that originated from Jef Poskanzer's <b>pbmplus</b> package in the late 1980s.<br>Netpbm provides a foundational toolkit for manipulating portable pixelmap, graymap, and bitmap images. <b>pbmmake</b> has served as a basic image generator within this long-standing and widely used collection of tools, evolving with the Netpbm project over decades to ensure compatibility and functionality on various Unix-like systems.


title: PARAMETERS
content:
<b><i>value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The character to match in the input PBM image. This is typically '0' (representing a white pixel) or '1' (representing a black pixel). Pixels in the input matching this character will be identified in the output mask.<br><br><b><i>-background</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inverts the mask output. If specified, pixels in the output mask that match the <i>value</i> character will be white, and non-matching pixels will be black. Without this option, matching pixels are black and non-matching are white.<br><br><b><i>pbmfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input PBM image file. If omitted, <b>pbmmask</b> reads the PBM image from standard input (stdin).<br><br>


title: DESCRIPTION
content:
The <b>pbmmask</b> command is a utility within the Netpbm image processing suite. It takes a Portable Bitmap (PBM) image as input and generates another PBM image of identical dimensions. This output image functions as a mask, highlighting specific pixel values from the original.<br><br>Users specify a 'value' character, typically '0' for white or '1' for black, that <b>pbmmask</b> searches for in the input image. For every pixel in the input image that matches this 'value' character, the corresponding pixel in the output mask becomes black. All other pixels in the output mask are rendered white.<br><br>Optionally, the <i>-background</i> flag can be used to invert this behavior: matching pixels become white, and non-matching pixels become black. This command is particularly useful for isolating specific features, creating stencils, or preparing images for further processing where a binary mask is required.


title: CAVEATS
content:
<b>pbmmask</b> operates exclusively on Portable Bitmap (PBM) images, which are binary (black and white) image formats. It does not support grayscale (PGM) or color (PPM) images directly. Ensure input images are correctly formatted PBM files for proper operation.


title: STANDARD INPUT/OUTPUT
content:
Like most Netpbm tools, <b>pbmmask</b> adheres to the Unix philosophy of standard input and output. If no <i>pbmfile</i> is specified, it reads the input PBM image from standard input. The resulting masked PBM image is always written to standard output (stdout).


title: USAGE CONTEXT
content:
This command is often used in pipelines with other Netpbm utilities for more complex image manipulations. For instance, one might use it to create a mask for a specific textual element rendered by <b>pbmtext</b>, or to extract a particular binary pattern from a scanned document.


title: HISTORY
content:
<b>pbmmask</b> is part of the Netpbm project, a comprehensive suite of graphics file format converters and image processing utilities. Netpbm evolved from the PBMplus toolkit, which was initially developed by Jef Poskanzer in the late 1980s and early 1990s. The Netpbm suite, including <b>pbmmask</b>, has been a staple in Unix-like environments for manipulating pixelmap images, valued for its simplicity, efficiency, and extensibility through piping commands.


title: PARAMETERS
content:
<b>-randomseed=<I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an integer <I>N</I> to use as the seed for the pseudo-random number generator. Providing a fixed seed ensures that the output image is identical every time the command is run with the same parameters. If this option is omitted, a seed based on the current time and process ID is used, resulting in a different image each time.<br><br><b>-density=<I>F</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the probability that any given pixel in the output image will be black (represented as 1 in the <B>PBM</B> format). <I>F</I> must be a floating-point number between 0.0 and 1.0, inclusive. A value of 0.5 (the default) produces an image with roughly half black and half white pixels. A value of 0.0 results in an entirely white image, while 1.0 results in an entirely black image.<br><br><b><I>width</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The desired width of the output <B>PBM</B> image, specified in pixels. This is a mandatory argument.<br><br><b><I>height</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The desired height of the output <B>PBM</B> image, specified in pixels. This is a mandatory argument.<br><br>


title: DESCRIPTION
content:
<i>pbmnoise</i> is a utility from the <I>Netpbm</I> tools suite designed to create a Portable BitMap (<B>PBM</B>) image filled with pseudo-random noise. The <B>PBM</B> format is a simple monochrome (black and white) image format. This command allows users to specify the exact <I>width</I> and <I>height</I> of the output image in pixels.<br><br>Furthermore, it provides control over the 'density' or 'randomness' of the noise, which translates to the probability of a pixel being black. This feature enables the generation of images ranging from sparse speckles to dense patterns. <i>pbmnoise</i> is particularly useful for testing image processing algorithms, generating random patterns for various applications, or as a fundamental source image to be further transformed by other <I>Netpbm</I> utilities. Like most <I>Netpbm</I> commands, its output is directed to standard output, making it highly composable via pipes.


title: CAVEATS
content:
The random numbers generated by <i>pbmnoise</i> are pseudo-random, not cryptographically secure. While suitable for visual noise, they should not be used for security-sensitive applications.<br><br>Generating very large images with <i>pbmnoise</i> can consume significant system resources (memory and disk space) if the output is redirected to a file. Users should be mindful of potential resource limitations.


title: STANDARD I/O USAGE
content:
Consistent with the <I>Netpbm</I> design philosophy, <i>pbmnoise</i> writes its generated <B>PBM</B> image data to standard output. This makes it highly flexible and composable, allowing its output to be seamlessly piped as input to other <I>Netpbm</I> commands (e.g., <I>pbmtopgm</I> for grayscale conversion, <I>pbmscale</I> for resizing) or redirected to a file for storage (e.g., <code>pbmnoise 100 100 > noise.pbm</code>).


title: OUTPUT FORMAT
content:
The command exclusively outputs images in the <B>PBM</B> (Portable BitMap) format. This is the simplest of the <I>Netpbm</I> formats, supporting only two colors: black and white. In <B>PBM</B> files, pixels are typically represented by 0 for white and 1 for black, making it ideal for monochrome binary patterns like noise.


title: HISTORY
content:
<i>pbmnoise</i> is a longstanding component of the <I>Netpbm</I> package, which itself originated from <I>Pbmplus</I> created by Jef Poskanzer in the late 1980s. The <I>Netpbm</I> suite has been continuously developed and maintained, with Bryan Henderson leading much of its recent stewardship. Commands like <i>pbmnoise</i> embody the <I>Netpbm</I> philosophy of providing simple, specialized tools that can be easily combined to perform complex image manipulations, a design principle that has remained consistent throughout its history.


title: SYNOPSIS
content:
<b>pbmpage</b> [<i>-columns=N</i>] [<i>-rows=N</i>] [<i>-margin=N</i>] [<i>-header</i>] [<i>-trailer</i>] [<i>-landscape</i> | <i>-portrait</i>] [<i>-page=NAME</i>] [<i>-left=N</i>] [<i>-right=N</i>] [<i>-top=N</i>] [<i>-bottom=N</i>] [<i>-lmargin=N</i>] [<i>-rmargin=N</i>] [<i>-tmargin=N</i>] [<i>-bmargin=N</i>] [<i>-headerfont=NAME</i>] [<i>-footerfont=NAME</i>] [<i>-headertext=TEXT</i>] [<i>-footertext=TEXT</i>] [<i>-nohdr</i>] [<i>-nofoot</i>] [<i>-scale=N</i>] [<i>-xres=N</i>] [<i>-yres=N</i>] [<i>-dpi=N</i>] [<i>pbmfile ...</i>]


title: PARAMETERS
content:
<b><b>-columns=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of columns per page.<br><br><b><b>-rows=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of rows per page.<br><br><b><b>-margin=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a uniform margin in pixels around the entire page and between images. Overridden by specific margin options.<br><br><b><b>-header</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes a header on each page, showing the filename.<br><br><b><b>-trailer</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes a trailer (footer) on each page, showing the filename.<br><br><b><b>-landscape</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Formats pages in landscape orientation (width > height).<br><br><b><b>-portrait</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Formats pages in portrait orientation (height > width). This is the default.<br><br><b><b>-page=NAME</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a predefined page size (e.g., <i>letter</i>, <i>a4</i>). Overrides <i>xres</i> and <i>yres</i>.<br><br><b><b>-left=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the left margin in pixels.<br><br><b><b>-right=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the right margin in pixels.<br><br><b><b>-top=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the top margin in pixels.<br><br><b><b>-bottom=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the bottom margin in pixels.<br><br><b><b>-lmargin=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the left margin in pixels (same as <i>left</i>).<br><br><b><b>-rmargin=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the right margin in pixels (same as <i>right</i>).<br><br><b><b>-tmargin=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the top margin in pixels (same as <i>top</i>).<br><br><b><b>-bmargin=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the bottom margin in pixels (same as <i>bottom</i>).<br><br><b><b>-headerfont=NAME</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the font for the header text. Defaults to <i>fixed</i>.<br><br><b><b>-footerfont=NAME</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the font for the footer text. Defaults to <i>fixed</i>.<br><br><b><b>-headertext=TEXT</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies custom text for the header. Overrides <i>header</i> option.<br><br><b><b>-footertext=TEXT</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies custom text for the footer. Overrides <i>trailer</i> option.<br><br><b><b>-nohdr</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all headers.<br><br><b><b>-nofoot</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all footers.<br><br><b><b>-scale=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scales all input images by a factor of <i>N</i> (e.g., <i>0.5</i> for half size).<br><br><b><b>-xres=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the desired page width in pixels.<br><br><b><b>-yres=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the desired page height in pixels.<br><br><b><b>-dpi=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the dots per inch for resolution calculations, affecting <i>xres</i> and <i>yres</i> if <i>page</i> option is used. Defaults to <i>75</i>.<br><br>


title: DESCRIPTION
content:
pbmpage is a utility from the Netpbm package designed to combine several portable bitmap (PBM) images into a single, larger PBM image, formatted as pages suitable for printing. It allows users to specify the layout, such as the number of columns and rows, margins, and the inclusion of headers and footers.<br>This command is particularly useful for creating contact sheets, printing multiple small images on one sheet of paper, or preparing image sequences for output. It takes one or more PBM files as input and outputs a single PBM file to standard output, which can then be converted to other formats (e.g., PostScript) using other Netpbm tools or printed directly if the printer supports PBM. The tool handles scaling and positioning to fit the specified page dimensions and layout.


title: CAVEATS
content:
pbmpage specifically works with PBM (Portable BitMap) format files. Input files must be in PBM format. While other Netpbm tools can convert to/from PBM (e.g., <i>anytopnm</i>), pbmpage itself does not perform format conversions. Output is also in PBM format, meaning further conversion (e.g., to PostScript using <i>pnmtops</i>) is often required for printing or viewing in common image viewers. Header/footer text formatting is basic and uses specific fonts; advanced text layout or graphics are not supported.


title: <B>INPUT AND OUTPUT</B>
content:
pbmpage reads PBM images from the files specified on the command line. If no files are given, it reads from standard input. The resulting single, combined PBM image is written to standard output. This design allows for easy piping with other Netpbm tools, such as <i>anytopnm</i> before pbmpage and <i>pnmtops</i> after it.


title: <B>PAGE DIMENSIONS AND DPI</B>
content:
When using the <i>-page</i> option, pbmpage uses standard paper sizes (like <i>letter</i> or <i>a4</i>) combined with the <i>-dpi</i> setting to calculate the output page dimensions in pixels. For example, <i>-page=letter -dpi=300</i> would produce an 8.5x11 inch image at 300 DPI. If <i>-xres</i> and <i>-yres</i> are used, they directly specify the pixel dimensions, overriding any <i>-page</i> or <i>-dpi</i> calculations.


title: HISTORY
content:
pbmpage is a long-standing utility within the Netpbm suite of graphics manipulation tools. The Netpbm project itself originated from Jef Poskanzer's <i>pbmplus</i> package, released in 1988, which introduced the Portable Anymap (PNM) formats (PBM, PGM, PPM). pbmpage was developed as part of this suite to provide basic page layout capabilities for bitmap images, primarily for printing on monochrome dot-matrix or laser printers common at the time. It has been maintained and refined over decades as part of the Netpbm project, though its core functionality remains focused on the PBM format, reflecting its historical roots.


title: PARAMETERS
content:
<b>-x factor</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scales the image horizontally by the specified <i>integer</i> factor.<br><br><b>-y factor</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scales the image vertically by the specified <i>integer</i> factor.<br><br><b>file</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The input PBM image file. If omitted, <i>pbmpscale</i> reads from standard input.<br><br>


title: DESCRIPTION
content:
<i>pbmpscale</i> is a <b>Netpbm</b> command-line utility for scaling <b>Portable BitMap (PBM)</b> images. It reads a PBM image from standard input (or a specified file) and writes the scaled image to standard output. Crucially, <i>pbmpscale</i> can only scale by <i>integer</i> factors, making it suitable for simple enlargements where each pixel is replicated. For example, scaling by a factor of 3 means each pixel becomes a 3x3 block of identical pixels. This method produces crisp, blocky results without anti-aliasing. If no scaling factors are specified, it defaults to doubling the image size both horizontally and vertically. It's a foundational tool within the extensive Netpbm suite, often used in pipelines for basic monochrome image manipulation.


title: CAVEATS
content:
<i>pbmpscale</i> is designed exclusively for <b>PBM</b> (monochrome) images and only supports scaling by <i>integer</i> factors. It cannot scale images down or handle fractional scaling. For more versatile scaling options, including scaling other <b>Netpbm</b> formats (PGM/PPM) or non-integer scaling, the command <i>pnmscale</i> should be used instead.


title: DEFAULT SCALING FACTOR
content:
If neither the <i>-x</i> nor the <i>-y</i> option is specified, <i>pbmpscale</i> will scale the image by a default factor of 2 in both the horizontal and vertical directions.


title: PIXEL REPLICATION
content:
The scaling operation performed by <i>pbmpscale</i> is based on simple pixel replication. Each pixel in the original PBM image is duplicated 'factor' times horizontally and 'factor' times vertically. This approach preserves sharp edges and is ideal for blocky pixel art or technical diagrams where anti-aliasing is undesirable.


title: HISTORY
content:
<i>pbmpscale</i> is a component of the comprehensive <b>Netpbm</b> suite, a collection of graphics utilities that evolved from the Pbmplus package, developed in the late 1980s. The design philosophy of <b>Netpbm</b> tools emphasizes simplicity and interoperability through pipes using generic image formats. <i>pbmpscale</i>'s method of integer pixel replication reflects this early design, providing a straightforward way to enlarge monochrome images without complex algorithms, aligning with the fundamental nature of the PBM format itself.


title: DESCRIPTION
content:
<B>pbmreduce</B> is a utility from the Netpbm package designed to reduce the dimensions of a portable bitmap (<I>PBM</I>) image. It reads a <I>PBM</I> image as input and produces a new <I>PBM</I> image that is half the width and half the height of the original.<BR><BR>The reduction process works by considering each 2x2 square of pixels in the input image and replacing it with a single pixel in the output image. The value of this new pixel is determined by an 'OR' logic: it becomes <B>1</B> (black) if <I>any</I> of the four original pixels in the 2x2 square were <B>1</B> (black); otherwise, it remains <B>0</B> (white).<BR><BR>This command is particularly useful for quickly generating thumbnails or downscaled versions of binary images. It's a simple, fast way to halve the resolution of <I>PBM</I> files. If the input image's dimensions are not exact multiples of 2, any extra rows or columns on the right or bottom edges are simply dropped.


title: CAVEATS
content:
Any rows or columns in the input image that extend beyond an exact multiple of 2 in width or height are truncated (dropped) from the output.


title: INPUT AND OUTPUT
content:
If <I>pbmfile</I> is not specified, <B>pbmreduce</B> reads the <I>PBM</I> image from standard input. The resulting reduced image is always written to standard output.


title: PIXEL REDUCTION LOGIC
content:
For every 2x2 block of pixels from the input image, <B>pbmreduce</B> creates a single pixel in the output. This output pixel is <B>black</B> (1) if at least one of the four input pixels was black. Otherwise, it is <B>white</B> (0). This effectively performs a logical <B>OR</B> operation on the pixel values.


title: HISTORY
content:
<B>pbmreduce</B> is a standard utility included as part of the Netpbm package. Netpbm is a venerable collection of graphics programs and a programming library, originally developed from PBMplus. It provides fundamental tools for manipulating various image formats, with <B>pbmreduce</B> serving as a basic but effective command for image downsizing.


title: SYNOPSIS
content:
<b>pbmtext</b> [<i>-font fontname</i>] [<i>-builtin</i>] [<i>-angle degrees</i>] [<i>-lisp</i>] [<i>-width width</i>] [<i>-height height</i>] [<i>-indent indent</i>] [<i>-rle</i>] [<i>text</i>]


title: PARAMETERS
content:
<b><b>-font</b> <i>fontname</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to a font file (e.g., .pbm or .bdf format) to be used for rendering the text. If not specified, the built-in font is used by default.<br><br><b><b>-builtin</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the use of the built-in font, ignoring any <i>-font</i> option. This is the default if no font is specified.<br><br><b><b>-angle</b> <i>degrees</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rotates the text clockwise by the specified number of degrees. The angle can be a floating-point number.<br><br><b><b>-lisp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Formats the output for Lisp systems, typically used for specific internal Netpbm operations or testing.<br><br><b><b>-width</b> <i>width</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum width of the resulting PBM image in pixels. Text lines longer than this width will wrap automatically.<br><br><b><b>-height</b> <i>height</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum height of the resulting PBM image in pixels. If the text exceeds this height, it will be truncated.<br><br><b><b>-indent</b> <i>indent</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Indents the text by the specified number of pixels from the left edge of the image.<br><br><b><b>-rle</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the PBM image in run-length encoded (RLE) format, which can be more compact for certain types of images.<br><br>


title: DESCRIPTION
content:
<i>pbmtext</i> is a command-line utility from the Netpbm suite that generates a portable bitmap (PBM) image from specified text. It renders text using either a built-in font or an external font file, producing a monochrome (black and white) image where the text appears as black pixels on a white background (or vice-versa, effectively).<br><br>This tool is commonly used in scripting contexts to dynamically create image labels, titles, or simple graphical elements that can then be combined with other images using Netpbm's extensive set of tools. It's particularly useful for generating programmatic image overlays or for environments where graphical user interfaces are not available, relying instead on terminal-based operations and piped output.


title: CAVEATS
content:
<i>pbmtext</i> is designed for simple text rendering. It does not support advanced text formatting features like bold, italics, varying font sizes within the text, or complex layout. The quality of text rendering is highly dependent on the chosen font's resolution. External fonts must be in a format supported by Netpbm, typically .pbm or .bdf.<br><br>Also, character encoding issues can arise if the input text contains characters not present in the chosen font or if the system's locale doesn't match the font's encoding expectations.


title: INPUT AND OUTPUT
content:
<i>pbmtext</i> can take its text input either directly as arguments on the command line or from standard input (<i>stdin</i>) if no text arguments are provided. The resulting PBM image is always written to standard output (<i>stdout</i>), making it highly suitable for piping with other Netpbm commands or redirecting to a file.


title: FONT HANDLING
content:
While <i>pbmtext</i> includes a basic built-in font, for higher quality or specific aesthetics, users often supply custom font files. These external fonts typically need to be in a bitmap format compatible with Netpbm, such as a PBM font or a BDF (Bitmap Distribution Format) file, which can be generated or converted from other font formats using tools like <i>fontforge</i> or <i>pbmtofont</i>.


title: HISTORY
content:
<i>pbmtext</i> is an integral part of the Netpbm package, which originated from Jef Poskanzer's Pbmplus toolkit in the late 1980s. Pbmplus (and subsequently Netpbm) was developed to provide a comprehensive set of command-line tools for manipulating portable pixmap, grayscale, and bitmap (PPM, PGM, PBM) images. <i>pbmtext</i> has been a core component since these early days, reflecting the foundational need for text-to-image conversion in a Unix-like environment, often used in conjunction with other pipeline-oriented image utilities.


title: PARAMETERS
content:
<b><i>-font &lt;fontname&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the PostScript font to use for rendering the text. E.g., 'Courier'.<br><br><b><i>-fontsize &lt;points&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the font size in PostScript points (1/72 inch).<br><br><b><i>-linewidth &lt;width&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the width of lines drawn in the PostScript output, in PostScript points.<br><br><b><i>-linespacing &lt;points&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the spacing between lines of text in PostScript points.<br><br><b><i>-bottomspace &lt;points&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the bottom margin in PostScript points.<br><br><b><i>-topspace &lt;points&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the top margin in PostScript points.<br><br><b><i>-leftspace &lt;points&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the left margin in PostScript points.<br><br><b><i>-rightspace &lt;points&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the right margin in PostScript points.<br><br><b><i>-width &lt;inches&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the width of the output PostScript page in inches.<br><br><b><i>-height &lt;inches&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the height of the output PostScript page in inches.<br><br><b><i>-x &lt;inches&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the X coordinate of the output text's lower-left corner, in inches relative to the page's lower-left. Overrides horizontal centering.<br><br><b><i>-y &lt;inches&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Y coordinate of the output text's lower-left corner, in inches relative to the page's lower-left. Overrides vertical centering.<br><br><b><i>-rotate</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rotates the entire output content 90 degrees clockwise within the PostScript page. Useful for changing the content orientation without altering page dimensions.<br><br><b><i>-nomargin</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all default margins, making the text fill the entire output area if <i>-x</i> and <i>-y</i> are not used.<br><br><b><i>-setmargins</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces margins to be set even if <i>-x</i> or <i>-y</i> are used, which typically override default margin behavior.<br><br><b><i>-landscape</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output page orientation to landscape. This implies a 90-degree rotation of the coordinate system relative to portrait.<br><br><b><i>-portrait</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output page orientation to portrait (this is the default).<br><br><b><i>-level &lt;level&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the PostScript language level (e.g., 2, 3) for the output. Default is typically 2.<br><br><b><i>-inverted</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inverts the PostScript output, rendering black pixels white and white pixels black.<br><br><b><i>-nocenter</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the text from being horizontally centered on the page. By default, text is centered horizontally if <i>-x</i> is not used.<br><br><b><i>-debug</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug output for troubleshooting command execution.<br><br><b><i>-version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of <i><b>pbmtextps</b></i> and exits.<br><br>


title: DESCRIPTION
content:
<i><b>pbmtextps</b></i> is a utility from the Netpbm package designed to convert Portable Bitmap (PBM) images, specifically those generated to represent text, into PostScript format. It interprets the black pixels in the PBM image as characters and generates PostScript commands to render these characters using specified fonts and formatting.<br><br>This command is often used in conjunction with <i><b>pbmtext</b></i>, which creates PBM images from plain text. <i><b>pbmtextps</b></i> allows for extensive control over the output PostScript, including font selection, font size, line spacing, page margins, precise positioning (X/Y coordinates), rotation, and output page dimensions. It's particularly useful for embedding text-based graphical elements into PostScript documents or for printing text that has been manipulated at the pixel level. The output is typically PostScript Level 2 or higher compatible.


title: CAVEATS
content:
<i><b>pbmtextps</b></i> generates PostScript Level 2 or higher compatible output. The specified PostScript fonts must be available to the interpreter or printer that processes the generated file; otherwise, a default font might be substituted, or an error could occur. The command is primarily designed for input PBM files where black pixels are intended to represent textual content.


title: COORDINATE SYSTEM AND UNITS
content:
The PostScript output uses a coordinate system where the origin (0,0) is typically at the lower-left corner of the page. Units for dimensions and positions are primarily PostScript points (1/72 inch) for internal spacing options (e.g., <i>-fontsize</i>, <i>-linespacing</i>, margins), and inches for overall page dimensions and explicit X/Y coordinates (e.g., <i>-width</i>, <i>-height</i>, <i>-x</i>, <i>-y</i>). This mix requires careful attention when precisely positioning elements and calculating layouts.


title: STANDARD INPUT USAGE
content:
If no <i>pbmfile</i> argument is provided, <i><b>pbmtextps</b></i> reads the PBM image data from standard input. This feature makes it highly adaptable for use in pipelines, allowing the output of other Netpbm commands (such as <i><b>pbmtext</b></i>) to be directly fed into <i><b>pbmtextps</b></i> for conversion to PostScript.


title: HISTORY
content:
<i><b>pbmtextps</b></i> is an integral part of the Netpbm package, a versatile toolkit for manipulating graphic images. Netpbm originated from Jef Poskanzer's Portable Pixmap (PPM) format and related tools developed in the late 1980s. It has since evolved into a comprehensive suite maintained by Bryan Henderson. <i><b>pbmtextps</b></i> leverages the core PBM format to convert pixel-based text into a scalable, vector-based PostScript representation. Its development has been driven by the need for flexible image and text manipulation capabilities in various Unix-like environments, providing a robust solution for integrating bitmap text into PostScript documents.


title: SYNOPSIS
content:
<i>pbmto4425</i> <i>[pbmfile]</i><br>Reads from <i>standard input</i> if <i>pbmfile</i> is not specified. Writes to <i>standard output</i>.


title: DESCRIPTION
content:
<i>pbmto4425</i> is a specialized utility within the <i>Netpbm</i> suite of graphics tools. Its primary function is to convert a Portable BitMap (PBM) image into a byte stream suitable for printing on an IBM 4425 dot-matrix printer. The IBM 4425 is an older printer model, and this command generates the specific escape sequences and data commands that the printer understands to render the monochrome image. It reads the PBM data, typically from standard input or a specified file, and outputs the printer-specific control codes to standard output. This tool was crucial for generating simple monochrome graphics on legacy dot-matrix printers that lacked advanced graphical capabilities.


title: CAVEATS
content:
The output of <i>pbmto4425</i> is highly specific to the IBM 4425 dot-matrix printer and is not a general image format. The IBM 4425 printer is an obsolete piece of hardware, making this command primarily useful for historical or very specific legacy system contexts. It only processes PBM (Portable BitMap) images, which are strictly monochrome (black and white).


title: INPUT AND OUTPUT
content:
The command typically reads the PBM image from standard input (<i>stdin</i>). If an optional <i>pbmfile</i> argument is provided, it reads from that file instead. The processed printer commands and data are then written to standard output (<i>stdout</i>), which can be redirected to a printer device or a file.


title: PRINTER COMPATIBILITY
content:
This command is designed exclusively for the IBM 4425 printer. Using its output on other printer models will likely result in garbled text or no output, as the escape sequences are unique to the 4425.


title: HISTORY
content:
<i>pbmto4425</i> is part of the extensive <i>Netpbm</i> project, which originated from Jef Poskanzer's <i>Pbmplus</i> utilities in the late 1980s. Its existence reflects the common need during that era to print simple bitmap graphics on readily available dot-matrix printers, before the widespread adoption of laser printers and more advanced graphical standards.


title: PARAMETERS
content:
<b>pbmfile</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the Portable BitMap (PBM) file to be converted. If this argument is omitted, <b>pbmtoatk</b> will read the PBM image data from standard input instead.<br><br>


title: DESCRIPTION
content:
The <b>pbmtoatk</b> command is a utility from the Netpbm image processing toolkit. It is designed to convert a Portable BitMap (PBM) image into an Andrew Toolkit (ATK) raster object. A PBM image is a simple bitmap format, while an ATK raster object is a text-based representation of a bitmap used within the Andrew Toolkit environment. This command reads the PBM image either from a specified file or from standard input, and then writes the converted ATK-formatted data to standard output. Its primary use case involves preparing PBM images for display or manipulation within systems that rely on the Andrew Toolkit.


title: CAVEATS
content:
<b>pbmtoatk</b> operates as a stream filter; it reads from standard input if no file is provided and always writes its output to standard output.<br>The Andrew Toolkit format is highly specialized and is primarily relevant within environments that actively use the Andrew Toolkit, limiting its general applicability.


title: STANDARD INPUT/OUTPUT USAGE
content:
<b>pbmtoatk</b> is designed for flexible data handling. If the <i>pbmfile</i> argument is omitted, the command will automatically read the Portable BitMap image data from standard input (<i>stdin</i>). The resulting Andrew Toolkit raster object is always written to standard output (<i>stdout</i>). This stream-oriented design allows for efficient piping of data between commands, such as `<i>some_command</i> | <b>pbmtoatk</b> > <i>output.atk</i>` or `<b>pbmtoatk</b> <i>input.pbm</i> | <i>another_command</i>`.


title: OUTPUT FORMAT CHARACTERISTICS
content:
The Andrew Toolkit (ATK) raster object produced by <b>pbmtoatk</b> is a text-based representation of the bitmap. This means that the output file can be easily viewed and potentially edited using a standard text editor, offering transparency into the data structure.


title: HISTORY
content:
<b>pbmtoatk</b> is a component of the comprehensive Netpbm image processing toolkit. The Netpbm project was initiated by Jef Poskanzer in the late 1980s, evolving from his Portable Pixmap (PPM) format and associated tools. Netpbm provides a vast collection of command-line utilities for converting and manipulating various image formats, all centered around the simple, text-based Portable Anymap formats (PBM for bitmaps, PGM for greymaps, and PPM for pixmaps). <b>pbmtoatk</b> specifically served the need to integrate bitmap images into the Andrew Toolkit environment, embodying Netpbm's design philosophy of modular, interoperable tools.


title: PARAMETERS
content:
<b><i>pbmfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Optional.</i> The path to the PBM (Portable BitMap) image file to be converted. If omitted, <b>pbmtobbnbg</b> reads the PBM data from standard input (stdin).<br><br>


title: DESCRIPTION
content:
<i><b>pbmtobbnbg</b></i> is a specialized command-line utility provided as part of the extensive <i>Netpbm</i> package, a powerful toolkit for manipulating graphic images. Its primary function is to convert a Portable BitMap (PBM) image, which represents a monochrome bitmap, into the proprietary BitGraph format. The BitGraph format was specifically developed and utilized by BBN (Bolt Beranek and Newman), a historically significant research and development company, for their dedicated monochrome graphics workstations.<br><br>This tool is invaluable for environments that require interoperability with legacy BBN hardware or software applications that exclusively support the BitGraph image format. Given the highly specialized nature of the BitGraph format, <i><b>pbmtobbnbg</b></i> serves a niche but important role in historical data preservation, archival conversion, or interfacing with specific older systems.<br><br>Operationally, <i><b>pbmtobbnbg</b></i> follows the standard Unix philosophy. If a <i>pbmfile</i> argument is provided, it reads the PBM data from that specified file. However, if no input file is given, the command gracefully defaults to reading the PBM image data from standard input (stdin), making it suitable for use in command pipelines. The resulting BitGraph-formatted data is then written to standard output (stdout), allowing it to be redirected to a file or piped to another command for further processing.


title: CAVEATS
content:
This command converts to a highly specialized and largely obsolete proprietary format (BBN BitGraph), primarily for historical BBN workstations. The input must be a monochrome PBM image, as the BitGraph format itself is monochrome. It is part of the <i>Netpbm</i> suite, so <i>Netpbm</i> must be installed. This tool has limited modern-day applicability outside of niche legacy system interaction or historical data conversion.


title: TYPICAL USAGE
content:
As with most <i>Netpbm</i> tools, <i><b>pbmtobbnbg</b></i> is designed to be chained with other commands using pipes. For example, to convert an image in another format (like JPEG) to PBM, and then to BBN BitGraph, one might use:<br><br><b>djpeg</b> image.jpg | <b>pnmtopbm</b> | <b>pbmtobbnbg</b> > output.bbnbg<br><br>This demonstrates how <i>Netpbm</i> tools can be combined in a pipeline to achieve complex conversions.


title: HISTORY
content:
<i><b>pbmtobbnbg</b></i> is part of the <i>Netpbm</i> package, a widely used suite of graphics file format converters and editors. The <i>Netpbm</i> project itself evolved from the <i>Pbmplus</i> package, originally created by Jef Poskanzer in the late 1980s. The existence of this command reflects the need to support various hardware-specific image formats prevalent during that era, such as the BBN BitGraph displays developed by Bolt Beranek and Newman. Its development was driven by the necessity to bridge between the standard PBM format and the proprietary BitGraph format for use on BBN workstations.


title: PARAMETERS
content:
<b><I>&lt;range1&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The first commit range to compare. This can be specified as a single commit, a branch name, or using the '..' or '...' notations (e.g., <I>commitA..commitB</I>).<br><br><b><I>&lt;range2&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The second commit range to compare. Similar to <I>&lt;range1&gt;</I>, it can be a commit, branch, or range specification.<br><br><b>--stat</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a diffstat (summary of changes) instead of the full patch for each paired diff.<br><br><b>-p, --patch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the patch output. This is the default behavior if no other diff options are given.<br><br><b>--no-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turn off colored output, which is on by default.<br><br><b>--diff-options=<I>options</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pass arbitrary options directly to the underlying `git diff` command used for comparing paired patches.<br><br><b>--no-merges</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not include commits that are merges in the ranges. This is useful when comparing linear histories.<br><br><b>--single-parent, --no-single-parent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When walking history, act as if all commits have only one parent. Useful for comparing rebased branches without being distracted by merges. <I>--no-single-parent</I> is the default.<br><br><b>--creation-factor=<I>factor</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Tune the heuristic for pairing up renames or copies. A value between 0 and 1, with a default of 0.6.<br><br><b>--range-diff-path=<I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limit the comparison to changes affecting a specific file or directory path. This option can be repeated.<br><br><b>--submodule-range-diff</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When comparing commits that touch submodules, show detailed range-diff output for the submodule as well, instead of just the commit ID change.<br><br>


title: DESCRIPTION
content:
The `git-range-diff` command is designed to compare two arbitrary commit ranges (e.g., branches, or sets of commits) by analyzing the patches introduced within each range. Unlike `git diff` which compares two specific <I>states</I> of a repository, `git-range-diff` compares <I>sequences of changes</I>. It's highly useful for understanding the differences between two versions of a topic branch, especially after a rebase operation, or for reviewing how a series of patches evolved. It intelligently attempts to pair up corresponding commits between the two ranges, then shows the differences in the patches of those paired commits, or highlights commits that are unique to one range or the other. This provides a high-level overview of how two branches or commit series diverge or converge in terms of their applied changes.


title: CAVEATS
content:
Comparing very large or highly divergent commit ranges can be computationally intensive and slow. The heuristic for pairing commits might not always find the 'intended' pairing, especially when commits have been heavily rewritten or reordered. Interpreting complex `range-diff` outputs requires familiarity with its specialized symbols and structure.


title: HOW IT WORKS
content:
The command first computes a 'similarity score' between all pairs of commits in the two ranges. It then attempts to find an optimal matching of commits that maximizes these scores, using a longest common subsequence (LCS) algorithm. For paired commits, it shows the diff between their respective patches. For unpaired commits, it indicates if they are unique to one range or the other.


title: OUTPUT FORMAT
content:
The output uses special prefixes to denote the relationship between commits and their patches:<br><b>=</b>: An identical commit (same subject and patch) is found in both ranges.<br><b>&lt;</b>: A commit is unique to the <I>&lt;range1&gt;</I> (the first range).<br><b>&gt;</b>: A commit is unique to the <I>&lt;range2&gt;</I> (the second range).<br><b>:</b>: A commit from <I>&lt;range1&gt;</I> is paired with a commit from <I>&lt;range2&gt;</I>, but their patches differ (a 'modified' patch). The subsequent lines show the diff between the two patches.


title: USE CASES
content:
`git-range-diff` is invaluable for:<br>- Comparing a topic branch before and after a rebase operation to see how patches were modified or reordered.<br>- Reviewing a patch series submitted by a developer against a revised version.<br>- Understanding the differences between two forks of a repository that maintain similar series of changes.


title: HISTORY
content:
The `git-range-diff` command was introduced in Git version 2.19 (released in August 2018). It filled a significant gap in Git's capabilities for comparing and reviewing series of changes, particularly in workflows involving frequent rebasing or patch series management.


title: SYNOPSIS
content:
<I>nix-store</I> { <B>--query</B> | <B>--add</B> | <B>--delete</B> | <B>--verify-paths</B> | <B>--repair</B> | <B>--read-log</B> | <B>--export</B> | <B>--import</B> | <B>--realise</B> | <B>--optimise-store</B> | <B>--gc</B> } [<I>options</I>...] [<I>paths</I>...]


title: PARAMETERS
content:
<b><B>--add</B> <I>paths</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds the specified paths to the Nix store. Generally discouraged for direct use; higher-level tools are preferred.<br><br><b><B>--query</B> [<I>sub-options</I>] <I>paths</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Queries various information about specified store paths, e.g., roots, references, referrers, build logs, etc.<br><br><b><B>--realise</B> <I>derivations</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds (realises) the specified derivations. This process fetches or builds all necessary dependencies.<br><br><b><B>--optimise-store</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Finds identical files or subtrees in the Nix store and hard-links them to save disk space.<br><br><b><B>--gc</B> [<I>options</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs garbage collection on the store, deleting unreachable store paths that are no longer referenced by roots.<br><br><b><B>--verify-paths</B> [<B>--check-contents</B>] <I>paths</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verifies the integrity of specified store paths, optionally checking file contents against their cryptographic hashes.<br><br><b><B>--repair</B> <I>paths</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to repair damaged store paths by re-downloading or rebuilding them.<br><br><b><B>--read-log</B> <I>paths</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the build log for specified store paths, useful for debugging build failures.<br><br><b><B>--export</B> <I>paths</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports specified store paths and their dependencies into a Nix Archive (NAR) file, typically streamed to standard output.<br><br><b><B>--import</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Imports store paths from a Nix Archive (NAR) file, typically read from standard input, adding them to the store.<br><br><b><B>--delete</B> <I>paths</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes specified store paths. Use with extreme caution as it bypasses dependency checks; <b>--gc</b> is safer.<br><br><b><B>-d</B>, <B>--debug</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debugging output, providing more detailed information about operations.<br><br><b><B>--store</B> <I>uri</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Nix store to use, overriding the default <i>/nix/store</i> or <i>NIX_STORE_DIR</i> environment variable.<br><br><b><B>--option</B> <I>name</I> <I>value</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a Nix configuration option for the duration of this command invocation.<br><br>


title: DESCRIPTION
content:
The <b>nix-store</b> command is the low-level interface to the Nix store, the central component of the Nix package manager. It allows users and Nix itself to add, query, verify, and manipulate paths within the <i>/nix/store</i> directory. All build outputs and dependencies are stored here under cryptographic hashes, ensuring immutability and reproducibility. This command is primarily used by higher-level Nix tools like <b>nix-build</b>, <b>nix-instantiate</b>, and <b>nix-shell</b>, but can also be invoked directly for specific store management tasks such as garbage collection, repairing damaged paths, or inspecting store contents. It is fundamental to Nix's content-addressable design and ensures software integrity and reliable deployments.


title: CAVEATS
content:
Direct manipulation of the Nix store using <b>nix-store</b> with flags like <b>--add</b> or <b>--delete</b> is generally not recommended for everyday use, as it can inadvertently break dependencies or corrupt the store state. Higher-level tools like <b>nix-build</b>, <b>nix-shell</b>, and <b>nix-gc</b> provide safer and more robust ways to interact with the store. Operations that modify the store often require root privileges.


title: NIX STORE STRUCTURE
content:
The Nix store is typically located at <i>/nix/store</i>. All software packages, dependencies, and build outputs are stored as immutable, content-addressed paths within this directory. Each path's name is prefixed with a cryptographic hash (e.g., <i>/nix/store/&lt;hash&gt;-&lt;name&gt;</i>), ensuring that changes to contents result in a new path and preventing conflicts.


title: ENVIRONMENT VARIABLES
content:
The behavior of <b>nix-store</b> can be influenced by several environment variables, including:<br><br><b>NIX_STORE_DIR</b>: Overrides the default location of the Nix store (e.g., <i>/usr/local/nix/store</i>).<br><b>NIX_REMOTE</b>: Specifies a remote Nix store to connect to.<br><b>NIX_CONFIG</b>: Provides additional Nix configuration options.


title: EXIT STATUS
content:
The <b>nix-store</b> command typically exits with a status of 0 upon successful execution. A non-zero exit status indicates an error or failure during the operation.


title: HISTORY
content:
<b>nix-store</b> is one of the oldest and most fundamental components of the Nix ecosystem, originating from the early days of the Nix package manager's development (around 2003). It embodies the core principles of content-addressable storage and atomic upgrades that define Nix. While newer, higher-level commands like the unified <b>nix</b> CLI now abstract many of its functions, <b>nix-store</b> remains the direct interface for low-level interactions with the <i>/nix/store</i>. Its robust design has been central to Nix's success in achieving reproducible and reliable software deployments.


title: PARAMETERS
content:
<b><b>-- <args></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes any subsequent arguments directly to the underlying <i>test</i> script. This is useful for passing options specific to the test runner being used (e.g., <i>npm test -- --watch</i>, <i>npm test -- src/my-test.js</i>).<br><br><b><b>--workspace <workspace_name></b>, <b>-w <workspace_name></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the <i>test</i> script only in the specified workspace (a sub-package in a monorepo).<br><br><b><b>--workspaces</b>, <b>-ws</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the <i>test</i> script in all configured workspaces within the project.<br><br><b><b>--if-present</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <b>npm test</b> from exiting with an error if the <i>test</i> script is not defined in <b>package.json</b>. The command will simply do nothing and exit successfully.<br><br><b><b>--silent</b>, <b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses <b>npm</b>'s own output, showing only the output from the executed <i>test</i> script.<br><br><b><b>--loglevel <level></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the verbosity level for <b>npm</b>'s logging output (e.g., <i>info</i>, <i>warn</i>, <i>error</i>, <i>debug</i>).<br><br>


title: DESCRIPTION
content:
The <b>npm test</b> command is a crucial part of the Node.js development workflow, providing a standardized way to execute tests for a project. It acts as an alias for <b>npm run test</b>, meaning it looks for a script named "test" within the <i>scripts</i> object of the project's <b>package.json</b> file. When found, it executes this script using the shell. This abstraction allows developers to define any test runner or command (e.g., <i>jest</i>, <i>mocha</i>, <i>vitest</i>, <i>cypress run</i>) as their <i>test</i> script, and other developers can simply use <b>npm test</b> without needing to know the specific underlying command. <b>npm test</b> runs within the project's root directory, with <i>node_modules/.bin</i> automatically added to the <i>PATH</i>, making executables installed via <b>npm install</b> directly available. It's typically used after installing dependencies (<b>npm install</b>) to ensure code quality and functionality. If no <i>test</i> script is explicitly defined, <b>npm</b> will usually indicate an error in newer versions, emphasizing the importance of defining this script for project health.


title: CAVEATS
content:
<b>package.json</b> Requirement: <b>npm test</b> requires a <b>package.json</b> file in the current directory or a parent directory to function correctly, as it relies on the <i>scripts</i> section.<br>Script Definition: The primary functionality of <b>npm test</b> depends on a <i>test</i> script being explicitly defined in <b>package.json</b>. While older <b>npm</b> versions might have attempted default test runners (like <i>tap</i>), modern <b>npm</b> typically errors if the script is missing, promoting best practices.<br>Lifecycle Hooks: <b>npm test</b> automatically runs <i>pretest</i> and <i>posttest</i> scripts if they are defined in <b>package.json</b> before and after the main <i>test</i> script execution, respectively. These can be used for setup or teardown tasks.


title: SCRIPT EXECUTION MECHANISM
content:
<b>npm test</b> is merely a convenience alias for <b>npm run test</b>. It looks for a script named <i>test</i> in the <i>scripts</i> object of the <b>package.json</b> file. The command specified in this <i>test</i> script is then executed in a shell, with the <i>node_modules/.bin</i> directory automatically added to the shell's <i>PATH</i>. This means any executables installed as part of your project's dependencies (e.g., <i>jest</i>, <i>mocha</i>, <i>vitest</i>) are directly runnable without needing their full path.


title: DEFAULT BEHAVIOR (NO SCRIPT)
content:
In earlier versions of <b>npm</b> (e.g., pre-npm v7), if a <i>test</i> script was not explicitly defined in <b>package.json</b>, <b>npm test</b> might attempt to run a default command like <i>node_modules/.bin/tap --bail</i>. However, in modern <b>npm</b> versions (v7 and later), the default behavior if the <i>test</i> script is missing is generally to exit with an error, unless the <b>--if-present</b> flag is used. It is considered best practice to always explicitly define your <i>test</i> script.


title: HISTORY
content:
The <b>npm test</b> command has been a foundational part of the <b>npm</b> CLI since its early days, establishing a consistent and universal method for running project tests in the Node.js ecosystem. Its role as an alias for <b>npm run test</b> simplifies test execution, allowing developers to define complex testing workflows in their <b>package.json</b> while providing a simple, memorable interface. Over time, while the core functionality has remained constant, the default behavior for when no <i>test</i> script is defined has evolved, shifting from attempting to run a default test runner (like <i>tap</i>) to more explicitly requiring the script to be defined, aligning with a stronger emphasis on explicit configuration.


title: SYNOPSIS
content:
<code><b>nstat</b> [ <i>OPTIONS</i> ]</code><br><br>Common <i>OPTIONS</i> include:<br><code><b>nstat</b> [ <b>-a</b> ] [ <b>-z</b> ] [ <b>-s</b> ] [ <b>-t</b> | <b>-T</b> ] [ <b>-o</b> ] [ <b>-d</b> <i>SECONDS</i> ] [ <b>-p</b> <i>PROTOCOL</i> ] [ <b>-n</b> ] [ <b>-r</b> ]</code>


title: PARAMETERS
content:
<b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message and exit.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version of <i>nstat</i> and exit.<br><br><b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show all available statistics, including those typically hidden or deemed less common.<br><br><b><b>-z</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reset protocol statistics to zero. This operation requires root privileges.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display SNMP (Simple Network Management Protocol) statistics. This is the default behavior if no other output format option is specified.<br><br><b><b>-t</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display TCP statistics. This provides detailed counters specific to the Transmission Control Protocol.<br><br><b><b>-T</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display TCP statistics in a more compact, tabular format, suitable for scripts or quick glances.<br><br><b><b>-o</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show obsolete statistics. This option is primarily for backward compatibility and may display metrics that are no longer actively maintained or relevant in modern kernels.<br><br><b><b>-p</b> <i>PROTOCOL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify which protocol's statistics to display. Common values include <i>ip</i>, <i>icmp</i>, <i>tcp</i>, <i>udp</i>. Using this option filters the output to only show metrics for the specified protocol.<br><br><b><b>-d</b> <i>SECONDS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display statistics repeatedly, updating every <i>SECONDS</i>. This allows for live monitoring of statistic changes over time.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show numerical addresses instead of trying to resolve them into hostnames or service names.<br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show raw statistics. This option displays the direct, untranslated values from the kernel without human-readable labels, useful for parsing.<br><br>


title: DESCRIPTION
content:
<i>nstat</i> is a utility from the <i>iproute2</i> package that provides detailed network statistics. Unlike older tools like <i>netstat -s</i> which might present a consolidated view, <i>nstat</i> aims to expose the raw, kernel-level statistics directly from files such as <I>/proc/net/snmp</I> and <I>/proc/net/netstat</I>. It can display various counters for IP, ICMP, TCP, UDP, and other protocols, offering insights into network activity, errors, and performance.<br><br>This command is particularly useful for network administrators and developers who need to monitor the health and behavior of network interfaces and protocol stacks. Its output is generally more structured and machine-readable compared to <i>netstat -s</i>, making it suitable for scripting and parsing. <i>nstat</i> is preferred in modern Linux environments for its accuracy and direct access to kernel statistics. It helps in diagnosing network issues like dropped packets, retransmissions, and protocol errors by presenting cumulative counts since system boot.


title: CAVEATS
content:
Resetting statistics using the <i>-z</i> option requires root privileges.<br><br>The statistics displayed by <i>nstat</i> are cumulative since system boot, meaning they are not reset unless explicitly done so with the <i>-z</i> option (or a system reboot). There is no built-in mechanism to show differential statistics directly for a specific time interval, although the <i>-d</i> option can be used to observe changes over time.<br><br>The specific set of available statistics and their names may vary slightly across different Linux kernel versions and <i>iproute2</i> releases.


title: DATA SOURCES
content:
<i>nstat</i> retrieves its information primarily from the <I>/proc/net/snmp</I> and <I>/proc/net/netstat</I> pseudo-files within the kernel's virtual filesystem. These files expose various counters maintained by the network stack for different protocols (IP, ICMP, TCP, UDP, etc.), providing a low-level insight into network activity.


title: COMPARISON WITH <I>NETSTAT -S</I>
content:
While <i>netstat -s</i> provides summary statistics for network protocols, <i>nstat</i> is generally considered a more precise and future-proof tool. <i>netstat -s</i> often parses aggregated output, whereas <i>nstat</i> is designed to directly expose the raw kernel counters, frequently presenting more detailed or slightly different metrics consistent with the <i>iproute2</i> philosophy of direct kernel interaction.


title: HISTORY
content:
<i>nstat</i> was introduced as part of the <i>iproute2</i> utilities, a modern suite of network management tools designed to replace the older <i>net-tools</i> (e.g., <i>netstat</i>, <i>route</i>, <i>ifconfig</i>) in Linux distributions. Developed by Alexey Kuznetsov, the <i>iproute2</i> suite aimed to provide more robust, efficient, and extensible network management capabilities aligned with advanced Linux kernel networking features. <i>nstat</i> specifically emerged to offer a more direct and accurate view of kernel-level network protocol statistics, leveraging the <I>/proc/net/snmp</I> and <I>/proc/net/netstat</I> files. Its integration into <i>iproute2</i> emphasizes a unified approach to network configuration and monitoring, providing more granular and machine-readable output compared to its predecessors.


title: PARAMETERS
content:
<b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
<b>nudoku</b> is a free and open-source Sudoku game designed for command-line interfaces. Built using the <i>ncurses</i> library, it provides a clean, interactive terminal-based experience for playing Sudoku puzzles. Users can navigate the grid using arrow keys, input numbers, undo moves, reset the board, or even have the puzzle solved. Its minimalistic design focuses on providing a pure Sudoku experience without graphical distractions, making it ideal for Linux enthusiasts, developers, or anyone who prefers a terminal-centric workflow.<br><br>It generates new puzzles randomly and allows for easy interaction directly within the terminal, embodying the Unix philosophy of doing one thing well. The game is self-contained and manages all gameplay logic, including difficulty generation and error checking, within the terminal environment.


title: CAVEATS
content:
Requires a terminal emulator with <i>ncurses</i> support.<br>All gameplay controls are internal to the application and are not exposed as command-line parameters.<br>Does not inherently support saving game state between sessions.


title: IN-GAME CONTROLS
content:
Once <b>nudoku</b> is launched, the following keys are used for interaction:<br><ul><li>Arrow keys: Navigate the grid.</li><li>Number keys (1-9): Enter a number into the selected cell.</li><li>0 or DEL or BACKSPACE: Clear the selected cell.</li><li>u: Undo the last move.</li><li>r: Reset the current puzzle.</li><li>n: Start a new random puzzle.</li><li>s: Solve the current puzzle (fills in all correct numbers).</li><li>c: Check for errors (highlights incorrect entries).</li><li>q or ESC: Quit the game.</li><li>h: Toggle help message within the game.</li></ul>


title: HISTORY
content:
<b>nudoku</b> emerged as a lightweight, terminal-native solution for playing Sudoku, leveraging the well-established <i>ncurses</i> library. Its development focused on simplicity and direct playability within the command line, aligning with the ethos of many minimalist Linux utilities. While the exact initial release date might vary across distributions, its presence in many repositories signifies its acceptance as a standard, accessible Sudoku game for CLI environments, offering a classic game experience without GUI dependencies.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays comprehensive help information about command usage and available options.<br><br><b>-L, --list-gpus</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all detected NVIDIA GPUs in the system, along with their unique identifiers (UUIDs).<br><br><b>-q, --query</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Queries and displays specific GPU attributes. Often used with <I>--display</I> and <I>--format</I> to customize output.<br><br><b>-l, --loop=<interval></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continuously displays GPU information, refreshing the output every <I>interval</I> seconds.<br><br><b>-i, --id=<index_or_uuid></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific GPU for operations or queries by its numerical index or UUID.<br><br><b>-a, --all-info</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all available comprehensive information for all GPUs in the system.<br><br><b>--format=<format></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format, such as <I>csv</I>, <I>xml</I>, or <I>json</I>, for parsed data.<br><br><b>--display=<field_list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which fields or categories of information to display in the output when querying, e.g., 'utilization.gpu,memory.used'.<br><br><b>--gpu-reset</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to reset the GPU to a healthy state, which can resolve certain errors. This operation often requires root privileges.<br><br><b>--persistence-mode=<0|1></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the GPU persistence mode. '1' keeps the GPU driver loaded even when not in use, improving application startup times.<br><br><b>--power-limit=<watts></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum power consumption limit (in watts) for the specified GPU. Requires root privileges.<br><br><b>--driver-version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the installed NVIDIA display driver version.<br><br><b>--cuda-version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the CUDA driver version supported by the current NVIDIA display driver.<br><br>


title: DESCRIPTION
content:
<i>nvidia-smi</i> (NVIDIA System Management Interface) is a powerful command-line utility provided by NVIDIA for monitoring and managing NVIDIA GPUs. It offers real-time insights into various GPU metrics, including utilization percentages, memory usage, temperature, power consumption, and clock speeds. Furthermore, it allows users to inspect processes running on the GPU, set various operational parameters like power limits, and manage GPU persistence modes. This tool is indispensable for system administrators, deep learning practitioners, and anyone working with NVIDIA hardware, providing critical information for performance optimization, troubleshooting, and resource management within Linux environments.


title: CAVEATS
content:
<i>nvidia-smi</i> requires an installed NVIDIA graphics driver and a supported NVIDIA GPU. Many management operations, such as GPU resets or setting power limits, require root (superuser) privileges. The availability of certain features and metrics may vary across different NVIDIA driver versions and GPU architectures.


title: UNDERLYING TECHNOLOGY
content:
<i>nvidia-smi</i> serves as a command-line interface to the <b>NVIDIA Management Library (NVML)</b>. NVML is a C-based API that provides a robust and comprehensive set of functions for programmatically managing and monitoring NVIDIA GPUs. All data reported and actions performed by <i>nvidia-smi</i> are facilitated through NVML.


title: TYPICAL USE CASES
content:
Commonly used by data scientists and machine learning engineers to observe GPU utilization during model training and inference. System administrators employ it for resource allocation, troubleshooting, and ensuring optimal performance in GPU-accelerated server farms. Enthusiasts and gamers use it to monitor GPU health, temperature, and performance metrics.


title: HISTORY
content:
Developed by NVIDIA Corporation, <i>nvidia-smi</i> has been an integral part of the NVIDIA driver package for many years. It evolved from a basic monitoring tool into a comprehensive management interface, continually updated to support new GPU features, architectures, and the demands of high-performance computing and AI workloads. Its ubiquitous presence makes it the de facto standard for GPU monitoring and management on Linux systems with NVIDIA hardware.


title: PARAMETERS
content:
<b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the version number and exit.<br><br><b>--no-init</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent loading the user's initialization file (e.g., <I>init.lisp</I>).<br><br><b>--config <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a custom directory for configuration files.<br><br><b>--data <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a custom directory for browser data (e.g., history, cookies).<br><br><b>--profile <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load a specific user profile for isolation of data and settings.<br><br><b>--url <url></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open a specific URL upon launch. Can be used multiple times to open multiple URLs.<br><br><b>--script <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Execute a Lisp script file upon browser startup.<br><br><b>--eval <code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Evaluate arbitrary Common Lisp code within the browser's environment.<br><br><b>--remote-eval <code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Evaluate Common Lisp code on a running <i>Nyxt</i> instance via the socket.<br><br>


title: DESCRIPTION
content:
<i>Nyxt</i> is a powerful and highly extensible web browser designed for keyboard-centric power users. Written in <I>Common Lisp</I>, it embraces a modal editing philosophy, similar to <I>Emacs</I> or <I>Vim</I>, allowing users to navigate and interact with web content using efficient keybindings and a robust internal command system. Unlike conventional browsers, <i>Nyxt</i> emphasizes customizability, enabling users to define their own commands, modify browser behavior, and integrate external tools directly. Its unique architecture makes it ideal for those seeking to tailor their browsing experience precisely to their workflow, minimizing mouse usage and maximizing efficiency. It provides features like multiple buffers (tabs), an advanced bookmarking system, and a powerful command line (M-x). The browser's open-source nature and Lisp foundation foster a vibrant community and offer unparalleled opportunities for deep personalization.


title: CAVEATS
content:
<i>Nyxt</i> has a significant learning curve, especially for users unfamiliar with modal editing or keyboard-driven interfaces. Its focus on customization can be daunting for beginners. While highly functional, it might not support all web features (e.g., certain DRM content or specific proprietary media plugins) as seamlessly as mainstream browsers. Performance can vary depending on system resources and the complexity of user configurations.


title: EXTENSIBILITY THROUGH LISP
content:
One of <i>Nyxt</i>'s core strengths is its foundation in <I>Common Lisp</I>. This allows for unparalleled extensibility; users can write their own commands, hooks, and extensions directly in Lisp. This deep programmability enables integration with external programs, automation of tasks, and creation of highly personalized workflows that go beyond what's possible in most other browsers.


title: KEYBOARD-CENTRIC DESIGN
content:
<i>Nyxt</i> is built from the ground up for keyboard interaction, minimizing the need for a mouse. It features customizable, modal keybindings inspired by <I>Emacs</I> and <I>Vim</I>, allowing for efficient navigation, tab management, and command execution. This design caters to power users who prioritize speed and efficiency through keyboard shortcuts.


title: POWERFUL COMMAND LINE (M-X)
content:
Similar to <I>Emacs</I>'s M-x (or `C-c C-c` in <i>Nyxt</i>), the browser provides an internal command line interface where users can type and execute any of <i>Nyxt</i>'s built-in commands or their own custom functions. This makes it incredibly easy to access features, navigate history, manage bookmarks, and perform complex operations without ever touching the mouse or navigating menus.


title: HISTORY
content:
Initially known as <I>Next browser</I>, <I>Nyxt</I> was conceived around 2017 with the goal of creating a modern, highly extensible, and keyboard-centric web browser written in <I>Common Lisp</I>. The project aimed to address the desire for a browser that could be as programmable and efficient as popular text editors like <I>Emacs</I> and <I>Vim</I>. The name was later changed to <I>Nyxt</I> to establish a distinct identity and avoid potential trademark conflicts. It continues to be actively developed by a dedicated open-source community, consistently evolving with new features and improvements driven by its unique architectural choices.


title: PARAMETERS
content:
<b><b>-b</b> <i>&lt;bt_addr&gt;</i>, <b>--bluetooth</b> <i>&lt;bt_addr&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Bluetooth device address to connect to, e.g., '00:11:22:AA:BB:CC'.<br><br><b><b>-i</b> <i>&lt;irda_addr&gt;</i>, <b>--irda</b> <i>&lt;irda_addr&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IrDA device address to connect to.<br><br><b><b>-u</b> <i>&lt;usb_dev_id&gt;</i>, <b>--usb</b> <i>&lt;usb_dev_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the USB device ID, particularly useful for devices like certain Nokia phones.<br><br><b><b>-t</b> <i>&lt;port&gt;</i>, <b>--tty</b> <i>&lt;port&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the serial port (TTY) to connect to, e.g., <i>/dev/ttyS0</i> or <i>/dev/rfcomm0</i>.<br><br><b><b>-s</b> <i>&lt;channel&gt;</i>, <b>--channel</b> <i>&lt;channel&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the OBEX channel number (port) on the remote device.<br><br><b><b>-N</b>, <b>--no-authentication</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables OBEX authentication, which can be useful for some devices or setups.<br><br><b><b>-a</b>, <b>--auto</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically attempts to connect using the first available protocol (Bluetooth, IrDA, USB, TTY).<br><br><b><b>-L</b>, <b>--list-devices</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists available OBEX devices that <i>obexftp</i> can detect and potentially connect to.<br><br><b><b>-p</b> <i>&lt;file&gt;</i>, <b>--put</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uploads the specified local file to the current working folder on the remote device.<br><br><b><b>-g</b> <i>&lt;file&gt;</i>, <b>--get</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads the specified remote file from the device to the current local directory.<br><br><b><b>-l</b> <i>&lt;folder&gt;</i>, <b>--list</b> <i>&lt;folder&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the contents of the specified remote folder. If no folder is provided, lists the contents of the current remote directory.<br><br><b><b>-c</b> <i>&lt;folder&gt;</i>, <b>--change-folder</b> <i>&lt;folder&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the current working folder on the remote device to the specified folder.<br><br><b><b>-P</b> <i>&lt;folder&gt;</i>, <b>--create-folder</b> <i>&lt;folder&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new folder with the specified name on the remote device.<br><br><b><b>-d</b> <i>&lt;file&gt;</i>, <b>--delete</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes the specified file or empty folder on the remote device.<br><br><b><b>-o</b>, <b>--opp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the OBEX Object Push Profile (OPP) for communication, commonly used for transferring vCards or calendar entries.<br><br><b><b>-f</b>, <b>--ftp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the OBEX File Transfer Profile (FTP) for general file system operations like listing, putting, and getting files.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of output, providing more detailed information about the connection and transfer process.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with command usage and exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of <i>obexftp</i> and exits.<br><br>


title: DESCRIPTION
content:
<i>obexftp</i> is a command-line client for the Object Exchange (OBEX) protocol. It enables users to transfer files to and from OBEX-capable devices, most commonly older mobile phones, PDAs, and embedded systems. <i>obexftp</i> supports various transport layers including <i>Bluetooth</i>, <i>IrDA</i>, <i>USB</i> (for specific devices like Nokia), and serial (TTY) connections.<br><br>It can perform operations like listing directories, putting (uploading) files, getting (downloading) files, changing directories, creating and deleting folders, and some device-specific synchronization operations. It's particularly useful for interacting with devices that don't support modern file transfer protocols like MTP or ADB but rely on OBEX for communication.


title: CAVEATS
content:
<i>obexftp</i> primarily supports older devices that communicate using the OBEX protocol, often via Bluetooth or IrDA. Modern smartphones generally use MTP (Media Transfer Protocol) or ADB (Android Debug Bridge) for file transfer, making <i>obexftp</i> less relevant for them. Establishing a connection, especially over Bluetooth, may require proper device pairing and setup of the underlying Bluetooth stack on the Linux system.


title: CONNECTION METHODS
content:
<i>obexftp</i> supports various underlying transport methods for connecting to devices: <i>Bluetooth</i> (<b>-b</b>), <i>IrDA</i> (<b>-i</b>), <i>USB</i> (<b>-u</b>, for specific devices like Nokia phones), and <i>serial (TTY)</i> (<b>-t</b>). Users typically need to ensure their system's respective hardware and software stacks (e.g., Bluetooth daemon) are properly configured and devices are paired before attempting a connection.


title: PROFILES (OPP/FTP)
content:
<i>obexftp</i> can operate using different OBEX profiles depending on the desired operation. The <i>Object Push Profile</i> (OPP, specified with <b>-o</b>) is commonly used for transferring single objects such as contacts (vCards) or calendar entries (vCal). The <i>File Transfer Profile</i> (FTP, specified with <b>-f</b>) is used for general file system operations like listing directories, uploading files (put), and downloading files (get).


title: HISTORY
content:
<i>obexftp</i> is a component of the <i>OpenOBEX</i> project, which provides an open-source implementation of the OBEX protocol. It emerged to address the need for Linux users to interact with and transfer data to and from mobile phones and PDAs prevalent in the early to mid-2000s, before MTP and ADB became standard for mobile device connectivity. While its primary use cases have diminished with technological advancements, it remains a valuable tool for specific legacy devices and embedded systems.


title: PARAMETERS
content:
<b>--config <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative configuration file path instead of the default.<br><br><b>--sync <account></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Synchronize only a specific account defined in the configuration file.<br><br><b>--all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Synchronize all accounts defined in the configuration file.<br><br><b>--folder <folder></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Synchronize only a specific folder within an account, if supported by the configuration.<br><br><b>--quick</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a faster synchronization by primarily checking for new messages and skipping existing ones.<br><br><b>--keep-alive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keep the IMAP connection alive for continuous synchronization, especially useful in daemon mode.<br><br><b>--daemon</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run <i>offlineimap</i> in the background as a daemon process, continuously synchronizing.<br><br><b>--timeout <seconds></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a timeout for network operations to prevent indefinite hangs.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose debugging output, useful for troubleshooting issues.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the <i>offlineimap</i> version information and exit.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a help message with available options and exit.<br><br>


title: DESCRIPTION
content:
<i>offlineimap</i> is a powerful and flexible command-line utility designed for <b>bidirectional synchronization</b> of IMAP mailboxes with local maildirs or Mailboxes. It allows users to access their emails offline, make changes (like marking as read, deleting, or moving messages), and have these changes synchronized back to the IMAP server. This tool is particularly useful for mobile users, those with unreliable internet connections, or anyone who desires a local backup of their email. It handles attachments, flags, and folder structures, ensuring a consistent state between the server and the local machine. Configuration is typically managed via a <i>~/.offlineimaprc</i> file, providing granular control over accounts, folders, and synchronization behaviors, including scheduling and error handling. Its design allows for complex setups, including syncing multiple accounts and filtering specific folders.


title: CAVEATS
content:
Large mailboxes or frequent synchronization can consume significant network bandwidth and local disk space. Configuration can be complex due to its flexibility, requiring careful setup of passwords and folder mappings, often with security considerations for password storage. Issues may arise with specific IMAP server implementations or non-standard behaviors. Running in daemon mode requires proper process management, error logging, and resource monitoring.


title: CONFIGURATION FILE
content:
The primary way to configure <i>offlineimap</i> is through a configuration file, typically located at <i>~/.offlineimaprc</i> or in <i>~/.config/offlineimap/config</i>. This file uses an INI-like syntax to define accounts, remote and local repositories, folder filters, synchronization options, and hooks for custom actions. It's crucial for defining how emails are fetched, stored, and synchronized bidirectionally, supporting multiple accounts and complex filtering rules.


title: COMMON USAGE PATTERNS
content:
Common usage patterns for <i>offlineimap</i> include:<br><ul><li>As a <b>one-shot command</b>: Running `offlineimap` (or `offlineimap --all`) to sync all configured accounts once, often manually or triggered by an event.</li><li>As a <b>cron job</b>: Scheduled to run periodically (e.g., every 5-15 minutes) to keep local mailboxes relatively up-to-date with server changes.</li><li>As a <b>daemon</b>: Using `offlineimap --daemon` to continuously monitor for changes and synchronize in the background, providing near real-time updates. This mode requires careful configuration of logging and error handling.</li></ul>


title: HISTORY
content:
<i>offlineimap</i> has been under active development for many years, primarily written in Python. It emerged as a robust and flexible solution for offline IMAP access, providing a reliable way to manage email locally. Its longevity and comprehensive feature set have made it a staple in the command-line email ecosystem, particularly for users leveraging text-based email clients like <i>mutt</i> or <i>neomutt</i>, contributing significantly to the ability to work with email even without a constant internet connection.


title: SYNOPSIS
content:
<b>ogrmerge.py</b> [-o <I>output_dataset</I>] [-nln <I>new_layer_name</I>] [-f <I>format</I>] [-single] [-overwrite] [-append] [options] <I>src_dataset</I> [<I>src_dataset</I> ...]


title: PARAMETERS
content:
<b>-o <I>output_dataset</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the filename for the output dataset.<br><br><b>-nln <I>new_layer_name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a new name to the output layer created by the merge operation.<br><br><b>-f <I>format</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format (e.g., "ESRI Shapefile", "GeoJSON", "GPKG").<br><br><b>-single</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Merges all input layers from all source datasets into a single output layer.<br><br><b>-overwrite</b><br>&nbsp;&nbsp;&nbsp;&nbsp;If the output dataset or layer already exists, this option forces it to be overwritten.<br><br><b>-append</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Appends data to an existing output dataset instead of creating a new one. Requires the output dataset to exist.<br><br><b>-s_srs <I>srs_def</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overrides the Spatial Reference System (SRS) of input layers before processing.<br><br><b>-t_srs <I>srs_def</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reprojects input layers to this target Spatial Reference System (SRS) during the merge.<br><br><b>-a_srs <I>srs_def</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a specified SRS to the output layer without performing any reprojection.<br><br><b>-src_sql <I>sql_statement</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes an SQL statement against each individual source dataset before merging.<br><br><b>-sql <I>sql_statement</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes an SQL statement against a combined virtual dataset of all inputs, allowing cross-dataset queries.<br><br><b>-select <I>field_list</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of fields to select from the input layers for the output.<br><br><b>-where <I>sql_where_clause</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies an SQL WHERE clause to filter features from input layers before they are merged.<br><br><b>-progress</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a progress monitor on the console during the merge operation.<br><br><b>-skipfailures</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows the process to continue even if some features fail to write to the output.<br><br><b>-co <I>NAME=VALUE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes creation options specific to the chosen output format (e.g., "ENCODING=UTF-8").<br><br><b><I>src_dataset</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more input source dataset filenames or data sources to be merged. Multiple sources are space-separated.<br><br>


title: DESCRIPTION
content:
<b>ogrmerge.py</b> is a powerful Python utility provided as part of the GDAL/OGR library, designed for combining multiple vector data sources into a single output file or layer. It supports a wide array of OGR-supported formats, including common ones like Shapefile, GeoJSON, KML, and GPX. This script offers significant flexibility, allowing users to append to an existing dataset, create new layers, or overwrite existing ones based on their needs. Furthermore, it supports advanced filtering and transformation operations, such as selecting specific fields, applying SQL queries, reprojecting data to a different coordinate system, and filtering features using WHERE clauses. It serves as an indispensable tool for data consolidation and preparation in various geospatial workflows, streamlining the process of integrating disparate vector datasets and enabling complex data manipulation during the merge operation.


title: CAVEATS
content:
Memory usage can be significant for very large datasets, especially when using the <b>-single</b> option, as all features might be processed in memory before writing. When merging layers with different schemas, <b>ogrmerge.py</b> attempts to reconcile them by creating a union of fields; however, users should carefully verify the resulting schema and handle potential data type mismatches. For extremely large datasets or highly complex operations, direct use of <b>ogr2ogr</b> or custom scripting might offer more granular control over memory and performance.


title: SCHEMA HANDLING
content:
When merging layers with differing schemas, <b>ogrmerge.py</b> attempts to create a union of all fields from the input layers. Fields that are present in some but not all input features will typically be assigned a NULL value in the output for features where they are missing. Users should review the resulting schema carefully to ensure it meets their requirements and to account for potential data type inconsistencies that might arise from disparate sources.


title: VIRTUAL DATASETS AND SQL
content:
The ability to use <b>-src_sql</b> and <b>-sql</b> options provides powerful in-memory manipulation capabilities before data is written to the output. <b>-src_sql</b> applies to individual source datasets, allowing for per-source queries. In contrast, <b>-sql</b> operates on a virtual dataset composed of all input sources, enabling more complex cross-dataset queries and transformations to be performed as part of the merge process.


title: HISTORY
content:
<b>ogrmerge.py</b> is a relatively modern utility within the GDAL/OGR ecosystem, leveraging Python's flexibility for scripting complex OGR operations. Its development addresses the increasing need for user-friendly tools to combine geospatial vector data, building upon the core capabilities of <b>ogr2ogr</b> but offering a more streamlined interface specifically for merging tasks. It emerged as part of the broader GDAL project, which started in the late 1990s and expanded to include OGR for comprehensive vector data processing.


title: PARAMETERS
content:
<b>--input <PATH>, -i <PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the input directory for analysis (defaults to current directory).<br><br><b>--output <PATH>, -o <PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write output to a file instead of standard output.<br><br><b>--ascii-input <FILE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a custom ASCII art file.<br><br><b>--ascii-language <LANGUAGE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the ASCII art to be of a specific language (e.g., 'Rust', 'Python').<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the information in JSON format.<br><br><b>--display-mode <MODE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the display mode. Can be 'compact' or 'full'.<br><br><b>--no-info <MODULE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable a specific information module (e.g., 'git', 'dependencies', 'languages'). Can be used multiple times.<br><br><b>--disable-metadata</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable all metadata information (project name, author, license, etc.).<br><br><b>--exclude <GLOB></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude files or directories matching the glob pattern.<br><br><b>--include <GLOB></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include files or directories matching the glob pattern (useful with --exclude).<br><br><b>--branch <BRANCH_NAME></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Analyze a specific Git branch.<br><br><b>--config <FILE_PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a custom configuration file.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help message and exit.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
onefetch is a command-line Git information tool written in Rust that fetches and displays Git repository details directly in your terminal. It presents a concise summary of your project, including programming languages used, lines of code, contributors, commits, license, dependencies, and more. What sets onefetch apart is its ability to integrate ASCII art representing the dominant programming language or a custom image, making the output visually appealing and easily digestible. It's highly customizable, allowing users to select which information to display, format the output (e.g., JSON), and even specify custom ASCII art or disable certain modules. It's ideal for quickly understanding project demographics, showcasing your work, or simply adding a touch of flair to your command-line interface.


title: CAVEATS
content:
Performance on very large repositories with extensive commit history might be slow.<br>It relies on a valid Git repository being present in the specified or current directory.<br>The accuracy of dependency detection varies by language and relies on common manifest files.


title: CONFIGURATION
content:
onefetch supports a configuration file (e.g., <i>~/.config/onefetch/config.toml</i> or <i>.onefetch.toml</i> in the project root) for persistent customization. This file allows users to set default options for ASCII art, disabled modules, colors, and more, avoiding the need to specify them with command-line arguments every time.


title: INSTALLATION
content:
Typically installed via package managers (e.g., <i>cargo install onefetch</i>, or from distribution repositories like <i>apt</i>, <i>dnf</i>, <i>brew</i>). Rust's robust ecosystem makes cross-platform compilation straightforward.


title: HISTORY
content:
onefetch was created by <i>o2sh</i> and is written in Rust, leveraging Rust's performance and memory safety. It was inspired by similar tools like <i>neofetch</i> but focuses specifically on Git repository information. Its development has been driven by the open-source community, with continuous improvements in feature set, language support, and customization options since its initial release, establishing itself as a popular tool for developers to get quick, aesthetically pleasing insights into their projects.


title: PARAMETERS
content:
<b><I>FILE_OR_URL</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to files, directories, or Uniform Resource Locators (URLs) to be opened with their default associated application. The command intelligently determines the type of resource and invokes the appropriate system handler.<br><br>


title: DESCRIPTION
content:
The <I>open.fish</I> command refers to the <I>open</I> function provided as a standard utility within the <I>Fish shell</I> (Friendly Interactive SHell). It serves as a convenient, cross-platform wrapper to launch files, directories, or Uniform Resource Locators (URLs) using the system's default application. This function abstracts away the differences between operating systems: it typically uses <I>xdg-open</I> on Linux and other Unix-like systems, the native <I>open</I> command on macOS, and the <I>start</I> command (via <I>cmd.exe</I>) on Windows. Its primary goal is to provide a consistent user experience for opening resources regardless of the underlying OS, allowing users to quickly interact with documents, media, web links, or browse directory contents without needing to remember platform-specific commands. It intelligently determines the type of resource and invokes the appropriate handler.


title: CAVEATS
content:
The behavior of <I>open</I> is entirely dependent on the underlying operating system's default application associations and the presence of utility commands like <I>xdg-open</I> (Linux), the native <I>open</I> (macOS), or <I>start</I> (Windows). Consequently, its functionality may vary slightly across different environments or if these underlying commands are misconfigured or absent. The <I>open.fish</I> function itself does not provide its own specific options (like <I>--app</I>); rather, it passes all arguments directly to the determined system command.


title: PLATFORM ABSTRACTION
content:
The primary benefit of the <I>open</I> function is its ability to abstract away platform-specific commands for opening files and URLs. It automatically detects the operating system and dispatches the request to the appropriate underlying command, such as <I>xdg-open</I> on Linux, <I>open</I> on macOS, and <I>start</I> on Windows. This ensures a consistent user experience regardless of the environment, making shell scripts and interactive usage more portable.


title: RELIANCE ON SYSTEM DEFAULTS
content:
The behavior of <I>open</I> is heavily dependent on the system's configured default applications. For instance, a <I>.pdf</I> file will open with the system's default PDF viewer, and a URL will open in the default web browser. Users need to configure their operating system's default application settings for <I>open</I> to behave as expected for various file types and protocols. This function does not provide a mechanism to override these system-wide defaults directly.


title: HISTORY
content:
The <I>open</I> function is a staple of the <I>Fish shell</I>, designed to enhance its cross-platform usability. Its inclusion reflects Fish's philosophy of providing user-friendly, out-of-the-box functionality. While the specific implementation might evolve, the core idea of abstracting system-specific file opening mechanisms has been a consistent feature of Fish for many years, simplifying common tasks for users migrating between different operating systems or those working in diverse environments. It leverages existing platform utilities rather than reinventing the wheel, demonstrating Fish's practical approach to common shell tasks.


title: SYNOPSIS
content:
<b>openai</b> <i>&lt;resource&gt;</i> <i>&lt;action&gt;</i> [<i>&lt;options&gt;</i>]<br><b>openai</b> <i>--help</i><br><b>openai</b> <i>&lt;resource&gt;</i> <i>--help</i>


title: PARAMETERS
content:
<b><i>--api-key &lt;key&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the OpenAI API key for authentication. Overrides the `OPENAI_API_KEY` environment variable.<br><br><b><i>--organization &lt;id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the OpenAI organization ID for billing and usage. Overrides `OPENAI_ORGANIZATION`.<br><br><b><i>--help</i>, <i>-h</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the `openai` command, or for a specific resource/action.<br><br><b><i>--model &lt;model_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the ID of the OpenAI model to use (e.g., `gpt-4o`, `text-embedding-3-small`). Common for `chat completions` and `embeddings`.<br><br><b><i>--messages &lt;json_string&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;For `chat completions`, a JSON string representing an array of message objects (e.g., `"[{'role': 'user', 'content': 'Hello'}]"`).<br><br><b><i>--file &lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to a file, typically used for `files upload` or `fine_tuning create`.<br><br><b><i>--id &lt;resource_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the unique identifier of a resource (e.g., file ID, model ID, assistant ID) for actions like `retrieve` or `delete`.<br><br>


title: DESCRIPTION
content:
The `openai` command is the official command-line interface (CLI) for interacting with the OpenAI API. Unlike traditional Linux utilities, it's a Python-based tool, typically installed via `pip`. It provides a convenient way to access various OpenAI services directly from your terminal, including generating text and chat completions, managing files, fine-tuning models, and utilizing embedding or assistant APIs. Users can programmatically send requests for tasks such as creating conversational agents, performing embeddings for semantic search, or moderating content. The CLI simplifies common API operations, allowing for quick prototyping, scripting, and direct interaction without writing extensive code. It requires an API key, which authenticates requests and determines access to specific models and services, making it a powerful tool for developers and researchers leveraging OpenAI's advanced AI capabilities.


title: CAVEATS
content:
<b>Not a native Linux command:</b> It is a Python package CLI and must be installed separately, typically using `<i>pip</i>`.<br><b>API Key Required:</b> Usage necessitates an active OpenAI API key, usually set as an environment variable (`<i>OPENAI_API_KEY</i>`) or passed via the `<i>--api-key</i>` option.<br><b>Cost Implications:</b> Interactions with the OpenAI API via this command incur charges based on usage (e.g., tokens processed, model type, compute time).<br><b>API Evolution:</b> The command's functionality, available resources, and options are subject to ongoing changes and updates in the underlying OpenAI API.


title: INSTALLATION
content:
The `openai` CLI is distributed as part of the `<i>openai</i>` Python package. To install it, ensure you have Python and `<i>pip</i>` configured, then execute:<br><i>pip install openai</i><br>It is highly recommended to install Python packages, including `<i>openai</i>`, within a <a href="https://docs.python.org/3/library/venv.html" target="_blank">virtual environment</a> to manage dependencies and avoid conflicts.


title: COMMON RESOURCES AND ACTIONS
content:
The `openai` CLI organizes its functionality around resources and actions. Common top-level resources include `<i>chat</i>`, `<i>completions</i>`, `<i>embeddings</i>`, `<i>files</i>`, `<i>fine_tuning</i>`, `<i>models</i>`, `<i>moderations</i>`, `<i>assistants</i>`, `<i>threads</i>`, `<i>messages</i>`, `<i>runs</i>`, and `<i>vector_stores</i>`. Typical actions performed on these resources are `<i>create</i>`, `<i>list</i>`, `<i>retrieve</i>`, and `<i>delete</i>`.<br><br><b>Examples:</b><br>To create a chat completion:<br><i>openai chat completions create --model gpt-4o --messages "[{'role': 'user', 'content': 'Hello!'}]"</i><br><br>To list all available OpenAI models:<br><i>openai models list</i><br><br>To upload a file for fine-tuning or assistants:<br><i>openai files upload --file ./my_data.jsonl --purpose fine-tune</i>


title: HISTORY
content:
The `openai` command-line interface emerged as a component of the official Python client library for the OpenAI API. Its development has closely paralleled the growth and evolution of OpenAI's suite of AI models and services, from early text completion engines to sophisticated chat, embedding, and assistant APIs. The CLI has undergone significant architectural updates, particularly with the release of the `openai` Python client library version 1.0.0 and subsequent versions, which introduced a more structured and resource-oriented subcommand design. This evolution aimed to provide a consistent and intuitive way for developers and researchers to quickly test, script, and manage their interactions with OpenAI's capabilities directly from the command line, facilitating rapid prototyping and integration of AI services.


title: SEE ALSO
content:
<b>pip</b>(1): The Python package installer, crucial for installing the `<i>openai</i>` CLI., <b>python</b>(1): The runtime environment for the `<i>openai</i>` CLI, as it is a Python application., <b>curl</b>(1): A command-line tool for transferring data with URLs, often used for direct HTTP API interaction, which the `<i>openai</i>` CLI simplifies and abstracts.


title: SYNOPSIS
content:
<b>openshot-render</b> <i>&lt;input_project_file&gt;</i> <i>&lt;output_file&gt;</i> [<i>options</i>]


title: PARAMETERS
content:
<b><i>&lt;input_project_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the OpenShot project file (.osp) to be rendered.<br><br><b><i>&lt;output_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The desired path and filename for the rendered video output. The file extension will typically determine the container format if not specified otherwise.<br><br><b>--export-profile <i>&lt;profile_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a pre-defined export profile (e.g., 'Web', 'DVD', 'HDV'). This often sets a combination of format, codec, and resolution.<br><br><b>--video-format <i>&lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the video container format (e.g., 'mp4', 'webm', 'mkv', 'mov').<br><br><b>--video-codec <i>&lt;codec&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the video codec (e.g., 'libx264', 'libvpx', 'prores', 'h265').<br><br><b>--audio-format <i>&lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the audio container format (e.g., 'aac', 'opus', 'ac3'). Note: This is often tied to the video container.<br><br><b>--audio-codec <i>&lt;codec&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the audio codec (e.g., 'aac', 'libopus', 'ac3').<br><br><b>--resolution <i>&lt;WxH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output video resolution (e.g., '1920x1080', '1280x720', '640x480').<br><br><b>--fps <i>&lt;rate&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the frames per second for the output video (e.g., '24', '25', '30', '60').<br><br><b>--quality <i>&lt;0-100&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output video quality, where 0 is lowest and 100 is highest. This often impacts bitrate and file size.<br><br><b>--bitrate <i>&lt;kbps&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target video bitrate in kilobits per second (e.g., '5000k' for 5 Mbps). Applies to video codec.<br><br><b>--overwrite</b><br>&nbsp;&nbsp;&nbsp;&nbsp;If the output file already exists, overwrite it without prompting.<br><br><b>--start <i>&lt;seconds&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts rendering the video from the specified time in seconds.<br><br><b>--end <i>&lt;seconds&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ends rendering the video at the specified time in seconds.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed progress and debugging information during rendering.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available command-line options.<br><br>


title: DESCRIPTION
content:
The <b>openshot-render</b> command-line utility allows users to render OpenShot Video Editor projects (.osp files) without needing to open the full graphical user interface. This is particularly useful for scripting, automation of video exports, batch processing of multiple projects, or running renders on headless servers. It provides various options to control the output format, codec, resolution, quality, and specific segments of the video, offering flexibility for integration into automated workflows or custom build systems. It leverages the rendering engine of OpenShot to process the project file and output a finished video according to the specified parameters.


title: CAVEATS
content:
<b>openshot-render</b> requires a full OpenShot Video Editor installation to function, as it relies on OpenShot's underlying libraries and rendering engine. It might be resource-intensive, especially for long projects or high-resolution outputs. Error messages can sometimes be cryptic, and extensive debugging might require inspecting OpenShot's logs or running the GUI to diagnose project issues.


title: HISTORY
content:
<b>openshot-render</b> is an integral part of the OpenShot Video Editor project, first released in 2008 by Jonathan Thomas. As OpenShot evolved into a robust open-source video editor, the need for command-line rendering capabilities became apparent to support automation and server-side operations, leading to the development and inclusion of this utility. It leverages the FFmpeg library for much of its encoding and decoding work, consistent with OpenShot's own backend.


title: PARAMETERS
content:
<b><b>genrsa</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates an RSA private key. Essential for creating the cryptographic foundation for digital certificates.<br><br><b><b>req</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a Certificate Signing Request (CSR) for obtaining a certificate from a Certificate Authority (CA), or creates a self-signed certificate.<br><br><b><b>x509</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages X.509 certificates. Used for displaying certificate content, converting formats, signing new certificates, or verifying existing ones.<br><br><b><b>pkcs12</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Processes PKCS#12 files (.pfx or .p12), which often bundle a private key and its corresponding certificate chain into a single, password-protected file.<br><br><b><b>s_client</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Implements a generic SSL/TLS client that can connect to a remote host, providing useful information for debugging SSL/TLS connections.<br><br><b><b>dgst</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Computes message digests (hashes) of files or data using various cryptographic hash algorithms (e.g., SHA256, MD5).<br><br><b><b>enc</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Encrypts and decrypts files using various symmetric encryption algorithms (e.g., AES, DES).<br><br><b><b>verify</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verifies a certificate chain against a set of trusted certificates.<br><br><b><b>ciphers</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all supported SSL/TLS cipher suites and their details.<br><br><b><b>speed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs benchmarks of cryptographic algorithms to measure system performance.<br><br>


title: DESCRIPTION
content:
OpenSSL is a robust, commercial-grade, and full-featured toolkit implementing the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library. The `openssl` command-line tool provides a vast array of cryptographic functions, enabling users to perform crucial security-related tasks directly from the terminal. This includes generating cryptographic keys (e.g., RSA, ECC), creating and managing digital certificates (X.509), handling Certificate Signing Requests (CSRs), and encrypting/decrypting data. <br><br>It is an indispensable tool for securing network communications, widely used in web servers (for HTTPS), email servers, VPNs, and various client applications. System administrators, developers, and security professionals rely on it for tasks like setting up secure websites, managing Public Key Infrastructure (PKI) elements, and performing cryptographic tests or operations.


title: CAVEATS
content:
OpenSSL is incredibly powerful but has a steep learning curve due to its extensive functionality and often cryptic command-line interface. Incorrect usage can lead to serious security vulnerabilities. It's crucial to keep your OpenSSL installation updated to patch known security vulnerabilities, such as the infamous Heartbleed bug. Always refer to the specific command's man page for precise options and usage.


title: MODES OF OPERATION
content:
The <b>openssl</b> command can be used both interactively for complex certificate management and configuration tasks, and in scripts for automation of routine cryptographic operations like key generation or certificate renewal.


title: CONFIGURATION FILE
content:
Many operations within <b>openssl</b>, especially certificate authority (CA) functions and certificate extensions, are governed by a configuration file, typically <i>openssl.cnf</i>. This file allows for highly customized cryptographic policies and settings.


title: LIBRARY VS. COMMAND-LINE TOOL
content:
It's important to distinguish that OpenSSL is primarily a cryptographic library (<i>libcrypto</i> and <i>libssl</i>) used by countless applications. The <b>openssl</b> command is the command-line interface to a subset of this library's vast capabilities, making cryptographic functions accessible directly to users and scripts.


title: HISTORY
content:
The OpenSSL project began in 1998, based on an earlier project called SSLeay developed by Eric A. Young and Tim J. Hudson. It quickly became the dominant open-source implementation of SSL/TLS protocols and cryptographic libraries. Its widespread adoption made it a critical component of global internet infrastructure. A significant event in its history was the discovery of the Heartbleed bug in 2014, a critical vulnerability that highlighted the need for more robust development and auditing of the library. This led to increased funding, scrutiny, and even forks like LibreSSL and BoringSSL, emphasizing its fundamental role in cybersecurity.


title: SYNOPSIS
content:
<b>openssl genrsa</b> [<i>options</i>] [<i>numbits</i>]<br><br><b>numbits</b>: The desired bit length of the RSA private key (e.g., 2048, 4096).


title: PARAMETERS
content:
<b><i>numbits</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The desired bit length for the RSA key. Common values are 2048 or 4096 bits. Higher values increase security but also generation time and computational load. If omitted, OpenSSL defaults to 2048 bits.<br><br><b>-out <i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output file for the generated private key. If not provided, the key is written to standard output (stdout).<br><br><b>-passout <i>arg</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a passphrase for encrypting the private key. The <i>arg</i> can be a literal string, an environment variable, a file, or a prompt specification (e.g., 'pass:your_password', 'env:MY_PASS', 'file:/path/to/passfile').<br><br><b>-des | -des3 | -aes128 | -aes192 | -aes256 | -camellia128 | -camellia192 | -camellia256</b><br>&nbsp;&nbsp;&nbsp;&nbsp;These options specify the symmetric encryption algorithm to use for encrypting the private key on disk. If none of these are specified, the key is stored unencrypted (which is generally not recommended for production).<br><br><b>-f4 | -no-f4</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use (or don't use) the default public exponent 0x10001 (Fermat F4). This is the standard and recommended value for RSA public keys and is the default behavior.<br><br><b>-rand <i>file(s)</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more files to seed the pseudo-random number generator (PRNG). Multiple files should be separated by ':' (on Linux/macOS) or ';' (on Windows). Crucial for generating strong, unpredictable keys.<br><br><b>-engine <i>id</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a hardware engine to use for cryptographic operations, potentially enhancing security and performance for key generation, especially in environments with hardware security modules (HSMs).<br><br><b>-noout</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the output of the encoded version of the private key. Useful when only wanting to inspect the key with '-text' or check its properties without saving it.<br><br><b>-text</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the key in a human-readable text format, including modulus, public exponent, private exponent, prime factors, and other RSA parameters. This output is helpful for debugging and verification.<br><br><b>-verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides more verbose output during key generation, useful for understanding the process, especially when troubleshooting entropy or performance issues.<br><br>


title: DESCRIPTION
content:
The <b>openssl genrsa</b> command is a utility within the OpenSSL cryptographic toolkit used to generate RSA private keys. RSA (Rivest–Shamir–Adleman) is an asymmetric cryptographic algorithm widely used for secure data transmission and digital signatures. It relies on a pair of keys: a public key, which can be shared freely, and a private key, which must be kept secret. This command specifically focuses on creating the private component of this pair.<br><br>When executed, <b>genrsa</b> generates a new RSA private key of a specified bit length (e.g., 2048 or 4096 bits), which determines the key's strength. Longer keys offer greater security but require more computational resources. The generated key is typically saved in PEM (Privacy-Enhanced Mail) format, which is a Base64 encoded text format. Optionally, the private key can be encrypted on disk using a symmetric cipher (like DES3 or AES256) and a passphrase for added security. This command is a fundamental step in setting up secure communication channels, such as for SSL/TLS certificates, SSH authentication, or digital signing applications.


title: CAVEATS
content:
<b>1. Randomness is paramount:</b> The security of your RSA key relies heavily on the quality of the random numbers used during its generation. Ensure your system has sufficient entropy. A low-entropy environment can lead to weak, predictable keys. Consider using the <b>-rand</b> option or a hardware random number generator if available.<br><br><b>2. Passphrase protection:</b> If you encrypt your private key with a passphrase (highly recommended for production use), choose a strong, unique passphrase. Losing or forgetting this passphrase will render your private key unusable, potentially compromising your entire security setup.<br><br><b>3. Key length choice:</b> While longer keys offer more security, they also increase computational overhead for cryptographic operations. Currently, 2048-bit RSA keys are generally considered secure for most applications, with 4096-bit keys offering enhanced long-term security. Very short keys (e.g., 512 or 1024 bits) are considered insecure for new deployments and should be avoided.<br><br><b>4. Key exposure:</b> Once generated, the private key must be handled with extreme care. It should never be exposed, committed to public repositories, or transmitted insecurely. Its compromise can lead to impersonation, data decryption, or unauthorized signing.


title: COMMON USAGE EXAMPLE
content:
To generate a 2048-bit RSA private key and save it to a file named <i>private_key.pem</i>, prompting for a passphrase to encrypt it with AES-256:<br><code>openssl genrsa -aes256 -out private_key.pem 2048</code><br><br>To generate an unencrypted 4096-bit RSA key (less secure for production but useful for specific scenarios like testing):<br><code>openssl genrsa -out unencrypted_key.pem 4096</code><br><br>To view the contents of an existing private key (requires passphrase if encrypted):<br><code>openssl rsa -in private_key.pem -text -noout</code> (Note: this uses <i>openssl rsa</i>, not <i>genrsa</i>, to process an existing key).


title: PUBLIC EXPONENT (F4)
content:
The <b>-f4</b> option (which is the default behavior if not explicitly overridden by <b>-no-f4</b>) sets the public exponent to 65537 (0x10001). This value, also known as Fermat F4, is a prime number and is widely used because it significantly speeds up public key operations (like encryption and signature verification) compared to other exponents. While theoretically a fixed public exponent could be a weak point if combined with other vulnerabilities, for RSA, it is generally considered safe and standard practice.


title: HISTORY
content:
The RSA algorithm itself was publicly described in 1977 by Rivest, Shamir, and Adleman, becoming one of the first public-key cryptosystems and foundational to modern cryptography. The <b>openssl</b> command-line tool, and specifically its <b>genrsa</b> subcommand, emerged as a vital component of the OpenSSL project, which was initiated in 1998 as a successor to SSLeay. OpenSSL quickly became the de-facto standard for implementing SSL/TLS, securing web communications, VPNs, and various other network services.<br><br><b>genrsa</b> has been a core part of OpenSSL from its early days, providing the essential capability to create the private key components necessary for SSL/TLS certificates, secure shell (SSH) communications, and other applications relying on asymmetric encryption. Its design reflects the common requirements for key generation: configurable key lengths, options for key encryption, and integration with the wider OpenSSL ecosystem for certificate management.


title: SYNOPSIS
content:
openssl prime [<i>-help</i>] [<i>-hex</i>] [<i>-safe</i>] [<i>-rand file...</i>] [<i>-in file</i>] [<i>-out file</i>] [<i>-generate</i>] [<i>-bits n</i>] [<i>number...</i>]


title: PARAMETERS
content:
<b><i>-help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints a usage message for the command.<br><br><b><i>-hex</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies that the input number(s) provided are in hexadecimal format.<br><br><b><i>-safe</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When generating primes, ensures that the prime <i>p</i> is a "safe" prime. A safe prime <i>p</i> is one where <i>(p-1)/2</i> is also prime.<br><br><b><i>-rand file...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more files containing random data used to seed the random number generator, crucial for generating cryptographically secure primes.<br><br><b><i>-in file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an input file from which to read numbers (one per line) for primality checking. If not provided, numbers are taken from the command line arguments.<br><br><b><i>-out file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an output file to write generated prime numbers to. If this option is omitted, primes are printed to standard output (stdout).<br><br><b><i>-generate</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs the command to generate prime numbers instead of checking existing ones.<br><br><b><i>-bits n</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the desired bit length <i>n</i> for the prime numbers to be generated. This option is used in conjunction with <i>-generate</i>.<br><br><b><i>number...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more numbers to be checked for primality. These can be decimal or hexadecimal (when <i>-hex</i> is used).<br><br>


title: DESCRIPTION
content:
The <i>openssl prime</i> command is a versatile utility integrated into the OpenSSL cryptographic toolkit, serving dual purposes: primality testing and prime number generation. When used for testing, it efficiently determines whether one or more input numbers are prime, leveraging a sophisticated probabilistic algorithm like Miller-Rabin. This makes it a practical choice for verifying large numbers encountered in cryptographic contexts.<br><br>For generation, the command can produce new prime numbers of a specified bit length, which are crucial components for algorithms such as RSA and Diffie-Hellman key exchange. A particularly useful feature is the ability to generate "safe" primes (where <i>p</i> and <i>(p-1)/2</i> are both prime), which offer enhanced security properties in certain cryptographic constructions. Its directness and integration with OpenSSL make it an indispensable tool for developers and security professionals working with foundational number theory aspects of cryptography.


title: CAVEATS
content:
The primality test used by <i>openssl prime</i> (typically Miller-Rabin) is probabilistic. While highly reliable for cryptographic purposes, it offers a very low probability of declaring a composite number as prime. Generating very large primes, especially safe primes, can be computationally intensive and time-consuming. For security-sensitive applications, always ensure the random number generator is adequately seeded using the <i>-rand</i> option.


title: <B>INPUT/OUTPUT HANDLING</B>
content:
When performing primality checks, if the <i>-in file</i> option is not specified, the numbers to be checked are read directly from the command line arguments. Similarly, when generating prime numbers, if the <i>-out file</i> option is not used, the generated prime(s) will be printed to standard output.


title: <B>PRIMALITY TESTING METHOD</B>
content:
The <i>openssl prime</i> command primarily employs the Miller-Rabin primality test. This is a probabilistic algorithm, meaning it does not offer absolute certainty but rather a very high probability of correctness. For the practical purposes of cryptography, the likelihood of a false positive (a composite number being identified as prime) is astronomically low, making it a reliable choice for key generation and validation.


title: HISTORY
content:
The <i>prime</i> command is a foundational utility within the OpenSSL project, providing essential functionality for prime number operations. These operations are fundamental to many asymmetric cryptographic algorithms like RSA and Diffie-Hellman. Its development has progressed alongside the general evolution of the OpenSSL toolkit, continuously refined for efficiency and security over the years, reflecting the ongoing needs of cryptographic applications.


title: SYNOPSIS
content:
<pre><b>openssl req</b> [<I>options</I>]</pre><br>
<br>
<I>Common usage examples:</I><br>
<br>
<b>openssl req</b> -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr<br>
<I>(Generates a new RSA 2048-bit key and a corresponding CSR, without passphrase)</I><br>
<br>
<b>openssl req</b> -x509 -newkey rsa:2048 -nodes -keyout selfsigned.key -out selfsigned.crt -days 365<br>
<I>(Generates a self-signed certificate valid for 365 days, without passphrase)</I><br>
<br>
<b>openssl req</b> -in server.csr -noout -text<br>
<I>(Displays the content of an existing CSR in human-readable text format)</I>


title: PARAMETERS
content:
<b><b>-new</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new Certificate Signing Request (CSR).<br><br><b><b>-newkey</b> <I>alg</I>:<I>bits</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a new private key of the specified algorithm (e.g., <I>rsa</I>:<I>2048</I>, <I>ec</I>:<I>prime256v1</I>) alongside the CSR.<br><br><b><b>-nodes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not encrypt the private key. This is useful for automated server startup but reduces security if the key is compromised.<br><br><b><b>-keyout</b> <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output file for the generated private key.<br><br><b><b>-out</b> <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output file for the CSR or self-signed certificate.<br><br><b><b>-x509</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs a self-signed certificate instead of a CSR. Requires the <I>-days</I> option.<br><br><b><b>-days</b> <I>num</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the validity period in days for a self-signed certificate when used with <I>-x509</I>.<br><br><b><b>-in</b> <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an input CSR file for processing (e.g., viewing its content).<br><br><b><b>-text</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the content of the CSR or certificate in human-readable text format.<br><br><b><b>-noout</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the output of the encoded CSR or certificate, useful when combined with <I>-text</I>.<br><br><b><b>-subj</b> <I>"/C=US/ST=State/..."</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the subject Distinguished Name (DN) directly from the command line, bypassing interactive prompts.<br><br><b><b>-config</b> <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative OpenSSL configuration file instead of the default (<I>/etc/ssl/openssl.cnf</I>).<br><br><b><b>-sha256</b>, <b>-sha384</b>, <b>-sha512</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the message digest algorithm to be used for signing the request (e.g., SHA256).<br><br><b><b>-extensions</b> <I>section</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the configuration file section containing X.509 extensions for the CSR or certificate (e.g., <I>v3_req</I>).<br><br>


title: DESCRIPTION
content:
The <b>openssl req</b> command is a fundamental utility within the OpenSSL toolkit, primarily used for managing X.509 Certificate Signing Requests (CSRs). It enables users to create new CSRs from scratch, which are essential when requesting digital certificates from a Certificate Authority (CA). During the CSR generation process, <b>openssl req</b> can also generate a new private key (e.g., RSA, EC) that will correspond to the public key embedded in the CSR. This command supports various configuration options for specifying the subject Distinguished Name (DN), key algorithms, and certificate extensions. Beyond CSR creation, it can also process existing CSRs, allowing users to view their content in human-readable format. Furthermore, <b>openssl req</b> has the capability to generate self-signed X.509 certificates directly, which are useful for development, testing, or internal non-CA-validated purposes, where immediate trust is not required. It's a cornerstone for establishing secure communications in various network services by providing the means to initiate the certificate issuance lifecycle.


title: CAVEATS
content:
<I>Security of Private Keys</I>: Private keys generated by <b>openssl req</b> must be kept absolutely secure. If an encrypted private key is used (i.e., <I>-nodes</I> is not specified), you must remember the passphrase, and it should be strong.<br>
<br>
<I>Configuration Files</I>: The behavior of <b>openssl req</b> is heavily influenced by the OpenSSL configuration file (typically <I>/etc/ssl/openssl.cnf</I>). This file defines default values for DN fields, allowed certificate extensions, and policy.<br>
<br>
<I>Self-Signed vs. CA-Signed</I>: A self-signed certificate created with <I>-x509</I> is generally not trusted by browsers or clients without manual intervention, as it lacks validation from a recognized Certificate Authority. They are suitable for internal or testing environments only.


title: CONFIGURATION FILE (<I>OPENSSL.CNF</I>)
content:
The <I>openssl.cnf</I> file defines global OpenSSL settings and sections specific to <b>openssl req</b>, such as the <I>[ req ]</I> section for general request settings (e.g., default_bits, default_md) and <I>[ v3_req ]</I> for specifying X.509 extensions like Subject Alternative Names (SANs) or key usages. Customizing this file allows for streamlined, consistent CSR generation.


title: DISTINGUISHED NAME (DN) COMPONENTS
content:
When creating a CSR, you will be prompted for Distinguished Name (DN) components like Country Name (C), State or Province Name (ST), Locality Name (L), Organization Name (O), Organizational Unit Name (OU), and Common Name (CN). The Common Name (CN) is particularly important as it usually represents the fully qualified domain name (FQDN) of the server for which the certificate is being issued, or the name of the entity being certified.


title: HISTORY
content:
The <b>openssl req</b> command is an integral part of the OpenSSL project, a robust open-source implementation of the SSL/TLS protocols and cryptographic libraries. It has been a core utility since the early days of OpenSSL's development, evolving in tandem with X.509 certificate standards and PKI practices. Its widespread adoption across Linux and Unix-like systems has made it the de facto tool for generating Certificate Signing Requests for web servers (e.g., Apache, Nginx) and other secure services, playing a critical role in securing internet communications.


title: SYNOPSIS
content:
<b><I>openstack server</I></b> <I>&lt;subcommand&gt;</I> [<I>options</I>] [<I>arguments</I>] <br><br>Common examples:<br><b><I>openstack server</I></b> create [<I>options</I>] <I>&lt;server-name&gt;</I><br><b><I>openstack server</I></b> list [<I>options</I>]


title: PARAMETERS
content:
<b><b><I>--image</I></b> <I>&lt;image&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the image name or ID to use when creating a server. (Used with <b><I>openstack server create</I></b>)<br><br><b><b><I>--flavor</I></b> <I>&lt;flavor&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the flavor name or ID (defines vCPU, RAM, disk size) for the server. (Used with <b><I>openstack server create</I></b>)<br><br><b><b><I>--network</I></b> <I>&lt;network&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the network name or ID to attach the server to. Can be used multiple times. (Used with <b><I>openstack server create</I></b>)<br><br><b><b><I>--security-group</I></b> <I>&lt;group&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a security group name or ID to apply to the server. Can be used multiple times. (Used with <b><I>openstack server create</I></b>)<br><br><b><b><I>--key-pair</I></b> <I>&lt;key-pair&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the key pair to inject into the server, enabling SSH access. (Used with <b><I>openstack server create</I></b>)<br><br><b><b><I>--volume</I></b> <I>&lt;volume&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attach an existing volume to the server. (Used with <b><I>openstack server create</I></b>)<br><br><b><b><I>--boot-from-volume</I></b> <I>&lt;size&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create and boot a server from a new volume of the specified size (in GiB). (Used with <b><I>openstack server create</I></b>)<br><br><b><b><I>--user-data</I></b> <I>&lt;file&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a file containing user data to be executed on first boot. (Used with <b><I>openstack server create</I></b>)<br><br><b><b><I>--wait</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Wait for the command to complete, e.g., for server creation to finish provisioning. (Used with <b><I>openstack server create</I></b>)<br><br><b><b><I>--long</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List additional fields in output, such as image ID, flavor ID, or network ID. (Used with <b><I>openstack server list</I></b>)<br><br><b><b><I>--all-projects</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List resources from all projects (requires administrative privileges). (Used with <b><I>openstack server list</I></b>)<br><br>


title: DESCRIPTION
content:
The command refers to the <b><I>openstack server</I></b> subcommand group of the unified OpenStack client. It provides a comprehensive interface for users to interact with and manage virtual machine instances (also known as servers or compute instances) within an OpenStack cloud environment. <br><br>Users can perform a wide array of operations including provisioning new instances, listing existing ones, viewing detailed information about a specific server, and managing their lifecycle (starting, stopping, rebooting, suspending, resuming). It also allows for advanced configurations such as attaching volumes, managing security groups, injecting user data, and configuring networks, making it a critical tool for cloud administrators and developers alike to control their compute resources efficiently and programmatically.


title: CAVEATS
content:
The term "<b><I>openstack-server</I></b>" is not a standalone executable command. It refers to the server management capabilities accessed via the <b><I>openstack</I></b> client using its <b><I>server</I></b> subcommand group (e.g., <b><I>openstack server create</I></b>, <b><I>openstack server list</I></b>). <br><br>Usage requires the OpenStack client library to be installed and properly configured with valid credentials (e.g., via environment variables like <b><I>OS_CLOUD</I></b> or <b><I>OS_AUTH_URL</I></b>, <b><I>OS_USERNAME</I></b>, etc.) to connect to an OpenStack cloud. Permissions granted to the authenticated user determine which operations can be performed.


title: COMMON SERVER SUBCOMMANDS
content:
Beyond creating servers, the <b><I>openstack server</I></b> group offers a rich set of subcommands for managing instances:<br><b><I>list</I></b>: Displays a list of all accessible servers.<br><b><I>show</I></b> <I>&lt;server&gt;</I>: Shows detailed information about a specific server.<br><b><I>delete</I></b> <I>&lt;server&gt;</I>: Deletes one or more servers.<br><b><I>reboot</I></b> <I>&lt;server&gt;</I>: Reboots a server.<br><b><I>start</I></b> <I>&lt;server&gt;</I>: Starts a stopped server.<br><b><I>stop</I></b> <I>&lt;server&gt;</I>: Stops a running server.


title: AUTHENTICATION AND CONFIGURATION
content:
To use the <b><I>openstack</I></b> client, you must configure your environment for authentication. This typically involves setting environment variables (e.g., <b><I>OS_AUTH_URL</I></b>, <b><I>OS_USERNAME</I></b>, <b><I>OS_PASSWORD</I></b>, <b><I>OS_PROJECT_NAME</I></b>) or using a clouds.yaml file and setting the <b><I>OS_CLOUD</I></b> environment variable. These credentials allow the client to connect to your OpenStack cloud and perform operations.


title: HISTORY
content:
Before the unified <b><I>openstack</I></b> client, users would often interact with various OpenStack services using separate client tools, such as <b><I>nova client</I></b> for compute (servers), <b><I>glance client</I></b> for images, and <b><I>neutron client</I></b> for networking. The <b><I>openstack</I></b> client was developed to consolidate these disparate tools into a single, consistent command-line interface. The <b><I>server</I></b> subcommands encapsulate the core functionality previously offered by the <b><I>nova client</I></b>, providing a more streamlined and intuitive experience for managing virtual machines across the entire OpenStack ecosystem.


title: SEE ALSO
content:
<b><I>openstack</I></b>(1), <b><I>openstack image</I></b> (part of openstack client), <b><I>openstack flavor</I></b> (part of openstack client), <b><I>openstack network</I></b> (part of openstack client), <b><I>nova</I></b> (OpenStack Compute service)


title: PARAMETERS
content:
<b>--config <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a configuration file. This is the most common way to run <b>openvpn</b>, as the file contains all necessary parameters for a VPN connection.<br><br><b>--client</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable client mode. This implicitly sets options appropriate for connecting to an OpenVPN server.<br><br><b>--server <I>subnet</I> <I>netmask</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable server mode, assigning IP addresses to connecting clients from the specified subnet and netmask.<br><br><b>--remote <I>host</I> [<I>port</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the remote server's hostname or IP address and optional port to connect to in client mode.<br><br><b>--dev <I>tun|tap</I>[<I>X</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the virtual network device type (<b>tun</b> for routed IP, <b>tap</b> for Ethernet bridging) and optionally its number.<br><br><b>--ca <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Certificate Authority (CA) certificate file for verifying peer certificates.<br><br><b>--cert <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the local peer's certificate file.<br><br><b>--key <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the local peer's private key file.<br><br><b>--tls-auth <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a shared secret key for HMAC authentication of all TLS packets, providing an additional layer of security.<br><br><b>--daemon</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run <b>openvpn</b> as a background daemon after initial setup.<br><br><b>--verb <I>n</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set output verbosity level (0-11). Higher numbers provide more detailed logs.<br><br><b>--log <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Direct log output to a specified file instead of standard output/error.<br><br><b>--push "<I>option</I>"</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Server-side only. Push an option to connecting clients. E.g., `--push "redirect-gateway def1"` to route client traffic through the VPN.<br><br>


title: DESCRIPTION
content:
<b>openvpn</b> is a highly versatile, open-source software application that implements virtual private network (VPN) techniques for creating secure point-to-point or site-to-site connections. It operates by establishing encrypted tunnels across public networks, enabling users to securely access private network resources or browse the internet anonymously.<br>OpenVPN utilizes a custom security protocol based on SSL/TLS for key exchange and supports various encryption ciphers and authentication methods, including certificates, smart cards, and username/password. It can operate in either routed (TUN device) or bridged (TAP device) configurations, making it adaptable to diverse network setups. Its robust feature set, cross-platform compatibility, and ability to traverse NATs and firewalls have made it a widely adopted solution for secure remote access and network linking.


title: CAVEATS
content:
Using <b>openvpn</b> typically requires root privileges to create virtual network interfaces (TUN/TAP devices) and configure network routing. <br>The configuration process can be complex, especially for server setups or advanced scenarios involving routing and firewall rules. <br>Performance can be influenced by CPU capabilities (for encryption/decryption), network latency, and the chosen cipher strength. <br>Ensure firewall rules are correctly configured to allow OpenVPN traffic on the chosen UDP/TCP port.


title: CONFIGURATION FILES
content:
While <b>openvpn</b> can be run directly with command-line options, it is most commonly used with a single configuration file (e.g., <code>.ovpn</code> files). This file consolidates all settings for a specific VPN connection, including client/server roles, certificates, keys, remote addresses, and network configurations, simplifying deployment and management.


title: TUN VS. TAP DEVICES
content:
<b>openvpn</b> can operate over two types of virtual network interfaces:<br><i>TUN (network TUNnel)</i>: A layer-3 (IP) device that handles IP packets. It's used for routed VPNs where OpenVPN manages IP addressing and routing.<br><i>TAP (network TAP)</i>: A layer-2 (Ethernet) device that handles Ethernet frames. It's used for bridged VPNs, allowing clients to appear on the same Ethernet segment as the server, useful for network services that rely on broadcast traffic.


title: SECURITY MODEL
content:
<b>openvpn</b>'s security is primarily based on the SSL/TLS protocol for secure key exchange, using X.509 certificates for authentication. It supports various strong ciphers for data encryption (e.g., AES-256) and HMAC for message integrity. Additional security can be achieved with <code>--tls-auth</code> for pre-shared key HMAC authentication of all TLS packets, providing protection against denial-of-service attacks and port scanning.


title: HISTORY
content:
<b>openvpn</b> was first released by James Yonan in 2002. It quickly gained popularity as a robust, open-source alternative to proprietary VPN solutions, largely due to its flexibility, strong security features based on SSL/TLS, and ability to traverse challenging network environments. Over the years, it has become a de-facto standard for secure remote access and site-to-site connectivity in the open-source community, with continuous development and a strong user base.


title: SYNOPSIS
content:
<i>ostree</i> [<i>OPTIONS</i>...] <i>COMMAND</i> [<i>ARGS</i>...]<br><br>Common <i>COMMANDS</i> include:<br><i>  status</i><br><i>  pull</i><br><i>  deploy</i><br><i>  rollback</i><br><i>  commit</i><br><i>  ref</i><br><i>  admin</i>


title: PARAMETERS
content:
<b><i>--repo=PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the <i>ostree</i> repository. If not specified, it defaults to the system repository (e.g., <i>/ostree/repo</i>) or the current working directory for administrative commands.<br><br><b><i>--sysroot=PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the system root directory for operations, typically <i>/sysroot</i> in immutable OS setups.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>ostree</i> version information.<br><br><b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows help message for the main command or a specific subcommand (e.g., <i>ostree deploy --help</i>).<br><br><b><i>--variant=NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific repository variant when multiple are configured. Useful in complex multi-repository setups.<br><br><b><i>COMMAND</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A specific operation to perform (e.g., <i>deploy</i>, <i>pull</i>, <i>status</i>). Each command has its own set of arguments and options.<br><br>


title: DESCRIPTION
content:
<i>ostree</i> is a system for atomic filesystem upgrades and deployments. It operates on a Git-like model, managing bootable operating system trees as a series of commits in a content-addressed object store. This allows for transactional updates, meaning an upgrade either fully succeeds or the system remains in its previous state, preventing partial or broken updates.<br><br>It's foundational for immutable operating systems, ensuring consistency, reliability, and easy rollbacks. Instead of individual package updates, <i>ostree</i> deploys entire, tested filesystem trees, making it ideal for large-scale deployments, IoT devices, and container hosts where stability and predictable behavior are paramount.<br><br>Key features include atomic upgrades and rollbacks, deduplication of filesystem content, and support for parallel installations of different OS versions or configurations. It integrates with system bootloaders (like GRUB) to manage boot entries for different deployments.


title: CAVEATS
content:
<i>ostree</i> is not a general package manager; it operates at the level of whole filesystem trees. While it enables layering (e.g., via <i>rpm-ostree</i>), it's not designed for granular package management in the way <i>dnf</i> or <i>apt</i> are. It typically requires specific system architecture and bootloader integration for its full benefits, making it less suitable for traditional mutable Linux distributions.


title: IMMUTABLE OPERATING SYSTEMS
content:
<i>ostree</i> is a core technology behind modern immutable operating systems (e.g., Fedora CoreOS, Endless OS, RHEL for Edge). These systems separate the base OS from user data and applications, ensuring the core OS remains consistent and untampered, which greatly enhances security, reliability, and simplifies management.


title: ATOMIC UPDATES AND ROLLBACKS
content:
One of <i>ostree</i>'s most significant features is its ability to perform atomic updates. This means an update is either fully applied or entirely discarded, preventing systems from entering a half-updated or inconsistent state. If an update causes issues, a user can easily roll back to a previously known good state, enhancing system resilience.


title: CONTENT-ADDRESSABLE STORAGE
content:
Similar to Git, <i>ostree</i> uses content-addressable storage. This means filesystem objects (files, directories) are stored based on their cryptographic hash. This allows for efficient deduplication of common files across different OS versions and deployments, saving disk space and speeding up transfers.


title: HISTORY
content:
<i>ostree</i> originated as part of Project Atomic (later Fedora Atomic Host and RHEL Atomic Host), aiming to bring cloud-native development practices to operating systems. It was designed to provide robust, transactional updates and a foundation for container-centric immutable operating systems. Its development has been driven by the need for more reliable and maintainable system deployments, particularly in environments like edge computing, IoT, and large-scale server infrastructures.


title: SYNOPSIS
content:
<b>osv-scanner</b> [<i>options</i>] [<i>path...</i>]<br><b>osv-scanner</b> [<i>options</i>] --lock-file <i>&lt;file&gt;</i><br><b>osv-scanner</b> [<i>options</i>] --sbom <i>&lt;file&gt;</i><br><b>osv-scanner</b> [<i>options</i>] --docker <i>&lt;image_name&gt;</i>


title: PARAMETERS
content:
<b><b>-D</b>, <b>--directory</b> <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively scan all supported files within the specified directory path.<br><br><b><b>-L</b>, <b>--lock-file</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan a specific package manager lock file or manifest.<br><br><b><b>--sbom</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan a Software Bill of Materials (SBOM) file in SPDX or CycloneDX format.<br><br><b><b>--docker</b> <i>&lt;image_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan a Docker image for vulnerabilities in its installed packages.<br><br><b><b>-o</b>, <b>--output</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the scan results to the specified file instead of standard output.<br><br><b><b>--format</b> <i>&lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output format for the scan results (e.g., table, json, sarif, markdown, gh-annotations).<br><br><b><b>--config</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provide a path to a configuration file for <i>osv-scanner</i> settings.<br><br><b><b>--call-graph</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Analyze call graph information generated by tools like <i>go call-graph</i> to improve vulnerability analysis.<br><br><b><b>--experimental-call-analysis</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable experimental call graph analysis for more precise vulnerability detection.<br><br><b><b>--json-input</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Indicates that the input is a JSON file, typically from <i>go mod graph -json</i>.<br><br><b><b>--ghsa-id</b> <i>&lt;ID&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Fetch and display information for a specific GHSA (GitHub Security Advisory) ID.<br><br><b><b>--osv-id</b> <i>&lt;ID&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Fetch and display information for a specific OSV (Open Source Vulnerability) ID.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version of osv-scanner and exit.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message and exit.<br><br>


title: DESCRIPTION
content:
<i>osv-scanner</i> is a powerful and versatile command-line tool designed to identify known vulnerabilities in your project's dependencies. It leverages the comprehensive OSV (Open Source Vulnerabilities) database, which aggregates vulnerability information from various open-source ecosystems. The scanner supports a wide range of manifest and lock files, including those from popular package managers like npm (package-lock.json), Go (go.mod, go.sum), Python (requirements.txt, Pipfile.lock), Rust (Cargo.lock), Java (pom.xml, build.gradle), and many more.<br><br>Beyond simple lock file scanning, <i>osv-scanner</i> can also process Software Bill of Materials (SBOMs) in SPDX and CycloneDX formats, offering a standardized way to consume vulnerability data. It can scan directories, specific files, or even standard input. Its primary goal is to help developers and security teams proactively detect and mitigate security risks introduced by vulnerable open-source components in their applications, integrating seamlessly into CI/CD pipelines.


title: CAVEATS
content:
While powerful, <i>osv-scanner</i>'s accuracy is dependent on the completeness and timeliness of the OSV database. It requires internet access to query the database. The experimental call analysis features, while promising, may not always yield perfect results and should be used with caution. Like any vulnerability scanner, it may produce false positives or false negatives, and its ability to detect vulnerabilities is limited to known issues recorded in the OSV database, not zero-day exploits or logic bugs.


title: SUPPORTED ECOSYSTEMS
content:
<i>osv-scanner</i> supports a wide array of package manager lock files and manifest files, including but not limited to:<br><ul><li><b>Go:</b> <b>go.mod</b>, <b>go.sum</b></li><li><b>JavaScript/TypeScript:</b> <b>package-lock.json</b>, <b>yarn.lock</b>, <b>pnpm-lock.yaml</b></li><li><b>Python:</b> <b>requirements.txt</b>, <b>Pipfile.lock</b>, <b>poetry.lock</b></li><li><b>Rust:</b> <b>Cargo.lock</b></li><li><b>Java:</b> <b>pom.xml</b>, <b>build.gradle</b>, <b>gradle.lockfile</b></li><li><b>Ruby:</b> <b>Gemfile.lock</b></li><li><b>PHP:</b> <b>composer.lock</b></li><li><b>.NET:</b> <b>packages.lock.json</b></li><li><b>C/C++:</b> <b>conan.lock</b></li></ul><br>It also processes generic SBOMs (Software Bill of Materials) in SPDX and CycloneDX formats, and can scan Docker images.


title: OSV DATABASE
content:
The <i>osv-scanner</i> queries the OSV (Open Source Vulnerabilities) database, a distributed, open, and standardized database for vulnerabilities in open-source projects. Each vulnerability in OSV is identified by an OSV ID and provides detailed information including affected versions, commit ranges, severity, and links to advisories. This centralized database allows for consistent and up-to-date vulnerability information across various ecosystems.


title: HISTORY
content:
Developed by Google, <i>osv-scanner</i> is an integral part of the Open Source Vulnerabilities (OSV) project, launched to provide a unified, open-source tool for consuming and acting on vulnerability data. It aims to leverage the distributed, open OSV database, which aggregates vulnerability information from various ecosystems. Its development focuses on enhancing accuracy, expanding coverage across different programming languages and package managers, and enabling seamless integration into automated CI/CD pipelines to bolster open-source supply chain security.


title: PARAMETERS
content:
<b>-r, --remove</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform the removal of old package versions. This option must be specified for any files to be deleted.<br><br><b>-u, --uninstalled</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove all cached packages that are no longer installed on the system. Can be combined with <i>-r</i>.<br><br><b>-k <num>, --keep <num></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keep <i>num</i> versions of each installed package. The default is 3. A value of 0 means keep all versions (no removal). Only applies to installed packages when combined with <i>-r</i>.<br><br><b>-c <dir>, --cachedir <dir></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative package cache location to operate on, overriding the default.<br><br><b>-d <dir>, --dbpath <dir></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative pacman database location, overriding the default. Useful for custom setups.<br><br><b>-s, --size</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the total size of the package cache before and after the operation. This provides a clear indication of disk space savings.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the names of the files being removed during the operation, providing more detailed feedback.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a help message and exit.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show version information and exit.<br><br>


title: DESCRIPTION
content:
The <b>paccache</b> command is a utility designed for managing the Arch Linux package cache, typically located at <i>/var/cache/pacman/pkg/</i>. <br><br>As packages are updated on a rolling-release distribution like Arch Linux, older versions of packages remain in the cache. While this allows for downgrades or reinstallation without re-downloading, it can consume a significant amount of disk space over time. <br><br><b>paccache</b> helps to mitigate this by intelligently removing older package versions based on specified criteria, such as keeping a certain number of recent versions of installed packages or removing all cached packages that are no longer installed on the system. It's a crucial tool for maintaining disk space and system hygiene on Arch-based systems.


title: CAVEATS
content:
Using <b>paccache</b> to aggressively prune the cache (e.g., <i>-k 1</i> or removing uninstalled packages) can limit your ability to downgrade packages to older versions if a newer update causes issues. Once removed, a package must be re-downloaded if needed again.


title: COMMON USAGE EXAMPLES
content:
Here are some common ways to use <b>paccache</b>:<br><br><i>To keep 3 latest versions of installed packages (default behavior for <i>-r</i>)</i>:<br><code>sudo paccache -r</code><br><br><i>To keep only the current version and one previous version of installed packages</i>:<br><code>sudo paccache -r -k 1</code><br><br><i>To remove all uninstalled packages from the cache</i>:<br><code>sudo paccache -r -u</code><br><br><i>To keep only the current version of installed packages and remove all uninstalled packages</i>:<br><code>sudo paccache -r -uk 0</code><br><br><i>To display cache size before and after, and remove packages</i>:<br><code>sudo paccache -r -s</code>


title: HISTORY
content:
<b>paccache</b> is not part of the core <i>pacman</i> package manager but is instead provided by the <i>pacman-contrib</i> package. It was developed as a complementary utility to address the common issue of ballooning package cache sizes in Arch Linux's rolling release model, where frequent updates can rapidly accumulate old package versions.


title: SYNOPSIS
content:
<B>pacman</B> <I>[operation]</I> <I>[options]</I> <I>[targets]</I><br><br><B>Common Operations:</B><br>&nbsp;&nbsp;<B>-S</B>, <B>--sync</B> <I>[packages...]</I><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Synchronize packages (install/upgrade, database sync).<br>&nbsp;&nbsp;<B>-R</B>, <B>--remove</B> <I>[packages...]</I><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove packages from the system.<br>&nbsp;&nbsp;<B>-U</B>, <B>--upgrade</B> <I>[file...]</I><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Install or upgrade packages from a local file.<br>&nbsp;&nbsp;<B>-Q</B>, <B>--query</B> <I>[packages...]</I><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query the package database for installed packages.<br>&nbsp;&nbsp;<B>-F</B>, <B>--files</B> <I>[files...]</I><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query the files database for package ownership.<br>&nbsp;&nbsp;<B>-D</B>, <B>--database</B> <I>[options]</I><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manage the pacman database.<br>&nbsp;&nbsp;<B>-V</B>, <B>--version</B><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Display pacman version.


title: PARAMETERS
content:
<b><B>-S</B>, <B>--sync</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Synchronize packages. Used for installing new packages (<I>-S package_name</I>), upgrading the whole system (<I>-Syu</I>), or refreshing repository databases (<I>-Sy</I>).<br><br><b><B>-R</B>, <B>--remove</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove specified packages. Can be combined with <I>-c</I> (cascade) to remove dependencies, or <I>-n</I> (nosave) to prevent saving config files.<br><br><b><B>-U</B>, <B>--upgrade</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Install or upgrade a package from a local file. Useful for packages not in repositories or for testing.<br><br><b><B>-Q</B>, <B>--query</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Query the local package database. Used to list installed packages (<I>-Q</I>), query a specific package (<I>-Q package_name</I>), or list orphaned packages (<I>-Qdt</I>).<br><br><b><B>-F</B>, <B>--files</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Query the files database. Used to find which package owns a specific file (<I>-F /path/to/file</I>).<br><br><b><B>-D</B>, <B>--database</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manage the pacman database itself, e.g., to check for broken dependencies.<br><br><b><B>-h</B>, <B>--help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message with available options and operations.<br><br><b><B>-V</B>, <B>--version</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the pacman version and build information.<br><br><b><B>-y</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Refresh package databases. Often used with <I>-S</I> as part of <I>-Syu</I>.<br><br><b><B>-u</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Upgrade installed packages. Used with <I>-S</I> as part of <I>-Syu</I>.<br><br><b><B>-c</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Cascade: remove all target packages and all of their dependencies, provided that the dependencies are not required by other explicitly installed packages. Used with <I>-R</I>.<br><br><b><B>-s</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search: search for packages in the repositories (used with <I>-S</I>).<br><br>


title: DESCRIPTION
content:
<B>Please note:</B> The command <I>paci</I> is <B>not a standard Linux command</B> found in common distributions. This analysis is based on the assumption that <I>paci</I> might be a typo for, or a wrapper/alias around, the well-known <B>pacman</B> utility, which is the default package manager for <B>Arch Linux</B> and its derivatives.<br><br><B>pacman</B> is a powerful command-line tool that simplifies the process of installing, updating, and removing software packages. It handles dependency resolution automatically, allowing users to keep their system up-to-date with minimal effort. Its design focuses on speed, simplicity, and flexibility, leveraging pre-built binary packages.


title: CAVEATS
content:
<B>paci</B> is <B>not a recognized standard Linux command</B>. If encountered, it is likely a custom script, an alias, or a very specific utility unique to a particular system or project. The information provided here is based on the assumption that <I>paci</I> might be a typo for <B>pacman</B>.<br><br><B>pacman</B> itself is specific to <B>Arch Linux</B> and its derivatives (e.g., Manjaro, EndeavourOS). It will not work out-of-the-box on Debian/Ubuntu (which use <I>apt</I>), Fedora/RHEL (which use <I>dnf</I>/<I>yum</I>), or other distributions.


title: USAGE EXAMPLES (ASSUMING PACMAN)
content:
<B>Update system:</B><br><I>pacman -Syu</I><br><br><B>Install a package:</B><br><I>pacman -S package_name</I><br><br><B>Remove a package and its unneeded dependencies:</B><br><I>pacman -Rs package_name</I><br><br><B>Search for a package:</B><br><I>pacman -Ss search_term</I><br><br><B>List all installed packages:</B><br><I>pacman -Q</I>


title: HISTORY
content:
<B>pacman</B> was created by Judd Vinet, the founder of Arch Linux, in 2002. It was designed to provide a minimal, yet powerful, package management solution for the Arch Linux distribution. Its development has focused on maintaining a lean and efficient design, with a strong emphasis on speed and dependency resolution. Over the years, it has evolved to support features like delta updates and improved database management, remaining a core component of the Arch Linux ecosystem.


title: SYNOPSIS
content:
<b>packetforge-ng</b> &lt;<i>packet_type_option</i>&gt; [<i>packet_options</i>] [<i>output_options</i>] [<i>misc_options</i>]


title: PARAMETERS
content:
<b><b>-A</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges an ARP request packet. Commonly used in WEP attacks to generate Initialization Vectors (IVs).<br><br><b><b>-N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a WPA Null packet, typically used to trigger WPA/WPA2 handshake captures passively.<br><br><b><b>-M</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a WPA MPDU (Management Packet Data Unit) packet, also for passive WPA handshake capture.<br><br><b><b>-F</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a Fragmentation attack packet. Used in WEP cracking to obtain the PRGA (Pseudo Random Generation Algorithm) key stream.<br><br><b><b>-K</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a Chopchop attack packet. A WEP cracking technique to recover the keystream byte by byte.<br><br><b><b>-S</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a Shared Key authentication attack packet, used to obtain the WEP keystream during shared key authentication.<br><br><b><b>-R</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a re-injection packet based on a previously captured packet. Requires the <b>-r</b> option.<br><br><b><b>-L</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges an ARP replay packet, often used in conjunction with deauthentication and reassociation to stimulate ARP traffic for WEP cracking.<br><br><b><b>-I</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges an ICMP echo request packet.<br><br><b><b>-P</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a WEP custom payload packet. Requires the <b>-p</b> option or <b>-P</b> (file) option to specify payload data.<br><br><b><b>-E</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges an EAPOL Start packet, used to trigger a WPA/WPA2 handshake from a client.<br><br><b><b>-5</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a Caffe-Latte attack packet, a client-less WEP attack that can recover the WEP key.<br><br><b><b>-T</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a T-ReX attack packet, another client-less WEP attack aiming to recover the WEP key.<br><br><b><b>-C</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a custom client frame, such as reassociation requests or probe requests.<br><br><b><b>-H</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forges a custom 802.11 packet. Allows specifying raw hexadecimal data for the entire packet.<br><i>Example: <b>packetforge-ng -H -x 00:11:22:33:44:55:66:77...</b></i><br><br><b><b>-a &lt;BSSID&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the MAC address of the Access Point (BSSID) for the forged packet.<br><br><b><b>-h &lt;MAC&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the source MAC address for the forged packet.<br><br><b><b>-k &lt;MAC&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the destination MAC address for the forged packet.<br><br><b><b>-l &lt;MAC&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the AP MAC address when forging client-related packets (e.g., for reassociation).<br><br><b><b>-s &lt;IP&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the source IP address for forged IP packets (e.g., ICMP).<br><br><b><b>-d &lt;IP&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the destination IP address for forged IP packets (e.g., ICMP).<br><br><b><b>-x &lt;length/hexdata&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the length of the payload in bytes or provides direct hexadecimal data for the payload. Used with <b>-H</b> for raw data.<br><br><b><b>-p &lt;hexdata&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the payload data in hexadecimal format, typically for custom packets.<br><br><b><b>-P &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads the payload data from the specified file.<br><br><b><b>-r &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads a packet from a pcap file for re-injection (used with <b>-R</b>).<br><br><b><b>-w &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the forged packet to the specified file. If not specified, output goes to standard output.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs in quiet mode, suppressing non-essential output messages.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs in verbose mode, showing more detailed information about the packet being forged.<br><br>


title: DESCRIPTION
content:
<i>packetforge-ng</i> is a command-line tool within the <i>aircrack-ng</i> suite designed to forge and craft various types of network packets. It provides advanced control over packet headers and data, allowing users to generate specific frames like ARP requests, ICMP echo requests, or custom-defined 802.11 frames. Its primary use case is in conjunction with <i>aireplay-ng</i> for injecting these crafted packets into a wireless network, often to accelerate data collection for WEP key cracking (e.g., through ARP replay attacks, fragmentation attacks) or to trigger WPA/WPA2 handshake captures. It's a versatile utility for network security testing, penetration testing, and exploiting wireless vulnerabilities by allowing precise control over the packets sent.


title: CAVEATS
content:
<i>packetforge-ng</i> typically requires root privileges to operate effectively due to its low-level interaction with network protocols and interfaces. It is primarily a packet generation tool; for actual packet injection into a network interface, it is commonly used in conjunction with <i>aireplay-ng</i>. Misuse of this tool can lead to network disruption or legal consequences; it should only be used on networks you have explicit permission to test.


title: USAGE CONTEXT
content:
It's important to understand that <i>packetforge-ng</i> does not inject packets directly into the air. Instead, it generates a raw packet in memory and usually writes it to a file or outputs it to standard output. This output is then typically piped to or read by <i>aireplay-ng</i>, which handles the actual injection into a monitor-mode enabled wireless interface. For instance, to perform an ARP replay attack for WEP cracking, one would first use <i>packetforge-ng -A</i> to create the ARP request packet, save it to a file, and then use <i>aireplay-ng -2 -r &lt;file&gt; &lt;interface&gt;</i> to inject it repeatedly.


title: PACKET TYPES OVERVIEW
content:
The diverse range of packet types that <i>packetforge-ng</i> can forge (e.g., ARP, Fragmentation, Caffe-Latte, EAPOL Start) are each designed to exploit specific vulnerabilities or induce certain network behaviors. ARP replay attacks are primarily used in WEP cracking to rapidly generate a large number of Initialization Vectors (IVs). Fragmentation and chopchop attacks aim to directly recover portions of the WEP keystream. WPA-related options (like EAPOL Start or Null/MPDU packets) are used to provoke or passively capture the 4-way handshake, essential for offline WPA/WPA2 password cracking.


title: HISTORY
content:
<i>packetforge-ng</i> is an integral component of the <i>aircrack-ng</i> suite, a widely recognized collection of tools for auditing 802.11 wireless networks. It evolved from the original <i>aircrack</i> project, with the '-ng' (new generation) suffix signifying continuous development and enhancements. Its role has been crucial in advancing WEP and WPA/WPA2 key recovery techniques by providing the capability to precisely craft the specific packets required for various active injection attacks, making it a foundational tool for wireless security research and penetration testing.


title: PARAMETERS
content:
<b><b>-S</b>, <b>--sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Synchronizes packages</I>.<br><br><b><b>-y</b>, <b>--refresh</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Downloads fresh package databases from the server</I>.<br><br><b><b>-u</b>, <b>--sysupgrade</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Upgrades all currently installed packages that are out-of-date</I>.<br><br><b><b>--noconfirm</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Bypasses all confirmation prompts</I>.<br><br><b><b>--ignore &lt;package&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specifies a package or comma-separated list of packages to ignore during upgrade</I>.<br><br><b><b>--ignoregroup &lt;group&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specifies a package group to ignore during upgrade</I>.<br><br><b><b>--print</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Prints the transaction details without executing the upgrade</I>.<br><br><b><b>--overwrite &lt;glob&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Bypasses file conflict checks and forces the installation of conflicting files</I>.<br><br>


title: DESCRIPTION
content:
The command <I>pacman-upgrade</I> is a common user-defined alias or wrapper script often used as a shorthand for <B>sudo pacman -Syu</B> on Arch Linux and its derivatives.<BR><BR>The underlying command, <B>pacman -Syu</B>, performs a full system upgrade. It works by first synchronizing the local package databases with the remote repositories (<B>-y</B> or <B>--refresh</B>), ensuring the system knows about the latest available package versions. After the databases are refreshed, it then proceeds to upgrade all installed packages that are out-of-date on the system (<B>-u</B> or <B>--sysupgrade</B>). The <B>-S</B> or <B>--sync</B> option is the primary operation mode for interacting with synchronized packages.<BR><BR>Regularly executing this command is crucial for maintaining a secure and up-to-date Arch Linux system, providing access to the latest features, bug fixes, and security patches. It should always be run with root privileges.


title: CAVEATS
content:
The command <I>pacman-upgrade</I> itself is typically a user-defined alias or script, not a native <B>pacman</B> subcommand. The actual operation is performed by <B>sudo pacman -Syu</B>. Always run this command with <B>sudo</B> or as root.<BR><BR>Performing a partial upgrade (e.g., <B>pacman -Sy</B> without <B>-u</B>, or stopping the process prematurely) is unsupported and can lead to a broken system. Always allow the full <B>pacman -Syu</B> process to complete.<BR><BR>Before major upgrades, it's highly recommended to check the Arch Linux news for potential manual intervention required for certain packages or configuration changes.


title: <B>USAGE BEST PRACTICES</B>
content:
To maintain a healthy Arch Linux system, run <B>pacman -Syu</B> regularly (e.g., weekly). Always perform a full system upgrade; avoid stopping the process or running <B>pacman -Sy</B> without <B>-u</B>, as this can lead to system instability. After kernel or critical system library updates, a reboot is highly recommended to ensure the new components are in use.<BR><BR>Before initiating a significant upgrade, especially after a period of not updating, check the Arch Linux news site (<I>archlinux.org/news/</I>) for announcements regarding required manual interventions or critical package changes.


title: HISTORY
content:
Pacman (Package Manager) was created by Judd Vinet and first released in 2002 as the default package manager for Arch Linux. It was designed to be lightweight, simple, and fast, managing software packages from official repositories as well as user-built ones. The <B>-Syu</B> combination for a full system upgrade has been a core and fundamental operation of Pacman since its early development, ensuring users can easily keep their systems current with a single, powerful command.


title: SYNOPSIS
content:
The term "pam" refers to the Pluggable Authentication Modules framework itself, not a direct executable command.<br><br>Applications and services on a Linux system (e.g., <I>login</I>, <I>sshd</I>, <I>sudo</I>) are "PAM-aware" and interact with the PAM library. The behavior of PAM for a specific service is controlled by its corresponding configuration file, typically found at <I>/etc/pam.d/<b>&lt;service_name&gt;</b></I>.<br><br>For example, to configure PAM for the <I>login</I> service, you would edit <I>/etc/pam.d/login</I>. Each line in a PAM configuration file defines a module type, control flag, module path, and module arguments.


title: DESCRIPTION
content:
PAM, or Pluggable Authentication Modules, is a powerful and flexible framework used by Linux and Unix-like operating systems to manage authentication, authorization, and session management.<br><br>It provides a standardized way for applications and services (like login, sshd, sudo) to interact with different authentication mechanisms without needing to know the specifics of how those mechanisms work. Instead of each application implementing its own authentication logic (e.g., checking <I>/etc/passwd</I>, LDAP, Kerberos), they delegate these tasks to PAM. PAM then consults a stack of dynamically loadable modules based on configuration files (typically located in <I>/etc/pam.d/</I> or <I>/etc/pam.conf</I>). These modules can handle various tasks such as password verification, account expiration checks, session management, and setting resource limits.<br><br>This modular design allows system administrators to easily configure authentication policies, integrate new authentication methods, and modify security behavior without recompiling applications.


title: CAVEATS
content:
• <b>Not a Command:</b> "pam" itself is not an executable command. It is a system service/library that other applications link against and utilize.<br>• <b>Configuration Complexity:</b> Understanding and correctly configuring PAM can be complex, as it involves multiple module types (auth, account, password, session), control flags (required, requisite, sufficient, optional), and module-specific options. Incorrect configurations can lock users out of the system.<br>• <b>Module-Specific Parameters:</b> Parameters for PAM are typically module-specific arguments specified within its configuration files, not universal command-line options.


title: PAM CONFIGURATION FILES
content:
<br>PAM configuration is primarily managed through files in the <I>/etc/pam.d/</I> directory, where each file corresponds to a specific service (e.g., <I>login</I>, <I>sshd</I>, <I>sudo</I>). If <I>/etc/pam.d/</I> is not present, PAM may fall back to a single configuration file, <I>/etc/pam.conf</I>. Each line in these files typically specifies:<br>• <b>Module Type:</b> (e.g., auth, account, password, session)<br>• <b>Control Flag:</b> (e.g., required, requisite, sufficient, optional)<br>• <b>Module Path:</b> The shared library file for the PAM module (e.g., <I>pam_unix.so</I>)<br>• <b>Module Arguments:</b> Specific options for the module.


title: PAM MODULE TYPES
content:
<br>PAM defines four primary management groups, or 'module types', that determine when a module is invoked:<br>• <b>auth:</b> Handles user authentication, verifying credentials and setting up user credentials.<br>• <b>account:</b> Checks if the user is permitted to log in at this time (e.g., account expiration, time restrictions, remote host restrictions).<br>• <b>password:</b> Deals with updating authentication tokens (e.g., changing passwords).<br>• <b>session:</b> Manages actions taken before and after a service is accessed, such as logging user activity, mounting directories, or setting environmental variables.


title: HISTORY
content:
The development of PAM began in the early 1990s at Sun Microsystems to address the need for a more flexible authentication architecture. Before PAM, applications directly integrated authentication mechanisms, making it difficult to switch or add new methods. PAM was designed to decouple applications from authentication details, allowing administrators to plug in different authentication modules (e.g., for Kerberos, LDAP, or smart cards) without modifying the applications themselves.<br><br>It was adopted by various Unix vendors and eventually became a standard component in Linux distributions, significantly improving system security and flexibility by centralizing authentication policy management. The Linux-PAM project provides the implementation widely used in Linux today.


title: SEE ALSO
content:
<I>pam(7)</I>, <I>pam.conf(5)</I>, <I>pam_unix(8)</I>, <I>login(1)</I>, <I>sshd(8)</I>, <I>sudo(8)</I>


title: SYNOPSIS
content:
<I>auth required pam_faildelay.so [delay=N]</I><br><I>Note: This is a PAM module configuration, not a standalone shell command.</I>


title: PARAMETERS
content:
<b>delay=N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of seconds to delay after a failed authentication attempt. <I>N</I> must be a non-negative integer. If <I>delay</I> is not specified, or if <I>N</I> is 0, no delay is introduced by this module.<br><br>


title: DESCRIPTION
content:
pam_faildelay is a Pluggable Authentication Modules (PAM) module designed to introduce a configurable delay after a failed authentication attempt. This delay helps to mitigate brute-force password guessing attacks by making repeated login attempts more time-consuming for an attacker.<br><br>When configured in a PAM service file (e.g., in <I>/etc/pam.d/sshd</I> or <I>/etc/pam.d/login</I>), this module is typically placed in the <I>auth</I> stack. If the authentication process up to that point has failed (indicated by a non-success return code from previous modules), <I>pam_faildelay.so</I> will pause execution for the specified number of seconds before returning control to the application. This ensures that an attacker cannot rapidly cycle through many password guesses.<br><br>While effective against simple brute-force attacks, it should be used in conjunction with other security measures like account lockout policies to provide comprehensive protection.


title: CAVEATS
content:
pam_faildelay specifically introduces a delay for <I>failed</I> attempts. It does not prevent brute-force attacks entirely, but rather slows them down. For comprehensive security, it should be combined with other PAM modules that implement account lockout mechanisms (e.g., <I>pam_faillock.so</I> or <I>pam_tally2.so</I>) after a certain number of consecutive failed attempts. Setting an excessively long delay might inconvenience legitimate users who mistype their password multiple times, although the primary impact is on automated attack scripts.


title: PLACEMENT IN PAM STACK
content:
For <I>pam_faildelay</I> to be effective, it must be placed within the <I>auth</I> stack of a PAM service configuration. It typically makes sense to place it after modules that perform the actual authentication check (like <I>pam_unix.so</I>), so it can react to their failure status.


title: SECURITY STRATEGY INTEGRATION
content:
While simple, <I>pam_faildelay</I> is a foundational component of a layered security approach. By slowing down attackers, it increases the time required for a successful compromise, providing a longer window for detection and response, especially when combined with logging and intrusion detection systems.


title: HISTORY
content:
The <I>pam_faildelay</I> module is part of the Linux-PAM project, which provides a flexible and modular system for authentication services on Linux. Its development is integrated within the broader evolution of PAM, aiming to offer granular control over authentication policies. This specific module was introduced to address the need for a simple, direct mechanism to deter brute-force attacks by imposing a time penalty on failed login attempts, thereby enhancing system security without complex configurations.


title: PARAMETERS
content:
<b><b>user=</b>[<i>name</i>|<b>!</b><i>name</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the current user's name matches or does not match the given name.<br><br><b><b>uid=</b>[<i>id</i>|<b>!</b><i>id</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the current user's UID matches or does not match the given ID.<br><br><b><b>group=</b>[<i>name</i>|<b>!</b><i>name</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the current user's primary group name matches or does not match.<br><br><b><b>gid=</b>[<i>id</i>|<b>!</b><i>id</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the current user's primary GID matches or does not match.<br><br><b><b>shell=</b>[<i>path</i>|<b>!</b><i>path</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the current user's login shell path matches or does not match the specified path.<br><br><b><b>service=</b>[<i>name</i>|<b>!</b><i>name</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the PAM service name (e.g., <i>login</i>, <i>sshd</i>) matches or does not match.<br><br><b><b>tty=</b>[<i>name</i>|<b>!</b><i>name</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the terminal name (e.g., <i>tty1</i>, <i>pts/0</i>) matches or does not match.<br><br><b><b>ruser=</b>[<i>name</i>|<b>!</b><i>name</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the remote user name matches or does not match (if available from the application).<br><br><b><b>rhost=</b>[<i>host</i>|<b>!</b><i>host</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the remote hostname matches or does not match (if available from the application).<br><br><b><b>luser=</b>[<i>name</i>|<b>!</b><i>name</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the local user name matches or does not match (same as <b>user</b>).<br><br><b><b>sgroup=</b>[<i>name</i>|<b>!</b><i>name</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the current user is a member of the specified supplementary group or not.<br><br><b><b>euid=</b>[<i>id</i>|<b>!</b><i>id</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the effective user ID matches or does not match.<br><br><b><b>egid=</b>[<i>id</i>|<b>!</b><i>id</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the effective group ID matches or does not match.<br><br><b><b>and</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies that all specified conditions must be true for the module to succeed (this is the default behavior).<br><br><b><b>or</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies that at least one of the specified conditions must be true for the module to succeed.<br><br><b><b>quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses informational messages from being logged to syslog (e.g., when conditions are not met).<br><br><b><b>debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Logs additional debug information to syslog, useful for troubleshooting.<br><br><b><b>fail</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reverses the module's default return logic: if conditions are met, the module returns <b>PAM_AUTH_ERR</b> (or <b>PAM_ACCT_EXPIRED</b> for account modules); otherwise, it returns <b>PAM_SUCCESS</b>.<br><br>


title: DESCRIPTION
content:
The <b>pam_succeed_if.so</b> module is a crucial component of the Linux-PAM (Pluggable Authentication Modules) framework, designed to implement conditional access policies. It evaluates a set of criteria (such as user name, UID, group membership, service name, TTY, etc.) and, based on the evaluation result, dictates whether the module should succeed or fail. By default, if all specified conditions are met, the module returns <b>PAM_SUCCESS</b>; otherwise, it fails.<br><br>This module is highly versatile and is commonly used in PAM configuration files (e.g., <i>/etc/pam.d/sshd</i>, <i>/etc/pam.d/login</i>) to enforce specific security rules. For instance, it can restrict SSH access to certain users, allow login only from specific TTYs, or grant elevated privileges based on group membership. Its power lies in its ability to combine multiple conditions using <b>and</b> (default) or <b>or</b> logic, providing fine-grained control over authentication and account management flows.


title: CAVEATS
content:
The order of <b>pam_succeed_if</b> within the PAM configuration file is critical, as PAM processes modules sequentially. Misconfiguration can lead to unexpected access behavior or even lockout. Always test PAM changes in a controlled environment.<br><br>The module evaluates all conditions on a single line; if multiple conditions are given, they are implicitly combined with <b>and</b> logic unless <b>or</b> is explicitly specified. Only one instance of a specific condition type (e.g., <b>user=</b>) is permitted per line. The <b>quiet</b> option should be used with caution, as it can hide important failure messages.


title: MODULE TYPE AND CONTROL FLAGS
content:
<b>pam_succeed_if</b> is typically used in the <b>auth</b> and <b>account</b> module types. The <i>control_flag</i> (e.g., <b>required</b>, <b>sufficient</b>, <b>optional</b>, <b>requisite</b>) determines how PAM reacts to the module's success or failure.<br><br>For instance, if used as <b>required</b>, the module must succeed for the overall PAM stack to succeed. If used as <b>sufficient</b>, its success can short-circuit the stack, bypassing subsequent modules. Understanding these flags is paramount to correctly implementing policies with <b>pam_succeed_if</b>.


title: CONDITIONAL LOGIC
content:
By default, if multiple conditions are specified on a single line (e.g., <b>user=john group=dev</b>), they are implicitly combined with an <b>and</b> operator. This means all conditions must be true for the module to succeed. The <b>or</b> option changes this behavior, requiring only one of the specified conditions to be true for success. For example, <b>user=john or user=jane</b> means success if either John or Jane logs in. Careful planning of <b>and</b>/<b>or</b> logic is crucial for complex policies.


title: NEGATION
content:
Most condition options can be negated by prefixing the value with an exclamation mark (<b>!</b>). For example, <b>user=!root</b> means 'if the user is NOT root'. This allows for expressing 'deny if' or 'allow if NOT' scenarios, greatly enhancing the module's flexibility in policy enforcement.


title: HISTORY
content:
The <b>pam_succeed_if</b> module has been a fundamental part of the Linux-PAM framework since its early development. It was designed to provide administrators with a flexible and declarative way to define security policies based on various system and user attributes. Its existence highlights PAM's goal of modularity and extensibility, allowing for dynamic and granular control over authentication and authorization processes without modifying core application code. It has been a stable and widely used module for enforcing access controls across diverse Linux environments.


title: PARAMETERS
content:
<b>None</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The <B>pam_warn.so</B> module does not accept any specific module-specific arguments or options. Its behavior is solely determined by its placement within the PAM configuration file and the standard PAM control flags applied to it (e.g., <I>sufficient</I>, <I>optional</I>, <I>required</I>, <I>requisite</I>).<br><br>


title: DESCRIPTION
content:
The <b>pam_warn</b> module is a core Pluggable Authentication Modules (PAM) component designed to log warning messages when an authentication, account, password, or session management operation fails or encounters an issue within a PAM stack. It does not perform any authentication itself, nor does it affect the success or failure of the overall authentication process unless specifically configured to do so via its control flag.<br><br>Typically, <b>pam_warn</b> is placed in PAM configuration files (e.g., in <I>/etc/pam.d/</I>) to provide an audit trail or for debugging purposes. When triggered, it logs a standardized warning message, usually to the system's syslog facility (e.g., to <I>/var/log/auth.log</I> or <I>/var/log/messages</I>), detailing the PAM service, user, and the nature of the warning. Its simplicity makes it valuable for understanding authentication flow and identifying potential security issues or misconfigurations without interrupting user access.


title: CAVEATS
content:
<b>pam_warn</b> is solely a logging module; it does not perform any authentication or authorization itself. It should typically be used with the <I>sufficient</I> or <I>optional</I> control flags to avoid inadvertently failing an entire authentication process if it's placed in a sensitive part of the PAM stack with <I>required</I> or <I>requisite</I> (though pam_warn itself almost never fails, its placement relative to other modules is key). Ensure your syslog configuration is correct for warnings to be recorded and accessible, as it relies on syslog for output.


title: LOGGING LOCATION
content:
Messages generated by <b>pam_warn</b> are typically logged to the system's syslog daemon. Depending on the system's syslog configuration (e.g., <I>/etc/syslog.conf</I> or <I>/etc/rsyslog.conf</I>), these warnings can be found in files like <I>/var/log/auth.log</I>, <I>/var/log/secure</I>, or <I>/var/log/messages</I>. The log messages usually contain information about the PAM service, username, and the specific warning triggered.


title: COMMON USE CASES
content:
<B>Debugging Authentication Flows:</B> By strategically placing <b>pam_warn</b> in different parts of a PAM stack, administrators can trace the execution path and identify which modules are being processed or failing.<br><br><B>Security Auditing:</B> It helps in recording instances where authentication attempts encounter issues, providing an audit trail for potential security incidents or unusual user activity.<br><br><B>Monitoring Misconfigurations:</B> Can be used to flag scenarios where certain authentication conditions are met (or not met) that might indicate a system misconfiguration or an attempted bypass.


title: PAM CONTROL FLAGS
content:
When configuring PAM modules like <b>pam_warn</b>, a <I>control_flag</I> is specified to determine how the module's success or failure impacts the overall authentication process. Key flags include:<br><br><B>required:</B> Module must succeed for the overall stack to succeed. Failure does not immediately abort the stack.<br><br><B>requisite:</B> Module must succeed. If it fails, the stack immediately aborts.<br><br><B>sufficient:</B> If module succeeds and no prior required module failed, the stack immediately succeeds.<br><br><B>optional:</B> Success/failure doesn't directly determine stack success/failure, unless it's the only module.


title: HISTORY
content:
The Pluggable Authentication Modules (PAM) framework was initially developed by Sun Microsystems in the mid-1990s to provide a flexible and extensible authentication mechanism. The Linux-PAM project later brought this capability to Linux systems. <b>pam_warn</b> is one of the most fundamental and simple PAM modules, designed from early on to provide basic logging and debugging capabilities. Its consistent function as a non-intrusive warning mechanism has made it a stable and enduring part of the PAM ecosystem, seeing little change in its core functionality over the years, reflecting its straightforward purpose.


title: SYNOPSIS
content:
<b>pamarith</b> {<b>-add</b>|<b>-sub</b>|<b>-mul</b>|<b>-div</b>|<b>-min</b>|<b>-max</b>|<b>-avg</b>} {<i>file1</i> | <b>-</b>} {<i>file2</i> | <i>constant</i> | <b>-</b>} [<b>-outputtype=</b>{<b>pam</b>|<b>pgm</b>|<b>ppm</b>}] [<b>-tupletype=</b><<i>string</i>>]


title: PARAMETERS
content:
<b><b>-add</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs addition. The result is the sum of corresponding pixel values from the two inputs.<br><br><b><b>-sub</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs subtraction. The result is the value of the second input subtracted from the first.<br><br><b><b>-mul</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs multiplication. The result is the product of corresponding pixel values.<br><br><b><b>-div</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs division. The result is the first input's pixel value divided by the second. Division by zero results in the maximum possible pixel value.<br><br><b><b>-min</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Returns the minimum of the corresponding pixel values from the two inputs.<br><br><b><b>-max</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Returns the maximum of the corresponding pixel values from the two inputs.<br><br><b><b>-avg</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Calculates the average of the corresponding pixel values from the two inputs.<br><br><b><i>file1</i>, <i>file2</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Paths to the input Netpbm image files. Use '<b>-</b>' to read from standard input.<br><br><b><i>constant</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A numeric value to be used in arithmetic operations with an image.<br><br><b><b>-outputtype=</b>{<b>pam</b>|<b>pgm</b>|<b>ppm</b>}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output image format. Default is PAM.<br><br><b><b>-tupletype=</b><<i>string</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the tuple type of the output PAM image (e.g., '<b>GRAYSCALE</b>', '<b>RGB</b>'). Useful for overriding default type inference.<br><br>


title: DESCRIPTION
content:
<i>pamarith</i> is a Netpbm command-line tool designed for performing various arithmetic operations on image files. It can operate on two input images (e.g., image A + image B) or an image and a scalar value (e.g., image A * constant). The command supports operations like <b>addition</b>, <b>subtraction</b>, <b>multiplication</b>, <b>division</b>, finding the <b>minimum</b> or <b>maximum</b> pixel value between corresponding pixels of two images, and <b>averaging</b>. It works with all Netpbm formats: PGM (grayscale), PPM (color), PBM (bitmap), and PAM (an extensible format). The output is typically a PAM image by default, but can be specified to be PGM or PPM. <i>pamarith</i> is particularly useful for tasks like image blending, masking, comparing images, or adjusting brightness/contrast uniformly. It reads input from standard input if no file is specified and writes output to standard output, allowing for pipe-based workflows.


title: CAVEATS
content:
Input images must have the same width and height for operations involving two images. If an operation involves division by zero, the resulting pixel value will be the maximum possible value for that pixel type. <i>pamarith</i> automatically handles differences in 'maxval' (maximum pixel value) and tuple types between input images by scaling or converting as necessary.


title: INPUT/OUTPUT
content:
By default, <i>pamarith</i> reads its input image(s) from the specified file paths or from standard input (if '<b>-</b>' is used) and writes the resulting image to standard output. This design makes it highly compatible with shell piping for complex image processing workflows.


title: MAXVAL AND TUPLE TYPE HANDLING
content:
<i>pamarith</i> is designed to intelligently handle images with differing 'maxval' (maximum pixel value) settings and tuple types. It automatically scales pixel values to a common range when operations involve images with different maxvals. Similarly, it attempts to combine images with different tuple types (e.g., an RGB image with a grayscale image) by performing appropriate conversions or promoting types to ensure a meaningful arithmetic operation.


title: HISTORY
content:
<i>pamarith</i> is part of the Netpbm package and was introduced to replace the older, less flexible <i>pnmarith</i> command. While <i>pnmarith</i> was limited to PNM (PGM/PPM/PBM) formats, <i>pamarith</i> extends support to the more versatile PAM format, allowing for more complex image data and operations. Its development reflects the evolution of Netpbm towards a more robust and generalized image manipulation suite.


title: SYNOPSIS
content:
<b>pamstretch-gen</b> [--force] [--rounds=<i>&lt;value&gt;</i>] [--min-delay=<i>&lt;value&gt;</i>] [--max-delay=<i>&lt;value&gt;</i>] [--hash=<i>&lt;value&gt;</i>] [--method=<i>&lt;value&gt;</i>] [--salt=<i>&lt;value&gt;</i>] <i>&lt;path-to-pam_stretch.conf&gt;</i>


title: PARAMETERS
content:
<b>--force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overwrites an existing <i>pam_stretch.conf</i> file without prompting for confirmation.<br><br><b>--rounds=<i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the exact number of hashing rounds to perform for the stretching operation.<br><br><b>--min-delay=<i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the minimum desired delay (in microseconds) for the stretching operation. <i>pamstretch-gen</i> will calculate rounds to meet or exceed this.<br><br><b>--max-delay=<i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum desired delay (in microseconds) for the stretching operation. <i>pamstretch-gen</i> will try to stay within this limit.<br><br><b>--hash=<i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the cryptographic hash algorithm to use, e.g., <i>sha512</i>, <i>sha256</i>, <i>sha1</i>.<br><br><b>--method=<i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the stretching method to be used. Common values include <i>pbkdf2</i> or <i>pkcs5</i>.<br><br><b>--salt=<i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a specific salt value to incorporate into the stretching process. This is typically a randomly generated value for security.<br><br><b><i>&lt;path-to-pam_stretch.conf&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The required argument specifying the full path where the generated <i>pam_stretch.conf</i> file will be saved.<br><br>


title: DESCRIPTION
content:
<i>pamstretch-gen</i> is a utility designed to generate configuration files for the <i>pam_stretch</i> PAM (Pluggable Authentication Modules) module. This module enhances system security by performing "password stretching" on user credentials during authentication. Password stretching involves iteratively applying a cryptographic hash function (like SHA-512) to a password, making brute-force attacks significantly more computationally intensive and thus impractical for attackers.<br><br><i>pamstretch-gen</i> allows administrators to define parameters such as the number of hashing rounds, minimum and maximum desired delay for stretching operations, the specific hashing algorithm to use, and the stretching method. By creating a <i>pam_stretch.conf</i> file with these settings, <i>pamstretch-gen</i> helps configure the PAM environment to enforce robust password security without requiring changes to existing applications. It's a crucial tool for systems aiming to mitigate password guessing and dictionary attacks effectively.


title: CAVEATS
content:
<i>pamstretch-gen</i> only generates the configuration file; it does not perform the actual password stretching. The generated file must then be used by the <i>pam_stretch</i> PAM module to enforce the stretching policy. Misconfiguration, such as setting too few rounds or delays, can compromise security, while excessive values can lead to significantly slow authentication times. It's essential to understand the implications of the chosen parameters on both security and system performance.


title: WHAT IS PASSWORD STRETCHING?
content:
Password stretching is a technique used in cryptography to increase the computational cost of verifying a password, thereby making brute-force attacks much harder and slower. Instead of directly hashing a password once, stretching involves applying a cryptographic hash function multiple times (thousands or millions of rounds) with a randomly generated "salt." This process ensures that even if an attacker obtains a database of stretched password hashes, they must expend significant computational resources for each guess, rendering large-scale cracking efforts impractical within a reasonable timeframe.


title: HISTORY
content:
The concept of password stretching and key derivation functions (KDFs) emerged as a critical countermeasure against brute-force password cracking, especially as computational power increased. <i>pam_stretch</i> and its generator <i>pamstretch-gen</i> were developed to integrate this security enhancement directly into the PAM authentication infrastructure on Linux and Unix-like systems. This allows for a standardized way to increase the computational cost of password verification, making it harder for attackers to compromise user accounts through offline attacks on stolen password hashes. Its development reflects the ongoing need to adapt authentication mechanisms to evolving threat landscapes.


title: PARAMETERS
content:
<b><code>--help</code>, <code>-h</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><code>--version</code>, <code>-v</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's version number and exit.<br><br><b><code>--data &lt;path&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the path to the Pangolin data directory. This directory contains the reference sequences and lineage definitions.<br><br><b><code>--threads &lt;num&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the number of CPU threads to use for parallel processing during analysis, optimizing performance for large datasets.<br><br><b><code>--outfile &lt;file&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name and path for the output CSV file, where lineage assignments and associated metadata will be written.<br><br><b><code>--usher</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Utilize UShER (Ultrafast Sample placement on Existing tree of phYlogenies) for lineage assignment, often providing faster results by placing sequences on a global phylogenetic tree.<br><br><b><code>--analysis-mode &lt;mode&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Choose the analysis mode (e.g., <code>full</code>, <code>quick</code>), affecting the stringency and speed of the lineage assignment process.<br><br><b><code>--max-ambig &lt;val&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum allowed percentage of ambiguous bases (N's) in input sequences; sequences exceeding this threshold may be skipped.<br><br><b><code>--min-length &lt;len&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the minimum required genome length for sequences to be processed; shorter sequences will be ignored.<br><br><b><code>--verbose</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, displaying more detailed information and progress messages during the execution of the command.<br><br>


title: DESCRIPTION
content:
Pangolin (Phylogenetic Assignment of Named Global Outbreak Lineages) is a specialized bioinformatics command-line tool crucial for global public health surveillance. It is designed for the rapid and accurate assignment of SARS-CoV-2 genome sequences to known global lineages, such as Alpha, Delta, and Omicron variants. Developed by the COG-UK consortium, Pangolin ingests raw genomic sequence data, typically in FASTA format, and analyzes it against an extensive and continually updated phylogenetic tree and lineage database. Its primary output is a CSV file detailing the assigned lineage for each input sequence, along with confidence scores, quality control metrics, and other relevant epidemiological metadata. The tool employs sophisticated algorithms to infer lineage based on characteristic mutations, enabling researchers and public health officials to swiftly track the evolution, spread, and geographical distribution of different SARS-CoV-2 variants, informing vaccine development and public health interventions.


title: CAVEATS
content:
Pangolin is a specialized bioinformatics tool and not part of standard Linux core utilities. It typically requires installation via <code>pip</code> (Python's package installer) and relies on a Python environment with specific bioinformatics libraries. Its large lineage database requires regular updates to ensure accuracy, which can consume significant disk space and bandwidth. Performance can vary greatly depending on the input sequence count, complexity of mutations, and available system resources. Users should also be mindful of the version of Pangolin and its associated data, as outdated versions may provide less accurate or incomplete lineage assignments.


title: DATA UPDATES
content:
Pangolin's accuracy is heavily reliant on an up-to-date database of SARS-CoV-2 lineages and their defining mutations. Users must periodically update this data to ensure the tool can accurately assign newly emerging variants. This is typically done using a dedicated command, such as <code><b>pangolin</b> --update-data</code>, which downloads the latest lineage information from the developers' servers.


title: INSTALLATION AND ENVIRONMENT
content:
As a Python-based application, Pangolin is commonly installed using <code><b>pip</b></code>: <code><i>pip install pangolin</i></code>. It's recommended to install it within a dedicated Python virtual environment (e.g., using <code><i>conda</i></code> or <code><i>venv</i></code>) to manage its dependencies and avoid conflicts with other Python projects. Ensuring all required dependencies are met is crucial for successful operation.


title: HISTORY
content:
Pangolin was developed by Áine O’Toole and colleagues at the University of Edinburgh, as part of the COG-UK (COVID-19 Genomics UK Consortium) initiative. It was first released in early 2020 as a critical tool for providing rapid lineage assignments during the nascent stages of the SARS-CoV-2 pandemic. Its development was a direct response to the urgent need for a standardized, high-throughput method to classify viral genomes and track the emergence and spread of new variants. Since its inception, Pangolin has undergone continuous updates, with its underlying data and algorithms regularly refined to incorporate new lineages and improve accuracy, making it an indispensable resource for COVID-19 genomic epidemiology worldwide.


title: SYNOPSIS
content:
<b>pants</b> [<i>global-options</i>] <i>command</i> [<i>command-options</i>] [<i>targets...</i>]<br><br><i>Pants</i> commands operate on one or more <i>targets</i>, which represent code units (e.g., a Python module, a Java library). Global options affect the overall behavior of the <i>Pants</i> execution, while command-specific options fine-tune the selected operation.


title: PARAMETERS
content:
<b><i>command</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific operation to perform, such as <b>test</b>, <b>lint</b>, <b>run</b>, or <b>build</b>. Each command has its own set of sub-options.<br><br><b><i>targets...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more addresses specifying the code units or targets that the command should operate on. Examples include `path/to/dir:target_name` or `path/to/dir` for all targets in that directory.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the <i>Pants</i> command overall, or for a specific command when placed after it (e.g., `pants test --help`).<br><br><b>test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs tests for the specified targets, leveraging <i>Pants's</i> caching and concurrency for speed.<br><br><b>lint</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes configured linters (e.g., Flake8, ESLint) against the specified targets to enforce code style and quality.<br><br><b>fmt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically formats code for the specified targets using integrated formatters (e.g., Black, Prettier).<br><br><b>run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a runnable target (e.g., a Python script or a Java main class) directly through <i>Pants</i>.<br><br><b>build</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds and compiles the specified targets into an executable or deployable artifact within the <i>Pants</i> cache.<br><br><b>package</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates distributable artifacts (e.g., Python wheels, JAR files, Go binaries) from the specified targets, making them available outside the <i>Pants</i> workspace.<br><br>


title: DESCRIPTION
content:
<i>Pants</i> is a high-performance, open-source build system designed to manage large, complex software projects, particularly within monorepos. It excels at building, testing, linting, and packaging code written in various languages like Python, Java, Scala, Go, and more.<br><br>It achieves speed through aggressive caching, incremental builds, and concurrent execution. By understanding a project's dependency graph, <i>Pants</i> can precisely determine what needs to be rebuilt or retested, avoiding redundant work. This makes it highly efficient for developer workflows, as changes to one part of a monorepo only trigger rebuilds for affected components.<br><br>Key features include flexible target definitions, remote execution capabilities, and a plugin-based architecture for extensibility. It aims to provide a consistent and predictable build experience across large teams and diverse technology stacks, making it a powerful tool for modern software development.


title: CAVEATS
content:
<i>Pants</i> is not a pre-installed Linux utility but a build system requiring installation, typically via pip. Its usage is primarily within software development environments, especially for teams managing large monorepos. It has a learning curve due to its advanced features and configuration requirements (e.g., defining `BUILD` files and `pants.toml`).


title: BUILD FILES AND TARGETS
content:
<i>Pants</i> defines buildable units and their dependencies using `BUILD` files (similar to Bazel's `BUILD` files) which are typically located alongside source code. These files specify <i>targets</i>, such as `python_library`, `java_binary`, or `go_test`, and their interdependencies, forming the foundation of the build graph.


title: CONFIGURATION WITH PANTS.TOML
content:
Global and project-specific configurations for <i>Pants</i> are managed in a `pants.toml` file, usually located at the root of the workspace. This file allows users to configure plugins, set tool versions, define global options, and customize various aspects of the build process.


title: HISTORY
content:
<i>Pants</i> originated at <i>Twitter</i> around 2011 as an internal build system to address the challenges of managing their rapidly growing monorepo and polyglot codebase. It was subsequently open-sourced in 2013, allowing other organizations facing similar scaling issues to leverage its capabilities. The project has undergone significant evolution, with <i>Pants v2</i> representing a substantial rewrite focusing on performance, extensibility, and user experience, enabling it to support a wider range of programming languages and advanced build scenarios.


title: SYNOPSIS
content:
<b>paru</b> <I>&lt;operation&gt;</I> [<I>options</I>] [<I>targets</I>]<br><br>Examples:<br><b>paru -Syu</b><br><b>paru -S</b> <I>package_name</I><br><b>paru -Rns</b> <I>package_name</I><br><b>paru -a</b> <I>search_term</I>


title: PARAMETERS
content:
<b><b>-S, --sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Synchronize packages. Used for installing, upgrading, and refreshing the package database.<br><br><b><b>-R, --remove</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove packages. Can be used with options like <b>-n</b> (remove configs) or <b>-s</b> (remove unneeded dependencies).<br><br><b><b>-Q, --query</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Query the local package database. Used to list installed packages, check dependencies, etc.<br><br><b><b>-U, --upgrade</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Upgrade or install local packages (e.g., from a file path).<br><br><b><b>-F, --files</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Query the files database. Used to find which package owns a specific file.<br><br><b><b>-D, --database</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Database operations, like checking package files.<br><br><b><b>-a, --aur</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;AUR specific operations. Used for searching (`<b>paru -a</b> <I>search_term</I>`) or showing package information (`<b>paru -Ai</b> <I>package_name</I>`) on the AUR.<br><br><b><b>--bottomup</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Build dependencies recursively from the bottom-up, ensuring all dependencies are built before the target.<br><br><b><b>--skipreview</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip the interactive <I>PKGBUILD</I> review step during installation/upgrade.<br><br><b><b>--noconfirm</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Bypass all confirmation prompts. Use with caution, especially in scripts.<br><br><b><b>--needed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not reinstall targets that are already up-to-date.<br><br><b><b>--clean</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clean unused build files from the cache.<br><br><b><b>--diff</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the diff of <I>PKGBUILDs</I> before building or installing. This is default for AUR packages.<br><br><b><b>--edit</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Edit the <I>PKGBUILD</I> file before building.<br><br><b><b>--m-a-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable multi-architecture support for building packages.<br><br>


title: DESCRIPTION
content:
<b>paru</b> is a powerful and efficient <I>AUR helper</I> for Arch Linux, designed to manage both packages from the Arch User Repository (AUR) and the official Arch Linux repositories. Written in Rust, it aims to be a fast, minimal, and secure alternative to other AUR helpers like `yay`. <br><br>It functions as a drop-in replacement for <I>pacman</I>, providing a unified command-line interface for common package management tasks such as installing, removing, searching, and upgrading packages. <b>paru</b> emphasizes a highly interactive experience by default, showing diffs of <I>PKGBUILDs</I> and prompting for user confirmation, but it also supports non-interactive operations. Its design focuses on integrating seamlessly with <I>pacman</I>'s workflow and output.


title: CAVEATS
content:
<b>paru</b> relies on <I>pacman</I> and <I>makepkg</I>, and therefore is specific to Arch Linux and its derivatives. While it simplifies AUR usage, users should always exercise caution and review <I>PKGBUILDs</I> before installing packages from the AUR, as these are user-submitted and not officially vetted by Arch Linux. Using <I>--noconfirm</I> in unattended scripts can lead to unexpected behavior if package changes are not anticipated.


title: BUILD PROCESS
content:
When installing an AUR package, <b>paru</b> first fetches the <I>PKGBUILD</I> file from the AUR git repository. It then uses <I>makepkg</I> to build the package on your local system, resolving dependencies (both official and AUR). Once built, the resulting <I>.pkg.tar.zst</I> file is installed using <I>pacman</I>, just like any official package. This entire process is largely automated by <b>paru</b>.


title: CONFIGURATION
content:
<b>paru</b> can be configured via a configuration file, typically located at <I>/etc/paru.conf</I> for system-wide settings or <I>~/.config/paru.conf</I> for user-specific overrides. This file allows users to set default options, enable/disable interactive prompts, define build flags, and more, customizing <b>paru</b>'s behavior to their preferences.


title: HISTORY
content:
<b>paru</b> emerged from the Arch Linux community, created by developers who had previously contributed to the popular <I>yay</I> AUR helper. Its development began with the goal of creating a new AUR helper written in Rust, aiming for improved performance, memory safety, and a more <I>pacman</I>-like user experience with less verbose output by default. It quickly gained traction as a robust and modern alternative, inheriting and refining many of the best practices from its predecessors.


title: SYNOPSIS
content:
<b>pbmtoascii</b> [<i>options</i>] [<i>pbmfile</i>]<br><br>If <i>pbmfile</i> is not specified, <b>pbmtoascii</b> reads from standard input. Output is always to standard output.


title: PARAMETERS
content:
<b><b>-chars</b> <i>characters</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the string of characters to use for mapping pixel densities. The first character represents the lightest density, and the last character represents the darkest. The default is ' .:-=+*#%@'.<br><br><b><b>-invert</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inverts the black and white representation of the image. Black pixels become white and vice versa, which also inverts the character mapping (e.g., darkest characters for original white areas).<br><br><b><b>-maxwidth</b> <i>width</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum width of the output ASCII art in characters. The image will be scaled down proportionally to fit this width if necessary.<br><br><b><b>-maxheight</b> <i>height</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum height of the output ASCII art in lines. The image will be scaled down proportionally to fit this height if necessary.<br><br><b><b>-compact</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a more compact output by using a 2x1 cell mapping (two pixels wide, one pixel high) instead of the default 2x2. This results in fewer lines but potentially wider output, giving a denser character representation horizontally.<br><br><b><b>-2x2</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a 2x2 grid of pixels to determine the character. This is the default behavior, providing a balanced resolution.<br><br><b><b>-8x8</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses an 8x8 grid of pixels to determine the character. This option provides a coarser resolution, useful for very large images or when less detail is required. This effectively overrides the default 2x2 character mapping for density calculation.<br><br>


title: DESCRIPTION
content:
The <b>pbmtoascii</b> command is a utility from the Netpbm suite that transforms monochrome Portable BitMap (PBM) image files into text-based ASCII art.<br><br>It works by analyzing the pixel density within regions of the PBM image and mapping these densities to characters from a predefined or user-specified set. Darker areas of the image are represented by characters that occupy more visual space (e.g., '#', '@'), while lighter areas are represented by sparser characters (e.g., '.', ' ').<br><br>This conversion allows graphical images to be viewed in text-only environments, such as terminals, or to be incorporated into text documents. The output is typically directed to standard output, making it easy to pipe to other commands or redirect to a file. <b>pbmtoascii</b> is particularly useful for quick previews of monochrome images or for creating retro-style textual representations.


title: CAVEATS
content:
<b>pbmtoascii</b> strictly operates on Portable BitMap (PBM) format images, which are monochrome (black and white) only. It cannot process grayscale (PGM) or color (PPM/PAM) images directly. If you have a different image format, you must first convert it to PBM using tools like <b>anytopnm</b> or <b>pamtopbm</b>.<br><br>The quality of the ASCII art output is inherently limited by the resolution of the input image and the character set used. Very detailed images may appear blocky or lose significant information when converted to ASCII art, especially with coarse character mapping options like <b>-8x8</b>. The visual fidelity is also dependent on the display font and terminal settings.


title: CHARACTER MAPPING LOGIC
content:
The command determines which character to use based on the average intensity of a small grid of pixels (a 'cell') in the input PBM image. By default, it uses a 2x2 pixel cell. The brighter the cell, the lighter (closer to the beginning) the character from the <b>-chars</b> string is chosen. The darker the cell, the darker (closer to the end) the character. The <b>-compact</b>, <b>-2x2</b>, and <b>-8x8</b> options modify the size of this cell and thus the resolution of the output ASCII art.


title: USAGE WITH IMAGE PIPES
content:
<b>pbmtoascii</b> is frequently used as part of a pipeline of Netpbm commands. For example, to convert a JPEG image to ASCII art, you might use: <i>djpeg image.jpg | ppmtopbm | pbmtoascii</i>. This piping capability makes it very flexible within shell scripts and command-line workflows, allowing complex image manipulations by chaining simple, single-purpose tools.


title: HISTORY
content:
<b>pbmtoascii</b> is an integral part of the Netpbm package, a widely-used toolkit for graphics manipulation on Unix-like systems. The Netpbm project originated in 1988 as PBMplus by Jef Poskanzer, and has since undergone continuous development and maintenance by various contributors. <b>pbmtoascii</b> was one of the early utilities, reflecting the toolkit's focus on fundamental image format conversions and transformations. Its continued presence in the Netpbm suite highlights its utility for simple, text-based image representation, a common need in command-line environments and for generating specific visual effects.


title: PARAMETERS
content:
<b>-name <i>name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the bitmap variable to be used within the output file. This name acts as an identifier for the bitmap data. If this option is not provided, the default name used is 'stdin'.<br><br><b>-compact</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs the command to generate a more compact representation of the bitmap data in the output. This format can be particularly beneficial when the output is intended to be piped to other utilities, such as <i>xsetroot</i>, which might prefer or require this more concise representation for efficient processing.<br><br>


title: DESCRIPTION
content:
<i>pbmtocmuwm</i> is a specialized command-line utility from the Netpbm suite designed to convert a Portable Bitmap (PBM) image into a CMU window manager (CMUWM) format bitmap file.<br><br>The CMUWM bitmap format is primarily utilized by the <i>wm</i> window manager (the original CMU window manager) and various older X applications for displaying graphical elements such as icons and cursors. Fundamentally, this output format is nearly identical to the widely used X11 XBM (X Bitmap) format, with the key difference lying in the header structure.<br><br>The command reads the PBM image data from standard input by default, or from a specified input file if provided. The resulting CMUWM bitmap data is then written to standard output, making it suitable for piping to other commands or redirecting to a file.


title: CAVEATS
content:
The CMU window manager bitmap format generated by <i>pbmtocmuwm</i> is very similar to the X11 XBM format, with the primary distinction being the header. For general conversions to XBM for broader X11 application compatibility, the <i>pbmtoxbm</i> command from the Netpbm suite might be a more direct and appropriate tool.


title: INPUT AND OUTPUT
content:
The command expects a PBM image as input. If no specific <i>pbmfile</i> is provided as an argument, it reads the PBM data from standard input (<i>stdin</i>). The processed CMUWM bitmap output is always written to standard output (<i>stdout</i>), allowing for flexible redirection or piping to other commands.


title: USAGE CONTEXT
content:
This command finds its primary utility in environments still utilizing the original CMU window manager or when dealing with legacy X applications that might have specific dependencies on or preferences for the CMUWM bitmap format for displaying icons, cursors, or root window backgrounds. Modern X11 applications typically prefer the XBM format, which <i>pbmtoxbm</i> handles.


title: HISTORY
content:
<i>pbmtocmuwm</i> is an integral part of the Netpbm package, a comprehensive and long-standing suite of graphics file format conversion tools for Unix-like systems. Its development was driven by the specific bitmap requirements of the CMU window manager, which was a significant windowing environment in its time. Like many tools within the Netpbm collection, <i>pbmtocmuwm</i> adheres to the Unix philosophy of creating small, focused utilities that perform a single task efficiently, designed to be chained together via pipes.


title: SYNOPSIS
content:
<b>pbmtoepsi</b> [<b>-r</b>|<b>-p</b>] [<b>-b</b> <i>x</i> <i>y</i>] [<b>-s</b> <i>w</i> <i>h</i>] [<b>-g</b> <i>number</i>] [<b>-v</b>] [<i>pbmfile</i>]


title: PARAMETERS
content:
<b><b>-r</b> or <b>--raster</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a raster-based EPSI file. This is the default behavior <br>for modern versions of <i>pbmtoepsi</i> and is generally more efficient, <br>producing smaller files as it uses the PostScript <code>image</code> operator to draw the bitmap.<br><br><b><b>-p</b> or <b>--path</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a path-based EPSI file. This method draws each pixel <br>as a filled path, which can result in extremely large and slow-rendering <br>PostScript files, especially for high-resolution images. This option <br>is largely superseded by the raster method and is generally not recommended <br>unless specific compatibility with older software is required.<br><br><b><b>-b</b> <i>x</i> <i>y</i> or <b>--bbox-ul</b> <i>x</i> <i>y</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the upper-left corner of the bounding box for the <br>PostScript output in points (1/72 inch). Defaults to 0 0 if not specified.<br><br><b><b>-s</b> <i>w</i> <i>h</i> or <b>--bbox-size</b> <i>w</i> <i>h</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the width and height of the bounding box for the <br>PostScript output in points. Defaults to the input image's actual <br>dimensions if not specified.<br><br><b><b>-g</b> <i>number</i> or <b>--grid</b> <i>number</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inserts an Aldus-specific comment <code>{{grid number}}</code> into the <br>EPSI output. This option is for compatibility with older Aldus applications <br>that may interpret this comment for layout purposes.<br><br><b><b>-v</b> or <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays verbose information about the conversion process to <br>standard error, such as the chosen output method and bounding box dimensions.<br><br><b><i>pbmfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input PBM file. If this argument is omitted, <br><i>pbmtoepsi</i> reads the Portable Bitmap data from standard input.<br><br>


title: DESCRIPTION
content:
<i>pbmtoepsi</i> is a Netpbm utility that converts a <br>Portable Bitmap (PBM) image file into an Encapsulated PostScript Interchange (EPSI) file. <br>EPSI files are a specific type of PostScript file that includes a low-resolution <br>bitmap preview. This preview allows applications to display a rough <br>representation of the image without needing to fully interpret the PostScript code, <br>making it useful for layout programs. By default, <i>pbmtoepsi</i> generates a <br>raster-based EPSI, meaning the PostScript output uses the 'image' operator to <br>render the bitmap efficiently. It operates on black and white PBM images only; <br>for other Netpbm formats (PGM, PPM) or more advanced PostScript output, <br>other tools like <i>pnmtops</i> might be required. It reads from standard input <br>if no file is specified, and writes the EPSI output to standard output.


title: CAVEATS
content:
<i>pbmtoepsi</i> is designed exclusively for Portable Bitmap (PBM) <br>images, meaning it can only process black and white images. For grayscale <br>(PGM) or color (PPM) images, or for more general PostScript output options, <br>users should instead consider commands like <i>pnmtops</i> from the Netpbm suite. <br>The <b>-p</b> (path) option can produce significantly larger and less efficient <br>EPSI files compared to the default <b>-r</b> (raster) option, and its use is <br>generally discouraged unless specific compatibility needs dictate. <br>EPSI is an older format; for modern workflows, plain EPS or PDF <br>are more commonly used for embedding images.


title: STANDARD INPUT/OUTPUT
content:
When no <i>pbmfile</i> is specified, <i>pbmtoepsi</i> implicitly <br>reads its Portable Bitmap input from standard input (stdin). <br>The generated Encapsulated PostScript Interchange data is always <br>written to standard output (stdout).


title: BOUNDING BOX AND SCALING
content:
The bounding box parameters (<b>-b</b> for upper-left corner <br>and <b>-s</b> for size) are crucial for defining how the image <br>is placed and scaled within a PostScript document. These values <br>are specified in PostScript points (1/72 inch). Correctly setting <br>these parameters ensures that the embedded image appears at the <br>desired position and scale when included in a larger document layout.


title: HISTORY
content:
<i>pbmtoepsi</i> is a long-standing component of the Netpbm project, <br>a comprehensive and open-source toolkit for manipulating graphics images <br>in various formats. Historically, the path-based PostScript output (<b>-p</b>) <br>was more prevalent, but with advancements in PostScript interpreters and <br>the need for more compact and faster-rendering files, the default behavior <br>shifted to raster-based output (<b>-r</b>) starting from Netpbm version 10.32. <br>This change reflected a move towards more efficient bitmap embedding practices.


title: PARAMETERS
content:
<b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable text mode. Sends text data rather than graphics commands.<br><br><b>-x <I>cols</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify horizontal resolution in dots per inch (DPI). Default is often 120.<br><br><b>-y <I>rows</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify vertical resolution in dots per inch (DPI). Default is often 72.<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable proportional printing mode, if supported by the printer.<br><br><b>-q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quiet mode. Suppress status messages and warnings.<br><br><b>-u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable unidirectional printing, which can sometimes be faster or more consistent.<br><br><b>-e</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force Epson LQ-850 emulation mode for compatibility with specific printer models.<br><br>


title: DESCRIPTION
content:
<b>pbmtoepson</b> is a utility from the Netpbm package, designed to convert a Portable BitMap (PBM) image file into a format suitable for printing on Epson dot-matrix printers. It takes a PBM file as input, either from a specified file or standard input, and produces Epson-compatible escape sequences and graphics data to standard output. This output can then be piped directly to a printer or saved to a file for later printing. It's particularly useful in environments where direct image printing to older Epson printers is required, often as part of a larger script or workflow, enabling command-line driven monochrome image printing.


title: CAVEATS
content:
Output is always sent to <I>standard output</I>, so it must be redirected to a printer (e.g., using <b>lpr</b>) or a file. It is designed for older Epson dot-matrix printers and may not be compatible with modern inkjet or laser printers. It assumes a monochrome (black and white) PBM input, as Epson dot-matrix printers typically handle only monochrome graphics.


title: USAGE EXAMPLE
content:
To print a PBM image directly to the default printer:<br><b>pbmtoepson</b> <I>image.pbm</I> | <I>lpr</I><br><br>To convert and save the printer data to a file:<br><b>pbmtoepson</b> <I>image.pbm</I> > <I>printer_data.eps</I>


title: INPUT/OUTPUT
content:
The command reads the PBM image from the specified <I>pbmfile</I> or from standard input if no file is provided. The Epson-compatible printer data, consisting of escape sequences and graphics commands, is then written to standard output.


title: HISTORY
content:
<b>pbmtoepson</b> is an integral part of the Netpbm package, a collection of graphics utilities that originated from the Portable Pixmap (PPM) format and its associated tools. Its development dates back to the early 1990s, aiming to provide flexible conversion capabilities for various image formats, including the simple PBM, into forms suitable for common output devices of the era like Epson dot-matrix printers, reflecting the need for robust command-line image manipulation and printing in Unix-like environments.


title: SYNOPSIS
content:
<b>pbmtoescp2</b> [<i>-resolution &lt;DPI&gt;</i>] [<i>-r &lt;DPI&gt;</i>] [<i>-rotate</i>] [<i>-brightness &lt;float&gt;</i>] [<i>-darkness &lt;float&gt;</i>] [<i>-scale &lt;float&gt;</i>] [<i>-xres &lt;DPI&gt;</i>] [<i>-yres &lt;DPI&gt;</i>] [<i>-top &lt;inches&gt;</i>] [<i>-left &lt;inches&gt;</i>] [<i>-no-form-feed</i>] [<i>-verbose</i>] [<i>&lt;pbmfile&gt;</i>]


title: PARAMETERS
content:
<b><i>-resolution &lt;DPI&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the printer's resolution in dots per inch (DPI). The printer must support the specified resolution. This option is an alias for <i>-xres</i> and <i>-yres</i> when both are the same.<br><br><b><i>-r &lt;DPI&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A shorthand alias for <i>-resolution</i>.<br><br><b><i>-rotate</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rotates the image 90 degrees clockwise before printing. This can be useful for adjusting orientation to fit paper.<br><br><b><i>-brightness &lt;float&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adjusts the brightness of the output image. The value should be between 0.0 (darkest) and 1.0 (brightest). Default is 0.5.<br><br><b><i>-darkness &lt;float&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adjusts the darkness of the output image. This is an inverse of <i>-brightness</i>, where 0.0 is lightest and 1.0 is darkest. Use either <i>-brightness</i> or <i>-darkness</i>, not both.<br><br><b><i>-scale &lt;float&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scales the image by the specified factor. For example, 0.5 for half size, 2.0 for double size.<br><br><b><i>-xres &lt;DPI&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the horizontal resolution in dots per inch (DPI).<br><br><b><i>-yres &lt;DPI&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the vertical resolution in dots per inch (DPI). If only <i>-resolution</i> or <i>-xres</i> is given, <i>-yres</i> defaults to the same value.<br><br><b><i>-top &lt;inches&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the top margin of the printed image in inches. The image will be positioned at this distance from the top edge of the paper.<br><br><b><i>-left &lt;inches&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the left margin of the printed image in inches. The image will be positioned at this distance from the left edge of the paper.<br><br><b><i>-no-form-feed</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the automatic form feed (page eject) command at the end of the output. Useful when printing multiple images on one continuous page or for specific printer setups.<br><br><b><i>-verbose</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints status messages and debugging information to standard error during processing.<br><br><b><i>&lt;pbmfile&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the PBM image file to be converted. If omitted, <i>pbmtoescp2</i> reads the PBM image data from standard input.<br><br>


title: DESCRIPTION
content:
<i>pbmtoescp2</i> is a command-line utility from the Netpbm image manipulation toolkit. It specializes in converting monochrome Portable BitMap (PBM) image files into a format understood by Epson ESC/P2 compatible printers. ESC/P2 (Epson Standard Code for Printers 2) is a printer control language used by many Epson dot-matrix and inkjet printers.<br><br>This command allows users to print PBM images directly to such printers without needing a complex graphical print system, making it ideal for scripting or command-line environments. It typically reads a PBM image from standard input or a specified file and writes the resulting ESC/P2 printer data to standard output, which can then be piped directly to a printer daemon like <i>lpr</i> or redirected to a printer device file.<br><br>The utility offers various options to control the output, including setting the printer resolution, rotating the image, adjusting brightness, and defining margins. Since PBM images are inherently black and white, <i>pbmtoescp2</i> produces monochrome output, suitable for typical dot-matrix or basic inkjet printers. It acts as a bridge between the generic Netpbm image format and the proprietary printer language, enabling efficient and low-level image printing.


title: CAVEATS
content:
This command is specifically designed for Epson printers that support the ESC/P2 printer control language. It will not work with printers that use other languages (e.g., PostScript, PCL, HP DeskJet).<br>Output is strictly monochrome, as the input PBM format itself is black and white. While some Epson printers are color, <i>pbmtoescp2</i> does not utilize color capabilities.<br>The quality and exact rendering of the output depend heavily on the specific printer model and its supported resolutions. Incorrect resolution settings can lead to distorted or incomplete prints.<br>For actual printing, the output of <i>pbmtoescp2</i> must be directed to a printer device or a print spooler (like <i>lpr</i> or <i>lp</i>). It does not handle the physical printing process itself.


title: STANDARD INPUT/OUTPUT
content:
By default, <i>pbmtoescp2</i> reads PBM image data from standard input (stdin) if no input file is specified. It writes the generated Epson ESC/P2 printer data to standard output (stdout). This design facilitates piping: for example, <i>anytoppm</i> | <i>pbmtoescp2</i> | <i>lpr</i> allows converting an image from any format to PBM, then to ESC/P2, and finally sending it to the printer.


title: PRINTING EXAMPLE
content:
To print a PBM image file named <i>myimage.pbm</i> to your default printer using the <i>lpr</i> command:<br><i>pbmtoescp2 -resolution 360 myimage.pbm | lpr</i><br>To print an image from another format, convert it first (e.g., using <i>convert</i> from ImageMagick or another Netpbm tool):<br><i>convert input.png pbm:- | pbmtoescp2 -resolution 360 | lpr</i>


title: HISTORY
content:
<i>pbmtoescp2</i> is an integral part of the widely-used Netpbm image manipulation package. The Netpbm project originated in the late 1980s, primarily developed by Jef Poskanzer, as a set of command-line tools for converting and manipulating various image formats. Its philosophy revolves around using simple, common data formats (PBM, PGM, PPM) as intermediaries. <i>pbmtoescp2</i> emerged as a specific converter within this suite to address the need for direct printing of monochrome images to popular Epson printers, leveraging their native ESC/P2 language. Its development reflects the pragmatic approach of Netpbm to provide robust, modular utilities for image processing in Unix-like environments.


title: PARAMETERS
content:
<b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output an Atari ST palette file. This option is typically used to generate a .PAL file alongside the .IMG file, defining the colors used in the GEM image, though for PBM (monochrome), this might simply output a two-color palette.<br><br><b>-1</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output only plane 1 (monochrome GEM file). This is the default and most logical conversion for a PBM image, resulting in a single-plane GEM image.<br><br><b>-2</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output only plane 2. When converting a PBM, this would typically mean the PBM data is placed into the second plane of a multi-plane GEM image, with other planes potentially left blank or filled with default values. This is a highly specific usage.<br><br><b>-4</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output only plane 4. Similar to <i>-2</i>, this places the PBM data into the fourth plane of a multi-plane GEM image. Also a highly specific usage.<br><br><b>-w</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output wider than 160 pixels. This option may be used to handle images exceeding a certain width limit common in some older GEM implementations, potentially affecting how pixel data is packed or planes are organized.<br><br>


title: DESCRIPTION
content:
The <i>pbmtogem</i> command is a utility within the Netpbm image manipulation toolkit designed to convert Portable BitMap (PBM) image files into the GEM (Graphics Environment Manager) .IMG image format. PBM files represent monochrome images (black and white) using a simple ASCII or raw binary format. The GEM .IMG format was historically used on systems like the Atari ST and Digital Research GEM environment, supporting various graphics modes, including monochrome and color palettes. <i>pbmtogem</i> reads a PBM image from standard input or a specified file and outputs the corresponding GEM .IMG data to standard output. This command is primarily useful for interoperability between modern image systems and legacy GEM-based applications or emulators.


title: CAVEATS
content:
The GEM .IMG format can be complex, especially with plane interleaving and varying resolutions. While <i>pbmtogem</i> handles the conversion, the resulting image's appearance may depend on the specific GEM environment it's viewed in. The options <i>-1</i>, <i>-2</i>, and <i>-4</i>, while allowing control over plane output, are mostly relevant for understanding the internal structure of GEM files rather than practical use with a monochrome PBM input, where <i>-1</i> is the natural fit. Using <i>-2</i> or <i>-4</i> with a PBM source may result in an image where the content is only visible if the GEM viewer specifically looks at that plane.


title: HISTORY
content:
<i>pbmtogem</i> is part of the Netpbm project, a comprehensive suite of graphics file format converters and utilities. The Netpbm project originated in the early 1990s as a collection of tools called Pbmplus, developed by Jef Poskanzer. It has since evolved into a widely used, open-source image manipulation toolkit, with <i>pbmtogem</i> being one of its many specialized format conversion tools, reflecting its historical support for various legacy and niche image formats like GEM.


title: PARAMETERS
content:
<b><i>-output=filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the converted Atari ST Go file to the specified <i>filename</i> instead of standard output.<br><br><b><i>-color</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;This option generates a Go file with 16 colors. However, when converting standard PBM (monochrome) input, this option is effectively ignored as PBM provides no color information. It might be relevant only for 'strange' PBM images or other Netpbm tools.<br><br>


title: DESCRIPTION
content:
<b>pbmtogo</b> is a specialized command-line utility from the Netpbm suite, designed to transform monochrome PBM (Portable Bitmap) image files into the proprietary "Go" file format used by Atari ST computers. PBM is a very basic image format, representing images as a grid of black and white pixels.<br>The resulting "Go" file is a specific graphics format primarily for the Atari ST's GEM environment. This command is mainly used for retro computing purposes, enabling the creation of Atari ST-compatible graphics from more common PBM sources. It reads the PBM image from standard input if no file is specified, and writes the "Go" file to standard output by default.


title: CAVEATS
content:
<b>pbmtogo</b> is highly specialized and targets a legacy platform (Atari ST).<br>The input is strictly PBM, meaning it handles only monochrome images. While a <i>-color</i> option exists, it's generally ineffective for standard PBM input.<br>The "Go" file format is obscure and not widely supported by modern image viewers or tools.<br>This command is primarily useful for niche applications involving Atari ST graphics development or preservation.


title: GO FILE FORMAT
content:
The "Go" file format is an Atari ST-specific graphics format, often associated with the GEM desktop environment. It supports both monochrome and 16-color images, but <b>pbmtogo</b> primarily handles the monochrome conversion given its PBM input.


title: HISTORY
content:
<b>pbmtogo</b> is part of the extensive Netpbm package, which originated as the Pbmplus package by Jef Poskanzer in the late 1980s. Netpbm is a collection of utilities designed for converting and manipulating graphics files in the Portable Anymap (PBM, PGM, PPM) formats. <b>pbmtogo</b> specifically addresses the need to convert images for the Atari ST, a popular personal computer platform of the 1980s and early 1990s. Its continued inclusion in Netpbm reflects the suite's comprehensive coverage of various historical and contemporary image formats.


title: SYNOPSIS
content:
<b>pbmtoicon</b> [<I>-nograys</I>] [<I>-compress</I>] [<I>-variable</I> <I>name</I>] [<I>pbmfile</I>]


title: PARAMETERS
content:
<b><I>pbmfile</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input <B>PBM</B> image file. If not specified, <b>pbmtoicon</b> reads from standard input.<br><br><b><I>-nograys</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When generating <B>XPM</B> output, this option prevents the emission of gray pixels, ensuring only black and white colors are used. This is often the default behavior for <B>PBM</B> conversions.<br><br><b><I>-compress</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;For <B>XPM</B> output, this option instructs the command to produce a compressed <B>XPM</B> file, which can reduce file size.<br><br><b><I>-variable</I> <I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the C variable name to be used for the image data in the output file. By default, it uses "image_bits".<br><br>


title: DESCRIPTION
content:
<b>pbmtoicon</b> is a utility from the <B>Netpbm</B> package that converts a Portable BitMap (<B>PBM</B>) image file into an <B>X11</B> icon file. X11 icon files are typically represented as <B>XBM</B> (X BitMap) or <B>XPM</B> (X Pixmap) formats, which are C source code files containing pixel data suitable for embedding directly into <B>X11</B> applications.<br><br>The <B>PBM</B> format handles monochrome (black and white) images, which makes it ideal for direct conversion to the simple bitmap structure of <B>XBM</B> files. While it can also produce <B>XPM</B> files, it leverages only the black and white capabilities. This command is particularly useful for preparing small, monochrome graphical assets for use in <B>X11</B> programming projects, where icons, cursors, or simple splash screens might be required in a C-compatible format. It processes the input <B>PBM</B> data and outputs the corresponding C array declaration to standard output, making it easy to integrate into build processes or direct source code compilation.


title: CAVEATS
content:
This command is designed for <B>PBM</B> (monochrome) input only. If you need to convert color or grayscale images to <B>XPM</B>, you would typically use other <B>Netpbm</B> tools like <B>ppmtoimg</B> or <B>pnmtopam</B> followed by specialized tools.<br>The output is a C source file; it's not a direct image file you can open with an image viewer without compilation or parsing.<br>Output format implicitly depends on the input size and simple B/W; for complex color images, it's not the right tool.


title: OUTPUT FORMAT
content:
The command produces <B>XBM</B> (X BitMap) or <B>XPM</B> (X Pixmap) formatted C source code to standard output. The output will contain a C array definition representing the image's pixel data.


title: STANDARD INPUT/OUTPUT
content:
If the <I>pbmfile</I> argument is omitted, <b>pbmtoicon</b> reads the <B>PBM</B> image data from standard input. The converted <B>X11</B> icon data is always written to standard output. This makes it suitable for use in pipelines.


title: HISTORY
content:
<b>pbmtoicon</b> is part of the extensive <B>Netpbm</B> package, which originated from the <B>Pbmplus</B> toolkit created by Jef Poskanzer. <B>Pbmplus</B> was developed in the late 1980s to provide a standard set of tools for manipulating various image formats, particularly in the Unix environment. <b>pbmtoicon</b> specifically addresses the need to prepare simple monochrome graphics for <B>X11</B> applications, which were prevalent during the early days of graphical Unix workstations. Its continued inclusion in <B>Netpbm</B> reflects the enduring need for command-line image processing utilities, especially for developers working with embedded graphics or legacy <B>X11</B> codebases.


title: SYNOPSIS
content:
<B>pbmtojpeg</B> [<I>-quality=<I>n</I></I>] [<I>-grayscale</I>] [<I>-optimize</I>] [<I>-progressive</I>] [<I>-comment=<I>text</I></I>] [<I>-iccfile=<I>filename</I></I>] [<I>-verbose</I>]


title: PARAMETERS
content:
<b><I>-quality=<I>n</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the JPEG compression quality, a number from 0 to 100. Higher numbers mean better quality but larger files. Default is typically 75.<br><br><b><I>-grayscale</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Converts the input image to grayscale before JPEG compression, even if the input was color. This can reduce file size significantly.<br><br><b><I>-optimize</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs Huffman coding optimization during compression. This can result in a smaller file at the cost of slightly slower compression time.<br><br><b><I>-progressive</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a progressive JPEG file, which allows an image to be displayed gradually as it downloads over a slow connection.<br><br><b><I>-comment=<I>text</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Embeds the specified <I>text</I> as a comment in the JPEG file's metadata.<br><br><b><I>-iccfile=<I>filename</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Embeds the ICC color profile from the specified <I>filename</I> into the JPEG output.<br><br><b><I>-smooth=<I>n</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a smoothing operation on the input data with a factor of <I>n</I> before compression. Useful for noisy input.<br><br><b><I>-restart=<I>n</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inserts restart markers every <I>n</I> MCUs (Minimum Coded Units). Useful for error resilience in transmission.<br><br><b><I>-maxmemory=<I>n</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the memory usage for compression to <I>n</I> kilobytes.<br><br><b><I>-verbose</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints detailed information about the compression process to standard error.<br><br>


title: DESCRIPTION
content:
The `pbmtojpeg` command is a utility within the <I>Netpbm</I> toolkit, designed to convert images from any of the Netpbm formats – <B>PBM</B> (Portable Bitmap), <B>PGM</B> (Portable Graymap), or <B>PPM</B> (Portable Pixmap) – into the <B>JPEG</B> (Joint Photographic Experts Group) format.<br><br>It typically reads the Netpbm image data from standard input and writes the resulting JPEG image data to standard output, making it highly suitable for use in shell pipelines. `pbmtojpeg` provides various options to control the compression quality, optimize the output file size, enable progressive encoding for web display, and embed metadata like comments or ICC profiles.<br><br>As JPEG is a lossy compression format, `pbmtojpeg` is best used when file size reduction is a priority and some loss of image fidelity is acceptable. It is a fundamental tool for image format conversion and processing in Unix-like environments.


title: CAVEATS
content:
JPEG is a <B>lossy</B> compression format. Each time an image is saved in JPEG format, some data is permanently discarded. Repeatedly editing and re-saving an image as JPEG will degrade its quality over time. For images requiring exact pixel representation or lossless compression, consider using PNG or other formats.<br><br>`pbmtojpeg` relies on an underlying JPEG library (commonly <I>libjpeg</I> or <I>libjpeg-turbo</I>); its capabilities and performance are tied to the features and efficiency of that library.


title: INPUT AND OUTPUT
content:
By default, `pbmtojpeg` reads PBM, PGM, or PPM image data from standard input (<I>stdin</I>) and writes the compressed JPEG data to standard output (<I>stdout</I>). This design facilitates its use in pipelines, for example: `cat image.ppm | pbmtojpeg -quality=85 > image.jpg`.


title: DEPENDENCIES
content:
The functionality of `pbmtojpeg` heavily relies on the presence of a JPEG compression library, most notably <I>libjpeg</I> or its faster variant, <I>libjpeg-turbo</I>. These libraries handle the complex Discrete Cosine Transform (DCT) and Huffman encoding/decoding processes inherent in JPEG compression.


title: HISTORY
content:
The `pbmtojpeg` command is a component of the <B>Netpbm</B> project, a comprehensive toolkit for image manipulation. Netpbm itself evolved from the <I>pbmplus</I> package, originally created by Jef Poskanzer in the late 1980s. As JPEG emerged as a dominant image format, `pbmtojpeg` was developed to provide seamless conversion capabilities between the Netpbm family of formats and JPEG, integrating the widely used <I>libjpeg</I> library. Its design as a filter, reading from standard input and writing to standard output, reflects the Unix philosophy of chaining small, specialized tools, making it a versatile part of many command-line image processing workflows since the early 1990s.


title: SEE ALSO
content:
<B>jpegtopnm</B>(1), <B>pnm</B>(5), <B>anytopnm</B>(1), <B>pnmscale</B>(1), <B>cjpeg</B>(1), <B>convert</B>(1) (ImageMagick)


title: SYNOPSIS
content:
<b>pbmtolj</b> [<i>-resolution {75|100|150|300}</i>] [<i>-landscape</i>] [<i>-portrait</i>] [<i>-no-auto-center</i>] [<i>-magnification {float_value}</i>] [<i>-scale {float_value}</i>] [<i>-page {legal|letter|a4|a3}</i>] [<i>-xpos {n}</i>] [<i>-ypos {n}</i>] [<i>-noxfer</i>] [<i>-no-compression</i>] [<i>pbmfile</i>]


title: PARAMETERS
content:
<b><i>pbmfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The input <i>PBM</i> file to convert. If omitted, <b>pbmtolj</b> reads from standard input.<br><br><b><b>-resolution</b> <i>{75|100|150|300}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the printer's output resolution in <i>DPI (Dots Per Inch)</i>. The image is scaled to fit. Default is <i>300 DPI</i>.<br><br><b><b>-landscape</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the image in landscape orientation (long edge horizontal). Cannot be used with <b>-portrait</b>.<br><br><b><b>-portrait</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the image in portrait orientation (short edge horizontal). This is the default. Cannot be used with <b>-landscape</b>.<br><br><b><b>-no-auto-center</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables automatic centering of the image on the page. The image will be positioned at the top-left corner.<br><br><b><b>-magnification</b> <i>{float_value}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scales the image by the specified magnification factor (e.g., <i>2.0</i> for double size, <i>0.5</i> for half size). Mutually exclusive with <b>-scale</b>.<br><br><b><b>-scale</b> <i>{float_value}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scales the image such that each <i>PBM</i> pixel occupies <i>N</i> printer dots (e.g., <i>-scale 2</i> means each <i>PBM</i> pixel uses a 2x2 block of printer dots). Mutually exclusive with <b>-magnification</b>.<br><br><b><b>-page</b> <i>{legal|letter|a4|a3}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the paper size for printing. Common options include <i>legal</i>, <i>letter</i>, <i>a4</i>, and <i>a3</i>. Default is <i>letter</i>.<br><br><b><b>-xpos</b> <i>{n}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the horizontal (X) position offset for the image on the page, specified in <i>PCL</i> units (1/720 inch). Overrides automatic X-centering.<br><br><b><b>-ypos</b> <i>{n}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the vertical (Y) position offset for the image on the page, specified in <i>PCL</i> units (1/720 inch). Overrides automatic Y-centering.<br><br><b><b>-noxfer</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the use of transfer codes in the generated <i>PCL</i>. This option is typically used for compatibility with older or specific <i>HP LaserJet</i> models.<br><br><b><b>-no-compression</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables <i>RLE (Run-Length Encoding)</i> compression for the image data within the <i>PCL</i> output. This usually results in larger output files but might be necessary for certain older printers.<br><br>


title: DESCRIPTION
content:
The <b>pbmtolj</b> command is a utility within the <i>Netpbm</i> toolkit designed to convert images from the <i>PBM (Portable BitMap)</i> format into <i>PCL (Printer Command Language)</i>, which is the native language for <i>HP LaserJet</i> printers. It reads a black-and-white PBM image, either from standard input or a specified file, and outputs the corresponding PCL data to standard output. This makes it ideal for piping the output directly to a printer via commands like <b>lpr</b>.<br><br>By default, <b>pbmtolj</b> attempts to center the image on the page and uses a resolution of 300 DPI. Users can customize various aspects of the output, including resolution, page orientation (portrait or landscape), paper size, and scaling/magnification, providing flexibility for different printing needs. It specifically handles monochrome (black and white) images, making it suitable for line art, scanned documents, and other two-tone graphics.


title: CAVEATS
content:
<b>Monochrome Only:</b> <b>pbmtolj</b> exclusively processes <i>PBM (Portable BitMap)</i> files, meaning it only handles black and white images. It cannot convert grayscale (<i>PGM</i>) or color (<i>PPM</i>) images.<br><b>HP LaserJet Specific:</b> The generated output is in <i>PCL (Printer Command Language)</i>, specifically for <i>HP LaserJet</i> printers. It may not be compatible with other printer types (e.g., <i>PostScript</i> printers) or with all versions of <i>PCL</i>.<br><b>Resolution Matching:</b> For optimal print quality, the resolution specified with <b>-resolution</b> should match the native resolution capabilities of your <i>HP LaserJet</i> printer.<br><b>Mutually Exclusive Options:</b> The <b>-magnification</b> and <b>-scale</b> options cannot be used simultaneously in a single command execution.


title: STANDARD INPUT/OUTPUT
content:
<b>pbmtolj</b> is designed to work seamlessly in command pipelines. By default, it reads the <i>PBM</i> image data from standard input (<i>stdin</i>) and outputs the generated <i>PCL</i> data to standard output (<i>stdout</i>). This allows for flexible usage, such as chaining it with other <i>Netpbm</i> tools or directly piping its output to printer commands like <b>lpr</b> (e.g., <i>anytoppm | ppmtopbm | pbmtolj | lpr</i>).


title: PCL (PRINTER COMMAND LANGUAGE)
content:
<i>PCL</i> is a proprietary printer control language developed by <i>Hewlett-Packard</i>. It's widely adopted for controlling <i>HP LaserJet</i> printers and defines how text, graphics, and other elements are rendered on a page. <b>pbmtolj</b> effectively translates the pixel information of a <i>PBM</i> image into the necessary <i>PCL</i> commands for printing.


title: HISTORY
content:
<b>pbmtolj</b> is a component of the comprehensive <i>Netpbm</i> image processing toolkit. <i>Netpbm</i> itself evolved from <i>pbmplus</i>, a package originally developed by <i>Jef Poskanzer</i> in the late 1980s. Over the years, the toolkit has been maintained and expanded by various contributors, solidifying its role as a fundamental suite for converting and manipulating a wide array of graphic formats in Unix-like environments. <b>pbmtolj</b> specifically addresses the need for converting simple bitmap images into a format suitable for widely used <i>HP LaserJet</i> printers.


title: PARAMETERS
content:
<b><I>-format=pict-format</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the PICT format version to output. <I>pict-format</I> can be:<br><b>1</b>: Outputs a monochrome-only PICT. This is the default.<br><b>2</b>: Outputs a color PICT, even though the input PBM is monochrome. This can be useful for proper interaction when pasting the resulting PICT into a color document on a Macintosh.<br><br>


title: DESCRIPTION
content:
<I>pbmtomacp</I> is a utility from the <I>Netpbm</I> project. It reads a <I>Portable BitMap</I> (PBM) image from standard input and converts it into a <I>Macintosh PICT</I> format image, writing the output to standard output. The PBM format is a simple, single-bit-per-pixel format suitable for black and white images. Macintosh PICT is a graphics file format primarily used on older Apple Macintosh computers. This command is particularly useful for converting monochrome images for use in legacy Macintosh applications or environments that specifically require the PICT format. It functions as a specialized converter within the broader Netpbm toolkit, allowing for interoperability between different graphics ecosystems.


title: CAVEATS
content:
The <I>PICT</I> format is an older Macintosh graphics format, largely superseded by more modern formats like <I>JPEG</I>, <I>PNG</I>, and <I>TIFF</I>. This command is primarily for compatibility with legacy systems and applications. Since PBM images are strictly monochrome, <I>pbmtomacp</I> cannot convert them into color images, though it can wrap the monochrome data in a color PICT structure (using <I>-format=2</I>).


title: INPUT/OUTPUT
content:
<I>pbmtomacp</I> reads a PBM image from standard input (<I>stdin</I>) and writes the converted Macintosh PICT image to standard output (<I>stdout</I>). It is commonly used as part of a pipeline with other Netpbm utilities.


title: HISTORY
content:
<I>pbmtomacp</I> is part of the <I>Netpbm</I> package, which originated from the <I>PBMPLUS</I> toolkit created by Jef Poskanzer in the late 1980s. The <I>Netpbm</I> suite was developed to provide a comprehensive set of tools for converting and manipulating various graphics file formats, especially for Unix-like systems. The inclusion of <I>pbmtomacp</I> reflects the need for cross-platform compatibility, particularly with the then-prevalent Macintosh ecosystem and its proprietary <I>PICT</I> format. Its development was driven by the requirement to integrate images from Unix environments into Macintosh desktop publishing and graphics applications.


title: PARAMETERS
content:
<b><i>pbmfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the Portable Bitmap (PBM) image file to be converted. If this argument is omitted, <code><b>pbmtomda</b></code> reads the PBM image data from standard input (stdin). The output raw MDA/Hercules graphics data is always written to standard output (stdout).<br><br>


title: DESCRIPTION
content:
<code><b>pbmtomda</b></code> is a specialized utility from the Netpbm suite, designed to convert a Portable Bitmap (PBM) image into a raw byte stream suitable for direct display on an IBM PC Monochrome Display Adapter (MDA) or Hercules graphics card. The Netpbm project provides a comprehensive toolkit for manipulating graphics files, often used in scripts due to its simple, stream-oriented design.<br><br>The MDA and Hercules cards were prevalent in early IBM PC systems, offering monochrome text and graphics capabilities. <code><b>pbmtomda</b></code>'s output is not a standard image file format, but rather a sequence of bytes laid out exactly as required by the MDA/Hercules video memory, making it useful for emulators or niche applications requiring low-level hardware interaction. It typically expects the input PBM image to be 720x348 pixels for Hercules compatibility or 640x200 for MDA, though it will process other dimensions, potentially with scaling or cropping.


title: CAVEATS
content:
The output of <code><b>pbmtomda</b></code> is a raw byte stream directly mapping to MDA/Hercules video memory; it is not a standard image file format and cannot be viewed directly by typical image viewers.<br><br>This command is highly specialized for very old hardware (IBM PC MDA/Hercules graphics cards) or emulators of such hardware. Its practical use in modern computing environments is limited.<br><br>The command expects input PBM images to be specific dimensions (720x348 for Hercules, 640x200 for MDA). Input images of other sizes will be scaled or clipped, potentially leading to undesired visual distortion.<br><br>There are no options to control scaling, positioning, or color inversion directly within the command, which simplifies its interface but limits flexibility.


title: OUTPUT FORMAT SPECIFICS
content:
The raw byte stream produced by <code><b>pbmtomda</b></code> is structured according to the video memory layout of the IBM PC MDA/Hercules cards. For Hercules, this means a 720x348 pixel monochrome image where pixels are packed 8 per byte. The layout can be complex, involving interleaved scanlines and specific byte ordering for video memory addressing, which is crucial for emulators or direct hardware programming that needs to interact with the MDA/Hercules video buffer.


title: HISTORY
content:
<code><b>pbmtomda</b></code> is an integral part of the Netpbm suite of graphics utilities. The Netpbm project itself evolved from the PBMplus toolkit, which was created by Jef Poskanzer in the late 1980s. The command's existence reflects the computing landscape of that era, where the IBM PC and its variants, equipped with Monochrome Display Adapter (MDA) and later Hercules graphics cards, were dominant. These cards provided basic monochrome text and graphics capabilities, and <code><b>pbmtomda</b></code> was developed to facilitate the conversion of standard bitmap images into a format directly usable by this specific hardware. Its purpose remains largely historical and for niche applications like DOS emulation or hardware preservation.


title: PARAMETERS
content:
<b><i>pbmfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the input PBM image file. If omitted, <b>pbmtomgr</b> reads the PBM image data from standard input (stdin).<br><br>


title: DESCRIPTION
content:
The <b>pbmtomgr</b> command is a utility from the Netpbm suite, designed to convert Portable Bitmap (PBM) format image files into the MGR (Mouse Gesture Recognition) graphics file format. PBM is a monochrome image format, representing images as a grid of black and white pixels. The MGR format is associated with the <i>mgr</i> window system, an older graphical environment primarily used on Unix-like systems. <b>pbmtomgr</b> reads a PBM image from standard input by default, or from a specified PBM file, and outputs the converted MGR data to standard output. This allows for piping operations with other Netpbm tools or directing the output to a file compatible with MGR-aware applications. It's a fundamental tool for handling monochrome graphics within the Netpbm ecosystem, specifically for compatibility with MGR systems.


title: HISTORY
content:
<b>pbmtomgr</b> is an integral part of the extensive Netpbm package, a collection of graphics programs and libraries for converting, manipulating, and displaying various image formats. The Netpbm project has a long history, tracing its roots back to the early days of Unix, and has been continuously developed to support a wide range of image operations. The inclusion of specialized tools like <b>pbmtomgr</b> reflects the historical need to support diverse graphics formats, including those used by specific, sometimes niche, windowing systems like <i>mgr</i>, which was more prominent in earlier computing environments.


title: DESCRIPTION
content:
The <b>pbmtopgm</b> command is a utility within the Netpbm package designed to convert images from the Portable BitMap (PBM) format to the Portable GreyMap (PGM) format. <br><br>A <i>PBM</i> file represents a monochrome (black and white) image, where each pixel is either black or white. A <i>PGM</i> file represents a grayscale image, where each pixel has a single intensity value, typically ranging from 0 (black) to 255 (white). <br><br>When <b>pbmtopgm</b> performs the conversion, it maps the black pixels from the input PBM image to a pixel value of 0 (pure black) in the output PGM image. Conversely, it maps the white pixels from the PBM image to a pixel value of 255 (pure white) in the PGM image. The output PGM image will always have a maximum grayscale value (maxval) of 255. This command is fundamental for transforming 1-bit monochrome images into 8-bit grayscale images, enabling further grayscale-specific manipulations.


title: CAVEATS
content:
The command expects valid PBM input. If the input is not a correctly formatted PBM image, it may produce an error or unexpected output. <br>The output PGM image will always have a <i>maxval</i> of 255, performing a direct 1-bit (black/white) to 8-bit (0/255) mapping without intermediate grayscale levels.


title: STANDARD INPUT/OUTPUT
content:
If <i>pbmfile</i> is not specified, <b>pbmtopgm</b> reads the PBM image data from standard input. It always writes the resulting PGM image to standard output. This behavior makes it ideal for use in command-line pipelines, where the output of one Netpbm command can be directly fed as input to another.


title: HISTORY
content:
<b>pbmtopgm</b> is part of the extensive Netpbm package, a collection of graphics manipulation programs and libraries that originated in the late 1980s. The Netpbm project, initially developed by Jef Poskanzer, aims to provide a set of atomic tools for basic image processing, often used in pipelines. This command reflects the Unix philosophy of small, specialized tools that do one thing well, and its design has remained consistent over decades.


title: DESCRIPTION
content:
<i>pbmtopi3</i> is a specialized utility within the comprehensive Netpbm package. Its primary function is to convert a Portable Bitmap (PBM) image file into the proprietary Imagen printer image file format, specifically known as 'pi3'. This format was historically used by Imagen brand laser printers, which were prevalent in professional and academic environments during the 1980s and early 1990s. <br><br>As PBM files represent monochrome (black and white) images, the output 'pi3' file is also inherently monochrome. This command serves as a filter, typically reading PBM data from standard input if no input file is specified, and writing the resulting Imagen 'pi3' data to standard output. Its existence highlights Netpbm's commitment to interoperability across a wide range of legacy and contemporary image formats and printing devices.


title: CAVEATS
content:
The primary limitation of <i>pbmtopi3</i> is its focus on a highly legacy format; Imagen printers are largely obsolete. Therefore, its practical utility in modern computing environments is minimal, primarily serving historical or very niche emulation purposes. <br><br>The command processes only monochrome (black and white) images, as it operates on the Portable Bitmap (PBM) format. It does not support any command-line options for image manipulation or output customization, relying solely on the input PBM data.


title: USAGE EXAMPLE
content:
To convert a PBM file named <i>input.pbm</i> to an Imagen 'pi3' file named <i>output.pi3</i>:<br><code>pbmtopi3 input.pbm > output.pi3</code><br><br>To use <i>pbmtopi3</i> as part of a pipeline, for example, converting a PNM image to PBM first, then to 'pi3':<br><code>pnmtopbm input.pnm | pbmtopi3 > output.pi3</code>


title: HISTORY
content:
<i>pbmtopi3</i> is a component of the Netpbm image manipulation toolkit, which has a long and rich history dating back to the late 1980s. The Netpbm project evolved from the 'pbmplus' package created by Jef Poskanzer, designed to provide a versatile set of tools for converting and manipulating various graphics formats. <br><br>Commands like <i>pbmtopi3</i> were developed to support specific hardware prevalent at the time, such as Imagen printers, demonstrating the project's early commitment to broad device compatibility. While the target hardware is now historical, the command remains part of the Netpbm suite, maintained for completeness and historical fidelity.


title: DESCRIPTION
content:
<i>pbmtoplot</i> is a utility from the <i>Netpbm</i> toolkit, designed to transform a Portable BitMap (<i>PBM</i>) image file into a vector graphics file in the <i>plot(5)</i> format.<br><br>The <i>plot(5)</i> format is a simple, ASCII-based representation primarily used for early Unix plotting devices. It describes graphics using basic drawing commands like lines, points, and arcs. <i>pbmtoplot</i> converts each pixel of the input bitmap into corresponding vector commands, effectively drawing the bitmap on a plotter.<br><br>This command is particularly useful for sending raster images to plotters that understand the <i>plot(5)</i> language, or for integrating bitmap data into existing <i>plot(5)</i>-based workflows. By default, it reads <i>PBM</i> data from standard input and writes the <i>plot(5)</i> output to standard output.


title: CAVEATS
content:
<b>File Size:</b> Converting a raster image like <i>PBM</i> to the <i>plot(5)</i> vector format can result in very large output files, especially for high-resolution bitmaps, as each pixel often translates into individual drawing commands.<br><br><b>Format Limitations:</b> The <i>plot(5)</i> format is relatively old and simple, lacking modern vector graphics features. It's primarily suited for basic line and point drawing.<br><br><b>Output Quality:</b> The visual quality of the output depends heavily on the capabilities and resolution of the plotting device interpreting the <i>plot(5)</i> data.


title: STANDARD I/O USAGE
content:
<i>pbmtoplot</i> operates as a filter. It reads <i>PBM</i> data from standard input (<i>stdin</i>) and writes the resulting <i>plot(5)</i> data to standard output (<i>stdout</i>). This allows it to be easily integrated into pipelines.<br><br><b>Example:</b> <br>cat image.pbm | pbmtoplot > image.plot


title: HISTORY
content:
<i>pbmtoplot</i> is part of the <i>Netpbm</i> project, a comprehensive toolkit for manipulating graphics images. <i>Netpbm</i> originated from the <i>PBMplus</i> package, created by Jef Poskanzer in the late 1980s. The <i>plot(5)</i> format itself dates back to early Unix systems, used for simple graphical output on plotters and terminals. <i>pbmtoplot</i> bridges the gap between bitmap images and this older vector graphics standard, reflecting a period when dedicated plotters were common output devices.


title: SYNOPSIS
content:
<b>pbmtoppa</b> [<I>options</I>] [<I>pbmfile</I>]<br>When <I>pbmfile</I> is omitted, <I>pbmtoppa</I> reads from standard input.


title: PARAMETERS
content:
<b><b>-xpos</b> <I>x</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Horizontal position of the image on the page, in dots from the left edge.<br><br><b><b>-ypos</b> <I>y</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Vertical position of the image on the page, in dots from the top edge.<br><br><b><b>-xres</b> <I>res</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Horizontal resolution for the output, in dots per inch (DPI).<br><br><b><b>-yres</b> <I>res</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Vertical resolution for the output, in dots per inch (DPI).<br><br><b><b>-left</b> <I>left</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Margin from the left of the page, in dots.<br><br><b><b>-top</b> <I>top</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Margin from the top of the page, in dots.<br><br><b><b>-width</b> <I>width</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Desired width of the image on the page, in dots.<br><br><b><b>-height</b> <I>height</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Desired height of the image on the page, in dots.<br><br><b><b>-scale</b> <I>scale</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale factor to apply to both horizontal and vertical dimensions.<br><br><b><b>-scale-x</b> <I>scale-x</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale factor for the horizontal dimension.<br><br><b><b>-scale-y</b> <I>scale-y</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale factor for the vertical dimension.<br><br><b><b>-fit</b> / <b>-fit-to-page</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale the image to fit the entire page.<br><br><b><b>-fit-to-width</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale the image to fit the width of the page.<br><br><b><b>-fit-to-height</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale the image to fit the height of the page.<br><br><b><b>-compress</b> {rle|tiff|none}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the compression method for the PCL output. <I>rle</I> (Run Length Encoding) is default. <I>tiff</I> uses TIFF G4 Fax compression.<br><br><b><b>-printer</b> {laserjet|laserjetplus|ljet3|ljet4|ljet5|ljet6|deskjet|pslaserjet}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optimizes output for a specific printer model or PCL level.<br><br><b><b>-level</b> {2|3|4|5}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the PCL language level compatibility.<br><br><b><b>-formfeed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs a form feed character at the end of the PCL stream (default).<br><br><b><b>-noformfeed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the output of a form feed character.<br><br><b><b>-landscape</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the image in landscape orientation.<br><br><b><b>-portrait</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the image in portrait orientation (default).<br><br><b><b>-rotate</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rotates the image 90 degrees clockwise before printing.<br><br><b><b>-pagenum</b> <I>n</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the starting page number in the PCL stream.<br><br><b><b>-duplex</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables duplex (two-sided) printing for compatible printers.<br><br><b><b>-simplex</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables duplex printing (default).<br><br>


title: DESCRIPTION
content:
The <I>pbmtoppa</I> command is a utility from the Netpbm graphics toolkit that converts a Portable Bitmap (PBM) image into the Hewlett-Packard Printer Command Language (PCL) format. Specifically, it generates PCL output compatible with HP LaserJet printers, particularly older models that utilize the PA-RISC (PCL-5) subset of the language. This tool is crucial for printing 1-bit deep (black and white) images directly to compatible HP LaserJet printers without requiring a graphical environment or specialized printer drivers on the system sending the data. It reads the PBM image from standard input by default, or from a specified file, and writes the generated PCL data to standard output. Users can control various aspects of the output, including image position, resolution, scaling, and compression method, to optimize the printed result for a specific printer model or page layout.


title: CAVEATS
content:
The <I>pbmtoppa</I> command is designed for 1-bit deep PBM images. While it can theoretically process grayscale or color images through the Netpbm conversion chain (e.g., <I>pnmtopgm</I> or <I>pnmtogray</I> followed by <I>pnmtobm</I>), its output is inherently monochrome PCL suitable for black and white laser printers. Compatibility with specific HP LaserJet models and PCL levels might vary; testing with your target printer is recommended. Its use is generally for direct printing to older PCL-compatible printers or for generating PCL data for spooling systems that handle raw PCL.


title: PCL OUTPUT CONSIDERATIONS
content:
The PCL output generated by <I>pbmtoppa</I> is a raw printer language stream. This output is typically sent directly to a printer via a parallel port, USB port, or network connection (e.g., using <I>lp</I> or <I>lpr</I> with a raw queue, or via <I>netcat</I> to a printer's port 9100). It is not a document format like PDF or PostScript, but rather instructions for the printer's internal rasterizer. Ensure the printer is configured to accept raw PCL data.


