# CommandSection

title: HISTORY
content:
<b>brushtopbm</b> is part of the long-standing <b>Netpbm</b> project, which began as <b>PBMplus</b> in the late 1980s. <b>PBMplus</b> was created by Jef Poskanzer, and Netpbm continued its development, becoming a comprehensive toolkit for manipulating graphic images. <b>brushtopbm</b> was added to the suite to support the conversion of proprietary Brother P-Touch label printer graphics files, reflecting Netpbm's goal of providing tools for a wide array of image formats, including niche ones. Its development is tied to the evolution of Netpbm, which maintains backwards compatibility and a consistent command-line interface.


title: PARAMETERS
content:
<b>user</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The username of the recipient to whom the message will be sent. This user must be logged in to receive the message.<br><br><b>tty</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Optional)</i> The specific terminal device name (e.g., `pts/0`, `ttyS0`) to which the message should be sent. This is useful if the target user is logged in multiple times and you want to target a specific session or terminal.<br><br>


title: DESCRIPTION
content:
The `bsd-write` command, typically invoked simply as `write`, allows one logged-in user to send real-time text messages directly to another logged-in user's terminal. This is a very old and simple form of inter-user communication on Unix-like systems. When you execute `write user`, the system waits for you to type your message. Each line you type is immediately displayed on the target user's terminal. The message is terminated by an end-of-file character, commonly <i>Ctrl+D</i>, on a new line. If the target user is logged in multiple times, `write` will usually pick the terminal with the shortest idle time to send the message. You can explicitly specify the target terminal by using `write user tty_name` (e.g., `write john pts/0`). A crucial requirement is that the recipient must have allowed messages (i.e., their `mesg` setting is `y`). If messages are blocked, the sender will be notified. It's primarily used for short, quick communications among users on the same system.


title: CAVEATS
content:
The recipient must be logged in and have messages enabled (i.e., their `mesg` setting is `y`). If `mesg n` is set, they will not receive the message, and the sender will be notified. Messages are sent line by line as they are typed, not as a single block. The command is not suitable for sending sensitive information as messages are unencrypted and directly displayed on the target terminal. It can be disruptive if used inappropriately, as it directly prints to the user's active screen, potentially interfering with their work.


title: ENDING A MESSAGE
content:
After typing your message, you must press <i>Ctrl+D</i> on a new line (or at the beginning of a line) to send the message and exit the `write` command. Until <i>Ctrl+D</i> is pressed, the command remains active, and anything you type is forwarded.


title: PERMISSIONS AND ACCESSIBILITY
content:
For `write` to function, the sender must have appropriate write access to the recipient's terminal device. This access is typically managed by the system and is usually granted by default when a user has their `mesg` setting enabled. The `mesg` command itself is used by users to control this permission on their own terminal.


title: HISTORY
content:
The `write` command is one of the oldest utilities in Unix, dating back to its very early versions. It was a fundamental tool for basic inter-user communication in multi-user environments before the widespread adoption of more sophisticated messaging systems. Its core functionality has remained largely unchanged for decades, reflecting its simple and effective design for direct terminal-to-terminal messaging. The `bsd-write` name often refers to the implementation that originated from BSD Unix, which is commonly adopted in many Linux distributions due to its robustness and adherence to traditional Unix principles.


title: SYNOPSIS
content:
<b>bspc</b> [<b>-h</b>|<b>--help</b>|<b>-v</b>|<b>--version</b>]<br><b>bspc</b> &lt;<i>object</i>&gt; &lt;<i>subcommand</i>&gt; [<i>arguments...</i>]<br><b>bspc</b> <b>query</b> [<i>selectors</i>] [<i>format_options</i>]<br><b>bspc</b> <b>config</b> [<i>property</i>] [<i>value</i>]


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Displays the help message and exits.</I><br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Displays version information and exits.</I><br><br><b><b>&lt;object&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specifies the target category of operation. Common objects include <b>monitor</b>, <b>desktop</b>, <b>node</b>, <b>window</b>, <b>rule</b>, <b>config</b>, <b>query</b>, <b>control</b>, and <b>wm</b>. Each object has its own set of specific subcommands and arguments.</I><br><br>


title: DESCRIPTION
content:
<b>bspc</b> is the command-line client for the <I>bspwm</I> tiling window manager. It acts as the primary interface for users and scripts to interact with and control the <I>bspwm</I> daemon.<br><br>Through <b>bspc</b>, users can query the current state of the window manager (e.g., monitor arrangement, desktop contents, window properties, node layouts). More importantly, it allows sending commands to <I>bspwm</I> to modify its behavior and manage windows. This includes actions like focusing windows, moving windows between desktops, resizing nodes, creating or removing desktops, applying window rules, and adjusting global configuration settings.<br><br>Its design emphasizes scriptability, making it a cornerstone for creating custom keybindings with tools like <I>sxhkd</I> and for automating window management tasks. <b>bspc</b> communicates with the <I>bspwm</I> daemon via an inter-process communication (IPC) socket.


title: CAVEATS
content:
<I><code>bspc</code> requires the <code>bspwm</code> daemon to be running to function properly. Without it, commands will fail as there's no daemon to communicate with.</I><br><I>The command's full power comes from understanding its hierarchical structure of objects and subcommands, which can be complex for new users.</I><br><I>Error messages from <code>bspc</code> can sometimes be concise, requiring familiarity with <code>bspwm</code>'s internal state to diagnose issues.</I>


title: INTER-PROCESS COMMUNICATION (IPC)
content:
<I><code>bspc</code> communicates with the <code>bspwm</code> daemon using an inter-process communication (IPC) mechanism, typically via a Unix domain socket. This allows external scripts and applications to seamlessly interact with and control the window manager's behavior.</I>


title: SCRIPTABILITY AND CUSTOMIZATION
content:
<I>The primary strength of <code>bspc</code> lies in its scriptability. It is commonly used in conjunction with hotkey daemons like <code>sxhkd</code> to define custom keybindings, enabling users to finely tune their window management workflow and automate complex tasks.</I>


title: HISTORY
content:
<I><code>bspwm</code> and its client <code>bspc</code> were created by Baptiste Fontaine (baskerville).</I><br><I>First publicly released around 2013, <code>bspwm</code> introduced a unique approach to tiling window management based on binary space partitioning, differing from traditional static or dynamic tiling managers.</I><br><I>From its inception, <code>bspc</code> has been the sole and indispensable interface for controlling <code>bspwm</code>, facilitating its highly customizable and scriptable nature.</I><br><I>Its development has been driven by the philosophy of "do one thing and do it well," with <code>bspwm</code> focusing on window management logic and <code>bspc</code> on providing a robust command-line API for interaction.</I>


title: DESCRIPTION
content:
<b>bspwm</b> is a lightweight and highly configurable <I>tiling window manager</I> for X. It manages windows as the leaves of a full binary tree, dynamically splitting nodes to accommodate new windows. This unique approach allows for flexible and predictable window arrangement, where each window occupies a specific region within a binary tree structure.<br><br>Unlike many other window managers, <b>bspwm</b> does not handle keybindings directly; it relies on an external hotkey daemon like <I>sxhkd</I> to translate key presses into commands. Similarly, all configuration and interaction with <b>bspwm</b> are done via its companion command-line utility, <I>bspc</I>. This clear separation of concerns makes <b>bspwm</b> incredibly scriptable and modular, allowing users to build a custom desktop environment tailored to their exact needs.<br><br>Adhering to <I>Freedesktop.org</I> standards like EWMH (Extended Window Manager Hints), <b>bspwm</b> is designed to be minimalistic, fast, and compliant, providing a solid foundation upon which a powerful and personalized workspace can be constructed.


title: CAVEATS
content:
<b>bspwm</b> requires significant user configuration and external tools for a complete desktop experience. It does not provide built-in keybinding management (relying on <I>sxhkd</I>), nor does it offer a status bar, menu, or notification system; these functionalities must be provided by other independent utilities. Its design philosophy emphasizes minimalism and modularity, which means it's not an out-of-the-box solution and often presents a steeper learning curve for users new to tiling window managers.


title: CONFIGURATION
content:
<b>bspwm</b> is configured primarily through a shell script named <I>bspwmrc</I>, typically located in <I>~/.config/bspwm/</I>. This script contains a series of <I>bspc</I> commands that define desktop rules, default settings, and various behaviors upon startup. Because it's a simple shell script, users can leverage any shell commands or logic to create highly dynamic and complex configurations.


title: INTERACTION AND SCRIPTABILITY
content:
The primary interface for interacting with a running <b>bspwm</b> instance is the <I>bspc</I> utility. <I>bspc</I> allows users and scripts to query the state of the window manager, send commands to manipulate windows and desktops, and subscribe to events. This robust command-line interface makes <b>bspwm</b> exceptionally scriptable, enabling advanced automation and custom workflows.


title: HISTORY
content:
<b>bspwm</b> was created by Gautier Portet (baskerville) and first emerged around 2013. Its development focused on a novel approach to tiling by representing windows as nodes in a binary tree, distinct from many other tiling window managers. A key design decision was to offload all configuration and control to an external tool, <I>bspc</I>, which enabled unprecedented scriptability and modularity. This philosophy quickly gained traction among users seeking highly customizable and minimal environments, leading to its growing popularity within the Linux <I>ricing</I> community.


title: SYNOPSIS
content:
<i>bssh</i> [options] [user@]host [command]<br><i>Note: The exact syntax and available options for <i>bssh</i> can vary significantly depending on the specific Broadcom SDK or device firmware it originates from, as it is not a standardized Linux utility. The synopsis above is based on the common paradigm of an SSH client.</i>


title: PARAMETERS
content:
<b>-p &lt;port&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the port to connect to on the remote host.<br><br><b>-l &lt;user&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the user to log in as on the remote machine.<br><br><b>-i &lt;identity_file&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a file from which the identity (private key) for public key authentication is read.<br><br><b>-o &lt;option&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Can be used to pass options in the format used in the configuration file.<br><br><b>-N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not execute a remote command. Useful for port forwarding only.<br><br><b>-X</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables X11 forwarding.<br><br><b>user@host</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The user to log in as on the remote host, and the hostname or IP address of the remote host.<br><br><b>command</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The command to be executed on the remote host. If omitted, <i>bssh</i> will start an interactive shell session.<br><br>


title: DESCRIPTION
content:
<i>bssh</i> is <b>not</b> a standard Linux command found in general-purpose GNU/Linux distributions. It is a specialized utility, most commonly associated with Broadcom network devices or SDKs (Software Development Kits). It functions as a Secure Shell (SSH) client, designed to establish secure, encrypted connections to target devices that are typically powered by Broadcom chipsets.<br><br>Its primary purpose is to allow administrators and developers to securely manage, configure, and troubleshoot Broadcom-based hardware, such as network switches, routers, or other embedded systems. While it provides similar functionality to the standard <i>ssh</i> command, <i>bssh</i> may incorporate Broadcom-specific extensions, authentication methods, or command sets tailored for direct interaction with their proprietary hardware and firmware interfaces. Users typically encounter <i>bssh</i> when working with Broadcom's own development environments or when maintaining specific hardware requiring its use.


title: CAVEATS
content:
<b><i>bssh</i> is not a standard, general-purpose Linux command.</b> It is a highly specialized utility primarily found in specific Broadcom SDKs or embedded device firmwares. Its functionality, available options, and behavior can vary significantly between different Broadcom product lines or software versions. Users will typically only encounter or need <i>bssh</i> when working directly with Broadcom-specific hardware or development environments. It should not be expected to be present on a standard Linux installation.


title: NON-STANDARD UTILITY
content:
It is crucial to understand that <i>bssh</i> is not part of standard Linux distributions or common open-source projects. It is a closed-source, vendor-specific tool. Therefore, documentation and support for <i>bssh</i> are typically provided by Broadcom within their specific product documentation or SDKs, rather than through general Linux man pages or community forums.


title: HISTORY
content:
The <i>bssh</i> command's history is intrinsically linked to Broadcom Corporation's development of network and communication semiconductor solutions. It was developed as a proprietary tool to facilitate secure remote access and management of Broadcom-powered devices. Its exact development timeline is not publicly documented, but its existence points to the need for tailored secure communication protocols within Broadcom's specific hardware ecosystems, providing a secure alternative or extension to standard network protocols for device configuration and diagnostics.


title: SYNOPSIS
content:
<b><br><i>btcflash</i></b> is not a standard Linux command and lacks a formal, documented synopsis. Its usage varies widely as it typically refers to a fraudulent script (often Python or Bash) distributed by scammers. The general invocation pattern, if one were to execute such a script, might resemble:<br><b><i><br>python3 btcflash.py [<i>claimed_target_address</i>] [<i>claimed_amount</i>] [<i>claimed_network</i>]</i></b><br><b><i>./btcflash.sh [<i>claimed_options_or_arguments</i>]</i></b><br><br>However, users are strongly advised <b><i>not</i></b> to download or execute such scripts due to their fraudulent nature and potential to contain malware.


title: PARAMETERS
content:
<b><i>--address &lt;wallet_address&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Claimed)</i> The purported target Bitcoin wallet address where the fake bitcoins are supposedly sent. This is usually the victim's own address.<br><br><b><i>--amount &lt;BTC_amount&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Claimed)</i> The alleged amount of Bitcoin to be 'flashed' or 'generated' by the fraudulent software.<br><br><b><i>--network &lt;network_type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Claimed)</i> The cryptocurrency network where the 'flash' transaction is falsely claimed to occur (e.g., 'mainnet', 'testnet').<br><br><b><i>--fee &lt;amount&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Claimed)</i> An upfront payment demanded by the scam, falsely presented as a 'transaction fee', 'mining fee', or 'software activation cost' required for the 'flash' to work.<br><br><b><i>--duration &lt;time&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Claimed)</i> The alleged duration for which the 'flash' bitcoins will remain visible in the wallet (often a deceptive explanation for why they later 'disappear').<br><br>


title: DESCRIPTION
content:
<i>btcflash</i> refers to various fraudulent scripts or programs designed to deceive users into believing they can generate or 'flash' non-existent bitcoins onto a cryptocurrency wallet. These schemes are typically scams, often distributed through social media, messaging apps like Telegram, or dubious websites. The software claims to create 'flash transactions' or 'fake bitcoins' that supposedly appear in a user's wallet for a short period or indefinitely. However, these claims are entirely false. The programs are engineered to extract money from victims, usually by demanding an upfront payment for 'transaction fees,' 'mining power,' 'wallet activation,' or 'software licenses.' After payment, no bitcoins are ever received, and the victim's funds are stolen. Furthermore, executing such scripts can expose the user's system to malware, viruses, or backdoors, compromising their security and privacy. <i>btcflash</i> is not a legitimate cryptocurrency tool nor a recognized Linux command; it is a term associated with financial fraud and cybercrime.


title: CAVEATS
content:
<b><br><i>btcflash</i> is a fraudulent scheme and not a legitimate tool or cryptocurrency. Users should be aware of the following critical caveats:</b><br><br><b>1. <i>Scam and Financial Fraud:</i></b> There is no legitimate mechanism to 'flash,' 'generate,' or 'create' fake bitcoins that hold any real value or can be spent. Any software or service claiming to do so is a scam designed to steal money from victims. You will lose any funds you pay to these scammers.<br><br><b>2. <i>Malware Risk:</i></b> Scripts associated with '<i>btcflash</i>' are often laden with malware, viruses, keyloggers, or remote access Trojans (RATs). Executing such scripts can compromise your entire system, leading to data theft, privacy breaches, and further financial losses.<br><br><b>3. <i>No Real Value:</i></b> Any bitcoins that *might* visually appear in a wallet after running such a script are merely an illusion (e.g., a manipulated wallet balance display or a temporary entry that cannot be spent) and have no real value on the blockchain. They cannot be transferred, spent, or converted.<br><br><b>4. <i>Legal Implications:</i></b> Attempting to generate or use fraudulent cryptocurrency can have severe legal consequences, as it constitutes participation in financial fraud or cybercrime.<br><br><b>5. <i>Phishing and Social Engineering:</i></b> Scammers often use sophisticated social engineering tactics and phishing links to distribute these fraudulent tools. Always be skeptical of unsolicited offers promising easy money or free cryptocurrency.


title: <I><B>WARNING: AVOID 'BTCFLASH' SCRIPTS</B></I>
content:
<i>Due to the extreme risks of financial loss, malware infection, and legal consequences, it is imperative to avoid downloading, executing, or interacting with any software or scheme branded as '<i>btcflash</i>' or similar 'Bitcoin flashing' tools. Always obtain cryptocurrency software from official, verified sources.</i>


title: <I><B>HOW THE SCAM WORKS</B></I>
content:
<i>Scammers typically entice victims with promises of free or easy bitcoins. They then demand small upfront payments for 'transaction fees' or 'software activation.' The '<i>btcflash</i>' script or application might show a fabricated balance in a fake wallet interface or trick the user into thinking funds appeared. When the victim tries to spend or transfer these fake funds, they discover they are worthless, and their initial payment is gone. Some versions also attempt to steal legitimate wallet credentials or install malware.</i>


title: HISTORY
content:
The concept of '<i>btcflash</i>' emerged within various cybercriminal communities, often propagated through online forums, encrypted messaging apps (like Telegram), and deceptive YouTube videos, starting in the mid-2010s and continuing to the present day. It's not a single, unified project but rather a collection of similar scam tactics and scripts. Its 'development' is driven by scammers seeking to exploit individuals' desires for quick wealth in the cryptocurrency space, evolving with new deceptive features and distribution methods to ensnare victims.


title: SEE ALSO
content:
There are no legitimate Linux commands directly related to '<i>btcflash</i>' as it refers to fraudulent software. For legitimate cryptocurrency interactions, one might consider:<br><b><i>bitcoin-cli(1)</i></b><i> - A command-line interface for Bitcoin Core.</i><br><b><i>electrum(1)</i></b><i> - A lightweight Bitcoin client (often has a CLI component for scripting).</i>


title: PARAMETERS
content:
<b>--cpu_mode <MODE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the CPU usage display mode (e.g., <i>avg</i>, <i>all</i>, <i>one</i>).<br><br><b>--mem_mode <MODE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the memory usage display mode (e.g., <i>basic</i>, <i>advanced</i>).<br><br><b>--disk_mode <MODE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the disk I/O display mode (e.g., <i>all</i>, <i>summary</i>).<br><br><b>--net_mode <MODE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the network I/O display mode (e.g., <i>all</i>, <i>summary</i>).<br><br><b>--process_mode <MODE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the process display mode (e.g., <i>tree</i>, <i>full</i>).<br><br><b>--group_by <FIELD></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Groups processes by a specific field (e.g., <i>comm</i>, <i>pid</i>, <i>user</i>).<br><br><b>--color <THEME></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the color theme (e.g., <i>default</i>, <i>gruvbox</i>, <i>nord</i>).<br><br><b>--config <FILE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom configuration file path.<br><br><b>--disable_basic_mode</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts with a more detailed mode for widgets, overriding default basic views.<br><br><b>--hide_table_headers</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hides column headers in tables for a more compact view.<br><br><b>--battery</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows battery information (if available).<br><br><b>--temp_type <TYPE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the temperature display unit (e.g., <i>celsius</i>, <i>fahrenheit</i>).<br><br><b>--rate <MS></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the refresh rate in milliseconds (e.g., 1000 for 1 second).<br><br>


title: DESCRIPTION
content:
<b>btm</b>, commonly known as <b>bottom</b>, is a powerful and interactive command-line system monitor written in Rust, offering a modern alternative to traditional tools like <i>top</i> or <i>htop</i>. It provides a comprehensive real-time overview of your system's resources, including CPU, memory, disk I/O, network activity, and active processes.<br><br>Users can navigate through various panels, sort processes, and even kill them directly from the interface. <b>bottom</b> emphasizes user-friendliness with customizable layouts, color themes, and a responsive interface that adapts to different terminal sizes. Its cross-platform nature allows it to run on Linux, macOS, and Windows, making it a versatile tool for system administrators and developers alike. The highly configurable display allows users to tailor the information presented, focusing on specific metrics or processes as needed. <b>bottom</b>'s interactive nature makes it an excellent tool for troubleshooting performance issues or simply keeping an eye on system health.


title: CAVEATS
content:
<b>btm</b> relies on system-specific information sources, which might vary slightly across different Linux distributions or kernel versions, potentially leading to minor inconsistencies in reported data.<br><br>While generally efficient, very high refresh rates or monitoring an extremely large number of processes on older hardware might incur a slight performance overhead. Some features, like process killing, require appropriate user permissions. Configuration is primarily via a TOML file, which might be less intuitive for new users compared to command-line flags.


title: CONFIGURATION FILE
content:
<b>btm</b> supports a highly customizable configuration file, typically located at <i>~/.config/bottom/bottom.toml</i> (or <i>~/.config/btm/btm.toml</i>). This file allows users to define default layouts, widgets, colors, keybindings, and more, offering a persistent way to tailor the <b>btm</b> experience beyond command-line arguments.


title: KEYBINDINGS
content:
<b>btm</b> is highly interactive and navigable using keyboard shortcuts. Users can sort columns, filter processes, change widget focus, expand/collapse sections, and even search for processes directly within the application, enhancing its usability without requiring mouse interaction. Pressing '?' inside <b>btm</b> will display a list of available keybindings.


title: HISTORY
content:
<b>bottom</b> was created by <i>Clement Tsang</i> and first released in 2020. It was developed with the Rust programming language, focusing on performance, safety, and a modern, interactive user experience. Its creation aimed to address some of the limitations and less intuitive aspects of older system monitoring tools, offering a more visually appealing and customizable interface. Since its initial release, <b>bottom</b> has gained significant popularity within the Linux community due to its active development, cross-platform compatibility, and feature-rich design. It continues to be regularly updated with new features and performance improvements.


title: PARAMETERS
content:
<b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Show help message and exit.</i><br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Show version information and exit.</i><br><br><b>--config &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify a custom configuration file path.</i><br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enable debug logging.</i><br><br><b>--low-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Force 256-color mode for terminals with limited true color support.</i><br><br><b>--tty-mode</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Run in TTY mode, useful for consoles without full VT100/Xterm support.</i><br><br>


title: DESCRIPTION
content:
<b>btop</b> is a modern, interactive, and highly customizable resource monitor for Linux, macOS, and FreeBSD. It serves as a next-generation alternative to traditional tools like <b>top</b> and <b>htop</b>, offering a visually rich and user-friendly interface.<br><br>Written in C++, <b>btop</b> provides superior performance compared to its predecessors, <b>bpytop</b> and <b>bashtop</b>, which were written in Python and Bash respectively. It displays various system metrics including CPU utilization, memory usage, disk I/O, network activity, and a comprehensive process list.<br><br>Key features include full mouse support, customizable menus, process management (kill, renice), detailed stat views, multiple themes, and a responsive interface that adapts to terminal size. Its graphical representation of data makes it easy to quickly grasp system health at a glance, making it an excellent tool for system administrators and power users alike.


title: CAVEATS
content:
While generally efficient, <b>btop</b> requires a modern terminal emulator with true color support for its full visual fidelity. On very old or minimal systems, its advanced graphical features might be slightly resource-intensive compared to basic tools like <b>top</b>. It is not pre-installed on most distributions and requires manual installation.


title: KEY FEATURES
content:
<b>btop</b> offers a rich set of features beyond basic monitoring. These include: <br><i>- Full mouse support for navigation and interaction.</i><br><i>- Customizable UI elements and comprehensive theme support.</i><br><i>- Advanced process management capabilities (kill, renice, search, filter).</i><br><i>- Detailed stats for CPU, memory, disks, network, and processes.</i><br><i>- Auto-scaling graphs for network and disk usage.</i><br><i>- Ability to save and load custom configurations.</i>


title: INSTALLATION
content:
<b>btop</b> is typically installed via system package managers (e.g., <code>apt install btop</code>, <code>dnf install btop</code>, <code>pacman -S btop</code>). It can also be compiled from source for systems where a pre-built package is not available or for users who prefer the latest development version.


title: HISTORY
content:
<b>btop</b> is the C++ rewrite of <b>bpytop</b>, which itself was a Python rewrite of the original <b>bashtop</b> (a Bash script). The project was initiated by Aristocratos with the goal of creating a faster and more efficient system monitor while retaining the modern user interface and features of its predecessors. The C++ rewrite significantly improved performance and reduced resource consumption, making <b>btop</b> a robust and popular choice for system monitoring.


title: SYNOPSIS
content:
<i><br><b>btrbk</b> [OPTIONS] &lt;COMMAND&gt; [ARGS]</i><br><br><i><b>Commands:</b></i><br><i> &nbsp; <b>run</b> [OPTIONS] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Perform backup operations as configured.</i><br><i> &nbsp; <b>list</b> &lt;TYPE&gt; [OPTIONS] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List snapshots or backups.</i><br><i> &nbsp; <b>archive</b> [OPTIONS] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Perform archiving of expired snapshots.</i><br><i> &nbsp; <b>dryrun</b> [OPTIONS] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Show what <b>btrbk</b> would do without making changes.</i><br><i> &nbsp; <b>config dump</b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dump the parsed configuration.</i><br><i> &nbsp; <b>subvolume create</b> &lt;PATH&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Create a new Btrfs subvolume.</i><br><i> &nbsp; <b>subvolume destroy</b> &lt;PATH&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destroy a Btrfs subvolume.</i><br><i> &nbsp; <b>help</b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Show help message.</i>


title: PARAMETERS
content:
<b><i>--config &lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies an alternative configuration file to use.</i><br><br><b><i>--override &lt;key&gt;=&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Overrides a configuration parameter directly from the command line.</i><br><br><b><i>--btrfs-path &lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the path to the <b>btrfs</b> executable.</i><br><br><b><i>--ssh-path &lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the path to the <b>ssh</b> executable for remote operations.</i><br><br><b><i>--verbose, -v</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Increases the verbosity of output messages.</i><br><br><b><i>--quiet, -q</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Suppresses most output messages, showing only errors or critical information.</i><br><br><b><i>--dry-run, -n</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Performs a trial run with no changes made to the system, showing what <b>btrbk</b> would do.</i><br><br><b><i>--no-backup</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prevents <b>btrbk</b> from performing any actual backup (send/receive) operations.</i><br><br><b><i>--no-snapshot</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prevents <b>btrbk</b> from creating any new snapshots.</i><br><br><b><i>--no-mount</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prevents <b>btrbk</b> from mounting any filesystems defined in the configuration.</i><br><br><b><i>--force, -f</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Forces certain operations, such as destroying existing snapshots even if they are parents to others.</i><br><br><b><i>--compress</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enables compression for the <b>btrfs send</b> stream.</i><br><br><b><i>--compress-force</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Forces compression for the <b>btrfs send</b> stream, even if not negotiated.</i><br><br><b><i>--preserve-uuid</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Preserves the UUID of the destination subvolume during <b>btrfs receive</b>.</i><br><br><b><i>--debug</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Activates debug output, useful for troubleshooting.</i><br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the <b>btrbk</b> version and exits.</i><br><br>


title: DESCRIPTION
content:
<i><br><b>btrbk</b> is a specialized backup tool designed exclusively for the Btrfs filesystem. It automates the process of creating and managing incremental backups of Btrfs subvolumes, leveraging Btrfs's native snapshotting and send/receive capabilities. Its primary function is to provide a robust and efficient solution for local and remote backups, ensuring data integrity and allowing for easy restoration.</i><br><br><i>The tool operates based on a configuration file, defining source subvolumes, target destinations, and retention policies. It automatically creates read-only snapshots of source subvolumes, then incrementally sends these snapshots to the configured backup locations (either local directories or remote hosts via SSH). <b>btrbk</b> handles the detection of common parent snapshots, ensuring that only the changed data is transferred, making backups highly efficient. It also manages the pruning of old snapshots according to user-defined retention rules, preventing excessive disk space consumption. Its atomic operations and Btrfs-specific design make it a reliable choice for Btrfs data protection.</i>


title: CAVEATS
content:
<i><br><b>btrbk</b> is tightly coupled with the <b>Btrfs</b> filesystem. It is not a general-purpose backup tool and will not work on other filesystems. Proper understanding of Btrfs subvolumes, snapshots, and send/receive functionality is beneficial for effective use. Configuration is critical; errors in the configuration file can lead to unexpected behavior or data loss if not handled carefully. Root privileges are typically required for most operations, especially snapshot creation and subvolume management.</i>


title: <I>CONFIGURATION FILE</I>
content:
<i><br>The heart of <b>btrbk</b> operation is its configuration file (typically `/etc/btrbk.conf`). This file defines all aspects of the backup strategy, including source subvolumes (e.g., <i>@home</i>, <i>@rootfs</i>), target destinations (local paths or remote SSH locations), and retention policies (e.g., keep 7 daily, 4 weekly, 12 monthly snapshots). It supports hierarchical definitions and includes directives for specifying global options, volume groups, and individual subvolumes. A well-structured configuration file is essential for effective and automated backups.</i>


title: <I>BACKUP STRATEGY AND SNAPSHOTS</I>
content:
<i><br><b>btrbk</b> implements an intelligent incremental backup strategy. For each configured source subvolume, it first creates a read-only snapshot. It then determines the most recent common parent snapshot between the source and the backup destination. Using <b>btrfs send/receive</b>, only the changes relative to this common parent are transferred, minimizing bandwidth and storage requirements for subsequent backups. This ensures atomic and consistent backups, as the source data is static during the transfer from the snapshot. The retention policies specified in the configuration file dictate how long snapshots are kept on both the source and destination, allowing for flexible recovery points.</i>


title: HISTORY
content:
<i><br><b>btrbk</b> was created by <b>Axel Neumann</b> to address the need for a robust and automated backup solution specifically for the Btrfs filesystem. Developed in the early 2010s, it quickly gained traction within the Btrfs community due to its efficiency, reliability, and close integration with Btrfs native features like incremental send/receive. It provides a user-friendly abstraction over complex Btrfs commands, simplifying the creation and management of sophisticated backup strategies. The project continues to be actively maintained and is a cornerstone for many Btrfs users requiring automated snapshotting and off-site backups.</i>


title: SYNOPSIS
content:
<I>The <b>btrfs</b> command operates via subcommands, each with its own options and arguments.</I><br>
<b>btrfs</b> <I>&lt;subcommand&gt;</I> [<I>options</I>] [<I>arguments</I>]<br>
<br>
Example subcommands include: <I>filesystem</I>, <I>subvolume</I>, <I>device</I>, <I>scrub</I>, <I>balance</I>, <I>qgroup</I>, <I>send</I>, <I>receive</I>.


title: PARAMETERS
content:
<b>filesystem</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manage Btrfs filesystems (e.g., resize, get usage information, label).<br><br><b>subvolume</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create, delete, list, or take snapshots of Btrfs subvolumes.<br><br><b>device</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add, remove, or manage devices within a Btrfs filesystem.<br><br><b>scrub</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan the filesystem for integrity errors and repair them.<br><br><b>balance</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rebalance data chunks across devices, useful for freeing space or changing RAID levels.<br><br><b>qgroup</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manage quota groups for Btrfs subvolumes.<br><br><b>send/receive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform incremental filesystem transfers between Btrfs filesystems (e.g., for backup or replication).<br><br>


title: DESCRIPTION
content:
The <b>btrfs</b> command is the primary command-line utility for managing <I>Btrfs</I> (B-tree File System) filesystems on Linux. <I>Btrfs</I> is a modern copy-on-write (CoW) filesystem designed for advanced features like snapshots, subvolumes, integrated RAID, checksums, compression, and online resizing. The <b>btrfs</b> command allows administrators to perform a wide array of operations, including creating, mounting, and unmounting filesystems, adding and removing devices, managing subvolumes and snapshots, performing data balancing and scrubbing, and configuring quota groups. Its modular design means that various functionalities are grouped under subcommands, making it a comprehensive tool for robust and flexible storage management. It aims to address limitations of traditional filesystems by offering resilience, scalability, and advanced data management features.


title: CAVEATS
content:
While widely used, <I>Btrfs</I> is still under active development, and some features may be considered experimental or less stable than others. It can be complex to manage, and improper use of certain commands (e.g., <I>device delete</I> or <I>replace</I> without proper understanding) can lead to data loss. Performance can sometimes be an issue on specific workloads, especially with heavy fragmentation or certain compression settings. Always ensure you are running a recent kernel version for the best stability and features.


title: SUBVOLUMES
content:
<I>Subvolumes</I> in <I>Btrfs</I> are not separate block devices but are distinct, independently mountable filesystems within a single <I>Btrfs</I> volume. They can be nested, and form the basis for snapshots, allowing flexible directory management and isolation.


title: SNAPSHOTS
content:
<I>Btrfs</I> snapshots are point-in-time, copy-on-write images of a subvolume. They are very efficient as they only store changes from the original, making backups and rollbacks extremely fast and space-efficient. Snapshots can be writable or read-only.


title: INTEGRATED RAID
content:
<I>Btrfs</I> has built-in RAID capabilities (RAID0, RAID1, RAID10, RAID5, RAID6) directly within the filesystem, managing data and metadata redundancy across multiple devices. This allows for dynamic resizing and device replacement without unmounting.


title: HISTORY
content:
Development of <I>Btrfs</I> began at Oracle in 2007, with a primary goal of providing advanced features comparable to ZFS. It was initially designed by Chris Mason. <I>Btrfs</I> was merged into the Linux kernel mainline in 2009 (kernel version 2.6.29). Since then, it has seen continuous development and adoption, becoming a default filesystem option for several Linux distributions, including Fedora and openSUSE. Its design introduced a new paradigm for filesystem management in Linux, moving towards a more integrated and feature-rich approach.


title: SYNOPSIS
content:
<b>btrfs balance start [options] &lt;path&gt;</b><br><b>btrfs balance cancel &lt;path&gt;</b><br><b>btrfs balance status &lt;path&gt;</b><br><b>btrfs balance resume &lt;path&gt;</b>


title: PARAMETERS
content:
<b>path</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The mount point of the Btrfs filesystem to balance.<br><br><b>-d &lt;filters&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies filters for <i>data chunks</i>. Common filters include <i>usage</i>, <i>devid</i>, <i>convert</i>, <i>limit</i>, and <i>soft</i>.<br><br><b>-m &lt;filters&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies filters for <i>metadata chunks</i>. Similar to data chunk filters.<br><br><b>-s &lt;filters&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies filters for <i>system chunks</i>. Less frequently used.<br><br><b>-f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force a full balance, even if the filesystem is on a single device or already balanced.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing progress and detailed information during the balance operation.<br><br><b>usage=<percentage></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A filter (used with -d, -m, -s) to balance chunks that are less than the specified <i>percentage</i> used.<br><br><b>devid=<ID></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A filter (used with -d, -m, -s) to balance chunks residing on the device with the specified <i>ID</i>.<br><br><b>convert=<profile></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A filter (used with -d, -m, -s) to convert chunk allocation profile to <i>profile</i> (e.g., <i>raid1</i>, <i>single</i>, <i>dup</i>).<br><br><b>limit=<count></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A filter (used with -d, -m, -s) to limit the number of chunks to balance to <i>count</i>.<br><br><b>soft</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A filter (used with -d, -m, -s) that performs a 'soft' balance, skipping chunks that are sufficiently filled, reducing I/O.<br><br>


title: DESCRIPTION
content:
The <b>btrfs balance</b> command is a crucial utility for managing Btrfs filesystems, designed to rebalance and reorganize the allocation of data, metadata, and system chunks across all devices within a Btrfs volume. Its primary purpose is to redistribute chunks, ensuring optimal space utilization and performance, especially after significant filesystem changes like adding or removing devices, or after extensive file deletions. It can also be used to convert chunk profiles (e.g., from <i>single</i> to <i>RAID1</i>), reclaim fragmented free space, or evacuate data from a specific device.<br><br>The balance operation works by iterating through existing chunks and, based on specified filters, relocating them. This process involves reading data from its current location and writing it to a new, potentially better-suited location on the filesystem. Due to its I/O-intensive nature, a balance operation can be very time-consuming and impact system performance. It supports various filters to control which chunks are processed, such as <i>usage</i> (chunks with a certain percentage of free space), <i>devid</i> (chunks on specific devices), <i>convert</i> (change chunk profile), and <i>limit</i> (number of chunks to process).


title: CAVEATS
content:
<i>btrfs balance</i> can be extremely I/O-intensive and time-consuming, potentially impacting system performance significantly while running. It requires available free space to move data; if the filesystem is nearly full, the balance may fail. It primarily reclaims unused space within Btrfs-allocated chunks, not necessarily the free space reported by standard tools like <i>df</i>. A full balance on large or busy filesystems can take many hours or even days. While generally safe, it's advisable to run it during periods of low activity and ensure proper backups.


title: <B>SUBCOMMANDS</B>
content:
The <i>btrfs balance</i> utility operates with specific subcommands:<br><b>start</b>: Initiates a balance operation with specified filters.<br><b>cancel</b>: Immediately stops a running balance operation.<br><b>status</b>: Displays the current status and progress of a balance operation.<br><b>resume</b>: Resumes a previously cancelled or interrupted balance operation from where it left off.


title: <B>MONITORING PROGRESS</B>
content:
The progress of a running balance can be monitored using the <b>btrfs balance status &lt;path&gt;</b> command, which provides real-time updates on chunks processed, estimated time, and any errors.


title: HISTORY
content:
The <i>btrfs balance</i> command is an intrinsic and fundamental feature of the Btrfs filesystem, evolving alongside Btrfs development since its early stages. Its functionality, particularly the range of filters and performance optimizations, has been continuously refined over the years to address various use cases, from device management to space reclamation and profile conversion. It has always been a key tool for maintaining the health and efficiency of Btrfs volumes.


title: SEE ALSO
content:
<b>btrfs(8)</b>: The main Btrfs administration command., <b>btrfs-device(8)</b>: Manages devices within a Btrfs filesystem., <b>btrfs-filesystem(8)</b>: Provides filesystem-level utilities, including disk usage information., <b>btrfs-replace(8)</b>: Replaces a device in a Btrfs filesystem.


title: PARAMETERS
content:
<b>-r, --repair</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to repair the filesystem. <br><b><i>Warning: This option is extremely dangerous and can cause further damage or data loss. Use only if you know what you're doing and have full backups.</i></b><br><br><b>-s, --superblock <number></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use specific superblock (0, 1, or 2) for checking. Useful if the default superblock is corrupted.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress most output messages, showing only critical errors.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print more information and details during the check process.<br><br><b>--force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force checking even if the filesystem is mounted or appears unhealthy. <br><b><i>Highly discouraged on a mounted filesystem.</i></b><br><br><b>-p, --progress</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show progress of the checking process.<br><br><b>--clear-space-cache v1|v2</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clear and rebuild the specified version of the space cache. Can help with space accounting issues.<br><br><b>--check-data-csum</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verify checksums of data extents in addition to metadata. This can be very slow and memory-intensive.<br><br>


title: DESCRIPTION
content:
<b>btrfs-check</b> is a crucial utility for Btrfs filesystems, designed to verify the consistency and integrity of the filesystem's metadata. It operates by scanning the filesystem's internal structures, such as block groups, trees (extent tree, chunk tree, root tree), and checksums, to identify any inconsistencies or corruption. By default, <b>btrfs-check</b> performs a read-only examination, reporting errors without attempting any modifications or repairs. This non-destructive behavior is critical for safe initial assessment. For actual repair operations, a separate <i>--repair</i> option exists, which is extremely dangerous and generally advised against unless under expert guidance and with full backups, as it can potentially worsen corruption or lead to data loss. It is strongly recommended to run <b>btrfs-check</b> on an <i>unmounted</i> Btrfs filesystem to ensure accurate results and prevent further damage. Its primary role is to diagnose issues before attempting recovery or repair with more specialized tools.


title: CAVEATS
content:
<b>btrfs-check</b> by default is a <i>read-only</i> tool. It will <i>not</i> repair your filesystem unless explicitly told to, via <i>--repair</i>.<br>Using the <i>--repair</i> option is <b>highly discouraged</b> without a complete understanding of Btrfs internals and proper backups. It can worsen filesystem corruption or lead to irreversible data loss.<br>The filesystem should always be <b>unmounted</b> before running <b>btrfs-check</b>. Running it on a mounted filesystem can lead to inaccurate results or further corruption.<br>Even if <b>btrfs-check</b> reports no errors, it does not guarantee the filesystem is perfectly healthy, as it primarily focuses on metadata integrity and not necessarily all data integrity unless <i>--check-data-csum</i> is used.


title: REPAIR CAUTION
content:
The <i>--repair</i> option is a last resort. If <b>btrfs-check</b> reports significant errors, the recommended approach is often to back up what data can be salvaged using <b>btrfs-restore</b> or similar tools, and then recreate the filesystem. Manual repair using <i>--repair</i> often requires deep understanding of Btrfs internal structures.


title: ONLINE VS. OFFLINE CHECKS
content:
<b>btrfs-check</b> is an <i>offline</i> tool, requiring the filesystem to be unmounted. For <i>online</i> integrity checks, <b>btrfs scrub</b> is used, which verifies data and metadata checksums while the filesystem is mounted and in use.


title: HISTORY
content:
<b>btrfs-check</b> is an integral part of the Btrfs filesystem utilities. Btrfs development started around 2007, and <b>btrfs-check</b> has been a core component since early stages, evolving with the filesystem itself. Its design emphasizes safety by defaulting to a read-only mode, a crucial feature given the complexity of filesystem repair. Over time, new options have been added to assist in diagnosing specific corruption scenarios and improving its diagnostic capabilities.


title: SYNOPSIS
content:
<b>btrfs device</b> <i>&lt;subcommand&gt;</i> [<i>options</i>] [<i>&lt;arguments&gt;</i>]<br><br><i>Common subcommands and their basic syntax:</i><br><b>btrfs device add</b> [<i>options</i>] <i>&lt;device&gt;</i> [...] <i>&lt;path&gt;</i><br><b>btrfs device delete</b> [<i>options</i>] <i>&lt;device&gt;</i> [...] <i>&lt;path&gt;</i><br><b>btrfs device replace</b> [<i>options</i>] <i>&lt;src_device&gt; &lt;target_device&gt; &lt;path&gt;</i><br><b>btrfs device usage</b> [<i>options</i>] <i>&lt;path&gt;</i>|<i>&lt;device&gt;</i><br><b>btrfs device show</b> [<i>options</i>] [<i>&lt;path&gt;</i>|<i>&lt;device&gt;</i>]


title: PARAMETERS
content:
<b>add</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds one or more devices to an existing Btrfs filesystem. This expands the total storage capacity and can improve redundancy if appropriate RAID profiles are used. Requires a subsequent balance operation to fully utilize the new space for existing data.<br><br><b>delete</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes one or more devices from a Btrfs filesystem. All data from the removed device(s) must be migrated to the remaining devices before the operation completes. This can shrink the filesystem or reduce its redundancy.<br><br><b>replace</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replaces an existing device with a new one in a Btrfs filesystem. This is commonly used for migrating data from a failing drive to a healthy one, or upgrading to a larger capacity drive. Data is copied block-by-block from the source to the target.<br><br><b>usage</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the used and free space information for each device within a Btrfs filesystem, or for a specific device. Provides details on allocated chunks, metadata, and data usage.<br><br><b>show</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays information about all devices associated with a given Btrfs filesystem path, or for a specific device. This includes device IDs, paths, sizes, and allocation status.<br><br><b>stats</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reports I/O error statistics for devices in a Btrfs filesystem. Useful for monitoring device health and identifying potential hardware issues. Counters can be reset using an option.<br><br><b>scan</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scans all available block devices on the system for Btrfs filesystems. This can help the kernel discover Btrfs volumes that might not be mounted or otherwise known.<br><br><b>ready</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Waits until all devices of a given Btrfs filesystem are available. Useful in scripts to ensure a multi-device filesystem is fully assembled before proceeding with other operations.<br><br>


title: DESCRIPTION
content:
The <b>btrfs device</b> command is a crucial subcommand of the main <i>btrfs</i> utility, designed for managing and interacting with storage devices that constitute a Btrfs filesystem. Btrfs inherently supports spanning a filesystem across multiple block devices, and this command provides the necessary tools to add new devices, remove existing ones, replace failed or undersized devices, and query device-specific information.<br><br>It enables administrators to dynamically expand or or shrink a Btrfs filesystem by modifying its underlying device pool without unmounting, although performance may be affected during such operations. Key functionalities include ensuring data redundancy across devices, monitoring device health, and optimizing data distribution through rebalancing after device changes. This flexibility is a core strength of Btrfs, making <b>btrfs device</b> an indispensable tool for maintaining highly available and scalable storage solutions.


title: CAVEATS
content:
<b>Caveats:</b><br><i>Root Privileges:</i> All <b>btrfs device</b> operations require superuser (root) privileges.<br><i>Data Migration:</i> Operations like <i>delete</i> and <i>replace</i> involve significant data movement. This can be time-consuming and I/O intensive. Ensure adequate time and system resources.<br><i>Data Integrity:</i> While Btrfs is robust, improper use or power loss during critical operations can lead to data loss or filesystem corruption. Always ensure backups before performing significant device changes.<br><i>Balancing:</i> Adding or deleting devices often necessitates a <i>btrfs balance</i> operation to redistribute data evenly across the new device configuration. This is not always automatic and might be required to fully utilize new space or reclaim old space.<br><i>Device Paths:</i> Prefer using stable device paths (e.g., <i>/dev/disk/by-id/</i>, <i>/dev/disk/by-uuid/</i>, <i>/dev/disk/by-path/</i>) instead of volatile <i>/dev/sdX</i> names, especially in multi-device setups or across reboots, to prevent issues from device name changes.


title: IMPACT OF DEVICE OPERATIONS ON DATA DISTRIBUTION
content:
When a device is added or removed using <b>btrfs device</b>, the filesystem's metadata and data are not automatically redistributed to fully utilize the new configuration. For instance, after adding a device, new data will prefer the empty space, but existing data remains on older devices. To fully rebalance the data chunks across all devices, the <b>btrfs balance</b> command must be explicitly run. Similarly, after deleting a device, all its data is moved, but the overall filesystem balance might still need optimization, particularly for optimal performance and redundancy levels.


title: DEVICE ID VS. DEVICE PATH
content:
Btrfs internally tracks devices by a unique ID (e.g., 'devid 1' as shown by <b>btrfs device show</b>). While you typically use the device's path (e.g., <i>/dev/sdb</i>) for commands, it's important to understand that Btrfs associates a stable internal ID with each device. In some complex scenarios, or when troubleshooting (especially if device paths change), referring to devices by their internal ID can be more reliable than transient <i>/dev/sdX</i> paths. The <b>btrfs device replace</b> command, for example, allows specifying the source device by its ID.


title: HISTORY
content:
Btrfs (B-tree File System) was initially developed by Oracle in 2007 with a strong focus on advanced features like copy-on-write (CoW), snapshots, checksums, and integrated volume management. The <b>btrfs device</b> subcommand is fundamental to Btrfs's design philosophy, allowing for flexible storage management where filesystems can dynamically grow or shrink by adding or removing physical devices. Its development has been driven by the need for a modern, scalable filesystem that can handle large storage arrays and provide enterprise-grade features natively, without relying on external volume managers, making device management a core aspect from its inception.


title: PARAMETERS
content:
<b>show [<i>options</i>] [<i>path</i>|<i>uuid</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays overall Btrfs filesystem usage information, including allocated and free space for data, metadata, and system chunks. Optionally shows information for a specific path or UUID.<br><br><b>df [<i>options</i>] <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows Btrfs filesystem space statistics, similar to the traditional <b>df</b> command but with Btrfs-specific details about profiles and usage.<br><br><b>balance [<i>options</i>] <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rebalances data and metadata block groups across the Btrfs filesystem's devices. This can be used to convert profiles, free up space on specific devices, or reorganize data.<br><br><b>resize [<i>options</i>] <i>&lt;size&gt;</i> <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resizes a Btrfs filesystem. Can be used to enlarge or shrink the filesystem. <i>size</i> can be a specific value (e.g., '+1G', 'max', '100G').<br><br><b>defragment [<i>options</i>] <i>&lt;file|directory&gt;</i> [<i>...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defragments specified files or directories on a Btrfs filesystem. This helps to improve performance by reducing fragmentation.<br><br>


title: DESCRIPTION
content:
The <b>btrfs filesystem</b> group of commands provides utilities for managing the state, space usage, and properties of a Btrfs filesystem. It is a crucial part of the overall <b>btrfs</b> administration toolkit, allowing administrators to monitor disk space allocation, rebalance data and metadata across multiple devices, resize the filesystem, and defragment files. <br><br>Unlike traditional filesystems, Btrfs manages space in terms of block groups and profiles (e.g., RAID0, RAID1). The <b>filesystem</b> commands reflect this unique architecture, offering granular control over how data is stored and distributed. Operations within this group range from simple informational queries like displaying disk usage, to more complex and potentially long-running tasks such as balancing data across underlying storage devices or resizing the filesystem to utilize more or less space. These commands are essential for maintaining the health, performance, and flexibility of Btrfs filesystems, especially in multi-device configurations.


title: CAVEATS
content:
Most <b>btrfs filesystem</b> operations require root privileges or equivalent capabilities. Operations like <b>balance</b> can be very I/O intensive and time-consuming, potentially impacting system performance during execution. Shrinking a filesystem with <b>resize</b> requires careful planning and sufficient free space. Always ensure proper backups before performing significant filesystem modifications.


title: UNDERSTANDING BTRFS SPACE ALLOCATION
content:
Btrfs allocates space in 'chunks' (typically 1GB for data, 256MB for metadata). The <b>filesystem show</b> and <b>df</b> commands provide insights into how these chunks are used and what 'profiles' (e.g., DUP, RAID1) are active for data and metadata. This differs significantly from traditional block-based filesystems.


title: INTERACTIVE BALANCE OPTIONS
content:
The <b>balance</b> command offers various filters and options (e.g., 'usage', 'convert', 'limit') to precisely control which block groups are processed. It can be run incrementally and resumed if interrupted, making it a powerful tool for complex storage reconfigurations or space reclamation.


title: HISTORY
content:
Btrfs, or 'B-tree file system', was initially developed by Oracle Corporation in 2007. The <b>btrfs filesystem</b> commands emerged as integral components of the main <b>btrfs</b> utility, designed to provide comprehensive management capabilities for the filesystem's unique architecture. As Btrfs matured and gained features like multi-device support, RAID profiles, and copy-on-write snapshots, the <b>filesystem</b> subcommands evolved to manage these complexities. Their development reflects the ongoing effort to make Btrfs a robust and flexible filesystem for Linux, suitable for a wide range of storage needs from desktops to enterprise servers.


title: PARAMETERS
content:
<b>--super</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the content of the superblocks found on the device.<br><br><b>--root &lt;root_id&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the content of the B-tree for the specified root ID. This is typically used for subvolume roots.<br><br><b>--chunk-tree</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the internal structure of the chunk tree, showing block groups and their properties.<br><br><b>--extent-tree</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the internal structure of the extent tree, showing extent allocation and references.<br><br><b>--dump-full-inodes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <i>--root</i>, dumps full inode items instead of summary information.<br><br><b>--dump-extents</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <i>--root</i>, dumps detailed extent information for files and directories.<br><br><b>--dump-block-group</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps detailed information about block group items.<br><br><b>--dump-root-tree</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the internal structure of the root tree, which tracks all subvolumes and snapshots.<br><br><b>--raw</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs data in a raw, unformatted binary or hexadecimal form for some options.<br><br><b>&lt;device&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The Btrfs device or image file to inspect. This is a mandatory argument.<br><br>


title: DESCRIPTION
content:
<b>btrfs-inspect-internal</b> is a low-level, developer-oriented tool designed for examining the internal structures of a Btrfs filesystem. Unlike standard <i>btrfs</i> commands that operate at a higher abstraction level, this command directly interprets the on-disk format, allowing users to delve into the raw metadata and B-tree structures. It is primarily used for debugging, forensic analysis, and understanding the intricate details of how Btrfs stores its data, metadata, and performs operations. It can display information about superblocks, chunk trees, root trees, extent trees, checksums, and other critical internal components. It's an invaluable tool for Btrfs developers and advanced users needing to diagnose filesystem corruption or understand the underlying mechanics that govern Btrfs. It should be used with extreme caution, as misinterpreting its output can lead to incorrect conclusions or even data loss if external tools are used based on such interpretations. It is not intended for routine filesystem management.


title: CAVEATS
content:
This command is a low-level, developer-oriented tool and is not intended for casual use or routine filesystem administration. Its output is highly technical and requires a deep understanding of Btrfs internal structures to interpret correctly. The output format can change between Btrfs versions, potentially making scripts or expectations fragile. While <b>btrfs-inspect-internal</b> itself is primarily a read-only tool, misinterpreting its output can lead to incorrect diagnostic conclusions or dangerous actions if used in conjunction with other tools for recovery or manipulation.


title: USAGE BEST PRACTICES
content:
It is generally recommended to use <b>btrfs-inspect-internal</b> on an unmounted Btrfs device or a disk image to ensure consistency and prevent any potential conflicts with a live filesystem. While primarily read-only, direct device access on a live filesystem can sometimes have unexpected side effects or lead to inconsistent output. Root privileges are typically required to access raw device files.


title: FORENSIC AND DEBUGGING AID
content:
This command is an indispensable tool for Btrfs developers and advanced system administrators engaged in forensic analysis or debugging severe filesystem corruption. By providing a direct view of the B-tree structures, it helps in understanding the state of metadata, identifying corrupted nodes, and tracing the allocation of data and metadata blocks.


title: HISTORY
content:
<b>btrfs-inspect-internal</b> has been a core debugging and development utility within the <i>btrfs-progs</i> suite since the early stages of Btrfs filesystem development. Its purpose has remained consistent: to provide direct, low-level access to the on-disk Btrfs structures for developers and advanced users. As the Btrfs filesystem format and features have evolved, so too have the capabilities and specific output formats of this tool to reflect the changes in B-tree structures, item types, and metadata organization.


title: SYNOPSIS
content:
<b>btrfs property get</b> [<i>-t &lt;type&gt;</i>] <i>&lt;object&gt;</i> <i>&lt;property&gt;</i><br><b>btrfs property set</b> [<i>-t &lt;type&gt;</i>] <i>&lt;object&gt;</i> <i>&lt;property&gt;</i> <i>&lt;value&gt;</i><br><b>btrfs property list</b> [<i>-t &lt;type&gt;</i>] <i>&lt;object&gt;</i>


title: PARAMETERS
content:
<b><i>&lt;object&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the file, directory, subvolume, or device on which the property operation will be performed.<br><br><b><i>&lt;property&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the btrfs property to retrieve or modify (e.g., <i>ro</i>, <i>compression</i>, <i>nodatacow</i>).<br><br><b><i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The new value to assign to the property when using the <i>set</i> subcommand (e.g., <i>true</i>, <i>false</i>, <i>zstd</i>, <i>lzo</i>).<br><br><b><i>-t &lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the type of object explicitly. Possible values are <i>file</i>, <i>inode</i> (default for files/directories), <i>subvolume</i>, or <i>device</i>. This helps clarify which properties are applicable to the object.<br><br>


title: DESCRIPTION
content:
<i><b>btrfs property</b></i> is a subcommand of the main <i><b>btrfs</b></i> filesystem utility. It provides a dedicated interface to interact with btrfs-specific extended attributes, referred to as 'properties', associated with various btrfs objects. These objects can include files, directories, subvolumes, and storage devices.<br><br>The command supports three primary operations:<br><ul><li><i><b>get</b></i>: To retrieve the current value of a specific property for an object.</li><li><i><b>set</b></i>: To assign a new value to a property, modifying the object's behavior or metadata.</li><li><i><b>list</b></i>: To enumerate all applicable properties and their current values for a given object.</li></ul><br>This utility is crucial for managing btrfs features like subvolume read-only status, compression settings for files and directories, or the CoW (Copy-on-Write) behavior.


title: CAVEATS
content:
<ul><li>Permissions: Modifying properties usually requires root privileges or ownership of the object.</li><li>Property Applicability: Not all properties are valid for all object types (e.g., <i>ro</i> is for subvolumes, <i>compression</i> for files/directories). Setting an invalid property or value will result in an error.</li><li>Behavioral Properties: Properties like <i>compression</i> or <i>nodatacow</i> on files/directories only affect new data written to them. Existing data will not change its compression or CoW status unless re-written.</li><li>Read-Only Properties: Some properties, such as <i>uuid</i> for subvolumes, are read-only and cannot be modified using <i>set</i>.</li></ul>


title: COMMON PROPERTY EXAMPLES
content:
Some frequently used btrfs properties include:<br><ul><li><i><b>ro</b></i> (read-only): Used with subvolumes to make them read-only (e.g., <i>btrfs property set -t subvolume /mnt/myvol/subvol ro true</i>).</li><li><i><b>compression</b></i>: Applies to files and directories, setting the default compression algorithm for new data written to them (e.g., <i>btrfs property set /path/to/file compression zstd</i>). Valid values include <i>lzo</i>, <i>zlib</i>, <i>zstd</i>, or <i>none</i>.</li><li><i><b>nodatacow</b></i>: Applies to files and directories, disabling Copy-on-Write for new data written to them (e.g., <i>btrfs property set /path/to/file nodatacow true</i>). This can be useful for databases or virtual machine images.</li><li><i><b>uuid</b></i> / <i><b>parent_uuid</b></i>: Read-only properties for subvolumes, providing their unique identifiers and the UUID of their parent subvolume, respectively.</li></ul>


title: HISTORY
content:
The <i><b>btrfs property</b></i> subcommand has been a core part of the <i><b>btrfs</b></i> command-line utilities since the early stages of btrfs filesystem development. Its functionality to manage filesystem-level extended attributes was fundamental to exposing and controlling various btrfs-specific features. It evolved as the btrfs filesystem matured, providing a consistent interface for property management, especially for subvolume characteristics and file attributes like compression.


title: PARAMETERS
content:
<b><i>chunk-recover</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to recover and re-scan the chunk tree from a Btrfs filesystem, often the first step when the filesystem fails to mount due to chunk tree corruption.<br><br><b><i>fix-chunk-tree</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scans the device for chunk tree blocks and rebuilds the chunk tree based on the found blocks, addressing severe chunk tree corruption.<br><br><b><i>super-recover</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scans for and attempts to recover superblocks from the device. Btrfs stores multiple superblock copies; this command helps find a usable one.<br><br><b><i>zero-log</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Zeros out the transaction log (journal) of the Btrfs filesystem. This can resolve mounting issues caused by a corrupted log, but carries a risk of data loss and should be used with extreme caution.<br><br><b><i>tree-mod-log</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the tree modification log, providing insight into recent metadata changes for debugging and analysis.<br><br><b><i>dump-super</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps detailed, raw information from all available superblocks on the device, primarily used for diagnostic purposes.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the operation, overriding certain warnings and safety checks. Use with extreme caution as it can lead to further data loss.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increase verbosity of output, providing more detailed information during the operation.<br><br>


title: DESCRIPTION
content:
<i>btrfs-rescue</i> is a crucial command-line utility within the Btrfs filesystem tools, designed for advanced recovery and diagnostic operations on severely damaged Btrfs filesystems. Unlike general-purpose commands like <i>btrfs check</i> or <i>btrfs restore</i>, <i>btrfs-rescue</i> provides lower-level functionalities to manipulate and analyze the filesystem's metadata structures directly on the device. It is typically employed when standard recovery methods have failed or are insufficient, offering specific subcommands to address issues such as corrupted chunk trees, unreadable superblocks, or problematic logs. Its powerful capabilities make it an invaluable tool for experienced administrators attempting to salvage data from critically impaired Btrfs volumes, but its direct interaction with raw device data necessitates extreme caution and prior backups to prevent further data loss. Common uses include rebuilding metadata trees, zeroing out transaction logs, and inspecting superblock contents for diagnostic purposes.


title: CAVEATS
content:
<i>btrfs-rescue</i> operates directly on the raw device and can cause irreversible data loss if misused. <br>Always create a full backup or disk image of the filesystem <b>before</b> attempting any rescue operations. <br>Most operations require the target Btrfs filesystem to be <b>unmounted</b> to prevent further corruption. <br>It is a low-level tool that requires a deep understanding of Btrfs internals and should only be used as a last resort by experienced administrators.


title: USAGE PRUDENCE
content:
Due to its powerful and potentially destructive nature, <i>btrfs-rescue</i> should be approached with extreme caution. It is always recommended to test any rescue strategy on a duplicate or disk image of the problematic filesystem first, if possible, to avoid exacerbating the damage.


title: FILESYSTEM STATE REQUIREMENT
content:
For most <i>btrfs-rescue</i> subcommands, the Btrfs filesystem must be in an <b>unmounted</b> state on the specified <i>&lt;device&gt;</i>. Attempting to run rescue operations on a mounted filesystem can lead to further data corruption or undefined behavior.


title: HISTORY
content:
<i>btrfs-rescue</i> is an integral part of the <i>btrfs-progs</i> utility suite, which has evolved alongside the Btrfs filesystem itself since its inception around 2007. While there isn't a distinct historical narrative for the command in isolation, its continuous development reflects the ongoing efforts to enhance Btrfs's resilience and recovery capabilities. It has consistently served as the low-level recovery tool for situations where standard filesystem checks and repairs fall short.


title: PARAMETERS
content:
<b><b>-s</b> <i>&lt;superblock_number&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify which superblock to use (0, 1, or 2). Defaults to 0 if not specified.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing details of the restoration process.<br><br><b><b>-i</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not overwrite existing files in the destination path.<br><br><b><b>-o</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overwrite existing files in the destination path (default is to skip).<br><br><b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only restore files whose checksums match their data, ensuring data integrity.<br><br><b><b>-m</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not restore file metadata (permissions, ownership, timestamps).<br><br><b><b>-u</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not restore user and group ownership information.<br><br><b><b>-t</b> <i>&lt;YYYY-MM-DD[ HH:MM:SS]&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only restore files modified after the specified timestamp.<br><br><b><b>-x</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restore extended attributes (xattrs) associated with files.<br><br><b><b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restore raw data (chunks) rather than files, useful for advanced recovery.<br><br><b><b>--path</b> <i>&lt;path_in_fs&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a specific path within the btrfs filesystem to restore.<br><br><b><b>--sys-dev</b> <i>&lt;device&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;For multi-device filesystems, specify a system device to scan for metadata.<br><br><b><b>--force-root</b> <i>&lt;root_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force restoration from a specific tree root ID, useful in advanced corruption scenarios.<br><br><b><b>--log-level</b> <i>&lt;level&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the logging level (e.g., debug, info, warning, error).<br><br>


title: DESCRIPTION
content:
<b>btrfs-restore</b> is a crucial utility within the btrfs filesystem toolset, designed specifically for data recovery from damaged or corrupted btrfs filesystems. Unlike other <b>btrfs</b> commands that might attempt to check or repair the filesystem, <b>btrfs-restore</b> operates strictly in a read-only mode, meaning it will not further modify or potentially worsen the state of the original filesystem. Its primary function is to scan the specified device or image for valid btrfs structures and extract user data (files and directories) to a different, specified location.<br><br>This makes it an invaluable last-resort tool when a btrfs filesystem becomes unmountable or severely corrupted. It can often recover files even if the filesystem's metadata is partially damaged, by intelligently searching for extent and inode information. It prioritizes extracting user data and aims to preserve file attributes like permissions, ownership, and timestamps when possible. It does not repair the filesystem itself, nor does it create a new btrfs filesystem; its sole purpose is to retrieve accessible data from a damaged one.


title: CAVEATS
content:
<b>btrfs-restore</b> is a data extraction tool, <i>not</i> a filesystem repair utility. It operates in a read-only mode, so it will not fix or modify the original damaged filesystem. <br><br>While highly capable, it may not be able to recover all data from severely corrupted filesystems. Success depends on the extent and type of corruption. <br><br>Restored files might exhibit sparsity, especially if the original file was sparse or if data blocks were unrecoverable. Ensure the destination filesystem has sufficient free space to accommodate the recovered data, as it can be substantial.


title: PRIMARY USE CASE
content:
The primary use case for <b>btrfs-restore</b> is to recover user data from a btrfs filesystem that has become unmountable, severely corrupted, or otherwise inaccessible due to hardware failure or software bugs. It acts as a crucial first step in a disaster recovery scenario, allowing administrators to retrieve valuable files before attempting more destructive repair operations or reformatting.


title: SAFETY AND BEST PRACTICES
content:
It is highly recommended to always restore data to a <i>different physical disk or partition</i> than the one being recovered from, to prevent any accidental overwrites or further damage. <b>btrfs-restore</b> can also be used on a disk image of the corrupted filesystem, which is often a safer approach for recovery.


title: HISTORY
content:
The <b>btrfs-restore</b> utility is an integral part of the <i>btrfs-progs</i> suite, which provides user-space tools for managing the btrfs filesystem. The btrfs filesystem itself began development around 2007, with a focus on advanced features like snapshots, checksums, and self-healing. <br><br>As btrfs matured and gained adoption, the need for robust data recovery mechanisms became apparent. While btrfs offers built-in resilience, severe corruption or hardware failures can still render a filesystem inaccessible. <b>btrfs-restore</b> was developed to address this critical need, providing a safe, read-only method to extract user data from damaged filesystems without risking further corruption. Its development paralleled the growth and stabilization of the btrfs project, becoming a vital tool for administrators dealing with filesystem emergencies.


title: SYNOPSIS
content:
<b>btrfs subvolume <I>create</I> [<i>options</i>] <I>path</I></b><br><b>btrfs subvolume <I>delete</I> [<i>options</i>] <I>path</I> [<I>path</I>...]</b><br><b>btrfs subvolume <I>list</I> [<i>options</i>] <I>path</I></b><br><b>btrfs subvolume <I>snapshot</I> [<i>options</i>] <I>source_path</I> <I>destination_path</I></b><br><b>btrfs subvolume <I>show</I> [<i>options</i>] <I>path</I></b>


title: PARAMETERS
content:
<b>create</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new empty subvolume at the specified <i>path</i>. Can create read-only subvolumes (`-r` option) or set quota groups (`-q` option).<br><br><b>delete</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes one or more specified subvolumes. This action is irreversible. Use with caution. Multiple subvolumes can be deleted in one command.<br><br><b>list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists existing subvolumes for the given filesystem <i>path</i>, displaying their ID, generation, and other attributes. Supports various filtering and formatting options.<br><br><b>snapshot</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a copy-on-write snapshot of an existing subvolume. Snapshots can be read-write (default) or read-only (`-r` option), and are often used for backups or testing environments.<br><br><b>show</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed information about a specific subvolume, including its ID, UUID, creation time, and flags.<br><br><b>get-default</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the ID of the default subvolume for a given filesystem, which is mounted when no specific subvolume is explicitly specified in the mount options.<br><br><b>set-default</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default subvolume for a Btrfs filesystem to a specified subvolume ID. This affects what gets mounted by default for the top-level filesystem.<br><br><b>sync</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Waits until all pending subvolume operations (like create or delete) on the filesystem are committed to disk, ensuring data integrity before further actions.<br><br><b>find-new</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists changed files in a subvolume since a given generation number (`gen`), typically used with incremental `btrfs send` for efficient backups.<br><br>


title: DESCRIPTION
content:
The <b>btrfs subvolume</b> command is a crucial utility for managing subvolumes within a Btrfs filesystem. A Btrfs subvolume is an independently mountable filesystem tree, similar to a separate partition but existing within a single Btrfs volume. They are core to Btrfs's advanced features, offering isolation, flexible organization, and enabling efficient snapshotting and incremental backups via `btrfs send/receive`. This command allows users to create new subvolumes, delete existing ones, list them, and create copy-on-write snapshots for data versioning and recovery. Subvolumes appear as regular directories but have distinct filesystem roots, making them incredibly versatile for system organization, containerization, and atomic updates.


title: CAVEATS
content:
Deleting a subvolume is a permanent operation and cannot be undone. Data stored within a deleted subvolume is unrecoverable. Snapshots are copy-on-write, meaning they initially share data blocks with their parent. This saves space but can make calculating space usage complex. Deleting a subvolume that has active snapshots does not free all its data blocks until those snapshots are also deleted. Nested subvolumes behave differently regarding deletion and snapshotting than flat structures.


title: ROOT SUBVOLUME (ID 5)
content:
Every Btrfs filesystem has a top-level root subvolume with ID 5. This is the default subvolume that gets mounted if no specific subvolume is specified in the mount command. User-created subvolumes are typically created inside this root or other existing subvolumes.


title: READ-ONLY VS. READ-WRITE SNAPSHOTS
content:
Snapshots can be created as either read-write (default) or read-only. Read-write snapshots can be modified and used as independent subvolumes for testing or development. Read-only snapshots are immutable and primarily used for reliable backups or as a source for `btrfs send` operations.


title: NESTED SUBVOLUMES
content:
Subvolumes can be created inside other subvolumes, forming a nested hierarchy. If a parent subvolume is deleted, all its nested subvolumes are also deleted. Snapshots of a parent subvolume do not automatically include its nested subvolumes; each nested subvolume must be snapshotted independently if its state needs to be preserved.


title: HISTORY
content:
The Btrfs filesystem, and thus its subvolume concept, began development at Oracle in 2007. It was merged into the Linux kernel mainline in version 2.6.29 (2009). The subvolume feature is fundamental to Btrfs's design, enabling its unique capabilities like efficient snapshots and flexible data management. Its usage has grown significantly as Btrfs has matured and gained adoption across various Linux distributions as a modern filesystem.


title: DESCRIPTION
content:
The <I>btrfs version</I> command is a crucial subcommand of the <I>btrfs</I> utility, which serves as the primary userspace tool for managing Btrfs filesystems. Its fundamental purpose is to display the version of the <I>btrfs-progs</I> package currently installed on the system. This package encompasses the <I>btrfs</I> command-line utility and other associated tools essential for operations such as creating, checking, and repairing Btrfs filesystems.<br><br>Understanding the <I>btrfs-progs</I> version is vital for various reasons, including effective troubleshooting, verifying compatibility with the underlying Linux kernel's Btrfs driver, and ensuring that specific features or bug fixes are available in the installed utilities. The output of this command typically provides the version number, a build date, and sometimes a Git commit hash, offering precise identification of the installed userspace tools. This command is straightforward, requiring no additional arguments or options, and is an indispensable utility for system administrators and users actively working with Btrfs filesystems.


title: CAVEATS
content:
The <I>btrfs version</I> command reports the version of the <I>btrfs-progs</I> userspace utilities, not the Btrfs filesystem driver version integrated into the Linux kernel. These two versions are independent, though newer <I>btrfs-progs</I> often anticipate or require newer kernel versions for complete functionality. <br><br>The output format is fixed and cannot be customized or easily parsed by other scripts without string manipulation.


title: KERNEL VS. USERSPACE VERSION
content:
It is crucial to differentiate between the <I>btrfs-progs</I> version (obtained via <I>btrfs</I> <B>version</B>) and the version of the Btrfs kernel module. The kernel module implements the fundamental filesystem logic and operations within the Linux kernel, while <I>btrfs-progs</I> provides the user-facing tools to interact with and manage Btrfs filesystems. For optimal compatibility, access to the latest features, and to avoid potential issues, it is generally recommended that the <I>btrfs-progs</I> version is equal to or newer than the Btrfs kernel module version. Mismatches can sometimes lead to unexpected behavior or the inability to utilize newly introduced features or bug fixes.


title: OUTPUT FORMAT
content:
The typical output of <I>btrfs</I> <B>version</B> includes the program's identifier (usually `btrfs-progs`), the specific version number, and often supplementary details such as a build date or a Git commit hash. An example output might look like: `btrfs-progs vX.Y.Z [build_date_or_commit_hash]`. This comprehensive information is highly valuable for precise identification and troubleshooting of the installed Btrfs utilities.


title: HISTORY
content:
The <I>btrfs</I> utility and its subcommands, including <B>version</B>, have evolved in parallel with the development of the Btrfs filesystem itself. As Btrfs gained stability and new features were introduced, the <I>btrfs-progs</I> package underwent continuous updates and improvements. The <B>version</B> subcommand has been a fundamental component of these utilities from their early stages, consistently providing a simple method to ascertain the age and capabilities of the installed toolset. Its core functionality of reporting the <I>btrfs-progs</I> build version has remained largely consistent throughout its history.


title: SYNOPSIS
content:
<b>buddy-ng</b> [<I>-i <interface></I>] [<I>-o <target></I>] [<I>-r <file></I>] [<I>-w <file></I>] [<I>-m <mode></I>] [<I>other_options</I>]


title: PARAMETERS
content:
<b><I>-i <interface></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><br>Specify the input network interface for packet capture.</i><br><br><b><I>-o <target></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><br>Specify the output target for retransmission or injection, which can be an interface or file.</i><br><br><b><I>-r <file></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><br>Read packets from a specified capture file (e.g., PCAP format) for processing or retransmission.</i><br><br><b><I>-w <file></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><br>Write captured packets to a specified output file for later analysis.</i><br><br><b><I>-m <mode></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><br>Define the operational mode, such as 'capture', 'replay', or 'inject', indicating how the tool should behave.</i><br><br><b><I>-c <count></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><br>Limit the number of packets to process, capture, or retransmit.</i><br><br><b><I>-b <burst_size></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><br>Specify the number of packets to send in a single burst during retransmission, optimizing performance for certain scenarios.</i><br><br><b><I>-p <packet_type></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><br>Filter or specify the type of packets to handle, such as raw frames or specific protocol types.</i><br><br><b><I>--help</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><br>Display a help message with available options and exit.</i><br><br><b><I>--version</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><br>Display version information of the <b>buddy-ng</b> utility and exit.</i><br><br>


title: DESCRIPTION
content:
<b>buddy-ng</b> <i>is a specialized network utility primarily used for capturing and retransmitting raw network packets.<br>It's often found in environments where low-level network manipulation and analysis are required, such as in penetration testing, security research, or embedded systems development (e.g., Kali NetHunter).<br>Unlike general-purpose packet capture tools like <b>tcpdump</b> or <b>Wireshark</b>, <b>buddy-ng</b> focuses on specific retransmission capabilities, often for RF (radio frequency) captured data or other non-standard network interfaces.<br>Its core functionality revolves around handling raw network frames and offering precise control over their retransmission.<br>The tool is designed for scenarios where exact timing and direct hardware interaction (e.g., through SDR devices or specific network adapters) are crucial, focusing on low-level data manipulation and replay rather than high-level protocol analysis.</i>


title: CAVEATS
content:
<i><br><b>buddy-ng</b> is a specialized tool not typically found in standard Linux distributions and often requires manual installation or is part of specific embedded systems like Kali NetHunter.<br>Its precise behavior and available options can vary based on the specific compilation and target environment. It generally requires root privileges for low-level network interface manipulation.<br>Comprehensive official documentation is limited, making its usage context-dependent and requiring a good understanding of network packet handling.</i>


title: COMMON USE CASES
content:
<i><br><b>buddy-ng</b> is frequently used for scenarios such as:<br>- <b>Wireless Packet Injection:</b> Replaying or injecting captured wireless frames for security testing.<br>- <b>Raw Network Capture:</b> Capturing low-level network traffic directly from hardware interfaces.<br>- <b>Packet Replay:</b> Replaying previously captured network sessions for testing or exploitation.<br>- <b>SDR Integration:</b> Interfacing with Software Defined Radios (SDR) for RF signal capture and retransmission, extending its utility beyond traditional wired/wireless networks.</i>


title: INSTALLATION
content:
<i><br>As <b>buddy-ng</b> is not part of standard Linux distribution repositories, it typically needs to be compiled from source code. The source is often found in repositories related to Kali NetHunter or specific embedded Linux projects.<br>Compilation usually involves standard build tools like <b>gcc</b> and <b>make</b>, along with development headers for network libraries (e.g., <b>libpcap</b> or other specific hardware abstraction layers). Users should consult the specific project's documentation for exact build instructions.</i>


title: HISTORY
content:
<i><br><b>buddy-ng</b> appears to be a specialized tool that evolved within the context of security research and embedded Linux distributions, particularly Kali NetHunter.<br>The "ng" suffix suggests it's a "next generation" or improved version of an earlier "buddy" tool, though the original is not widely documented.<br>Its development focuses on addressing specific needs for raw packet capture, manipulation, and retransmission in scenarios involving low-level network or RF interfaces, often for penetration testing or security auditing purposes on mobile or specialized hardware.<br>It doesn't have a long public history like standard GNU utilities but rather niche development driven by specific project requirements.</i>


title: SYNOPSIS
content:
<b>buildah</b> [<i>GLOBAL_OPTIONS</i>] <i>COMMAND</i> [<i>COMMAND_OPTIONS</i>] [<i>ARGUMENTS</i>]<br><br><b>Common Commands:</b><br><b>buildah from</b> [<i>OPTIONS</i>] <i>IMAGE</i> [<i>COMMAND</i>]<br><b>buildah bud</b> [<i>OPTIONS</i>] <i>PATH</i><br><b>buildah run</b> [<i>OPTIONS</i>] <i>CONTAINER</i> <i>COMMAND</i> [<i>ARGUMENTS</i>]<br><b>buildah commit</b> [<i>OPTIONS</i>] <i>CONTAINER</i> [<i>IMAGE</i>]


title: PARAMETERS
content:
<b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debug output.<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output in JSON format.<br><br><b>--log-level <i>level</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the logging level (e.g., debug, info, warn, error).<br><br><b>--root <i>path</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the root directory for container storage (default is /var/lib/containers/storage).<br><br><b>--storage-driver <i>driver</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the storage driver (e.g., overlay, vfs).<br><br><b>--storage-opt <i>option</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set options for the storage driver.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the version information.<br><br>


title: DESCRIPTION
content:
<i>buildah</i> is a command-line tool that facilitates building Open Container Initiative (OCI) and Docker-compatible images. Unlike traditional container engines, <i>buildah</i> operates without a central daemon, making it lightweight, secure, and ideal for scripting and integration into CI/CD pipelines. It allows users to construct images from scratch, using either a Dockerfile-like syntax (via <i>buildah bud</i>) or by executing commands incrementally within a running container (via <i>buildah from</i>, <i>buildah run</i>, <i>buildah commit</i>). This granular control provides flexibility for advanced image building scenarios. <i>buildah</i> leverages existing kernel features and container storage technologies, working seamlessly with tools like <i>podman</i> for running containers and <i>skopeo</i> for image inspection and transfer. Its daemon-less and rootless capabilities enhance security by reducing the attack surface, allowing users to build images as non-privileged users. It's a core component of the broader container tools ecosystem developed by Red Hat.


title: CAVEATS
content:
While powerful, <i>buildah</i> requires understanding of OCI image concepts and underlying container storage. Rootless mode, though secure, may have limitations such as not being able to bind to privileged ports (below 1024) without additional system configurations (e.g., setcap). It depends on an OCI runtime like <i>crun</i> or <i>runc</i> being installed on the system. The learning curve can be steeper for users accustomed to simpler, daemon-based workflows.


title: BUILD PROCESS FLEXIBILITY
content:
<i>buildah</i> offers two primary ways to build images: <br>1. <b>Dockerfile-like Builds:</b> Using <i>buildah bud</i>, you can build images from a Dockerfile, similar to <i>docker build</i>.<br>2. <b>Incremental Container Builds:</b> For fine-grained control, you can start a base image with <i>buildah from</i>, run commands interactively or via scripts with <i>buildah run</i>, and then save the changes as a new image with <i>buildah commit</i>. This allows for complex build logic and debugging of image layers.


title: ROOTLESS OPERATION
content:
A significant advantage of <i>buildah</i> is its ability to operate in rootless mode. This means users can build container images without requiring root privileges or a privileged daemon running in the background. This greatly enhances security by isolating the build process from the host system's critical resources and reducing the potential attack surface. It relies on user namespaces for isolation.


title: INTEGRATION WITH CONTAINER ECOSYSTEM
content:
<i>buildah</i> is designed to work seamlessly with other tools in the Red Hat container ecosystem. Images built with <i>buildah</i> can be run using <i>podman</i>. Images can be inspected, signed, and pushed to registries using <i>skopeo</i>. This interoperability provides a comprehensive and flexible suite of tools for managing container images and containers.


title: HISTORY
content:
<i>buildah</i> was developed by Red Hat engineers as part of their efforts to create a daemon-less container ecosystem. It emerged around 2017, alongside <i>podman</i>, to provide modular and secure alternatives to the monolithic Docker engine. Its design focuses on leveraging existing Linux kernel features and adhering to OCI standards, allowing for greater flexibility and integration with other tools. It quickly became a cornerstone for building container images in environments prioritizing security, auditability, and automation, especially within Red Hat Enterprise Linux and Fedora ecosystems.


title: DESCRIPTION
content:
The <b>builtin</b> command is a special shell construct used to execute a specific <i>shell builtin</i> command. <br><br>A <i>shell builtin</i> is a command implemented directly within the shell itself, rather than being a separate executable program found on the file system (like /bin/ls). Examples include <b>cd</b>, <b>pwd</b>, <b>echo</b>, <b>exit</b>, and <b>test</b>. <br><br>The primary purpose of the <b>builtin</b> command is to ensure that a <i>builtin</i> version of a command is executed, even if a user-defined function or an external executable with the same name exists in the shell's search path. This allows for bypassing shadowing by aliases, functions, or external commands. <br><br>Using <b>builtin</b> offers several advantages: <b>performance</b>, as it avoids the overhead of forking a new process; and <b>reliability</b>, as it guarantees the execution of the shell's intrinsic, trusted version of a command. It is distinct from the <b>command</b> builtin, which also bypasses functions and aliases but then searches for external executables as well, whereas <b>builtin</b> exclusively targets shell internal commands.


title: CAVEATS
content:
The <b>builtin</b> command will only succeed if the specified <i>command_name</i> is indeed a <b>true shell builtin</b>. If <i>command_name</i> is an alias, a function, or an external executable, <b>builtin</b> will return an error status and print an error message (e.g., "command not a shell builtin"). <br><br>Its behavior and available builtins are specific to the shell interpreter (e.g., Bash, Zsh, Ksh) in which it is executed, although the core functionality is universally similar.


title: PERFORMANCE AND EFFICIENCY
content:
Executing a <i>shell builtin</i> via <b>builtin</b> avoids the overhead of forking a new process (which is typically required for external commands). This makes builtins significantly <b>faster</b> and more <b>resource-efficient</b> for common shell operations like changing directories (<b>cd</b>) or printing the current directory (<b>pwd</b>).


title: SECURITY AND RELIABILITY
content:
By explicitly calling a builtin, you ensure that the shell's trusted, internal implementation of a command is used. This can be crucial in scripting environments where you need to guarantee consistent behavior, especially for commands like <b>exit</b> or <b>test</b>, preventing malicious or unintended external programs or functions from being executed instead.


title: HISTORY
content:
The concept of <i>shell builtins</i> and the ability to explicitly invoke them has been a fundamental part of Unix shells since their early development. The <b>builtin</b> command itself is deeply integrated into modern shells like Bash, Zsh, and Ksh, rather than being a standalone development project. It emerged as a necessary mechanism to manage the hierarchy of command execution (aliases > functions > builtins > executables) and ensure shell integrity and efficiency. Its design has remained largely consistent due to its foundational role.


title: SYNOPSIS
content:
<b>buku</b> [<i>options</i>] [<i>arguments</i>]<br>Common usage examples:<br><b>buku -a</b> <i>&lt;url&gt;</i> [<i>tags</i>] [<i>description</i>]<br><b>buku -s</b> <i>&lt;search_terms...&gt;</i><br><b>buku -l</b><br><b>buku -o</b> <i>&lt;index&gt;</i><br><b>buku -d</b> <i>&lt;index&gt;|&lt;range&gt;|&lt;regex&gt;</i>


title: PARAMETERS
content:
<b>-a <url> [tags] [description]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a new bookmark. Tags are comma-separated. Description is optional.<br><br><b>-u <index> [new_url] [new_tags] [new_description]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Update an existing bookmark by index. Omitting fields preserves them.<br><br><b>-d <index>|<range>|<regex></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete bookmark(s) by index, range (e.g., 1-5), or regex.<br><br><b>-s <search_terms...></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search bookmarks by one or more terms. Case-insensitive by default.<br><br><b>-o <index></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the bookmark at the given index in your default web browser.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all bookmarks. Use -l <term> for filtered listing.<br><br><b>-m</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print exact match search results only.<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the database file path and exit.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message and exit.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's version number and exit.<br><br><b>--immutable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not modify the bookmark database. Useful for read-only operations.<br><br><b>--deep</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a deep search including bookmark titles (fetched offline), URLs, tags, and descriptions.<br><br><b>--no-fetch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add bookmarks without fetching their titles from the web.<br><br><b>--import <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Import bookmarks from an HTML (Firefox/Chrome) or CSV file.<br><br><b>--export <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Export all bookmarks to an HTML or CSV file.<br><br><b>--encrypt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Encrypt the bookmark database using AES256.<br><br><b>--decrypt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Decrypt the bookmark database.<br><br><b>--toggle-private</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Toggle privacy mode for selected bookmarks (hides URL/title from public view).<br><br><b>--auto-update</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically update fetched titles for all bookmarks.<br><br><b>--colors</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force colored output.<br><br><b>--no-colors</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable colored output.<br><br><b>--prompt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prompt for password input for encryption/decryption.<br><br><b>--config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print path to the user configuration file.<br><br><b>--print-json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print search results in JSON format.<br><br><b>--print-url</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the URL of the specified bookmark index.<br><br><b>--yes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assume 'yes' to all prompts, useful for scripting.<br><br><b>--clipboard</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Copy URL to clipboard instead of opening browser.<br><br><b>--add-only-url</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When importing, only add URL and fetch title, ignore tags/description from file.<br><br><b>--tag-only-url</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When importing, use original tags only, ignore titles/descriptions from file.<br><br>


title: DESCRIPTION
content:
<i>Buku</i> is a free, open-source, powerful, and easy-to-use command-line utility for managing web bookmarks. Written in Python, it provides a simple yet comprehensive interface for storing, organizing, and retrieving your web links directly from the terminal.<br><br>It stands out with its capabilities for deep search (including regex and boolean logic), offline title fetching, and robust encryption of the bookmark database. Users can add, update, delete, and list bookmarks with associated tags and descriptions. <i>Buku</i> also supports importing and exporting bookmarks from/to HTML and CSV formats, making it versatile for integrating with other browsers or tools. Its lightweight nature and focus on privacy, along with features like auto-completion and an optional web interface (<i>buku-html</i>), make it an excellent choice for power users who prefer the command line.


title: CAVEATS
content:
<i>Buku</i> stores its database in SQLite. Corruptions are rare but possible. Encryption requires the <i>pypi-AES</i> dependency, which might need separate installation. Fetching titles requires network access and the <i>requests</i> library. Regex search terms might require proper escaping depending on the shell. The <i>buku-html</i> web interface is a separate project and needs its own setup. The <b>--encrypt</b> / <b>--decrypt</b> options require a passphrase, which is not stored and must be remembered. Losing it means losing access to encrypted bookmarks.


title: DEFAULT DATABASE LOCATION
content:
<i>Buku</i> stores its bookmarks in a SQLite database, typically located at <i>~/.local/share/buku/bookmarks.db</i> or <i>~/.config/buku/bookmarks.db</i> depending on the XDG Base Directory Specification.


title: CONFIGURATION
content:
Users can customize <i>buku</i>'s behavior via a configuration file, often found at <i>~/.config/buku/config.json</i>. This file allows setting default options like opening browser, default search behavior, and colors.


title: WEB INTERFACE
content:
A separate project, <i>buku-html</i>, provides a lightweight web interface for <i>buku</i>, allowing users to manage their bookmarks via a browser without leaving the <i>buku</i> backend.


title: CLIPBOARD INTEGRATION
content:
<i>Buku</i> can be integrated with clipboard utilities like <i>xclip</i> or <i>xsel</i> to directly copy URLs to the clipboard using the <b>--clipboard</b> option, enhancing workflow efficiency.


title: HISTORY
content:
<i>Buku</i> was created by Arun Prakash Jana and first released around 2015-2016. It gained popularity for its minimalist approach to bookmark management on the command line. Its development has been community-driven, with active contributions improving its features, such as advanced search capabilities, encryption, and import/export functionalities. It's written in Python, allowing for cross-platform compatibility. The project is hosted on GitHub and maintains a consistent release cycle addressing bugs and adding new features based on user feedback. It fills a niche for users who prefer terminal-based workflows over graphical browser bookmark managers.


title: SYNOPSIS
content:
<b>bulk_extractor</b> [<i>options</i>] <<i>input_source</i>><br><i>input_source</i> can be a raw disk image file (e.g., <i>/path/to/image.dd</i>), a block device (e.g., <i>/dev/sdb</i>), a file, or a directory.


title: PARAMETERS
content:
<b>-o <dir></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output directory where all feature files and reports will be saved.<br><br><b>-e <extractor_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable a specific extractor. Multiple <i>-e</i> options can be used. Use <i>--list-extractors</i> to see available ones.<br><br><b>-x <extractor_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable a specific extractor. Useful for speeding up scans or reducing output noise.<br><br><b>-R, --recurse</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively process files within a directory input (default for directory inputs).<br><br><b>--threads <num></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the number of CPU threads to use for processing. Defaults to the number of CPU cores.<br><br><b>--stop_on_error</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Halt processing immediately if an error is encountered.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of <i>bulk_extractor</i>.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the extensive help message and list of all options.<br><br>


title: DESCRIPTION
content:
<i>bulk_extractor</i> is a high-performance digital forensics tool designed to recursively scan any input (e.g., disk image, file, or directory) and extract specific types of information, known as "features," without parsing the file system. It excels at "carving" data from unallocated space or damaged file systems. Its multi-threaded architecture enables rapid processing of large datasets, identifying crucial items such as email addresses, IP addresses, URLs, credit card numbers, geo-location data, and various file types.<br><br>The tool outputs these extracted features into separate, type-specific files (e.g., <i>email.txt</i>, <i>url.txt</i>), along with a <i>report.xml</i>, making analysis straightforward and data easily importable into other forensic platforms. It's particularly valuable in investigations where speed, comprehensive feature identification, and the ability to work with raw or compromised data are paramount.


title: CAVEATS
content:
<b>Limitations and Considerations:</b><br>1. Can generate a very large amount of output data, requiring significant disk space, especially for large inputs.<br>2. Some extractors (e.g., credit card numbers based on checksums) may produce false positives. Careful review of results is essential.<br>3. <i>bulk_extractor</i> does not reconstruct file systems; it focuses purely on pattern extraction from raw data.<br>4. Performance is heavily influenced by the speed of the input disk and the number of available CPU cores.


title: OUTPUT STRUCTURE
content:
All output from <i>bulk_extractor</i> is directed to a specified output directory (using the <i>-o</i> option). This directory typically contains a <i>report.xml</i> file summarizing the run, and numerous 'feature files' (e.g., <i>email.txt</i>, <i>url.txt</i>, <i>ccard.txt</i>), each containing a list of detected features of a specific type, often with offsets and context.


title: EXTRACTOR SYSTEM
content:
<i>bulk_extractor</i> operates through a modular 'extractor' system. Each extractor is a specialized scanner designed to find a particular type of feature (e.g., email addresses, JPEG headers, URLs). Users can enable or disable specific extractors to tailor the scan to their investigative needs, optimizing both performance and the relevance of the output.


title: HISTORY
content:
<i>bulk_extractor</i> was initially developed by Simson L. Garfinkel and his team at the Naval Postgraduate School, starting around 2008-2009. The project aimed to create a high-speed, scalable tool for digital forensics capable of processing large disk images quickly, addressing the growing volume of digital evidence. It's an open-source tool that has since become a widely adopted standard in the digital forensics community for its efficiency in identifying and extracting patterns from raw data.


title: PARAMETERS
content:
<b>-b <i>&lt;bssid&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify the BSSID (MAC address) of the target access point.</i><br><br><b>-c <i>&lt;channel&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Set the specific channel of the target AP.</i><br><br><b>-e <i>&lt;essid&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify the ESSID (network name) of the target access point.</i><br><br><b>-F</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Force reassociation after each failed PIN attempt (aggressive mode).</i><br><br><b>-p <i>&lt;pin&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify a particular 8-digit PIN to try.</i><br><br><b>-S <i>&lt;pin&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Start the brute-force attack from a specific PIN.</i><br><br><b>-v <i>&lt;level&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Set the verbosity level for output (0-4, higher for more details).</i><br><br><b>-d <i>&lt;delay&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Set the delay (in seconds) between each PIN attempt to avoid detection.</i><br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Periodically reassociate with the target AP to maintain connection.</i><br><br><b>-N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Do not send NACK fragments (can help prevent some APs from locking up).</i><br><br><b>-W <i>&lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify the WPS version (1 or 2, default 1) to target.</i><br><br><b>--hash <i>&lt;pin&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Output the hash for a given PIN (primarily for debugging purposes).</i><br><br><b>--pin-file <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Load a list of PINs from a specified file for the attack.</i><br><br><b>--bruteforce</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Explicitly enable brute-force mode (often implied by default usage).</i><br><br><b>--force-continue</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Continue the attack even if certain errors or failures occur.</i><br><br><b>--crack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Attempt to crack the WPA/WPA2 passphrase using the recovered PIN.</i><br><br><b>--show-key</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display the WPA/WPA2 key if it is successfully recovered.</i><br><br>


title: DESCRIPTION
content:
<br><b>Bully</b> is an open-source command-line tool designed for performing brute-force attacks against Wi-Fi Protected Setup (WPS) enabled access points. Its primary goal is to recover the WPS PIN, which can subsequently be used to obtain the WPA/WPA2 passphrase of a wireless network. Written in C, Bully was developed as a more efficient and robust alternative to earlier WPS attack tools like Reaver, featuring improved performance and compatibility. It exploits a known design flaw in the WPS protocol where the 8-digit PIN can be validated in two separate halves, drastically reducing the number of attempts needed for a successful brute-force attack. The tool requires a wireless adapter capable of monitor mode and packet injection. By systematically trying various PIN combinations and analyzing the target AP's responses, Bully can often discover the correct PIN and reveal the network's security key.


title: CAVEATS
content:
<br>1. <b>Legal and Ethical Use:</b> <i>Bully</i> is a penetration testing tool. Using it on networks without explicit permission from the owner is illegal and unethical in most jurisdictions. Users are solely responsible for their actions.<br>2. <b>Prerequisites:</b> Requires a compatible wireless network adapter capable of monitor mode and packet injection. Root privileges (e.g., using `sudo`) are necessary to run the command.<br>3. <b>Effectiveness:</b> Many modern routers have implemented countermeasures such as WPS rate-limiting or lockout mechanisms, which can significantly reduce or even negate <i>Bully</i>'s effectiveness.<br>4. <b>Distribution:</b> <i>Bully</i> is not a standard utility in most general-purpose Linux distributions; it is commonly found in specialized penetration testing distributions like Kali Linux or Parrot OS.


title: TARGET AUDIENCE
content:
<i>Bully</i> is primarily used by cybersecurity professionals, ethical hackers, and security researchers for penetration testing and auditing wireless network security. Effective use requires a foundational understanding of wireless networking concepts, command-line operations, and ethical hacking principles.


title: WPS VULNERABILITY EXPLOITED
content:
The tool exploits a fundamental design flaw in the Wi-Fi Protected Setup (WPS) protocol. The 8-digit PIN used for WPS is validated in two separate halves (the first 4 digits and the next 3 digits, with the last digit being a checksum). This allows an attacker to brute-force each half independently, dramatically reducing the number of possible PINs from 10^8 (100 million) to approximately 10^4 + 10^3 (around 11,000), making brute-forcing feasible within a reasonable timeframe.


title: HISTORY
content:
<br><i>Bully</i> was developed by t6_x (Brian Wallace) and first released around 2012. It emerged as an improved alternative to the then-popular <i>Reaver</i> tool, aiming to offer a more robust and efficient mechanism for WPS brute-forcing. Written entirely in C, <i>Bully</i> quickly gained traction within the cybersecurity community for its speed and reliability in exploiting the inherent WPS vulnerability. Its development and widespread use further contributed to public awareness of the severe security weaknesses in the WPS protocol, prompting router manufacturers to implement stronger defenses or disable WPS by default in newer firmware versions.


title: SYNOPSIS
content:
<br><b>bun</b> <i>[command]</i> <i>[options]</i> <i>[arguments]</i><br><br>Common commands:<br>&nbsp;&nbsp;<b>bun run</b> <i>[script]</i><br>&nbsp;&nbsp;<b>bun install</b><br>&nbsp;&nbsp;<b>bun add</b> <i>[package]</i><br>&nbsp;&nbsp;<b>bun remove</b> <i>[package]</i><br>&nbsp;&nbsp;<b>bun build</b> <i>[entrypoint]</i><br>&nbsp;&nbsp;<b>bun test</b> <i>[files]</i><br>&nbsp;&nbsp;<b>bun create</b> <i>[template]</i> <i>[project_name]</i>


title: PARAMETERS
content:
<b>run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes scripts defined in package.json or any JavaScript/TypeScript file.<br><br><b>install</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs project dependencies defined in package.json. Known for extreme speed.<br><br><b>add</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds one or more packages to the project's dependencies.<br><br><b>remove</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes one or more packages from the project's dependencies.<br><br><b>build</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Bundles and transpiles JavaScript/TypeScript code for deployment.<br><br><b>test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs unit and integration tests with built-in test runner.<br><br><b>create</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initializes a new project from a template.<br><br><b>upgrade</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Upgrades Bun to the latest version.<br><br>


title: DESCRIPTION
content:
Bun is an all-in-one JavaScript runtime designed for speed and efficiency. Developed by Jarred Sumner, it aims to provide a faster alternative to existing JavaScript tools like Node.js and npm. Unlike traditional Linux commands, Bun is primarily a user-space application used for developing and running web applications. It's built with the Zig programming language and uses JavaScriptCore, Apple's JavaScript engine, for execution.<br><br>Bun bundles several functionalities that are typically handled by separate tools in the JavaScript ecosystem: it acts as a runtime (like Node.js), a package manager (like npm or Yarn), a bundler (like Webpack or esbuild), and a test runner (like Jest). This integrated approach reduces complexity and startup times, making development workflows faster. On Linux, Bun is installed as a standalone executable and invoked from the terminal to manage JavaScript/TypeScript projects, run server-side applications, or build front-end code.


title: CAVEATS
content:
Bun is a relatively new and rapidly evolving tool; its API and features may change between versions. It is not a core Linux utility but a third-party runtime primarily for web development, requiring separate installation. While highly compatible with Node.js APIs, some edge cases or native modules might behave differently or require specific workarounds. Its performance benefits are most apparent in I/O-bound tasks and large dependency trees.


title: INSTALLATION ON LINUX
content:
Bun can be installed on Linux typically via a shell script:<br><b>curl -fsSL https://bun.sh/install | bash</b><br>or by downloading a pre-built binary. Users often add the Bun executable to their PATH environment variable for easy access from any directory.<br><br><b>curl</b> (1) is often used for downloading the installation script, and <b>bash</b> (1) for executing it.


title: HISTORY
content:
Bun was publicly launched in July 2022 by Jarred Sumner, with the goal of creating a faster and more integrated JavaScript toolkit. It quickly gained traction in the developer community due to its impressive performance benchmarks and its all-in-one approach. Its development is ongoing, with frequent updates introducing new features and improvements. It represents a significant innovation in the JavaScript runtime landscape.


title: SYNOPSIS
content:
<b>bundle</b> <<i>command</i>> [<i>arguments</i>] [<i>options</i>]<br><br>Examples:<br><b>bundle install</b> [<i>options</i>]<br><b>bundle update</b> [<i>gems</i>] [<i>options</i>]<br><b>bundle exec</b> <i>command</i> [<i>arguments</i>]<br><b>bundle add</b> <i>gem_name</i> [<i>options</i>]


title: PARAMETERS
content:
<b><b>--local</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not fetch remote gems; use only cached gems.<br><br><b><b>--path</b> <<i>directory</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Install gems to a specified directory rather than the system-wide Gem Path. Often used for vendoring dependencies.<br><br><b><b>--without</b> <<i>groups</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not install gems belonging to the specified groups (e.g., 'development test').<br><br><b><b>--clean</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes old gems from the bundle directory after installation (only applicable when using --path).<br><br><b><b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reinstall all gems, even if they appear to be installed.<br><br><b><b>--no-install</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resolves dependencies and updates <i>Gemfile.lock</i> without actually installing gems.<br><br><b><b>--gemfile</b> <<i>file</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a specific <i>Gemfile</i> instead of the default.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print extra information for debugging purposes.<br><br>


title: DESCRIPTION
content:
<b>bundle</b> is the primary command-line interface for Bundler, a dependency manager for Ruby applications. It ensures that a Ruby application runs with the specific versions of gems (libraries) it needs. Bundler achieves this by reading a <i>Gemfile</i>, which specifies an application's dependencies, and then resolving and installing those gems. It creates a <i>Gemfile.lock</i> file, which precisely records the versions of all installed gems, ensuring consistent environments across development, testing, and production. <b>bundle</b> provides various subcommands to manage the entire dependency lifecycle, including installing, updating, and executing commands within the bundled environment. It is crucial for maintaining project stability and portability in the Ruby ecosystem.


title: CAVEATS
content:
<b>bundle</b> is not a standard utility shipped with most Linux distributions. It must be installed separately, typically via <i>gem install bundler</i>, after Ruby is set up. It is specifically designed for Ruby projects and is not applicable to other programming languages or general system dependency management. Its functionality relies heavily on the presence of a <i>Gemfile</i> in the project directory.


title: SUBCOMMANDS
content:
<b>bundle</b> acts as a front-end for a rich set of subcommands, each designed for a specific dependency management task. Examples include <b>install</b> (to resolve and install gems), <b>update</b> (to update gems to newer versions), <b>exec</b> (to run a command within the bundled environment), <b>add</b> (to add new gem dependencies), <b>show</b> (to display installed gems), and <b>config</b> (to manage Bundler settings).


title: GEMFILE AND GEMFILE.LOCK
content:
These two files are central to Bundler's operation. The <i>Gemfile</i> declares the project's direct gem dependencies, while the <i>Gemfile.lock</i> is a generated file that precisely records the exact versions of all gems (including transitive dependencies) that were resolved and installed. This ensures that anyone running <b>bundle install</b> on the same project gets the exact same gem setup, promoting consistency across environments.


title: HISTORY
content:
Bundler was first released in 2010 to address the growing need for consistent and reproducible dependency management within Ruby projects. Before Bundler, managing gem dependencies was often manual and prone to 'works on my machine' issues due to differing gem versions across development environments. It quickly became the de-facto standard for Ruby dependency resolution, integrating seamlessly with RubyGems. Its adoption by the Ruby on Rails framework further solidified its position as an essential tool in the Ruby ecosystem, ensuring project stability and easing collaboration among developers.


title: SYNOPSIS
content:
<b>bundle</b> <I>subcommand</I> [<I>options</I>] [<I>arguments</I>]<br><br><i>Common Subcommands:</i><br><b>bundle install</b> [<I>options</I>] - Installs gems specified in the Gemfile.<br><b>bundle update</b> [<I>gems</I>] [<I>options</I>] - Updates gems to the latest compatible versions.<br><b>bundle exec</b> <I>command</I> [<I>arguments</I>] - Executes a command in the context of the bundle.<br><b>bundle console</b> [<I>group</I>] - Starts an IRB session in the context of the bundle.<br><b>bundle outdated</b> [<I>options</I>] - Lists gems that have newer versions available.<br><b>bundle lock</b> [<I>options</I>] - Generates or updates the Gemfile.lock without installing gems.<br><b>bundle config</b> [<I>name</I>] [<I>value</I>] - Sets or gets bundler configuration options.


title: PARAMETERS
content:
<b><I>Global Options (applicable to many subcommands):</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Bundler version.<br><br><b>--no-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables color output.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints additional diagnostic information.<br><br><b><I>For 'bundle install' subcommands:</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br><br><b>--path <directory></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs gems to a specified directory instead of the default RubyGems location. Often used for vendoring dependencies.<br><br><b>--without <group></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips installing gems in a specified group (e.g., <i>development</i>, <i>test</i>).<br><br><b>--clean</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes old installed gems from the bundle.<br><br><b>--jobs <N></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs gems in parallel using <i>N</i> jobs.<br><br><b><I>For 'bundle update' subcommands:</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br><br><b>--source</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates gems from a specific source.<br><br><b>--patch, --minor, --major</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Constraints updates to patch, minor, or major versions respectively (used with <b>bundle update --all</b> or <b>bundle update <gem></b>).<br><br><b><I>Note for 'bundle exec':</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>bundle exec</b> does not have its own specific options; any options following it are passed directly to the executed command. Its purpose is to ensure the command runs within the exact gem environment defined by the <b>Gemfile.lock</b>.<br><br>


title: DESCRIPTION
content:
Bundler is the de facto standard dependency management tool for Ruby applications. It provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions needed by a project. This prevents 'dependency hell' where different projects or different developers on the same project might end up with different gem versions, leading to unpredictable behavior or broken builds.<br><br>Bundler reads a <b>Gemfile</b>, which specifies a project's dependencies, resolves compatible versions for all gems, and then records these exact versions in a <b>Gemfile.lock</b> file. This <b>Gemfile.lock</b> ensures that anyone else working on the project, or the production deployment, will use the exact same gem versions, guaranteeing reproducibility. It integrates seamlessly with <i>RubyGems</i> and various Ruby frameworks like <i>Rails</i>, making development and deployment predictable and reliable.


title: CAVEATS
content:
<b>Gemfile.lock Conflicts:</b> Merging <b>Gemfile.lock</b> changes in version control can be challenging, as it's a generated file. It's generally recommended to commit <b>Gemfile.lock</b> to ensure reproducibility.<br><b>Performance:</b> Large projects with many dependencies might experience slower <b>bundle install</b> or <b>bundle update</b> times.<br><b>Ruby Version Manager Interaction:</b> Bundler works alongside tools like <i>rvm</i> or <i>rbenv</i>. Ensure the correct Ruby version is active before running Bundler commands.<br><b>System vs. Binstubs:</b> Using <b>bundle exec</b> is crucial to ensure commands run within the bundle's environment. Without it, you might be running system-wide gem versions, leading to unexpected behavior.


title: GEMFILE
content:
A file named <b>Gemfile</b> (without an extension) located in the root of a Ruby project. It specifies all the gems and their versions (or version constraints) that the project depends on. It uses a Ruby DSL (Domain Specific Language) to define these dependencies, often grouped by environment (e.g., <i>development</i>, <i>test</i>, <i>production</i>).


title: GEMFILE.LOCK
content:
A file automatically generated and updated by Bundler (via <b>bundle install</b>, <b>bundle update</b>). It precisely records the exact versions of all gems (including transitive dependencies) that were installed for the project. This file is critical for ensuring consistent and reproducible environments across different machines and deployments. It should always be committed to version control.


title: BINSTUBS
content:
Executable scripts generated by Bundler (via <b>bundle install --binstubs</b> or <b>bundle binstubs</b>). These scripts are proxies that ensure a command (like <i>rails</i> or <i>rake</i>) is executed using the gems from the project's bundle, rather than potentially conflicting system-wide gems.


title: HISTORY
content:
Bundler emerged around 2009-2010 to address the pervasive "dependency hell" problem in the Ruby ecosystem, especially with the growth of <i>Ruby on Rails</i> applications. Before Bundler, managing gem versions across different projects and development environments was a significant pain point, often leading to unpredictable behavior. It quickly became the de facto standard tool for Ruby dependency management, making reproducible builds and deployments much more reliable and straightforward. Its core concepts, like the <b>Gemfile</b> and <b>Gemfile.lock</b>, have influenced dependency management tools in other languages.


title: PARAMETERS
content:
<b><I>command</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific operation <b>bundletool</b> should perform. Examples include <I>build-apks</I>, <I>get-size</I>, <I>validate</I>, <I>install-apks</I>, and <I>extract-apks</I>. Each command has its own set of specific options.<br><br><b><b>build-apks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a set of device-specific APKs from an Android App Bundle (<I>.aab</I> file). This is the most frequently used command, essential for preparing apps for distribution. It supports various modes like universal APKs or signed APKs for publishing.<br><br><b><b>get-size</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Calculates and reports the estimated download and install sizes of an app bundle for different device configurations.<br><br><b><b>validate</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs various checks to ensure that an Android App Bundle is valid and correctly structured according to the App Bundle specification.<br><br><b><b>install-apks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs a set of APKs (contained within an <I>.apks</I> archive generated by <b>bundletool</b>) onto a connected Android device.<br><br><b><b>extract-apks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts a device-specific subset of APKs from an <I>.apks</I> archive, useful for debugging or sharing specific APKs.<br><br><b><b>dump-debug-info</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides detailed debug information about the contents and structure of an Android App Bundle, useful for debugging and analysis.<br><br>


title: DESCRIPTION
content:
<br><i><b>bundletool</b> is the underlying command-line utility that powers Android Studio, the Android Gradle plugin, and Google Play when building and packaging Android apps. It's primarily used for two main purposes: generating optimized APKs from an Android App Bundle (<I>.aab</I> file) and inspecting the contents of an App Bundle or generated APKs.</i><br><br><i>Android App Bundles are the standard publishing format for Android apps, offering benefits like smaller download sizes and features on demand. <b>bundletool</b> ensures that your app is optimized for various device configurations by generating a set of split APKs (base, configuration, and feature APKs) specific to a device's architecture, language, and screen density. It can also generate a single <I>universal APK</I> for testing purposes. Beyond APK generation, it offers utilities to extract device-specific APKs, install them, validate bundles, and measure their sizes. It's an essential tool for developers managing app distribution on Google Play and for local testing of App Bundles.</i><br>


title: CAVEATS
content:
<br><ul><li><b>Java Dependency</b>: <b>bundletool</b> is a Java <I>.jar</I> file and requires a Java Runtime Environment (JRE) 8 or higher to be installed and configured on the system.</li><li><b>Output Format</b>: The <b>build-apks</b> command outputs an <I>.apks</I> file, which is a ZIP archive containing multiple APKs, not a single installable APK. It must be processed by <b>bundletool install-apks</b> or uploaded to Google Play for distribution.</li><li><b>Signing Requirements</b>: For production use, generated APKs must be properly signed with your app's release key. <b>bundletool</b> provides options for signing during the <I>build-apks</I> process.</li><li><b>No Direct Linux Executable</b>: Unlike many Linux commands, <b>bundletool</b> is not a native binary but rather a Java archive executed via the Java Virtual Machine.</li></ul><br>


title: COMMON <B>BUILD-APKS</B> OPTIONS
content:
<br>The <b>build-apks</b> command, being central to <b>bundletool</b>'s functionality, supports several important options to control APK generation:<br><ul><li><b>--bundle=<I>file</I></b>: <I>(Required)</I> Path to the input Android App Bundle (<I>.aab</I>) file.<br></li><li><b>--output=<I>file</I></b>: <I>(Required)</I> Path where the generated <I>.apks</I> archive will be saved.<br></li><li><b>--mode=<I>mode</I></b>: Specifies the APK generation mode. Common values include <I>universal</I> (generates a single APK compatible with all devices) and <I>system</I> (for pre-installed apps). Defaults to generating a set of split APKs.<br></li><li><b>--ks=<I>file</I></b>: Path to the Java KeyStore (<I>.jks</I>) file containing the signing key.<br></li><li><b>--ks-pass=<I>pass</I></b>: Password for the keystore.<br></li><li><b>--ks-key-alias=<I>alias</I></b>: Alias of the key within the keystore to use for signing.<br></li><li><b>--key-pass=<I>pass</I></b>: Password for the specific key alias.<br></li><li><b>--local-testing</b>: Generates unsigned APKs without enabling module fusion, ideal for quick local testing and debugging.<br></li><li><b>--device-spec=<I>file</I></b>: Path to a JSON file describing a target device, allowing <b>bundletool</b> to generate a specific set of APKs tailored for that device.<br></li></ul>


title: UNDERSTANDING THE <I>.APKS</I> ARCHIVE
content:
<br>When <b>bundletool</b> builds APKs, it outputs a single <I>.apks</I> file. This is fundamentally a ZIP archive containing all the generated split APKs, the base APK, and other metadata necessary for dynamic delivery. It is crucial to understand that this <I>.apks</I> file is not directly installable on an Android device. Instead, tools like <b>bundletool install-apks</b>, Google Play, or the Play Console are designed to parse this archive and deploy the correct set of APKs (or a single universal APK) to a target device based on its configuration. For local testing, you typically use <b>bundletool install-apks --apks=&lt;file&gt;</b>.<br>


title: HISTORY
content:
<br><i><b>bundletool</b> was introduced by Google alongside the Android App Bundle format itself, which was initially announced at Google I/O in 2018. Its primary purpose was to provide the underlying technology for Google Play's Dynamic Delivery system, enabling developers to leverage the benefits of App Bundles by generating optimized APKs for different device configurations. It began as an internal tool used by Android Studio and the Android Gradle plugin, and was later open-sourced and made available as a standalone command-line utility for developers to directly interact with App Bundles. Its continuous development is closely tied to the evolution of Android's app distribution model and optimization efforts.</i><br>


title: SEE ALSO
content:
<I>adb(1)</I>: Android Debug Bridge, for installing and managing applications on Android devices., <I>apksigner(1)</I>: Android SDK tool for signing APKs, an alternative or complementary tool for signing operations., <I>zipalign(1)</I>: Android SDK tool for optimizing APK files, implicitly handled by <b>bundletool</b> during APK generation.


title: SYNOPSIS
content:
<b>bundletool dump</b> <br> &nbsp;&nbsp;&nbsp;&nbsp;(--bundle=<I>path/to/bundle.aab</I> | --apk=<I>path/to/apk.apk</I>) <br> &nbsp;&nbsp;&nbsp;&nbsp;[--manifest] [--resources] [--signatures] [--config] [--device-spec] <br> &nbsp;&nbsp;&nbsp;&nbsp;[--output-file=<I>output_file_path</I>] <br> &nbsp;&nbsp;&nbsp;&nbsp;[--verbose] [--version] [--help]


title: PARAMETERS
content:
<b>--bundle=<I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the Android App Bundle (<i>.aab</i>) file to be analyzed. This option is mutually exclusive with <b>--apk</b>.<br><br><b>--apk=<I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the Android Package Kit (<i>.apk</i>) file to be analyzed. This option is mutually exclusive with <b>--bundle</b>.<br><br><b>--manifest</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the parsed content of the <i>AndroidManifest.xml</i> file present within the bundle or APK.<br><br><b>--resources</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps detailed information about the app's resources, including their configurations and values.<br><br><b>--signatures</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps information about the digital signatures applied to the APK, including certificate details.<br><br><b>--config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the bundle configuration details, such as <i>min_sdk_version</i>, <i>target_sdk_version</i>, supported ABIs, and screen densities.<br><br><b>--device-spec</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the device specification that was used to build the APK, if available within the package.<br><br><b>--output-file=<I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a file where the command's output should be written instead of printing to standard output (stdout).<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables more detailed and verbose output, providing additional information during the dump process.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <b>bundletool</b> version information and then exits.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and available options for the <b>dump</b> command and then exits.<br><br>


title: DESCRIPTION
content:
<b>bundletool dump</b> is a powerful subcommand of the Android Bundletool utility. It provides a comprehensive way to analyze the internal structure and metadata of Android App Bundles (<i>.aab</i>) and APK files (<i>.apk</i>). Developers, testers, and security analysts can use it to verify the contents of their builds, troubleshoot issues, understand how resources are packaged, inspect manifest declarations, and examine signing details. It's particularly useful for debugging app bundle configurations and ensuring that the final APKs generated by the bundle meet the expected specifications before distribution through platforms like Google Play.


title: CAVEATS
content:
<ul><br><li><b>Java Runtime Requirement</b>: <b>bundletool</b> is a Java-based tool and requires a Java Runtime Environment (JRE) (version 11 or higher is recommended) to be installed and configured on the system.</li><br><li><b>Not Pre-installed</b>: <b>bundletool</b> is not typically pre-installed on Linux distributions. Users must manually download the executable JAR file from its official GitHub releases page and often add it to their system's PATH for convenient access.</li><br><li><b>Verbose Output</b>: Depending on the options used (e.g., <b>--resources</b>), the output can be very extensive. It is often beneficial to pipe the output to tools like <b>grep</b> or redirect it to a file for easier analysis.</li></ul>


title: INSTALLATION
content:
<b>bundletool</b> is distributed as a single executable JAR file. To use it, download the latest <i>bundletool-all.jar</i> from its <I>GitHub releases page</I>. Once downloaded, it can be executed using Java: <code>java -jar bundletool-all.jar dump ...</code>. For convenience, it's common practice to rename the JAR to <i>bundletool</i> and place it in a directory included in your system's PATH.


title: COMMON USE CASES
content:
Beyond basic inspection, <b>bundletool dump</b> is invaluable for:<br><ul><li><b>Build Verification</b>: Ensuring that specific build configurations (e.g., targeting particular ABIs or screen densities) are correctly applied and included within the app bundle or APK.</li><br><li><b>Security Analysis</b>: Examining the signing certificate details of an APK to verify its authenticity or detect tampering.</li><br><li><b>Resource Management</b>: Understanding how resources are packaged and split for different device configurations, which is crucial for optimizing app size and performance.</li><br><li><b>Debugging Manifest Issues</b>: Quickly identifying and resolving issues related to permissions, activities, or services declared in the <i>AndroidManifest.xml</i>.</li></ul>


title: HISTORY
content:
<b>bundletool</b> was developed by Google and introduced alongside the Android App Bundle (AAB) format in 2018 as a core tool for packaging, signing, and deploying Android applications. The <b>dump</b> command was an integral part of its initial release, providing developers with the essential ability to inspect the new <i>.aab</i> format, as well as traditional <i>.apk</i> files. Its development was driven by the need to support the modular app delivery mechanism of App Bundles and to facilitate debugging and verification processes for app delivery through platforms like Google Play.


title: PARAMETERS
content:
<b>--bundle=<I>path/to/your.aab</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the absolute or relative path to the Android App Bundle (<code>.aab</code> file) that needs to be validated. This is typically a mandatory parameter for the validation process.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information and usage details for the <i>validate</i> sub-command.<br><br>


title: DESCRIPTION
content:
The <i>bundletool-validate</i> command is a sub-command of the <b>bundletool</b> utility, a crucial command-line tool for Android developers. Its primary function is to inspect and verify the integrity and correctness of an Android App Bundle (AAB) file. An AAB is the publishing format for Android apps on Google Play, and validating it ensures that it adheres to all the structural, manifest, resource, and signing requirements set by Google Play.<br><br>This command helps developers catch potential issues before uploading their app bundle, thereby streamlining the release process and preventing rejections due to malformed or invalid bundles. It performs checks such as verifying the bundle structure, manifest contents, resource configurations, and proper module organization.


title: CAVEATS
content:
<ul><li>The <i>bundletool-validate</i> command performs static analysis of the App Bundle; it does not execute any code or check for runtime errors.</li><li>While validation covers many common issues, it doesn't guarantee that the app will function correctly on all devices or pass all Google Play review policies (e.g., content policies, performance, security vulnerabilities not detectable by bundle structure).</li><li>Ensure you have the latest version of <b>bundletool</b> for the most up-to-date validation checks, as Google Play's requirements can evolve.</li></ul>


title: BUNDLE STRUCTURE
content:
The validation process checks for the correct internal structure of the <code>.aab</code> file, which is essentially a zip archive containing various modules (base, feature modules), manifest files, resources, assets, and native libraries.


title: SIGNING INFORMATION
content:
While <i>bundletool-validate</i> doesn't fully verify the signing key's authenticity with Google Play, it checks for the presence and basic validity of signing information within the bundle, which is crucial for Google Play's integrity checks.


title: ERROR REPORTING
content:
If validation fails, the command provides detailed error messages indicating what went wrong and often suggesting how to fix it, helping developers quickly identify and resolve issues.


title: HISTORY
content:
The <b>bundletool</b> utility was introduced by Google as part of the Android App Bundle adoption initiative, which began gaining traction around 2018. Google mandated App Bundles for all new apps on Google Play from August 2021, making tools like <b>bundletool</b> essential for Android developers. The <i>validate</i> sub-command has been a core component of <b>bundletool</b> since its early versions, crucial for ensuring app bundles conform to Google Play's evolving standards. Its development is tied directly to the lifecycle and requirements of the Android App Bundle format.


title: PARAMETERS
content:
<b>-d, --debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debugging output for detailed operation tracing.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message for a specific subcommand or the main command.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increase verbosity of output, showing more information about progress.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the <I>bup</I> program version information.<br><br><b>--bup-dir=<dir></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the <I>bup</I> repository directory. Default is <I>~/.bup</I>.<br><br><b>--remote=<host></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect to a <I>bup</I> server on a remote host via SSH for remote operations.<br><br><b>--remote-path=<path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the path to the <I>bup</I> executable on the remote host when using <I>--remote</I>.<br><br><b><subcommand></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A specific operation to perform (e.g., 'save', 'restore', 'fs'). Each subcommand has its own set of options and arguments.<br><br>


title: DESCRIPTION
content:
<b>bup</b> is a highly efficient and robust backup system for Linux and other Unix-like operating systems. Unlike traditional backup tools, <b>bup</b> leverages the same underlying data structures as <I>Git</I>, specifically Git's packfile format. This unique approach enables <b>bup</b> to perform global deduplication, meaning that if the same data block appears anywhere across different files, different versions of the same file, or even different machines (when backing up to a central <b>bup</b> server), it is stored only once.<br><br>This significantly reduces storage requirements and network bandwidth. <b>bup</b> excels at handling very large datasets, often achieving speeds comparable to <I>rsync</I> for incremental backups while providing full historical versions. It supports local backups, remote backups via SSH, and offers various commands for saving, restoring, and managing backup sets. Its primary design goals include speed, efficiency, and data integrity.


title: CAVEATS
content:
<b>bup</b>'s <I>Git</I>-based nature means it can have a steeper learning curve than traditional backup tools. While highly efficient, initial full backups of very large datasets can be memory intensive. It does not provide built-in encryption of the backup repository at rest; external encryption solutions (e.g., <I>gpg</I>) must be used if data privacy is a concern for the stored backups.


title: HOW BUP ACHIEVES DEDUPLICATION
content:
<b>bup</b> achieves global deduplication by breaking files into fixed-size or variable-size chunks. Each chunk is then hashed, and this hash is used as its unique identifier. If a chunk with the same hash already exists in the <b>bup</b> repository (from any file, any version), a new copy is not stored; instead, a reference to the existing chunk is saved. This process is similar to how <I>Git</I> stores objects, allowing for extremely efficient storage, especially when backing up multiple versions of files or datasets with significant redundancy.


title: HISTORY
content:
<b>bup</b> was created by Avery Pennarun, with initial development starting around 2010. Its core innovation was applying <I>Git</I>'s efficient storage model (specifically, content-addressable storage and packfiles) to general-purpose backups. This allowed for features like global deduplication and easy management of historical versions, which were previously difficult or inefficient to achieve. It gained popularity in the Linux community for its ability to handle large data sets and provide robust, incremental backups. Development has been community-driven since its inception.


title: SYNOPSIS
content:
<b>burpsuite</b> <i>[options]</i><br><i>(Note: The exact command or wrapper script name might vary based on installation path and OS. Often, it's a script executing 'java -jar burpsuite.jar' with arguments.)</i>


title: PARAMETERS
content:
<b>-project-file <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Loads or creates a project file, allowing persistence of work across sessions.</i><br><br><b>-config-file <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Loads configuration settings from a specified XML configuration file.</i><br><br><b>-user-config-file <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Loads user-specific configuration settings from a separate XML file.</i><br><br><b>-headless</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Runs Burp Suite in headless mode, without a graphical user interface (primarily for Professional edition automation and CI/CD integration).</i><br><br><b>-data-path <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the directory where Burp Suite stores its temporary data files.</i><br><br><b>-disable-auto-save</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prevents the current project from being automatically saved.</i><br><br><b>-disable-extensions</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables all installed Burp extensions (BApps) upon startup.</i><br><br><b>-log-file <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Redirects Burp Suite's console output and log messages to a specified file.</i><br><br><b>-help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays a list of available command-line options and their descriptions.</i><br><br>


title: DESCRIPTION
content:
Burp Suite is an integrated platform for performing security testing of web applications. Developed by PortSwigger, it provides a comprehensive set of tools, including an intercepting proxy, web vulnerability scanner, automated attacking tools (Intruder), manual manipulation tools (Repeater, Decoder), and sequencing analysis. It allows security professionals to intercept, inspect, and modify HTTP/S traffic, automate custom attacks, identify vulnerabilities, and analyze web application behavior. Burp Suite is widely adopted by cybersecurity professionals, penetration testers, and developers for both manual and automated security assessments. While primarily a graphical user interface (GUI) application, it supports command-line arguments for launching with specific configurations, loading project files, or for headless automation (Professional edition).


title: CAVEATS
content:
<ul><li>Burp Suite is a Java application and requires a compatible Java Runtime Environment (JRE) to be installed on the system. The specific Java version needed can vary with Burp Suite releases.</li><li>While it supports command-line options, Burp Suite is primarily designed for interactive use via its graphical user interface. Most advanced features and detailed analysis are performed through the GUI.</li><li>Memory consumption can be significant, especially when dealing with large projects, extensive scanning, or heavy traffic. Users often need to allocate more JVM memory (e.g., using `java -Xmx2G -jar burpsuite.jar`).</li><li>The `burpsuite` command on Linux is often a wrapper script. For advanced Java Virtual Machine (JVM) arguments, direct execution of the JAR file (`java -jar burpsuite.jar`) might be required.</li></ul>


title: <B>EDITIONS</B>
content:
<i>Burp Suite is available in two primary editions: the <b>Community Edition</b> (free, offering basic manual tools like Proxy, Repeater, Decoder, and Comparer) and the <b>Professional Edition</b> (paid, providing full functionality including the advanced vulnerability scanner, headless automation capabilities, Intruder, Sequencer, and a wider array of features).</i>


title: <B>EXTENSIBILITY</B>
content:
<i>A key feature of Burp Suite Professional is its extensibility via the BApp Store. Users can install extensions (BApps) developed by the community or PortSwigger, written in Java, Python, or Ruby, which significantly expand Burp's capabilities for specialized tasks, integrations, and custom analyses.</i>


title: HISTORY
content:
Burp Suite was initially developed by Dafydd Stuttard, the founder of PortSwigger Web Security. The first public release of Burp Suite Free was in 2004. Over the years, it has undergone continuous development, with regular updates introducing new features, tools, and performance enhancements. It rapidly gained recognition and established itself as a leading tool for web penetration testing. The Professional edition, launched later, brought advanced capabilities such as the Burp Scanner, headless mode for automation, and an extensive BApp Store for extensibility, solidifying its position as an industry-standard tool.


title: SYNOPSIS
content:
<b>busybox</b> [<i>OPTIONS</i>] <i>COMMAND</i> [<i>ARGUMENTS...</i>]<br>or<br><i>COMMAND</i> [<i>ARGUMENTS...</i>] <i>(when symlinked)</i>


title: PARAMETERS
content:
<b>--list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a list of all applets that are compiled into the current <b>busybox</b> binary. This shows what functionality is available.<br><br><b>--install [-s] <i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs symlinks (or hardlinks, depending on configuration) for all compiled-in applets into the specified <i>PATH</i>. This allows you to invoke applets directly by their common names (e.g., <I>ls</I> instead of <I>busybox ls</I>). The <i>-s</i> option creates relative symlinks.<br><br><b>--uninstall [-s] <i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the symlinks (or hardlinks) previously created by the <I>--install</I> command from the specified <i>PATH</i>.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides general usage information for the <b>busybox</b> command itself, including a list of global options and available applets. To get help for a specific applet, use <I>busybox APPLET --help</I> or <I>APPLET --help</I> if symlinked.<br><br>


title: DESCRIPTION
content:
<i><b>BusyBox</b></i> is a remarkable software utility that consolidates a large number of common Unix utilities into a single, compact executable. It is often referred to as the "Swiss Army Knife" of embedded Linux due to its versatility and minimal resource footprint. Designed specifically for embedded systems, small Linux distributions, rescue disks, and bootloaders, <b>BusyBox</b> significantly reduces disk space and system memory requirements compared to installing individual GNU coreutils. It achieves this by functioning as a single binary that, upon execution, determines which internal utility (known as an "applet") to run based on how it was invoked (e.g., via a symlink named <I>ls</I> or <I>grep</I>). This design makes it an indispensable component for environments where every kilobyte counts, providing essential command-line functionality without the overhead of larger, more feature-rich counterparts.


title: CAVEATS
content:
While highly efficient, <b>BusyBox</b> applets often implement only a subset of the features and options found in their corresponding full-fledged GNU utilities. This means that some less common command-line flags or specific behaviors might be absent or differ, which can lead to unexpected results when porting scripts or expecting full POSIX compliance. Due to its minimalist design, error messages can sometimes be less detailed, and certain advanced functionalities requiring external libraries are typically not included.


title: APPLETS
content:
The fundamental design of <b>BusyBox</b> revolves around the concept of "applets." Instead of being separate executable files, utilities like <I>ls</I>, <I>cp</I>, <I>mkdir</I>, and even its shell (<I>ash</I>) are compiled as small functions within the single <b>busybox</b> binary. When the <b>busybox</b> executable is launched, it inspects the name used to invoke it (typically determined from <I>argv[0]</I>, the first command-line argument) to decide which internal applet function to execute. This monolithic structure significantly reduces disk space consumption by eliminating redundant executable headers and shared library dependencies.


title: COMPILE-TIME CONFIGURATION
content:
A key feature of <b>BusyBox</b> is its highly customizable nature, primarily achieved through compile-time configuration. Developers can use a configuration system similar to the Linux kernel's (<I>make menuconfig</I>) to select precisely which applets and their specific features to include in the final binary. This allows for tailor-made builds that contain only the necessary functionalities, further optimizing binary size and resource usage for specific embedded systems or minimal environments. This flexibility is crucial for adapting <b>BusyBox</b> to a vast array of hardware and software requirements.


title: HISTORY
content:
<b>BusyBox</b> was conceived and initially developed by <i>Bruce Perens</i> in 1996 with the ambitious goal of creating a complete, bootable Linux system on a single floppy disk. Its primary purpose was to provide a minimal yet functional set of UNIX tools for small, embedded environments. Over the years, its development continued under various maintainers, including <i>Erik Andersen</i>, and is currently led by <i>Denys Vlasenko</i>. It has evolved into a cornerstone for embedded Linux, widely used in devices like network routers, set-top boxes, and Android systems, as well as in minimalist container images and rescue disks, due to its unparalleled small size and versatility.


title: DESCRIPTION
content:
<i>buzzphrase</i> is a straightforward utility designed to generate random, often nonsensical, corporate or technical buzzphrases. It accomplishes this by selecting a random word from each of three predefined internal lists, concatenating them to form a complete phrase. The resulting output often satirizes the convoluted and meaningless jargon prevalent in certain professional environments, making it suitable for a <b><i>Dilbert</i> comic strip</b>, as its man page suggests.<br><br>Part of the <i>bsdgames</i> collection, <i>buzzphrase</i>'s primary purpose is humor and lighthearted amusement rather than practical business application. It provides a quick way to generate a chuckle or underscore the absurdity of modern business speak with a single command invocation.


title: CAVEATS
content:
The <i>buzzphrase</i> command offers very limited functionality with no options for customization of output or input word lists directly via command-line arguments. Its output is always a single line generated from its fixed internal word lists, which are typically located in a system-wide directory. Users cannot easily influence the types of phrases generated without inspecting or modifying the source word file directly, which is generally not recommended and requires appropriate system permissions.


title: WORD SOURCE
content:
The phrases generated by <i>buzzphrase</i> are constructed from word lists stored in a plain text file, typically found at <i>/usr/share/games/bsdgames/buzzphrase.words</i>. This file contains the three columns of words from which the command draws randomly. While not officially supported, advanced users could theoretically inspect or modify this file to alter the generated buzzphrases, though this requires appropriate system permissions and understanding of the file's format.


title: HUMOROUS INTENT
content:
The sole intent of the <i>buzzphrase</i> command is humor and satire. It serves as a lighthearted commentary on the often-abstract and sometimes meaningless jargon prevalent in corporate, technological, and bureaucratic environments. It's a prime example of command-line tools designed purely for entertainment rather than utility, offering a quick chuckle or a moment of reflection on language usage.


title: HISTORY
content:
<i>buzzphrase</i> originates from the classic <b>bsdgames</b> collection, a suite of humorous and recreational utilities commonly found on BSD Unix systems. It was authored by Larry D. Broussard. Its inclusion in these packages underscores a tradition of lighthearted, satirical command-line tools that provide entertainment alongside more serious system utilities, reflecting the playful side of early Unix development.


title: SYNOPSIS
content:
<b>bw</b> <i>&lt;command&gt;</i> [<i>options</i>]<br><b>bw</b> <i>&lt;command&gt;</i> <i>&lt;subcommand&gt;</i> [<i>options</i>]<br><br><i>Examples:</i><br><b>bw</b> <i>login</i><br><b>bw</b> <i>unlock</i> --raw<br><b>bw</b> <i>list</i> <i>items</i><br><b>bw</b> <i>get</i> <i>password</i> <i>"My Website"</i>


title: PARAMETERS
content:
<b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the main command or a specific subcommand.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the current version of the Bitwarden CLI.<br><br><b><i>--output &lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format for data (e.g., json, pretty, raw, csv).<br><br><b><i>--raw</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses additional formatting and only outputs the raw result, useful for scripting.<br><br><b><i>--response-type &lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Configures the response type when retrieving items, e.g., 'object' for full item details.<br><br><b><i>--email &lt;email&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <i>login</i> to specify the user's email address.<br><br><b><i>--password &lt;password&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <i>login</i> or <i>unlock</i> to provide the master password (use with caution in scripts).<br><br><b><i>--organization-id &lt;id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <i>config</i> to set the default organization context for commands.<br><br>


title: DESCRIPTION
content:
The <b>bw</b> command is the official command-line interface (CLI) for Bitwarden, a popular open-source password manager. It provides a robust text-based interface for interacting with your Bitwarden vault, allowing users to manage credentials, secure notes, credit cards, and identities directly from the terminal. This tool is particularly valuable for scripting, automation, and for users who prefer a non-graphical environment.<br><br>With <b>bw</b>, you can perform essential vault operations such as logging in, unlocking your vault, listing all stored items, retrieving specific usernames, passwords, or other fields, creating new entries, and syncing your local vault data with the Bitwarden cloud service or a self-hosted instance. It ensures secure access to sensitive information, making it an indispensable tool for developers, system administrators, and privacy-conscious individuals looking for efficient password management without reliance on graphical user interfaces.


title: CAVEATS
content:
Using <b>bw</b> in scripts requires careful handling of sensitive information, particularly the master password. Storing the master password directly in a script is generally discouraged due to security risks, as it could be exposed in shell history or logs. Environment variables or interactive prompts are safer alternatives.<br><br>The CLI requires a network connection to sync with the Bitwarden server. While it supports offline use after an initial sync and unlock, some functionalities might be limited without a connection. Ensure your local session is properly locked or logged out to prevent unauthorized access.


title: INSTALLATION
content:
The <b>bw</b> CLI can be installed in several ways, commonly via npm (Node Package Manager) with: <br><i>npm install -g @bitwarden/cli</i><br>It's also available through various package managers like Homebrew on macOS, or Snap on Linux, providing flexibility for different environments.


title: SESSION MANAGEMENT
content:
After successfully logging in and unlocking your vault with <b>bw</b>, a session is established, and your vault remains unlocked for a configurable period. It is crucial to manage your session by using <b>bw</b> <i>lock</i> or <b>bw</b> <i>logout</i> when you are finished to secure your vault, especially in shared or public environments. This prevents unauthorized access to your stored credentials.


title: HISTORY
content:
Bitwarden was initially launched in 2016 by Kyle Spearrin as a response to the need for a more secure and open-source password management solution. The development of the <b>bw</b> command-line interface quickly followed the core browser extension and desktop applications, recognizing the importance of automation and developer-friendly access to the vault. It has been actively maintained and improved, becoming an integral part of the Bitwarden ecosystem, offering advanced functionalities beyond the graphical interfaces, and supporting a wide range of operating systems.


title: SYNOPSIS
content:
<b>bwa</b> <I>command</I> [<I>options</I>] [<I>arguments</I>]<br><br>Common commands:<br><b>bwa index</b> [-a <I>algoType</I>] <I>reference.fa</I><br><b>bwa mem</b> [-t <I>nThreads</I>] [-k <I>minSeedLen</I>] [-M] ... <I>ref.fa</I> <I>reads.fq</I> [<I>reads2.fq</I>]


title: PARAMETERS
content:
<b>-t <num_threads></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of threads to use for alignment (BWA-MEM).<br><br><b>-k <min_seed_len></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Minimum seed length. Shorter seeds increase sensitivity but reduce speed (BWA-MEM).<br><br><b>-M</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Mark shorter split hits as secondary alignments (recommended for Picard compatibility).<br><br><b>-R <read_group_header></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a read group header to the SAM output. E.g., @RG\tID:foo\tSM:bar.<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assume interleaved input for paired-end reads (BWA-MEM).<br><br><b>-a <algorithm_type></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Algorithm for constructing the BWT index (e.g., 'is' for fast, 'bwtsw' for longer genomes). (bwa index)<br><br>


title: DESCRIPTION
content:
BWA (Burrows-Wheeler Aligner) is a widely used software package for aligning low-divergent sequences against a large reference genome, such as the human genome. It implements three different algorithms: BWA-backtrack (via <b>bwa aln</b>), BWA-SW (via <b>bwa bwasw</b>), and BWA-MEM (via <b>bwa mem</b>). BWA-MEM is the latest and generally recommended algorithm for aligning queries from 70bp to 1Mbp, especially for whole-genome sequencing (WGS) and exome sequencing data. It works efficiently with both Illumina and PacBio data. BWA-backtrack is designed for Illumina sequence reads up to 100bp, while BWA-SW is for longer reads (>=70bp) and has a more complex scoring system. The typical workflow involves an initial indexing step of the reference genome, followed by the alignment (mapping) of reads, and then often post-processing of the output (usually in SAM/BAM format). Its efficiency, accuracy, and versatility have made it a cornerstone tool in bioinformatics pipelines for next-generation sequencing data analysis.


title: CAVEATS
content:
While highly optimized, <I>bwa index</I> can be memory-intensive for very large reference genomes. Users should be aware that <I>bwa mem</I> is the generally recommended algorithm for modern sequencing data, while older algorithms like <I>bwa aln</I> and <I>bwa bwasw</I> are largely deprecated for general use but might still be relevant for specific historical datasets or very short reads (<70bp). The output in SAM/BAM format often requires post-processing with tools like <I>Samtools</I> for sorting, indexing, and converting to BAM for downstream analysis.


title: TYPICAL WORKFLOW
content:
A common BWA workflow involves two main steps: <br>1. <I>Indexing:</I> Creating a BWA index for the reference genome using <b>bwa index</b>.<br>2. <I>Alignment:</I> Aligning sequencing reads to the indexed reference genome using <b>bwa mem</b> (for paired-end or single-end reads), or <b>bwa aln</b> followed by <b>bwa samse</b>/<b>sampe</b> (for older workflows).


title: OUTPUT FORMAT
content:
BWA outputs alignments in the Sequence Alignment/Map (SAM) format by default, which can be piped to <I>samtools</I> to convert to its binary equivalent, BAM, for more efficient storage and subsequent processing.


title: HISTORY
content:
BWA was originally developed by Heng Li. Its initial release focused on <I>bwa aln</I> (BWA-backtrack), designed for short Illumina reads. As sequencing technology advanced, <I>bwa bwasw</I> was introduced to handle longer reads. The most significant development was the introduction of <I>bwa mem</I> in 2013, which quickly became the de facto standard for aligning next-generation sequencing reads due to its superior performance for reads ranging from 70bp to 1Mbp, making it suitable for a wider range of sequencing platforms and applications.


title: SYNOPSIS
content:
<br><b>byobu</b> [<i>options</i>] [<i>command</i>]<br><br><b>byobu</b> <i>subcommand</i> [<i>arguments</i>]<br><br>Common invocations: <b>byobu</b>, <b>byobu attach</b>, <b>byobu new-session</b>, <b>byobu kill-server</b>


title: PARAMETERS
content:
<b>attach [-t session-name]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attaches to an existing Byobu session. If no session name is provided, it attempts to attach to the most recent one.<br><br><b>new-session [-s session-name]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new Byobu session. A session name can be specified for easier identification.<br><br><b>kill-server</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Terminates all running Byobu sessions and the underlying Tmux/Screen server.<br><br><b>list-sessions</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all active Byobu sessions.<br><br><b>detach</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Detaches the current Byobu session without terminating it.<br><br><b>-R</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to reconnect to a Byobu session, or creates a new one if none exist.<br><br><b>-S <socket-path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the socket path for a Byobu session, useful for managing multiple instances or specific sessions.<br><br><b>-X</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses SSH forwarding prompts.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Byobu version information.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the Byobu help message.<br><br><b>[command]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a specified command within a new Byobu session and then exits the session upon completion.<br><br>


title: DESCRIPTION
content:
<i>Byobu</i> is an open source text-based window manager and terminal multiplexer. It provides an enhanced, user-friendly interface for either <i>GNU Screen</i> or <i>Tmux</i>, allowing users to manage multiple shell sessions from a single terminal window. <br><br>Its primary purpose is to simplify complex session management, especially for those working on remote servers or needing persistent sessions. When you detach from a <i>Byobu</i> session, all your running programs continue to execute in the background. You can reconnect later from the same or a different machine and resume exactly where you left off, even after network disconnections. <br><br><i>Byobu</i> offers a rich set of features, including easy-to-use function key shortcuts for creating new windows (tabs), navigating between them, splitting windows into panes, and detaching sessions. It also provides a customizable status line at the bottom of the terminal, displaying useful information like system load, battery status, network activity, and more. <br><br>It's an invaluable tool for system administrators, developers, and anyone who frequently works in a command-line environment, significantly improving productivity and workflow efficiency.


title: CAVEATS
content:
<i>Byobu</i> relies entirely on either <i>Tmux</i> or <i>GNU Screen</i> as its backend. While it simplifies their usage, fundamental understanding of how terminal multiplexers work can be beneficial for advanced troubleshooting or custom configurations. <br><br>Users should be aware that active sessions consume system resources. Large numbers of detached sessions or sessions running resource-intensive applications might impact performance. <br><br>Session naming and attachment can sometimes be tricky in multi-user environments if not managed carefully.


title: KEYBINDINGS & SHORTCUTS
content:
<i>Byobu</i> primarily uses function keys (F-keys) for common operations, simplifying interaction. Important shortcuts include:<br><b>F2</b>: Create a new window (tab)<br><b>F3</b> / <b>F4</b>: Navigate between windows<br><b>F5</b>: Reload the status line or redraw the screen<br><b>F6</b>: Detach the current session<br><b>F7</b>: Enter scrollback mode<br><b>F8</b>: Rename the current window<br><b>F9</b>: Open the Byobu configuration menu


title: STATUS LINE
content:
The dynamic status line at the bottom of the Byobu terminal provides a wealth of real-time system information, including CPU usage, memory, disk I/O, network activity, battery status, date/time, and more. Users can customize which indicators appear via the <b>F9</b> configuration menu.


title: BACKEND SELECTION
content:
Byobu can operate using either <i>Tmux</i> (default) or <i>GNU Screen</i> as its underlying backend. Users can switch between these by running the command <b>byobu-select-backend</b>, which will prompt for the preferred choice.


title: HISTORY
content:
<i>Byobu</i> was initially conceived and developed by Dustin Kirkland at Canonical Ltd. as a set of helpful enhancements and a wrapper for <i>GNU Screen</i>, aiming to provide a more user-friendly experience with sensible defaults for Ubuntu users. <br><br>Over time, as <i>Tmux</i> gained popularity and maturity, <i>Byobu</i> evolved to support <i>Tmux</i> as an alternative backend, eventually making it the default due to its modern architecture and capabilities. This transition offered users the best of both worlds: the simplicity of <i>Byobu</i>'s interface combined with the robust features of either <i>Screen</i> or <i>Tmux</i>. <br><br>Its development continues with a focus on improving usability, adding dynamic status line indicators, and integrating seamlessly into various Linux distributions.


title: PARAMETERS
content:
<b><b>-d, --duration=<I>SECONDS</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the recording duration in seconds.<br><br><b><b>-e, --delay=<I>SECONDS</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a delay before recording starts.<br><br><b><b>-x, --x=<I>PIXEL</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the X-coordinate of the top-left corner of the recording area.<br><br><b><b>-y, --y=<I>PIXEL</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the Y-coordinate of the top-left corner of the recording area.<br><br><b><b>-w, --width=<I>PIXEL</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the width of the recording area.<br><br><b><b>-h, --height=<I>PIXEL</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the height of the recording area.<br><br><b><b>-c, --cursor</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes the mouse cursor in the recording.<br><br><b><b>-a, --audio</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to record audio along with video. Requires appropriate audio backend setup.<br><br><b><b>-v, --verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output for more detailed information during recording.<br><br><b><b>-f, --fullscreen</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Captures the entire screen instead of a specific area.<br><br><b><b>-l, --loop</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces animated GIF to loop indefinitely (default for GIF).<br><br><b><b>-s, --stereo</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Records audio in stereo (if audio recording is enabled).<br><br><b><b>-r, --fps=<I>FPS</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the frames per second for the recording (default 10).<br><br><b><b>--display=<I>DISPLAY</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the X display to use for recording.<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug output for troubleshooting and development.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the byzanz version information and exits.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the help message and exits.<br><br>


title: DESCRIPTION
content:
<b>byzanz-record</b> is a command-line utility for capturing desktop sessions into animated files. It supports popular formats like GIF, WebM, and Ogg Theora, making it versatile for various uses such as creating short tutorials, demonstrations, or bug reports. Users can define the recording area by specifying X, Y coordinates, width, and height, or opt for full-screen capture. Key features include control over recording duration, an initial delay before capture begins, and setting the frames per second (FPS) for smoother animations. It also offers options to include the mouse cursor and, in some configurations, record audio. While simple to use, it provides enough flexibility for common screen recording needs. Its lightweight nature makes it a good choice for quick captures without heavy dependencies.


title: CAVEATS
content:
Audio recording functionality might depend on specific system configuration and available audio backends (e.g., PulseAudio or ALSA). Generated GIF files can be very large for longer recordings or higher frame rates; consider WebM or Ogg Theora for better compression. Performance can be impacted by the chosen recording area size and system resources.


title: OUTPUT FORMATS
content:
<b>byzanz-record</b> supports three primary output formats based on the file extension:<br><b>GIF:</b> Ideal for short, looping animations and easy sharing. Can result in large file sizes.<br><b>WebM (.webm):</b> Offers better compression and quality than GIF, suitable for longer recordings.<br><b>Ogg Theora (.ogv):</b> Another open video format providing good compression and quality.


title: SPECIFYING RECORDING AREA
content:
You can define the exact area to record using the <I>-x</I>, <I>-y</I>, <I>-w</I>, and <I>-h</I> options. For instance, <I>byzanz-record -x 100 -y 50 -w 640 -h 480 output.gif</I> records a 640x480 area starting at (100,50). Alternatively, use <I>-f</I> or <I>--fullscreen</I> to capture the entire desktop.


title: HISTORY
content:
<b>byzanz-record</b> originated as part of the GNOME project's efforts to provide simple, integrated desktop tools. Its development focused on offering a straightforward command-line interface for common screen recording tasks, particularly for creating animated GIFs. It has been a popular choice for quick screencasts due to its ease of use and minimal dependencies, establishing itself as a go-to for command-line based desktop capture.


title: PARAMETERS
content:
<b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force overwrite of output files (though output is stdout, this might affect error handling for existing files in some contexts).<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress non-essential output messages, warnings, and error messages.<br><br><b>-s, --small</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reduce memory usage for decompression. This trades off speed for memory, useful on systems with limited RAM.<br><br><b>-t, --test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Test the integrity of the specified compressed file(s). It decompresses the file and discards the output, reporting only if the file is valid.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version number of bzip2 (and thus bzcat) and exit.<br><br><b>-L, --license</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the bzip2 software license and exit.<br><br>


title: DESCRIPTION
content:
<b>bzcat</b> is a command-line utility in Linux (and Unix-like systems) used to decompress <i>bzip2</i> compressed files and output their content to standard output.<br><br>It is essentially the <b>cat</b> equivalent for <i>bzip2</i> files, meaning it does not modify the original compressed file but streams its decompressed content. This is particularly useful for viewing the content of a compressed file without decompressing it permanently, or for piping the decompressed output directly to another command for further processing (e.g., <b>bzcat file.bz2 | grep "pattern"</b>).<br><br>It functions as a wrapper around <b>bzip2 -dc</b> or <b>bzip2 --decompress --stdout</b>. Unlike <b>bunzip2</b> (or <b>bzip2 -d</b>), <b>bzcat</b> does not remove the input file after decompression. It handles multiple input files by decompressing and concatenating them in the order specified. If no files are given, or if a hyphen (<i>-</i>) is given as an argument, <b>bzcat</b> decompresses from standard input.


title: CAVEATS
content:
<b>Binary Data:</b> If the original file contains binary data, outputting it directly to a terminal might result in unreadable characters or disrupt terminal settings.<br><b>Compression Format:</b> <b>bzcat</b> only works with <i>bzip2</i> compressed files (files ending with <i>.bz2</i>). It cannot decompress files compressed with <i>gzip</i> (<i>.gz</i>) or <i>xz</i> (<i>.xz</i>).<br><b>Error Handling:</b> Errors within a compressed file will typically halt the decompression process.<br><b>Performance:</b> Decompression adds overhead, making <b>bzcat</b> slower than plain <b>cat</b> for uncompressed files.


title: USAGE WITH PIPES
content:
<b>bzcat</b> is frequently used as the initial command in a pipeline, sending its decompressed output directly to other commands for further processing, such as <b>grep</b>, <b>awk</b>, <b>sed</b>, <b>less</b>, or <b>more</b>. For example: <b>bzcat logfile.bz2 | grep "ERROR"</b>.


title: NO FILE MODIFICATION
content:
A key characteristic of <b>bzcat</b> is that it never modifies or deletes the original <i>.bz2</i> input file(s). This contrasts with <b>bunzip2</b> (or <b>bzip2 -d</b>), which by default replaces the compressed input file with its decompressed version.


title: HISTORY
content:
<b>bzip2</b>, the compression algorithm and utility suite that includes <b>bzcat</b>, was developed by Julian Seward. The first stable version, <i>bzip2 0.1</i>, was released in July 1996, with version <i>1.0</i> following in 2000.<br><br><b>bzcat</b> was introduced as a convenient wrapper, mirroring the functionality of <b>zcat</b> (from the <b>gzip</b> suite) and the general behavior of <b>cat</b>. Its purpose is to provide a consistent and easy-to-use interface for decompressing and viewing <i>bzip2</i> files without modifying the originals, fitting seamlessly into the Unix philosophy of chaining commands via pipes.


title: PARAMETERS
content:
<b>-l, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the byte number and differing byte values (in octal) for all differences found.<br><br><b>-s, --quiet, --silent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not print any output; only return an exit status indicating whether files differ.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output version information and exit.<br><br><b>FILE1</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the first <I>bzip2</I> compressed file to be compared.<br><br><b>FILE2</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the second <I>bzip2</I> compressed file to be compared.<br><br><b>OFFSET1</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional byte offset into <I>FILE1</I> to begin comparison.<br><br><b>OFFSET2</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional byte offset into <I>FILE2</I> to begin comparison, if <I>OFFSET1</I> is also specified.<br><br>


title: DESCRIPTION
content:
<I>bzcmp</I> is a shell script utility designed to compare the contents of two <I>bzip2</I> compressed files without requiring prior manual decompression. It acts as a convenient wrapper around the standard <I>cmp</I> command. When invoked, <I>bzcmp</I> decompresses the specified <I>.bz2</I> files on-the-fly and pipes their content to <I>cmp</I>, which then performs a byte-by-byte comparison. This allows users to quickly ascertain if two compressed archives are identical or to pinpoint the first byte where they differ, mirroring the behavior of <I>cmp</I> on uncompressed files. It is an essential tool for managing and verifying data stored in <I>bzip2</I> format.


title: CAVEATS
content:
<b><I>Caveats and Limitations:</I></b><br>Requires both the <I>bzip2</I> compressor/decompressor and the <I>cmp</I> utility to be installed and accessible in the system's PATH.<br>It exclusively handles files compressed with <I>bzip2</I> (typically ending with <I>.bz2</I>). For <I>gzip</I> files, use <I>gzcmp</I>.<br>The comparison is byte-by-byte, providing details on the first differing byte, unlike <I>diff</I> which compares line-by-line.<br>Performance may be slightly impacted by the on-the-fly decompression, though often faster than manual decompression.


title: EXIT STATUS
content:
<I>bzcmp</I> typically returns the exit status of the underlying <I>cmp</I> command:<br><b>0</b>: The files are identical.<br><b>1</b>: The files differ.<br><b>2</b>: An error occurred (e.g., file not found, permission denied, invalid arguments).


title: HISTORY
content:
<I>bzcmp</I> emerged as part of the <I>bzip2</I> utilities suite, developed to offer a streamlined approach for interacting with <I>bzip2</I> compressed files without the need for manual decompression. Its design mirrors that of <I>gzcmp</I>, which serves a similar purpose for <I>gzip</I> files, simplifying operations for users who frequently work with compressed data. The command's utility is directly linked to the widespread adoption and continuous evolution of the <I>bzip2</I> compression algorithm in Unix-like operating environments.


title: PARAMETERS
content:
<b><i>diff_options</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Any valid option supported by the underlying <b>diff(1)</b> command. These options are passed directly to <b>diff</b>.<br><br><b><i>PATH1</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The first file or directory to compare. If it's a file ending with <i>.bz2</i>, it will be decompressed automatically. If it's a directory, <b>bzdiff</b> compares files within it.<br><br><b><i>PATH2</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The second file or directory to compare. Similar decompression logic applies as for <i>PATH1</i>.<br><br>


title: DESCRIPTION
content:
<b>bzdiff</b> is a utility that allows users to compare the contents of two bzip2 compressed files, or a compressed file against an uncompressed file or directory. It functions as a convenient wrapper around the standard <b>diff(1)</b> command. When invoked, <b>bzdiff</b> transparently decompresses the specified <i>.bz2</i> files into temporary locations on the filesystem. Once uncompressed, these temporary files are then passed as arguments to <b>diff</b> for the actual comparison. All options and arguments provided to <b>bzdiff</b> are faithfully passed through to <b>diff</b>. This transparency is its core strength, enabling users to quickly view differences between versions of compressed data, such as archived logs, backups, or source code, without the manual overhead of decompressing and then deleting temporary files. It significantly streamlines workflows that involve frequently comparing compressed data.


title: CAVEATS
content:
<b>Temporary Files:</b> <b>bzdiff</b> creates temporary uncompressed files during operation, which might consume significant disk space for very large compressed inputs.<br><b>Performance:</b> Decompression adds overhead, potentially slowing down comparisons for extremely large files compared to comparing uncompressed files directly.<br><b>Error Handling:</b> If a specified file is not a valid bzip2 archive, <b>bzdiff</b> will typically report a decompression error (from <b>bzip2</b>) before <b>diff</b> can proceed.<br><b>Dependency:</b> Requires the <b>bzip2</b> compression suite to be installed and its executables (e.g., <b>bzip2</b>, <b>bunzip2</b>) to be available in the system's <b>PATH</b>.


title: USAGE EXAMPLES
content:
To compare two compressed files:<br><b>bzdiff</b> <i>file1.log.bz2</i> <i>file2.log.bz2</i><br><br>To compare a compressed file with an uncompressed version, showing side-by-side differences:<br><b>bzdiff</b> <i>-y</i> <i>old_config.bz2</i> <i>new_config</i><br><br>To ignore whitespace changes during comparison:<br><b>bzdiff</b> <i>-w</i> <i>archive_v1.tar.bz2</i> <i>archive_v2.tar.bz2</i>


title: HISTORY
content:
<b>bzdiff</b> is typically distributed as part of the <b>bzip2</b> compression suite, originally developed by Julian Seward. Its primary purpose is to provide a convenient wrapper for <b>diff</b> that handles bzip2 compressed files transparently, similar to how <b>zdiff</b> works for <b>gzip</b> files. It emerged as a practical tool for system administrators and developers working with compressed data, eliminating the need for manual decompression steps prior to comparison.


title: PARAMETERS
content:
<b><i>grep_options</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>bzegrep</i> typically accepts and passes through most options available to the standard <i>grep</i> command. Common examples include:<br><br><b><b>-i</b>, <b>--ignore-case</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore case distinctions in patterns and data.<br><br><b><b>-v</b>, <b>--invert-match</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Invert the sense of matching, to select non-matching lines.<br><br><b><b>-r</b>, <b>-R</b>, <b>--recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search directories recursively. For compressed files, this applies to files within specified directories.<br><br><b><b>-l</b>, <b>--files-with-matches</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print only the names of files containing matches, one per file.<br><br><b><b>-n</b>, <b>--line-number</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prefix each line of output with the 1-based line number within its respective file.<br><br><b><b>-c</b>, <b>--count</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print only a count of matching lines per file.<br><br><b><b>-A NUM</b>, <b>--after-context=NUM</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print <b>NUM</b> lines of trailing context after matching lines.<br><br><b><b>-B NUM</b>, <b>--before-context=NUM</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print <b>NUM</b> lines of leading context before matching lines.<br><br><b><b>-C NUM</b>, <b>--context=NUM</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print <b>NUM</b> lines of output context (leading and trailing) around matching lines.<br><br><b><b>-E</b>, <b>--extended-regexp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret <i>PATTERN</i> as an extended regular expression (ERE). This is often the default behavior for <i>bzegrep</i> as it typically calls <i>egrep</i> or <i>grep -E</i> internally.<br><br><b><b>-F</b>, <b>--fixed-strings</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret <i>PATTERN</i> as a list of fixed strings, separated by newlines, any of which is to be matched.<br><br>


title: DESCRIPTION
content:
<i>bzegrep</i> is a utility designed to search for patterns within files compressed with either <i>gzip</i> (.gz extension) or <i>bzip2</i> (.bz2 extension) without explicit prior decompression. It typically functions as a shell script wrapper that detects the compression type and then passes the file content to the underlying <i>grep</i> command, usually via <i>zgrep</i> for gzipped files and <i>bzgrep</i> for bzipped files.<br><br>This provides a seamless way to search through compressed logs, archives, and other data files, eliminating the manual steps of decompressing and then searching. It supports most, if not all, options available to the standard <i>grep</i> command, allowing for versatile pattern matching (e.g., regular expressions, fixed strings), control over output format (e.g., line numbers, context lines), and recursive directory searching, similar to how <i>grep</i> operates on uncompressed files.


title: CAVEATS
content:
<ul><li><b>Performance Overhead</b>: Searching compressed files requires on-the-fly decompression, which can be slower and consume more CPU/memory than searching uncompressed files, especially for very large files.</li><li><b>Non-Standard Command</b>: <i>bzegrep</i> itself is not a universally standardized command across all Linux distributions. While its functionality is common, specific implementations might vary, or it might simply be a symlink or shell script combining <i>zgrep</i> and <i>bzgrep</i>. The more standard commands are <i>zgrep</i> and <i>bzgrep</i>.</li><li><b>Error Handling</b>: May not provide verbose error messages for corrupted or malformed compressed files; it might simply fail or produce incomplete output.</li><li><b>Dependency</b>: Relies on <i>grep</i>, <i>gzip</i>, and <i>bzip2</i> (or their respective decompression utilities) being installed and accessible in the system's PATH.</li></ul>


title: USAGE WITH PIPES
content:
Although primarily used with files, <i>bzegrep</i> (or its underlying components like <i>zgrep</i>/<i>bzgrep</i> via piping <i>zcat</i>/<i>bzcat</i>) can often operate on compressed data piped to its standard input. For example, <i><br><b>zcat file.gz | bzegrep PATTERN</b><br></i> or <i><b>bzcat file.bz2 | bzegrep PATTERN</b></i>. Some implementations of <i>bzegrep</i> might even attempt to auto-detect the compression type from piped input, though this is less common than with file arguments.


title: UNDERLYING MECHANISM
content:
The typical mechanism for <i>bzegrep</i> involves spawning a decompression command (e.g., <i>gunzip -c</i> or <i>bunzip2 -c</i>) for each compressed file. The decompressed content is then piped directly to the standard <i>grep</i> command. This 'on-the-fly' decompression ensures that the original compressed files remain untouched and avoids the need for temporary uncompressed files, saving disk I/O and space.


title: HISTORY
content:
<i>bzegrep</i> does not have a distinct, long-standing historical development as a standalone project like <i>grep</i> itself. Instead, its existence typically stems from the practical need to search across different common compressed file formats seamlessly. While <i>zgrep</i> (for <i>gzip</i> files) and <i>bzgrep</i> (for <i>bzip2</i> files) emerged as part of their respective compression utility packages in the early to late 1990s, <i>bzegrep</i> often appeared as a convenient wrapper or a simple shell script. Its development reflects a common user requirement in Unix-like systems to transparently interact with compressed data, especially logs and archives, which became prevalent for disk space efficiency. It exemplifies the Unix philosophy of combining smaller, specialized tools (<i>grep</i>, <i>gzip</i>, <i>bzip2</i>) to achieve a more complex and user-friendly function.


title: PARAMETERS
content:
<b><I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to one or more executable files to be compressed. For each specified file, <i>bzexe</i> will replace the original executable with a new self-extracting shell script.<br><br>


title: DESCRIPTION
content:
<i>bzexe</i> is a utility that compresses executable files using the <i>bzip2</i> algorithm and replaces them with self-extracting shell scripts. When one of these new scripts is executed, it first decompresses the original executable into a temporary directory (typically <i>/tmp</i>), then runs it, and finally removes the temporary file. This mechanism allows rarely used or large executables to consume less disk space on the filesystem. It's particularly useful in environments where disk space is at a premium, as it offers a trade-off between disk usage and execution speed, as the decompression process introduces a slight delay before the program starts. It acts as a wrapper, making the compression and decompression process transparent to the user.


title: CAVEATS
content:
Using <i>bzexe</i> comes with several important considerations:<br><b>Performance Overhead:</b> Each execution of a compressed program involves decompression, introducing a noticeable delay before the program starts, which can be significant for frequently used tools.<br><b>Temporary Space Requirement:</b> Requires available disk space in a temporary directory (e.g., <i>/tmp</i>) for the decompressed executable to reside during its execution.<br><b>Permission Loss:</b> The setuid/setgid bits and other special permissions of the original executable are <b>not</b> preserved for the temporary, decompressed file. This makes <i>bzexe</i> unsuitable for executables that rely on these special permissions for their functionality or security.<br><b>Debugging Difficulty:</b> Debugging a program compressed with <i>bzexe</i> can be challenging as the actual executable is ephemeral and resides in a temporary location.<br><b>Signal Handling Interference:</b> The wrapper script that handles decompression might interfere with complex signal handling within the original executable, leading to unexpected behavior.


title: HOW IT WORKS INTERNALLY
content:
When you apply <i>bzexe</i> to an executable, it transforms the original binary into a shell script. This script contains the <i>bzip2</i>-compressed form of the original executable embedded within itself. Upon execution, the script's first action is to decompress this embedded binary data to a unique temporary file, typically in <i>/tmp</i>. It then sets the necessary execute permissions on this temporary file and invokes it. After the program finishes execution, the temporary decompressed file is automatically removed, ensuring clean temporary space usage. This entire process is designed to be transparent to the user, who simply runs the command as usual.


title: TYPICAL USE CASES AND MODERN RELEVANCE
content:
<i>bzexe</i> is primarily intended for system administrators or users who need to save disk space for very large, rarely used executables, or in environments with very limited storage, such as embedded systems or older hardware. For frequently accessed programs, the performance overhead introduced by decompression on every run makes it less desirable. With the declining cost and increasing availability of disk space on modern systems, the practical necessity for tools like <i>bzexe</i> has diminished for general desktop or server use, but it remains a viable option for specialized low-resource scenarios.


title: HISTORY
content:
<i>bzexe</i> is an integral part of the <i>bzip2</i> compression suite, which was developed by Julian Seward, primarily gaining prominence in the late 1990s and early 2000s for its excellent compression ratio using the Burrows-Wheeler transform. <i>bzexe</i> itself was conceived as a direct counterpart to <i>gzexe</i> (from the <i>gzip</i> package), offering a similar capability to transparently execute compressed binaries, but leveraging <i>bzip2</i>'s superior compression. Its development was driven by the need to optimize disk usage on systems where storage was a more critical resource than CPU cycles, although its niche usage has persisted for specific scenarios like large, infrequently accessed utilities.


title: PARAMETERS
content:
<b><i>PATTERN</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The fixed string to search for within the files.<br><br><b><i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The <i>bzip2</i> compressed file(s) to search within. If no files are specified, <i>bzfgrep</i> reads from standard input.<br><br><b><b>-i, --ignore-case</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore case distinctions in the <i>PATTERN</i> and input data.<br><br><b><b>-v, --invert-match</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Select non-matching lines; print lines that do not contain the <i>PATTERN</i>.<br><br><b><b>-c, --count</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress normal output; instead print a count of matching lines for each input file.<br><br><b><b>-n, --line-number</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prefix each line of output with the 0-based line number within its input file.<br><br><b><b>-l, --files-with-matches</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress normal output; instead print the name of each input file from which output would normally have been produced.<br><br><b><b>-q, --quiet, --silent</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress all normal output. Exit immediately with zero status if any match is found, and non-zero otherwise.<br><br><b><b>-h, --no-filename</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress the prefixing of file names on output when multiple files are searched.<br><br><b><b>-H, --with-filename</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the file name for each match. This is the default when multiple files are searched.<br><br><b><b>-r, --recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read all files under each directory, recursively. This option is typically handled by <i>bzgrep</i> itself or the underlying <i>grep</i> command.<br><br>


title: DESCRIPTION
content:
<i>bzfgrep</i> is not a standalone command but a common conceptual shorthand or an alias for <b>bzgrep -F</b>. It combines the capabilities of <b>bzgrep</b>, which allows searching within <i>bzip2</i> compressed files, with <b>fgrep</b> (equivalent to <i>grep -F</i>), which performs searches for <i>fixed strings</i> rather than regular expressions. This means <i>bzfgrep</i> is designed for finding exact literal text patterns inside files compressed with <i>bzip2</i>, without requiring manual decompression.<br><br>Under the hood, <b>bzfgrep</b> (or <b>bzgrep -F</b>) typically operates by piping the decompressed output of a <i>.bz2</i> file to <i>grep -F</i>. For instance, it might execute <b>bzip2 -dc <i>filename.bz2</i> | grep -F "<i>pattern</i>"</b>. This method is highly convenient for analyzing large compressed log files, archives, or data backups, where decompressing the entire file first would be time-consuming and consume significant disk space. It ensures that the search is fast and precise for literal text, avoiding the overhead of regular expression matching.


title: CAVEATS
content:
<ul><li><i>bzfgrep</i> is not a standard, standalone executable. It's almost always an alias or a wrapper script (like <b>bzgrep -F</b>), meaning its availability and exact behavior can vary depending on the system's configuration.</li><li>Performance for very large numbers of <i>.bz2</i> files or extremely large individual <i>.bz2</i> files might still be slower than searching uncompressed data, as decompression happens on the fly.</li><li>Requires both <i>bzip2</i> and <i>grep</i> utilities to be installed and available in the system's <i>PATH</i>.</li><li>Corrupted <i>.bz2</i> files can lead to decompression errors, preventing successful searches.</li></ul>


title: INTERNAL MECHANISM
content:
<i>bzfgrep</i> typically functions by piping the output of <b>bzip2 -dc <i>FILE</i></b> (decompressing the file to standard output) directly into <b>grep -F <i>PATTERN</i></b>. This allows the search to proceed without creating a temporary uncompressed file on disk, making it highly memory-efficient for large files.


title: USAGE EXAMPLE
content:
To find all lines containing the literal string "<i>ERROR_CODE_404</i>" in a compressed log file named <i>access.log.2023-10-26.bz2</i>, you would use:<br><b>bzfgrep "ERROR_CODE_404" access.log.2023-10-26.bz2</b>


title: HISTORY
content:
The evolution of <b>bzfgrep</b> is tied to the development of its constituent parts. <b>grep</b>, standing for "<i>global regular expression print</i>", was one of the earliest and most fundamental Unix utilities, created by Ken Thompson in the early 1970s. Its <i>-F</i> (<i>fixed strings</i>) option, also known as <b>fgrep</b> (<i>fixed grep</i>), provided a way to search for literal strings quickly without the overhead of regular expression parsing. Later, as data compression became common, <b>bzip2</b> (developed by Julian Seward in the late 1990s) emerged as a popular compression algorithm known for its efficiency. To bridge the gap between compressed data and search utilities, <b>bzgrep</b> was created as part of the <i>bzip2</i> package. It acts as a wrapper, allowing <i>grep</i>-like operations on <i>.bz2</i> files. While <b>bzfgrep</b> is not a distinct command in itself, it represents the logical combination of <b>bzgrep</b> and <b>fgrep</b>'s functionality, serving as a convenient conceptual tool or a simple alias for <b>bzgrep -F</b> to provide fast, literal string searches within <i>bzip2</i> archives.


title: SYNOPSIS
content:
<b>bzgrep</b> [<i>OPTIONS</i>] <i>PATTERN</i> [<i>FILE</i>...]<br><br><i>Explanation</i>:<br><b>OPTIONS</b>: Any valid <b>grep</b> options that control the search behavior.<br><b>PATTERN</b>: The regular expression or fixed string to search for.<br><b>FILE</b>...: One or more <i>bzip2</i> compressed files (or standard uncompressed files) to search. If no files are specified, <b>bzgrep</b> reads from standard input.


title: PARAMETERS
content:
<b><b>-i</b>, <b>--ignore-case</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore case distinctions in both the <i>PATTERN</i> and the input files.<br><br><b><b>-v</b>, <b>--invert-match</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Invert the sense of matching, to select non-matching lines.<br><br><b><b>-r</b>, <b>--recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively search subdirectories listed.<br><br><b><b>-l</b>, <b>--files-with-matches</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress normal output; instead print the name of each input file from which output would normally have been printed.<br><br><b><b>-n</b>, <b>--line-number</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prefix each line of output with the 1-based line number within its input file.<br><br><b><b>-c</b>, <b>--count</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress normal output; instead print a count of matching lines for each input file.<br><br><b><b>-E</b>, <b>--extended-regexp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret <i>PATTERN</i> as an extended regular expression (ERE).<br><br><b><b>-F</b>, <b>--fixed-strings</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret <i>PATTERN</i> as a list of fixed strings, separated by newlines, any of which is to be matched.<br><br><b><b>-A NUM</b>, <b>--after-context=NUM</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print <i>NUM</i> lines of trailing context after matching lines.<br><br><b><b>-B NUM</b>, <b>--before-context=NUM</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print <i>NUM</i> lines of leading context before matching lines.<br><br><b><b>-C NUM</b>, <b>--context=NUM</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print <i>NUM</i> lines of output context around matching lines.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br>


title: DESCRIPTION
content:
<b>bzgrep</b> is a powerful command-line utility that allows users to search for patterns within files compressed with <i>bzip2</i>. It functions similarly to the standard <b>grep</b> command, but with the added convenience of automatically decompressing <i>.bz2</i> files on the fly before searching. This eliminates the need for users to manually decompress files using <b>bzip2 -d</b> or <b>bunzip2</b> before running a <b>grep</b> search.<br><br>Essentially, <b>bzgrep</b> acts as a wrapper script around <b>grep</b> and <b>bzip2</b>. When invoked, it pipes the decompressed output of the <i>bzip2</i> files directly into <b>grep</b>, allowing all standard <b>grep</b> options and functionalities to be utilized. This makes it an indispensable tool for system administrators and developers working with compressed log files, archives, or any data stored in the <i>bzip2</i> format, saving time and simplifying workflows.


title: CAVEATS
content:
<i>Performance</i>: For very large <i>bzip2</i> files, <b>bzgrep</b> might be slower than decompressing the file once and then running <b>grep</b>, as it decompresses the file for every invocation.<br><i>Dependencies</i>: It relies on both <b>bzip2</b> and <b>grep</b> being installed and accessible in the system's PATH.<br><i>Error Handling</i>: As a wrapper script, its error messages might sometimes be less direct than those from the underlying <b>grep</b> or <b>bzip2</b> commands.


title: HOW IT WORKS INTERNALLY
content:
<b>bzgrep</b> is typically a shell script that orchestrates the decompression and searching process. It usually works by piping the output of <b>bzip2 -dc</b> (decompress to standard output) into <b>grep</b>. For example, a command like <code>bzgrep PATTERN file.bz2</code> might internally execute something similar to <code>bzip2 -dc file.bz2 | grep PATTERN</code>. This allows it to pass all <b>grep</b>-specific options directly to the <b>grep</b> command, maintaining its full functionality.


title: HISTORY
content:
<b>bzgrep</b> is part of the <i>bzip2</i> suite of utilities, which were developed by Julian Seward. The <i>bzip2</i> compression algorithm itself was created in 1996, and the associated utilities like <b>bzgrep</b> were developed to provide seamless interaction with <i>bzip2</i> compressed files, mirroring the functionality provided by <b>zgrep</b> for <i>gzip</i> compressed files. Its development focused on providing convenience for users working with <i>bzip2</i> data, integrating directly into common command-line workflows.


title: SYNOPSIS
content:
<b>bzip2</b> [ <i>-cdfkqstvzVL</i> ] [ <i>--best</i> ] [ <i>--fast</i> ] [ <i>-num</i> ] [ <i>filename ...</i> ]<br><b>bunzip2</b> [ <i>-fkqvVL</i> ] [ <i>filename ...</i> ]<br><b>bzcat</b> [ <i>-s</i> ] [ <i>filename ...</i> ]


title: PARAMETERS
content:
<b><b>-c</b>, <b>--stdout</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Compress or decompress to standard output.</i> This option keeps the original file intact.<br><br><b><b>-d</b>, <b>--decompress</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Force decompression.</i> <b>bunzip2</b> is an alias for <b>bzip2 -d</b>.<br><br><b><b>-k</b>, <b>--keep</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Keep original (input) files.</i> By default, <b>bzip2</b> deletes the original file after compression or decompression.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Force overwrite of output files.</i> This option prevents <b>bzip2</b> from prompting before overwriting existing files.<br><br><b><b>-s</b>, <b>--small</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Reduce memory usage for decompression.</i> Useful on systems with limited RAM, but makes decompression slower.<br><br><b><b>-t</b>, <b>--test</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Test integrity of compressed files.</i> Checks if the compressed file is intact.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Be verbose during operation.</i> Displays compression ratio and other information.<br><br><b><b>-z</b>, <b>--compress</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Force compression.</i> This is the default behavior if no other operation is specified.<br><br><b><b>-num</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Set the block size to 100k multiplied by 'num'.</i> 'num' ranges from 1 to 9. Higher numbers (e.g., <b>-9</b>, <b>--best</b>) give better compression but use more memory and time. <b>-1</b> (<b>--fast</b>) gives faster compression.<br><br><b><b>--best</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Alias for <b>-9</b>.</i> Offers the highest compression ratio (and slowest speed/most memory).<br><br><b><b>--fast</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Alias for <b>-1</b>.</i> Offers the fastest compression speed (and lowest compression ratio).<br><br><b><b>-L</b>, <b>--license</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display license information.</i><br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display version information.</i><br><br>


title: DESCRIPTION
content:
<b>bzip2</b> is a <i>powerful command-line utility</i> for <b>compressing and decompressing files</b> in Linux and Unix-like systems. It utilizes the <i>Burrows-Wheeler block sorting text compression algorithm</i>, coupled with <i>run-length encoding</i> and <i>Huffman coding</i>, to achieve typically <b>better compression ratios</b> than older methods like <b>gzip</b>. While it often produces smaller archives, <b>bzip2</b> is generally <b>slower</b> for both compression and decompression, and requires <b>more memory</b>, especially during compression. It compresses single files and, by default, <b>replaces the original file</b> with the compressed version, appending the <i>.bz2</i> extension. Conversely, decompression removes the <i>.bz2</i> extension and restores the original file. Unlike archiving tools like <b>tar</b>, <b>bzip2</b> does not combine multiple files into a single archive; it operates on individual files. For archiving directories or multiple files, it is commonly used in conjunction with <b>tar</b>, creating files like <i>archive.tar.bz2</i>. Its strength lies in maximizing compression for single large files, making it suitable for distributing large software packages or backups where disk space is a premium.


title: CAVEATS
content:
<ul><li><b>Not an archiver:</b> <i><b>bzip2</b> only compresses single files.</i> It cannot combine multiple files or directories into one archive directly. For that, it must be used in conjunction with <b>tar</b>.</li><li><b>Slower than <b>gzip</b>:</b> <i>Compression and decompression are generally slower</i> compared to <b>gzip</b>, especially on systems with less memory.</li><li><b>Memory usage:</b> <i>Higher memory consumption</i> during compression than <b>gzip</b>, especially for larger block sizes (e.g., <b>-9</b>). Decompression memory usage is lower but can be reduced further with <b>-s</b>.</li><li><b>Corruption:</b> If a <b>bzip2</b> compressed file is corrupted, <i>data recovery might be more difficult</i> than with <b>gzip</b> due to the block-sorting algorithm.</li></ul>


title: USAGE WITH <B>TAR</B>
content:
While <b>bzip2</b> compresses single files, it's commonly used with the <b>tar</b> command to create compressed archives of multiple files or entire directories. For example, <b>tar -jcvf archive.tar.bz2 /path/to/directory</b> compresses and archives a directory into a single <i>.tar.bz2</i> file. To extract, <b>tar -jxvf archive.tar.bz2</b>.


title: INPUT/OUTPUT BEHAVIOR
content:
By default, <b>bzip2</b> operates as a filter that <i>replaces the input file with the compressed or decompressed output</i>. For example, <b>bzip2 filename.txt</b> creates <i>filename.txt.bz2</i> and deletes <i>filename.txt</i>. To keep the original, use the <b>-k</b> (<i>--keep</i>) option. If you need to pipe the output, use <b>-c</b> (<i>--stdout</i>).


title: HISTORY
content:
<b>bzip2</b> was developed by <i>Julian Seward</i> and first released in 1996. It was designed to improve upon the compression achieved by <b>gzip</b> by implementing the <i>Burrows-Wheeler Transform (BWT)</i>, a block-sorting algorithm, combined with a <i>move-to-front transform</i> and <i>Huffman coding</i>. The BWT rearranges the input data into blocks so that identical or similar sequences are grouped together, making them easier to compress with subsequent algorithms. This innovative approach allowed <b>bzip2</b> to often achieve <b>superior compression ratios</b>, leading to its widespread adoption, especially for distributing software and large data files where disk space was a primary concern. Its development marked a significant step forward in general-purpose lossless data compression.


title: SEE ALSO
content:
<b>gzip(1)</b>: A widely used compression utility, generally faster but with slightly lower compression ratios., <b>bunzip2(1)</b>: A symlink to <b>bzip2</b>, used for decompression., <b>bzcat(1)</b>: A symlink to <b>bzip2 -c</b>, used to decompress files to standard output without removing the original., <b>tar(1)</b>: A utility for creating, extracting, and managing archive files. Often used with <b>bzip2</b> (e.g., <b>tar -jcvf archive.tar.bz2 directory</b>)., <b>xz(1)</b>: Another modern compression utility, often achieving even better compression ratios than <b>bzip2</b>, using the LZMA algorithm.


title: SYNOPSIS
content:
<b>bzip3</b> [<i>OPTIONS</i>] [<i>FILES...</i>]<br><b>bzip3</b> -d [<i>OPTIONS</i>] [<i>FILES...</i>]


title: PARAMETERS
content:
<b>-z, --compress</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces compression. This is the default action if no other action is specified.<br><br><b>-d, --decompress</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Decompresses the specified files. Recognizes files with the <i>.bz3</i> extension.<br><br><b>-t, --test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Tests the integrity of the specified compressed files without decompressing them.<br><br><b>-k, --keep</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keeps (does not delete) input files after compression or decompression. By default, input files are removed.<br><br><b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces overwrite of existing output files. Also forces compression/decompression of files that do not have the standard suffix.<br><br><b>-c, --stdout</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compresses or decompresses to standard output. No files are deleted. Useful for piping with other commands.<br><br><b>-o <i>&lt;file&gt;</i>, --output <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output file name. Can only be used when processing a single input file.<br><br><b>-j <i>&lt;num&gt;</i>, --threads <i>&lt;num&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of parallel threads to use for compression/decompression. A value of 0 typically uses all available logical cores.<br><br><b>-l <i>&lt;level&gt;</i>, --level <i>&lt;level&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the compression level, from 0 (fastest, less compression) to 9 (slowest, best compression). Default is often 6 or 7.<br><br><b>--fast</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Equivalent to <i>-l1</i>, prioritizing speed over compression ratio.<br><br><b>--best</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Equivalent to <i>-l9</i>, prioritizing the best possible compression ratio.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases verbosity, displaying more information about the compression/decompression process.<br><br><b>-S <i>&lt;suffix&gt;</i>, --suffix <i>&lt;suffix&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the suffix for compressed files. The default suffix is <i>.bz3</i>.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br>


title: DESCRIPTION
content:
<i>bzip3</i> is a modern file compression utility designed to surpass the performance of its predecessor, <i>bzip2</i>, and often compete with or exceed <i>xz</i> in terms of speed while maintaining excellent compression ratios. Unlike <i>bzip2</i> which uses the Burrows-Wheeler Transform, <i>bzip3</i> typically leverages more advanced algorithms like LZMA2, often combined with a fast hash table for block processing. It is built with multi-threading capabilities from the ground up, allowing it to significantly speed up compression and decompression tasks on multi-core processors. The command can be used to compress files, decompress <i>.bz3</i> archives, test the integrity of compressed files, and stream data to or from standard output. By default, <i>bzip3</i> replaces the original file with the compressed or decompressed version, but this behavior can be altered with options.


title: CAVEATS
content:
<i>bzip3</i> is a relatively new compression utility compared to well-established tools like <i>gzip</i> or <i>bzip2</i>. As such, it may not be pre-installed on all Linux distributions by default, and its compression format (<i>.bz3</i>) is not as widely supported by other archiving tools or systems. While it offers excellent performance, its adoption might not be as widespread as older formats. Always ensure the recipient of <i>.bz3</i> files has <i>bzip3</i> installed to decompress them.


title: DEFAULT BEHAVIOR
content:
When compressing, <i>bzip3</i> creates a new file with a <i>.bz3</i> suffix and by default deletes the original input file. When decompressing, it creates the original file and deletes the <i>.bz3</i> archive. This behavior can be overridden using the <i>-k</i> (<i>--keep</i>) option.


title: COMPRESSION RATIO AND SPEED
content:
<i>bzip3</i> is designed to offer a superior balance between compression ratio and speed compared to <i>bzip2</i>, often achieving better compression than <i>gzip</i> and competitive ratios with <i>xz</i>, but with significantly faster execution times, especially on systems with multiple CPU cores, due to its multi-threaded architecture.


title: HISTORY
content:
<i>bzip3</i> emerged as a modern initiative to address the limitations of older compression algorithms, particularly <i>bzip2</i>, which is single-threaded and can be slow. Developed to leverage contemporary multi-core processor architectures, <i>bzip3</i> utilizes advanced compression algorithms, notably LZMA2, to achieve higher compression ratios and significantly faster speeds through parallel processing. Its development focuses on providing a powerful, efficient, and user-friendly alternative for file compression in the Linux ecosystem, aiming to become the go-to utility for general-purpose archiving where speed and ratio are critical.


title: PARAMETERS
content:
<b><i>file</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to <I>bzip2</I> compressed files (typically ending in <I>.bz2</I>). These files are decompressed on the fly and displayed.<br><br><b>[<i>less_options</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional arguments that are passed directly to the underlying <I>less</I> command. This allows users to customize the pager's behavior, such as setting line numbers (<I>-N</I>), initiating searches (<I>+/pattern</I>), or controlling prompting.<br><br>


title: DESCRIPTION
content:
<b>bzless</b> is a convenient shell script that enables the <I>less</I> pager to display the contents of <I>bzip2</I> compressed text files (.bz2 files) without requiring explicit decompression. <br><br>It functions by piping the output of <I>bzcat</I> (or <I>bzip2 -dc</I>), which decompresses the file to standard output, directly into the <I>less</I> command. This allows users to navigate, search, and view large compressed logs or data files as if they were uncompressed. <br><br>All standard <I>less</I> commands and functionalities, such as searching for patterns, scrolling, and marking positions, are available. <br><br>It's part of the <I>bzip2</I> package and serves as a vital tool for system administrators and developers working with compressed data.


title: CAVEATS
content:
<b>bzless</b> relies on the presence of both the <I>bzip2</I> (or <I>bzcat</I>) utility and the <I>less</I> pager on the system. If the input file is not a valid <I>bzip2</I> archive, <I>bzip2</I> will report an error, and <I>less</I> will display an empty or error output. While efficient, decompressing large files on the fly might introduce a slight delay compared to viewing uncompressed files.


title: AUTOMATIC HANDLING WITH LESSOPEN
content:
While <I>bzless</I> is a standalone command, many systems configure the <I>LESSOPEN</I> environment variable to automatically preprocess compressed files when <I>less</I> is invoked directly. For example, setting <I>LESSOPEN="|/usr/bin/lesspipe.sh %s"</I> or similar will allow <I>less filename.bz2</I> to work without explicitly using <I>bzless</I>, as the <I>lesspipe</I> script will detect and decompress the file type.


title: HISTORY
content:
<b>bzless</b> was introduced as a utility script accompanying the <I>bzip2</I> compression program, which was developed by Julian Seward. The first stable version of <I>bzip2</I> (version 0.9.0) was released in 1996. <br><br>The inclusion of convenience scripts like <I>bzless</I> (and <I>bzcat</I>, <I>bzgrep</I>) has been a standard practice with compression suites to enhance usability and integrate seamlessly with common Unix tools from early on.


title: SYNOPSIS
content:
<b>bzmore</b> [<i>more options</i>] [<i>file ...</i>]<br><br><i>file ...</i>: One or more paths to <i>bzip2</i> compressed files to view.<br><i>more options</i>: Any options understood by the <b>more(1)</b> pager are passed through directly to it.


title: PARAMETERS
content:
<b>file ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more paths to the <b>bzip2</b> compressed files to be viewed. If no files are given, <b>bzmore</b> reads from standard input, assuming it contains <b>bzip2</b> compressed data.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passed to <b>more(1)</b>: Squeeze multiple blank lines into a single blank line.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passed to <b>more(1)</b>: Display 'Press space to continue, 'q' to quit.' and print '[buffer empty]' when attempting to scroll past the end of the file.<br><br><b>-<number></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passed to <b>more(1)</b>: Display the specified number of lines per screen instead of the default. For example, <b>-20</b> sets 20 lines per screen.<br><br><b>-p <command></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passed to <b>more(1)</b>: Do not scroll, but instead clear the screen and then display the next page. This option also allows specifying a filter command, though less commonly used with <b>bzmore</b>.<br><br>


title: DESCRIPTION
content:
<i>bzmore</i> is a convenient shell script that allows users to view the content of <i>bzip2</i>-compressed text files without explicitly decompressing them first. It functions as a wrapper around the <i>bzip2</i> (or <i>bunzip2</i>) decompression utility and the <i>more</i> pager.<br><br>When <i>bzmore</i> is invoked with a filename, it first uses <b>bzip2 -dc</b> (or <b>bunzip2 -c</b>) to decompress the specified file to standard output. The decompressed data stream is then piped directly to the <i>more</i> command, which displays the content one screenful at a time, allowing for interactive navigation. This eliminates the need for manual decompression, making it efficient for quick file inspection. <i>bzmore</i> automatically handles multiple files sequentially and preserves the original compressed file, as it only reads and pipes the decompressed output. It's particularly useful for browsing logs, documentation, or any text-based data that has been compressed with <i>bzip2</i>.


title: CAVEATS
content:
<i>bzmore</i> requires both the <i>bzip2</i> (or <i>bunzip2</i>) utility and the <i>more</i> pager to be installed and accessible in the system's PATH.<br><br>It is designed for text files. Attempting to view <i>bzip2</i>-compressed binary files will result in garbled output due to on-the-fly decompression and display as text.<br><br>Performance can be affected by the size of the compressed file and system resources, as decompression happens in real-time.<br><br>Environment variables like <b>PAGER</b> or <b>MORE</b> can override the default pager used by <i>bzmore</i> (e.g., to <b>less(1)</b>), altering its interactive behavior.


title: ENVIRONMENT VARIABLES
content:
<b>PAGER</b>: If set, this environment variable specifies the pager program to use instead of <b>more(1)</b>. For example, setting <code>PAGER=less</code> will cause <b>bzmore</b> to use <b>less(1)</b> for paging.<br><b>MORE</b>: If <b>PAGER</b> is not set, <b>bzmore</b> checks the <b>MORE</b> environment variable to determine the pager. This is typically less common than <b>PAGER</b>.


title: EXIT STATUS
content:
<b>bzmore</b> typically exits with a status of <b>0</b> upon successful operation. Non-zero exit status indicates an error, such as a file not found, an invalid <b>bzip2</b> file, or an error from the underlying <b>more(1)</b> command or <b>bzip2</b> utility. The specific error code may depend on the component that failed.


title: HISTORY
content:
<i>bzmore</i> emerged as part of the <i>bzip2</i> compression suite, which was primarily developed by <I>Julian Seward</I>. The <i>bzip2</i> project itself saw its first stable release, version 1.0, in <I>1996</I>.<br><br>As a wrapper script, <i>bzmore</i>'s existence is tied to the availability and popularity of <i>bzip2</i> for compression and <i>more</i> (or <i>less</i>) for paging. Its design mirrors that of <i>zmore(1)</i>, which performs a similar function for <i>gzip</i>-compressed files, providing a consistent user experience for viewing compressed data across different compression formats. It automates the common pattern of decompressing a file to standard output and piping it to a pager.


title: PARAMETERS
content:
<b><I>SYMBOL</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more mangled symbols to be demangled. If no symbols are provided, <I>c++filt</I> reads from standard input.<br><br><b><b>--strip-underscore</b>, <b>-_</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strips a leading underscore from the symbol. This is sometimes added by compilers on certain platforms (e.g., macOS, Windows) for historical reasons.<br><br><b><b>--no-strip-underscore</b>, <b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents stripping a leading underscore from the symbol. This is the default behavior on most Unix-like systems for GNU tools.<br><br><b><b>--types</b>, <b>-t</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes argument types in the demangled output. This is typically the default for C++ demangling unless a format like 'java' is specified.<br><br><b><b>--format</b>=<I>FORMAT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the mangling style or Application Binary Interface (ABI) to use for demangling. Common formats include <I>gnu</I> (default), <I>auto</I>, <I>arm</I>, <I>hp</I>, <I>lucid</I>, <I>sgi</I>, <I>edg</I>, <I>gnu-v3</I>, and <I>java</I>.<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;Displays version information and exits.<br><br>


title: DESCRIPTION
content:
The <I>c++filt</I> command is a utility designed to demangle encoded C++ and Java symbols, converting them into a human-readable format. Compilers like GCC mangle (or decorate) C++ symbols to include vital information such as argument types, namespaces, and return types, ensuring unique names for overloaded functions and methods, and supporting features like templates. This mangling process, while crucial for the linker, makes symbols unintelligible to humans. <br><br> <I>c++filt</I> reverses this process, taking a mangled symbol as input (either from standard input or directly as a command-line argument) and outputting its demangled counterpart. This is particularly useful when analyzing linker error messages, examining symbol tables with <I>nm</I>, disassembling code with <I>objdump</I>, or inspecting debugger output, where raw mangled symbols would otherwise be obscure. It supports various C++ Application Binary Interfaces (ABIs) and also has specific support for Java symbol demangling.


title: CAVEATS
content:
The effectiveness of <I>c++filt</I> relies on its knowledge of specific compiler mangling schemes (ABIs). If the input symbol adheres to an unknown or unsupported mangling format, <I>c++filt</I> may fail to demangle it correctly or output it unchanged. It does not perform any linking or runtime analysis; it purely applies pattern matching based on known ABI rules. For Java symbols, use <I>--format=java</I> as the mangling rules are distinct from C++.


title: USAGE WITH OTHER COMMANDS
content:
<I>c++filt</I> is often used in conjunction with other command-line utilities. For instance, to demangle all C++ symbols found in an executable or object file, you might pipe the output of <I>nm</I> or <I>objdump</I> through <I>c++filt</I>:<br><br><code><pre>nm <I>my_program</I> | <I>c++filt</I><br>objdump -t <I>my_library.so</I> | <I>c++filt</I></pre></code><br>This allows for easier analysis of an application's symbol table.


title: MANGLED VS. DEMANGLED SYMBOLS
content:
Mangled symbols are internal representations used by compilers and linkers to uniquely identify functions, variables, and other program elements, particularly in C++ where features like function overloading and namespaces require more complex naming conventions. For example, a C++ function like <code><pre>void MyNamespace::myFunction(int, double)</pre></code> might be mangled into something like <code><pre>_ZN10MyNamespace10myFunctionEif</pre></code>. <I>c++filt</I> reverses this transformation to its original, understandable form.


title: HISTORY
content:
The <I>c++filt</I> utility is an integral part of the GNU Binutils collection, a set of programming tools for creating and managing binary programs, object files, libraries, profile data, and assembly source files. Binutils has been a cornerstone of the GNU Project since its early days, evolving alongside the GCC compiler to support various C++ standards and their associated Application Binary Interfaces (ABIs). Its core function—translating mangled C++ symbols into human-readable forms—has remained consistent, with updates primarily focused on incorporating new demangling rules as C++ language features and compiler ABIs (like the Itanium C++ ABI, which is widely adopted) have developed over time.


title: PARAMETERS
content:
<b>[<i>files</i>]...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more input C source files (e.g., <i><b>filename.c</b></i>) or object files to be compiled.<br><br><b>-o <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the output executable or object file. This is a common <i><b>gcc</b></i> option.<br><br><b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compile or assemble the source files, but do not link them. This produces object files (e.g., <i><b>.o</b></i> files).<br><br><b>-Wall</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable all commonly used warnings, useful for catching potential issues in the code.<br><br><b>-I<i><dir></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add directory <i><b><dir></b></i> to the list of directories to be searched for header files.<br><br><b>-L<i><dir></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add directory <i><b><dir></b></i> to the list of directories to be searched for libraries.<br><br><b>-l<i><lib></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Link with the specified library <i><b>lib<lib>.a</b></i> or <i><b>lib<lib>.so</b></i>.<br><br>


title: DESCRIPTION
content:
<i><b>c89-gcc</b></i> is typically a wrapper script or a symbolic link to the GNU C Compiler (<i><b>gcc</b></i>) specifically configured to compile C source code strictly according to the C89 (ISO/IEC 9899:1990) standard, also known as ANSI C.<br><br>When executed, <i><b>c89-gcc</b></i> implicitly passes the <i><b>-std=c89</b></i> (or sometimes <i><b>-ansi</b></i>) option to <i><b>gcc</b></i>. This ensures that the compiler adheres to the original C standard, disallowing features introduced in newer C standards (like C99, C11, C17) or GNU extensions by default, and issuing warnings or errors for non-compliant code.<br><br>It is particularly useful for maintaining legacy code, ensuring maximum portability across diverse or older systems, or developing applications that must strictly conform to the C89 specification for specific project requirements.


title: CAVEATS
content:
<i><b>c89-gcc</b></i> is not a standard command universally present on all Linux distributions. Its existence and behavior depend on how <i><b>gcc</b></i> is configured or if a custom wrapper script has been created by the system administrator or a toolchain. It might be a simple symbolic link or a more complex shell script. Its primary limitation is the forced adherence to the C89 standard, which means modern C features are not available for use.


title: FORCED STANDARD COMPLIANCE
content:
While <i><b>gcc</b></i>'s default C standard has evolved over time (e.g., to C99, C11, or GNU C), <i><b>c89-gcc</b></i> explicitly forces compilation under the older C89 standard. This can lead to compilation errors or warnings if the source code uses features from newer C standards or GNU extensions not permitted by C89.


title: PORTABILITY AND LEGACY CODE
content:
Using <i><b>c89-gcc</b></i> is beneficial when developing highly portable C applications that need to compile without issues on very old systems or compilers, or when maintaining and extending existing legacy codebases that predate newer C standards and rely solely on C89 constructs.


title: HISTORY
content:
The C89 standard, formally ISO/IEC 9899:1990 (also known as ANSI C), was a landmark in C programming, providing the first widely accepted international standard for the language. The GNU C Compiler (<i><b>gcc</b></i>) has supported this standard through options like <i><b>-ansi</b></i> or <i><b>-std=c89</b></i> since its early development. The creation of a dedicated <i><b>c89-gcc</b></i> command likely arose in environments or specific toolchains where strict C89 compliance was a frequent requirement, simplifying the compilation process by encapsulating the necessary <i><b>gcc</b></i> options into a single, convenient command.


title: SYNOPSIS
content:
Since <i>c99</i> is a programming language standard and not a direct command-line executable, it is invoked indirectly via a C compiler. The most common synopsis involves specifying the standard to a compiler like <b>gcc</b>:<br><br><b>gcc</b> -std=c99 [<i>options</i>] <i>file</i>...<br><br>Here, <i>file</i>... refers to one or more C source code files (e.g., `program.c`). The [<i>options</i>] represent various compiler flags that control compilation, linking, optimization, and warnings.


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>c99</i> itself is a programming language standard, not a command-line executable. Therefore, it does not accept direct command-line parameters. Its features are enabled and utilized via flags passed to C compilers like <b>gcc</b> or <b>clang</b>. The primary flag to enable C99 features is typically <b>-std=c99</b>.<br><br>


title: DESCRIPTION
content:
<i>c99</i> is not a standalone Linux command or executable utility in the traditional sense, but rather a widely adopted <b>standard</b> for the C programming language, formally known as ISO/IEC 9899:1999.<br><br>It defines the syntax, semantics, and libraries for C programs, providing a common ground for compilers and developers. Key features introduced in C99 include <i>long long</i> integers, variable-length arrays (VLAs), <i>restrict</i> type qualifier, <i>_Bool</i> type for booleans, <i>inline</i> functions, designated initializers, compound literals, and flexible array members.<br><br>On Linux systems, <i>c99</i> functionality is typically accessed through C compilers like <b>GCC</b> (GNU Compiler Collection) or <b>Clang</b>. Developers use compiler flags, most notably <b>-std=c99</b>, to instruct the compiler to adhere to this specific version of the C standard during compilation. This ensures that the code written uses features available in C99 and that the compiler applies the rules defined by the standard, aiding in portability and consistent behavior across different systems that support the standard.


title: CAVEATS
content:
While <i>c99</i> defined many significant features, not all compilers fully implement every aspect of the standard, or they might implement them with extensions. Some features, like Variable Length Arrays (VLAs), became optional in later C standards (C11, C17), leading to varying levels of support or warnings from newer compilers when compiling C99 code. Developers should consult compiler documentation for exact compliance details. Furthermore, mixing C99 code with C++ code (especially older C++ standards) can sometimes lead to compatibility issues.


title: KEY C99 FEATURES
content:
Some notable features introduced or standardized in <i>c99</i> include:<br><b><i>long long</i></b>: A 64-bit integer type for extended range.<br><b>Variable-Length Arrays (VLAs)</b>: Arrays whose size can be determined at runtime.<br><b><i>restrict</i> keyword</b>: A type qualifier indicating that a pointer is the sole means of access to a data object, enabling aggressive optimizations.<br><b><i>_Bool</i> type</b>: A true boolean type (`true` and `false` macros are provided in <i>&lt;stdbool.h&gt;</i>).<br><b><i>inline</i> functions</b>: Suggests to the compiler to integrate the function body directly into the call site.<br><b>Designated Initializers</b>: Allows initializing specific elements of an array or members of a struct by name.<br><b>Compound Literals</b>: Unnamed objects that can be used where an object of a particular type is expected.<br><b>Flexible Array Members</b>: Allows structs to contain a dynamically sized array at the end.


title: C99 LIBRARIES AND HEADERS
content:
<i>c99</i> also introduced new standard library headers and functions, enhancing C's capabilities. Examples include <i>&lt;stdbool.h&gt;</i> for boolean types, <i>&lt;stdint.h&gt;</i> for fixed-width integer types (e.g., <i>int32_t</i>, <i>uint64_t</i>), <i>&lt;inttypes.h&gt;</i> for integer format string macros, <i>&lt;complex.h&gt;</i> for complex number arithmetic, and enhancements to existing headers like <i>&lt;math.h&gt;</i> for new mathematical functions.


title: HISTORY
content:
The <i>c99</i> standard was developed by the ISO (International Organization for Standardization) and IEC (International Electrotechnical Commission) and published in 1999 as ISO/IEC 9899:1999. It was a significant revision to the original C standard, C89 (also known as C90 or ANSI C), which was published in 1990. The motivation behind <i>c99</i> was to address real-world programming practices, incorporate features that were already widely used as extensions in popular compilers (like GCC), and fix ambiguities or limitations in the C89 standard. It aimed to make C more modern and suitable for a wider range of applications. While widely adopted, it was later superseded by the <i>c11</i> standard (ISO/IEC 9899:2011) and subsequently <i>c17</i> (ISO/IEC 9899:2018), which introduced new features and deprecated or made optional some C99 features (e.g., VLAs).


title: PARAMETERS
content:
<b><i>input_files</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more C source files (e.g., <i>.c</i>) or object files (e.g., <i>.o</i>) to be compiled or linked.<br><br><b><b>-o</b> <i>output_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the output executable or library file. If omitted, the default is <i>a.out</i>.<br><br><b><b>-I</b><i>dir</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add <i>dir</i> to the list of directories to be searched for header files.<br><br><b><b>-L</b><i>dir</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add <i>dir</i> to the list of directories to be searched for library files.<br><br><b><b>-l</b><i>lib</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Link with the library named <i>lib</i>. For example, <i>-lm</i> links with <i>libm.a</i> or <i>libm.so</i>.<br><br><b><b>-D</b><i>macro</i>[=<i>val</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define a preprocessor macro. Equivalent to <i>#define macro val</i> in source code.<br><br><b><b>-O</b>[<i>level</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set optimization level. <i>-O0</i> (no optimization), <i>-O1</i>, <i>-O2</i> (default for many distros), <i>-O3</i>, <i>-Os</i> (optimize for size).<br><br><b><b>-g</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produce debugging information in the operating system's native format (e.g., <i>DWARF</i> on Linux).<br><br><b><b>-Wall</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable most common warning messages.<br><br><b><b>-Wextra</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable additional warning messages not covered by <i>-Wall</i>.<br><br><b><b>-Werror</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat all warnings as errors, stopping compilation.<br><br><b><b>-E</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run only the preprocessor stage and print the result to standard output.<br><br><b><b>-std=</b><i>standard</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the C standard to compile against. While <i>c99-gcc</i> implies <i>c99</i>, this option can override or explicitly confirm it (e.g., <i>-std=gnu99</i> for GCC extensions).<br><br>


title: DESCRIPTION
content:
The <b>c99-gcc</b> command typically acts as a convenient alias or symlink to the <b>GNU Compiler Collection</b> (GCC), specifically configured to enforce the <b>ISO/IEC 9899:1999</b> (C99) standard for compiling C source code.<br><br>While <i>GCC</i> itself supports numerous C standards, <i>c99-gcc</i> streamlines the process of ensuring that code adheres to <i>C99</i>, which introduced significant features like variable length arrays (VLAs), designated initializers, the <i>restrict</i> keyword, and improvements to standard library functions. It abstracts away the need to explicitly pass the <i>-std=c99</i> flag to <i>GCC</i>. Like <i>GCC</i>, it handles the entire compilation process, from preprocessing and compilation to assembly and linking, transforming source files into executable programs or libraries.


title: CAVEATS
content:
The <b>c99-gcc</b> command is typically a symlink, alias, or wrapper script configured to invoke <b>gcc -std=c99</b>. Its availability and exact setup can vary across different Linux distributions and user environments.<br><br>While it targets <b>C99</b>, <i>GCC</i> might still enable some <b>GNU extensions</b> by default; for strict standard adherence, combining it with <b>-pedantic</b> or <b>-pedantic-errors</b> is recommended. Users accustomed to older C standards (like <i>C89/C90</i>) should be aware of <i>C99</i>-specific features that might break compatibility.


title: <I>C STANDARD COMPLIANCE AND EXTENSIONS</I>
content:
While <b>c99-gcc</b> enforces the <b>C99</b> standard, <i>GCC</i> by default might enable certain <b>GNU extensions</b> unless a strict standard (like <i>-std=c99 -pedantic</i>) is requested. Conversely, if you need <i>GNU</i> extensions alongside <i>C99</i> features, you might explicitly define <i>_GNU_SOURCE</i> before including system headers or compile with <i>-std=gnu99</i>.


title: HISTORY
content:
The <b>GNU Compiler Collection</b> (GCC), the underlying technology for <b>c99-gcc</b>, was initially developed by Richard Stallman in 1987 as a free software alternative to proprietary compilers. Over the years, GCC has evolved to support numerous programming languages and standards.<br><br>The <b>C99 standard</b> (ISO/IEC 9899:1999) was published in 1999, introducing significant new features to the C language. GCC quickly adopted and implemented these features. The <b>c99-gcc</b> command emerged as a convenient way for developers to explicitly compile C code against this specific standard, simplifying the build process by pre-setting the <i>-std=c99</i> flag.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing details of processed files and created links.<br><br><b>-n, --dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a simulated run without making any actual changes to the filesystem, showing what would be done.<br><br><b>-old, --hash-compat</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the old (MD5) hash algorithm for symbolic links, for compatibility with older OpenSSL versions.<br><br><b>-md5</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly forces the use of the MD5 hash algorithm for links (same as -old).<br><br><b>-sha1</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly forces the use of the SHA1 hash algorithm for links (default for modern OpenSSL).<br><br>


title: DESCRIPTION
content:
<b>c_rehash</b> is a utility script, usually written in Perl and distributed with OpenSSL, designed to manage certificate symbolic links within directories.<br><br>Its primary function is to scan one or more specified directories for certificate files (e.g., <i>.pem</i>, <i>.crt</i>) and create symbolic links whose names are derived from the subject hash of each certificate, followed by a sequence number (e.g., <i>abcdef12.0</i>, <i>abcdef12.1</i>). This hashing scheme allows OpenSSL-based applications, such as <b>openssl verify</b> or applications using OpenSSL for SSL/TLS, to efficiently locate and load trusted certificates or Certificate Authority (CA) certificates by their subject name hash without having to scan every file in a directory. It effectively builds an index for certificate lookups.<br><br>If a certificate already has a link, <b>c_rehash</b> ensures it points to the correct file; if the target file has changed or the link is stale, it updates it. This command is crucial for maintaining well-formed CA certificate directories, commonly found at locations like <i>/etc/ssl/certs</i> or <i>/etc/pki/tls/certs</i>, enabling robust SSL/TLS verification in Linux systems. It supports both older (MD5) and newer (SHA1) hash algorithms for compatibility.


title: CAVEATS
content:
<ul><li><b>c_rehash</b> requires write permissions on the specified directories to create or update symbolic links.</li><li>It depends on the <b>openssl</b> binary being accessible in the system's PATH.</li><li>As it is typically a Perl script, a Perl interpreter must be installed on the system.</li><li>Using the <i>-old</i> or <i>-md5</i> options might be necessary for compatibility with very old systems but is generally not recommended for new deployments due to the weaker security of the MD5 hash algorithm.</li></ul>


title: HOW IT WORKS
content:
<b>c_rehash</b> iterates through certificate files in specified directories. For each <i>.pem</i>, <i>.crt</i>, or similar certificate file, it extracts the X.509 subject name. It then calculates a cryptographic hash of this subject name (by default, SHA1; historically, MD5). This hash forms the base name for a symbolic link, followed by a <i>.0</i> suffix (e.g., <i>abcdef12.0</i>). If multiple certificates share the same subject name hash, subsequent links are created with incrementing suffixes (<i>.1</i>, <i>.2</i>, etc.). The symbolic link then points to the original certificate file. This allows OpenSSL functions like <i>X509_LOOKUP_add_dir()</i> to find certificates by their hash, significantly speeding up certificate chain building and verification processes.


title: TYPICAL USAGE
content:
This command is typically run after adding new CA certificates to a trusted store or after removing obsolete ones. For instance, after placing a new CA certificate in <i>/etc/ssl/certs/</i>, one would run <b>c_rehash /etc/ssl/certs/</b> to ensure the new certificate is properly indexed and available for applications that rely on OpenSSL's hashed directory lookup.


title: HISTORY
content:
<b>c_rehash</b> has been a fundamental part of the OpenSSL distribution for many years, serving as the canonical method for preparing certificate directories for efficient lookup. Its evolution primarily tracks changes in recommended cryptographic hash algorithms (e.g., the transition from MD5 to SHA1 for certificate subject hashing) and minor improvements in script robustness and command-line options. It remains a widely used utility due to its simplicity and effectiveness in maintaining the structure required by OpenSSL for certificate verification.


title: SYNOPSIS
content:
Since 'ca.1s' is not a standard Linux command, there is no universally defined synopsis. <br>If it were a custom script or alias, its usage and arguments would depend entirely on its internal implementation defined by its creator.


title: DESCRIPTION
content:
The string 'ca.1s' does not correspond to a standard or widely recognized Linux command. It is not part of common distribution packages and does not have a dedicated man page. It's highly probable that 'ca.1s' is either a typo for a common command, a custom alias or script specific to a particular system, or a misinterpretation of a subcommand like '<b>openssl ca</b>' combined with an argument or filename. <br><br>Without specific context from the environment where this command was encountered, 'ca.1s' cannot be analyzed as a standalone, defined Linux utility with a universal purpose or set of functionalities.


title: CAVEATS
content:
Attempting to execute 'ca.1s' on most standard Linux systems will result in a 'command not found' error, as it is not a pre-installed utility. Its behavior would only be defined if a user or system administrator created an alias, a shell function, or an executable file with this exact name and placed it in the system's PATH.


title: COMMON TYPO POSSIBILITIES
content:
Users frequently mistake 'ca.1s' for standard commands such as `<b>cat</b>` (for concatenating and displaying file contents), `<b>cal</b>` (for displaying a calendar), or `<b>ls</b>` (for listing directory contents). The '.1s' suffix might also erroneously suggest a manual page reference (e.g., section 1 of man pages is for user commands) or be an accidental inclusion of a filename or extension.


title: POTENTIAL CUSTOM SCRIPT/ALIAS
content:
On a specific Linux system, 'ca.1s' could exist as an executable script or a shell alias. If so, its functionality would be entirely custom-defined. For instance, a user might have an alias like `alias ca.1s='cal -1s'` (though 'cal' doesn't use a '-s' option for single-line display) or a script designed for a very specific task.


title: HISTORY
content:
There is no documented history for a standard Linux command named 'ca.1s' because it does not exist as a general-purpose utility. Its appearance likely stems from specific user contexts, common typos, or unique system configurations rather than a general development lineage within the Linux ecosystem.


title: SYNOPSIS
content:
<i>CA.pl.1s</i> [<i>options</i>] [<i>arguments</i>]<br><br>As a custom script, the specific options and arguments for <b>CA.pl.1s</b> are not standardized and must be determined by inspecting the script's source code or any accompanying documentation.


title: PARAMETERS
content:
<b>N/A - Script Specific</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The parameters for <b>CA.pl.1s</b> are not universally defined and depend entirely on the script's implementation. Common operations for a Certificate Authority script might involve parameters for:<ul><li><i>--generate</i>: To create new certificates (e.g., root CA, intermediate CA, server/client certificates).</li><li><i>--sign</i>: To sign a Certificate Signing Request (CSR).</li><li><i>--revoke</i>: To revoke an existing certificate.</li><li><i>--list</i>: To display existing certificates or pending requests.</li><li><i>--config &lt;file&gt;</i>: To specify a configuration file.</li><li><i>--output &lt;file&gt;</i>: To direct output to a specific file.</li><li><i>--help</i> or <i>-h</i>: To display usage information.</li></ul><br><br>


title: DESCRIPTION
content:
The command <b>CA.pl.1s</b> is not a standard Linux utility but appears to be a custom Perl script. The naming convention, particularly 'CA' (likely standing for Certificate Authority) and '.pl' (indicating a Perl script), suggests that this script is designed to perform operations related to Public Key Infrastructure (PKI) and certificate management. Such scripts typically act as wrappers or front-ends to more complex cryptographic tools like OpenSSL, automating tasks such as:<br><br><ul><li>Generating root or intermediate CA certificates.</li><li>Signing Certificate Signing Requests (CSRs) to issue new certificates.</li><li>Revoking existing certificates.</li><li>Managing certificate databases or trust stores.</li><li>Performing administrative tasks related to a local PKI setup.</li></ul><br>Since <b>CA.pl.1s</b> is a custom script, its exact functionality, available options, and specific behavior are entirely dependent on its source code and the environment in which it was developed and deployed. Users encountering this command should consult its source file or local documentation for precise details.


title: CAVEATS
content:
<ul><li><b>Non-Standard Command</b>: <b>CA.pl.1s</b> is not a built-in Linux command; it is a custom script. Its presence and functionality are unique to the system where it is found.</li><li><b>Unknown Behavior</b>: Without access to the script's source code, its exact capabilities, dependencies, and potential side effects are unknown.</li><li><b>Security Implications</b>: Custom scripts, especially those handling cryptographic operations or sensitive data like private keys, must be thoroughly vetted for security vulnerabilities. Using an unverified script could expose the system to significant risks.</li><li><b>Dependencies</b>: The script may rely on specific Perl modules, external binaries (like <i>openssl</i>), or configuration files that must be present and correctly configured for it to function.</li></ul>


title: TYPICAL CA SCRIPT FUNCTIONALITY
content:
A Perl script named 'CA.pl' or similar often serves to simplify complex OpenSSL commands or to integrate PKI operations into existing system administration workflows. Its common functionalities may include:<br><ul><li><b>CA Initialization</b>: Setting up a new Certificate Authority, creating root keys and certificates.</li><li><b>Certificate Issuance</b>: Streamlining the process of issuing new certificates based on CSRs.</li><li><b>Certificate Revocation List (CRL) Management</b>: Updating and distributing CRLs to announce revoked certificates.</li><li><b>Certificate Database Management</b>: Maintaining a database of issued, revoked, and pending certificates.</li><li><b>Key Management</b>: Securely handling private keys, though often delegating the generation and protection of keys to external tools.</li><li><b>Automation</b>: Providing an automated interface for certificate lifecycle management, often integrated with other systems or scripts.</li></ul>


title: HISTORY
content:
As <b>CA.pl.1s</b> is a custom script, its specific development history is unknown and entirely dependent on its creators and the context of its usage. It is likely part of a specific organization's or individual's toolkit for managing their internal PKI.


title: SYNOPSIS
content:
<b>cabal</b> <I>command</I> [<I>options</I>] [<I>arguments</I>]<br>Common modern commands include:<br><b>cabal new-build</b> - Builds the current project.<br><b>cabal new-run</b> - Runs an executable from the project.<br><b>cabal new-install</b> - Installs a package or executable.<br><b>cabal update</b> - Updates the package index from Hackage.<br><b>cabal repl</b> - Starts an interactive GHCi session.<br><b>cabal init</b> - Initializes a new Cabal project.


title: PARAMETERS
content:
<b>new-build (or v2-build)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds the current project or specified components, creating a local, sandboxed build environment. This is the recommended modern build command.<br><br><b>new-run (or v2-run)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds and executes a specified executable from the project, respecting its dependencies.<br><br><b>new-install (or v2-install)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds and installs a package or executable into the user's local bin path, often in a sandboxed manner.<br><br><b>update</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads and updates the latest package index from Hackage, essential for finding new packages and dependencies.<br><br><b>repl</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts an interactive GHCi session for the project, automatically configuring it with the project's dependencies.<br><br><b>init</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interactively creates a new <I>.cabal</I> project file, guiding the user through basic setup for libraries or executables.<br><br><b>configure</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Configures the project for building (legacy command, largely superseded by <I>new-build</I>/<I>v2-build</I>).<br><br><b>build</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds the project (legacy command, superseded by <I>new-build</I>/<I>v2-build</I>).<br><br><b>install</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs a package globally or locally (legacy command, superseded by <I>new-install</I>/<I>v2-install</I> for project-specific installations).<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the <b>cabal</b> command itself or for a specific subcommand.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the <b>cabal-install</b> tool version.<br><br>


title: DESCRIPTION
content:
<b>cabal</b> (short for <I>Common Architecture for Building Applications and Libraries</I>) is the primary build system and package manager for Haskell. It facilitates the compilation, installation, and management of Haskell packages and projects. Developers use <b>cabal</b> to define project dependencies, compile source code, run tests, and generate documentation. It works in conjunction with the Glasgow Haskell Compiler (GHC) to resolve dependencies from Hackage (the central Haskell package archive), build executables and libraries, and manage different project configurations. While historically known for potential "dependency hell," modern <b>cabal</b> versions, especially with <b>cabal new-build</b> (now <b>cabal v2-build</b>) commands, offer robust sandboxing and reproducible builds, making it a powerful and widely used tool in the Haskell ecosystem. It manages project-specific environments and global installations.


title: CAVEATS
content:
<b>Dependency Hell</b>: Older <b>cabal</b> versions were notorious for dependency conflicts due to a lack of robust sandboxing. While <b>new-build</b> / <b>v2-build</b> significantly mitigates this, careful dependency management is still important.<br><I>Global vs. Sandboxed Builds</I>: <b>cabal</b> can install packages globally, which can lead to conflicts, or locally within a project (sandboxed), which is the recommended modern approach via <b>new-*</b> commands.<br><I>Comparison with Stack</I>: Many Haskell developers use <I>Stack</I> instead of or alongside <b>cabal</b> for project management. <I>Stack</I> provides opinionated, reproducible builds based on "LTS Haskell" snapshots, offering a different approach to dependency management.


title: CONFIGURATION FILES
content:
<b>cabal</b> projects are defined by <I>.cabal</I> files (e.g., <I>my-project.cabal</I>), which specify project metadata, dependencies, executables, and libraries. Modern <b>cabal</b> also often uses <I>cabal.project</I> files to define multi-package projects and global configuration.


title: HACKAGE
content:
<b>cabal</b> interacts primarily with Hackage, the central repository for Haskell packages. The <b>cabal update</b> command fetches the latest package index from Hackage, and <b>cabal install</b> (or <b>new-install</b>) downloads and builds packages listed there.


title: HISTORY
content:
<b>cabal</b> has been the standard build tool for Haskell since the early 2000s. Originally, the <I>cabal</I> package format and the <I>cabal-install</I> tool were separate. Early versions of <b>cabal-install</b> relied heavily on global package databases, often leading to "dependency hell" where conflicting dependencies between different projects would break builds. This led to the creation of alternative tools like <I>Stack</I>.<br>To address these issues, significant improvements were introduced with the "new-build" commands (now often referred to as "v2-build" commands) starting around <b>cabal-install</b> version 1.24. These commands brought robust local sandboxing, improved build reproducibility, and a more user-friendly workflow, aiming to provide a first-class developer experience akin to tools in other ecosystems. The development continues to be community-driven, improving performance, dependency resolution, and integration with the wider Haskell ecosystem.


title: SYNOPSIS
content:
<b>cabextract</b> [<i>OPTIONS</i>] <i>&lt;CAB_FILE&gt;</i> [<i>&lt;FILE_TO_EXTRACT&gt;</i> ...]<br><b>cabextract</b> <b>-l</b> <i>&lt;CAB_FILE&gt;</i>


title: PARAMETERS
content:
<b><b>-d</b> <i>&lt;directory&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extract files into the specified <i>&lt;directory&gt;</i>. If the directory does not exist, <i>cabextract</i> will attempt to create it.<br><br><b><b>-F</b> <i>&lt;pattern&gt;</i><br><b>--filter</b> <i>&lt;pattern&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extract only files matching the specified <i>&lt;pattern&gt;</i>. Wildcards (e.g., <i>*</i>, <i>?</i>) are supported. This option can be used multiple times to specify multiple patterns for extraction.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force overwrite existing files without prompting for confirmation. Use with caution as it can lead to data loss.<br><br><b><b>-L</b><br><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List the contents of the archive without performing any extraction. This is equivalent to <b>--list</b> and displays file names, sizes, and dates within the CAB file.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable quiet mode, suppressing most output during operation. Only critical errors will be displayed.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't create subdirectories; extract all files directly into the specified (or current) output directory, flattening the archive's directory structure.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information of <i>cabextract</i> and the underlying <i>libmspack</i> library, then exit.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose mode, displaying more detailed information during extraction, such as file names, sizes, and progress.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message with command usage and available options, then exit.<br><br>


title: DESCRIPTION
content:
<i>cabextract</i> is a command-line utility designed to extract files from Microsoft Cabinet archives (files typically ending with the <i>.CAB</i> extension). These archives are commonly used by Microsoft for software distribution, Windows installation files, and device drivers.<br><br><i>cabextract</i> can handle various compression methods used within CAB files, including MSZIP, LZX, and Quantum compression, as well as uncompressed data. It does not support creating <i>.CAB</i> archives, focusing solely on extraction. It's particularly useful on Linux and Unix-like systems for accessing content from Windows-specific archives without needing Windows itself. It provides options for specifying the output directory, filtering files to extract, and listing archive contents.


title: CAVEATS
content:
<i>cabextract</i> is an extraction-only tool; it <b>cannot</b> create Microsoft Cabinet archives. It also does not support self-extracting CAB files (SFX), which typically require execution on a Windows environment or a specific SFX extractor. While generally robust, it might not perfectly handle all malformed or highly obscure CAB file variations.


title: SPECIFIC FILE EXTRACTION
content:
You can extract specific files from a CAB archive by listing their names as arguments after the <i>CAB_FILE</i>. For example, to extract only <i>file1.txt</i> and <i>file2.dll</i> from <i>archive.cab</i>, you would use: <i>cabextract archive.cab file1.txt file2.dll</i>.


title: WILDCARD SUPPORT WITH -F
content:
The <b>-F</b> (or <b>--filter</b>) option supports standard shell-style wildcards such as <i>*</i> (matches any sequence of characters) and <i>?</i> (matches any single character) to filter files during extraction. This allows for flexible pattern-based selection of files to extract.


title: HISTORY
content:
<i>cabextract</i> is an integral part of the <i>libmspack</i> project, a free software library dedicated to handling various Microsoft proprietary file formats, including Cabinet (.CAB) files, CHM files, and others. The development of <i>libmspack</i> and its accompanying tools like <i>cabextract</i> was driven by the necessity for interoperability and access to these formats on non-Windows operating systems, particularly Linux and Unix-like environments. It emerged as a crucial utility for users needing to extract software, drivers, or system files distributed in Microsoft's native archive format, filling a gap in cross-platform compatibility.


title: PARAMETERS
content:
<b><b>-W</b> <i>&lt;width&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the desired display width in characters.<br><br><b><b>-H</b> <i>&lt;height&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the desired display height in characters.<br><br><b><b>-b</b> <i>&lt;color&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the background color for the demo (e.g., black, white, red).<br><br><b><b>-f</b> <i>&lt;color&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the foreground color for the demo (e.g., black, white, red).<br><br><b><b>-d</b> <i>&lt;driver&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects the display driver to use (e.g., auto, ncurses, X11, raw).<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br>


title: DESCRIPTION
content:
<b>cacademo</b> is a demonstration program that showcases the features and capabilities of the <i>libcaca</i> graphics library. <i>libcaca</i> (Colour AsCii Art) is a free software library that converts images, videos, and text into ASCII art, coloured text, or other low-resolution character-based representations.<br><br><b>cacademo</b> typically presents a variety of visual effects, animations, and rendering modes supported by the library, often including fractal rendering, video playback, text transformations, and image display, all rendered using characters in a terminal. It serves as an excellent example for developers interested in using <i>libcaca</i> and for users to appreciate the library's potential for creating graphical output in text-only environments. Its primary purpose is to illustrate the <i>libcaca</i> library's versatility and performance in rendering complex visuals using only standard terminal characters and colors, providing a unique blend of retro aesthetics and modern algorithmic art.


title: CAVEATS
content:
The <b>cacademo</b> command requires the <i>libcaca</i> library and its utilities package to be installed, which may not be present by default on all Linux distributions.<br>Its visual output relies on the capabilities of the terminal emulator, including support for ANSI escape codes and sufficient character resolution.<br>Performance can vary significantly depending on the terminal, the system's processing power, and the complexity of the specific demo being displayed.


title: ARTISTIC AND EDUCATIONAL VALUE
content:
Beyond its technical demonstration purpose, <b>cacademo</b> offers significant artistic and entertainment value, transforming complex graphical concepts into unique ASCII art experiences. It serves as an excellent educational tool for understanding character-based graphics and the underlying principles of the <i>libcaca</i> library.


title: PORTABILITY
content:
As part of the <i>libcaca</i> project, <b>cacademo</b> inherits the library's strong emphasis on portability, allowing it to run on a wide variety of systems and terminal emulators, often with different display drivers (e.g., ncurses, X11, raw).


title: HISTORY
content:
The <b>cacademo</b> program is an integral part of the <i>libcaca</i> project, a graphic library that outputs text instead of pixels. <i>libcaca</i> was created by Sam Hocevar and first released in 2005, aiming to provide a powerful and portable tool for rendering ASCII and ANSI art. <b>cacademo</b> was developed alongside the library as its primary showcase, demonstrating a wide array of visual effects, animations, and rendering techniques that the library is capable of producing in a text-only terminal environment. Its existence is tied directly to the evolution of <i>libcaca</i>, serving as a live exhibition of its features through different versions and improvements.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows <i>cacaview</i>'s version information and exits.<br><br><b><b>-f</b> <i>&lt;driver&gt;</i>, <b>--driver=</b><i>&lt;driver&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <b>libcaca</b> display driver to use (e.g., <i>ncurses</i>, <i>x11</i>, <i>gl</i>, <i>stdout</i>).<br><br><b><b>-a</b> <i>&lt;algorithm&gt;</i>, <b>--algorithm=</b><i>&lt;algorithm&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the rendering algorithm (e.g., <i>ascii</i>, <i>block</i>, <i>braille</i>, <i>halfblock</i>, <i>dither</i>).<br><br><b><b>-c</b> <i>&lt;colors&gt;</i>, <b>--colors=</b><i>&lt;colors&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the number of colors to use (e.g., <i>8</i>, <i>16</i>, <i>256</i>, <i>full</i>).<br><br><b><b>-o</b> <i>&lt;outfile&gt;</i>, <b>--output=</b><i>&lt;outfile&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the generated character art to a file instead of displaying it in the terminal.<br><br><b><b>-s</b> <i>&lt;size&gt;</i>, <b>--size=</b><i>&lt;size&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scales the output to a specific width and height (e.g., <i>80x24</i>, <i>120xauto</i>).<br><br><b><b>--no-loop</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents looping through multiple image files if more than one is provided.<br><br><b><b>--brightness=</b><i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adjusts the image brightness (typically <i>-1.0</i> to <i>1.0</i>).<br><br><b><b>--contrast=</b><i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adjusts the image contrast (typically <i>-1.0</i> to <i>1.0</i>).<br><br><b><b>--gamma=</b><i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adjusts the image gamma (typically <i>0.0</i> to <i>inf</i>).<br><br><b><b>--dither=</b><i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the dithering method (e.g., <i>none</i>, <i>ordered</i>, <i>random</i>).<br><br>


title: DESCRIPTION
content:
<i>cacaview</i> is a command-line utility that displays images directly within your terminal emulator by converting them into colorful ASCII art or block characters. It is a part of the <b>libcaca</b> library, which is designed to render graphical output using character-based methods. <i>cacaview</i> supports various common image formats and is ideal for quick image previews in a console environment, for systems without a graphical desktop, or for those who appreciate retro computing aesthetics. It provides an interactive mode for adjusting display parameters like brightness, contrast, and zoom.


title: CAVEATS
content:
Performance can be limited by terminal speed, image size, and rendering complexity, especially over remote connections (SSH).<br>Color fidelity and detail are constrained by the terminal's capabilities and the character-based rendering approach.<br>Requires a terminal emulator that supports ANSI escape codes for proper color and cursor positioning.


title: INTERACTIVE MODE
content:
When an image is displayed, <i>cacaview</i> offers interactive controls through keyboard shortcuts. Users can adjust brightness (<b>B</b>), contrast (<b>C</b>), gamma (<b>G</b>), zoom in (<b>+</b> or <b>Z</b>), zoom out (<b>-</b>), pan with arrow keys, and reset parameters (<b>R</b>) to fine-tune the character art representation in real-time.


title: HISTORY
content:
<i>cacaview</i> is an integral part of the <b>libcaca</b> project, initiated by Sam Hocevar. The <b>libcaca</b> library was conceived as a fast and modern alternative to older ASCII art libraries, aiming to provide a comprehensive low-level graphics framework that outputs character-based art rather than pixels. It was developed to support a wide range of features, including true color, various character sets, and different display drivers. <i>cacaview</i> serves as a straightforward command-line interface to demonstrate and utilize <b>libcaca</b>'s powerful image rendering capabilities, bringing the art of character graphics to modern terminals.


title: SEE ALSO
content:
<b>libcaca</b>(7), <b>img2txt</b>(1), <b>cacademo</b>(1), <b>jp2a</b>(1), <b>aalib</b>(7), <b>catimg</b>(1)


title: SYNOPSIS
content:
<b>cadaver</b> [<i>OPTIONS</i>] [<i>URL</i>]<br>If no URL is provided on the command line, <i>cadaver</i> enters an interactive shell session where the user can then use the <i>open</i> command to connect to a WebDAV server.


title: PARAMETERS
content:
<b>-D</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debugging output, providing detailed information about HTTP requests and responses, which can be useful for troubleshooting connection or transfer issues.<br><br><b>-t &lt;timeout&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the HTTP request timeout in seconds. A value of 0 indicates no timeout, meaning the command will wait indefinitely for a response.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of the <i>cadaver</i> client and then exits.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with command-line options and then exits.<br><br>


title: DESCRIPTION
content:
<i>cadaver</i> is an open-source, command-line client designed for interacting with WebDAV (Web-based Distributed Authoring and Versioning) servers. WebDAV is an extension to HTTP that enables clients to perform remote web content authoring operations directly on a web server. Functionally similar to the traditional <i>ftp</i> client, <i>cadaver</i> provides an interactive shell environment. Within this shell, users can perform a wide range of file management tasks such as browsing directories, uploading and downloading files, creating and deleting directories, and moving or renaming files and folders. It supports various HTTP/1.1 authentication methods, including basic and digest, and is capable of establishing secure connections over SSL/TLS. <i>cadaver</i> is particularly useful for managing remote web content or accessing cloud storage services that expose a WebDAV interface, offering a powerful text-based alternative to graphical clients.


title: CAVEATS
content:
As a command-line utility, <i>cadaver</i> operates without a graphical user interface, which may require users to be comfortable with terminal-based interactions. <br>Authentication credentials for WebDAV servers may need to be entered interactively during a session or managed through external scripts for automation. <br>When connecting over plain HTTP without SSL/TLS, sensitive data transferred via <i>cadaver</i> is not encrypted and could be intercepted. <br>Compatibility with various WebDAV server implementations can sometimes be inconsistent, and certain advanced WebDAV features might not be fully supported by all servers or by <i>cadaver</i> itself.


title: INTERACTIVE MODE COMMANDS
content:
Once connected to a WebDAV server, <i>cadaver</i> offers an interactive prompt where users can execute various commands:<br><b>ls</b>: Lists the contents of the current remote directory.<br><b>cd &lt;directory&gt;</b>: Changes the current remote directory.<br><b>get &lt;remote-file&gt;</b>: Downloads a specified file from the server to the local machine.<br><b>put &lt;local-file&gt;</b>: Uploads a specified local file to the remote server.<br><b>mkdir &lt;directory&gt;</b>: Creates a new directory on the remote server.<br><b>rm &lt;file&gt;</b>: Deletes a file on the remote server.<br><b>mv &lt;source&gt; &lt;destination&gt;</b>: Moves or renames a file or directory on the remote server.<br><b>cp &lt;source&gt; &lt;destination&gt;</b>: Copies a file or directory on the remote server.<br><b>open &lt;URL&gt;</b>: Connects to a new WebDAV URL from within the session.<br><b>exit</b> or <b>quit</b>: Terminates the <i>cadaver</i> session.


title: HISTORY
content:
<i>cadaver</i> was developed to address the need for a dedicated command-line client for WebDAV, providing an interactive interface that mirrors the functionality of established FTP clients. Its creation aimed to simplify remote web content authoring and management directly from the terminal, making it an essential tool for developers and system administrators working with WebDAV-enabled resources. The project has focused on providing robust file management capabilities over the WebDAV protocol since its inception.


title: PARAMETERS
content:
<b><B>-s</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent the system from going to sleep while <I>caffeinate</I> is running. This typically inhibits system-wide suspend/hibernate states.<br><br><b><B>-d</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent the display from dimming or blanking while <I>caffeinate</I> is running. This often involves inhibiting display power management.<br><br><b><B>-i</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent the system from entering idle sleep, even if no explicit command is running. Similar to <B>-s</B> but specifically targets idle-initiated sleep.<br><br><b><B>-t</B> <I>seconds</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keep the system awake for a specified duration in seconds, then exit.<br><br><b><B>-u</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulate user activity (e.g., keyboard presses, mouse movements) to keep the system awake. This is a less robust method but can be used in some graphical environments.<br><br>


title: DESCRIPTION
content:
The <I>caffeinate</I> command, popularized by macOS, is designed to prevent a system from entering sleep mode or dimming/blanking its display. On Linux, there isn't a universally pre-installed command named <I>caffeinate</I> that performs this exact function out-of-the-box across all distributions. However, the <I>functionality</I> is commonly achieved using various tools and custom scripts. A Linux equivalent typically works by inhibiting power management mechanisms (like <I>systemd</I>'s suspend/idle timers) or by simulating user activity to keep the display awake.<br><br>Common use cases include running long-duration tasks (compilations, backups, downloads) where the system should not sleep, or during presentations where the display should remain active. When <I>caffeinate</I> is run with a command, it keeps the system awake only for the duration of that command's execution. If run without a command, it typically keeps the system awake indefinitely until manually terminated (e.g., via Ctrl+C).


title: CAVEATS
content:
<I>caffeinate</I> is not a standard, universally available command on Linux distributions. Its functionality is typically implemented via wrapper scripts or aliases that utilize underlying Linux power management tools. Therefore, its behavior, available options, and installation method can vary significantly depending on the distribution and the specific implementation.<br><br>Permissions are often a factor: inhibiting system-wide sleep usually requires appropriate permissions (e.g., via <I>logind</I> for <I>systemd-inhibit</I>). Simulating user activity might require <I>xdotool</I> or similar utilities and an X server.


title: HOW <I>CAFFEINATE</I> IS TYPICALLY IMPLEMENTED ON LINUX
content:
On Linux, a <I>caffeinate</I> script usually acts as a front-end to more fundamental power management commands. For inhibiting system sleep, it most commonly relies on <B>systemd-inhibit</B>. This command allows applications to declare that certain power management actions (like sleep, suspend, or shutdown) should be temporarily blocked. For preventing display blanking in graphical environments, it might use <B>xset -dpms</B> or <B>xset s off</B> to disable display power management, or <B>xset dpms force on</B> to ensure the display is always on. Some implementations might even simulate periodic mouse movements or keyboard presses using tools like <B>xdotool</B> to trick the system into thinking there's user activity. The specific underlying command chosen depends on the desired level of inhibition and the system's configuration.


title: HISTORY
content:
The <I>caffeinate</I> command originated on Apple's macOS (OS X) as part of the <I>pmset</I> utility, providing a user-friendly way to prevent the system from sleeping. Its popularity led to Linux users seeking similar functionality. On Linux, this often resulted in custom scripts or aliases, typically named <I>caffeinate</I>, that wrap existing power management commands like <I>systemd-inhibit</I> (for modern systems with <I>systemd</I>) or <I>xset</I> (for controlling X display power management). While not a native Linux command, the concept and name are widely recognized and replicated within the Linux community.


title: SYNOPSIS
content:
<b>caffeine</b> [<i>OPTIONS</i>]<br>or for some implementations:<br><b>caffeine</b> [<i>COMMAND</i>]


title: PARAMETERS
content:
<b>--activate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates the caffeine mode, preventing sleep and screen lock.<br><br><b>--deactivate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deactivates the caffeine mode, allowing normal power management.<br><br><b>--toggle</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Toggles the caffeine mode between active and inactive states.<br><br><b>--status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current status of the caffeine mode (active/inactive).<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version information of the caffeine utility.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message with available options.<br><br><b>[COMMAND]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs a specified command and keeps the system awake only while the command is running (available in some implementations).<br><br>


title: DESCRIPTION
content:
The <i>caffeine</i> command on Linux is a utility designed to prevent the system from automatically entering sleep, suspension, or locking the screen due to inactivity. It's particularly useful during presentations, long downloads, media playback, or any scenario where you need your system to remain continuously active without user intervention.<br><br>While the exact implementation can vary (some are simple shell scripts, others more complex applications like <i>caffeine-ng</i>), the core functionality remains the same: to inhibit power management features that would otherwise put the system to sleep or lock the display. This is typically achieved by simulating minor user activity (like a key press or mouse movement), or more commonly, by interacting with desktop environment power management systems (e.g., via D-Bus calls to interfaces like <i>org.freedesktop.ScreenSaver</i> or <i>org.gnome.SessionManager</i>) to request a temporary inhibition of idle actions.<br><br>The command often runs in the background, providing a simple way to toggle this "awake" state on or off. It's an indispensable tool for users who need uninterrupted system availability without constantly moving the mouse or typing.


title: CAVEATS
content:
While highly convenient, <i>caffeine</i> may prevent critical system updates or scheduled tasks that rely on idle states or sleep. Prolonged use can also lead to increased power consumption, especially on laptops, and may affect battery life. Its effectiveness can vary across different desktop environments and display managers due to varying power management APIs and their implementations.


title: HOW IT WORKS (UNDER THE HOOD)
content:
Modern <i>caffeine</i> utilities typically employ one or a combination of the following methods:<br><br>1. <b>Simulated User Activity:</b> Using tools like <i>xdotool</i> to generate fake keyboard presses or mouse movements, thus tricking the system into thinking a user is active.<br>2. <b>D-Bus Inhibition:</b> The most common and robust method. It sends D-Bus signals to desktop environment services (e.g., <i>org.freedesktop.ScreenSaver</i>, <i>org.gnome.SessionManager</i>, <i>org.kde.KScreen</i>) requesting them to temporarily inhibit idle actions like screen blanking, locking, or system suspension.<br>3. <b>X Window System Control:</b> Directly manipulating X server settings, such as using <i>xset</i> to disable display power management (DPMS) or screen blanking.


title: HISTORY
content:
The need to prevent systems from sleeping or locking has existed since the early days of personal computing. Initially, users might resort to simple hacks like running continuous loops or moving the mouse periodically. With the advent of modern desktop environments and their sophisticated power management capabilities, direct interaction with X server settings (e.g., via <i>xset</i>) became common. However, these methods often required manual intervention or complex scripting.<br><br>The concept of a user-friendly 'caffeine' utility emerged to simplify this. Early implementations were often simple shell scripts leveraging tools like <i>xdotool</i> to simulate activity or <i>xdg-screensaver</i> to inhibit screen saving. As D-Bus became the standard for inter-process communication in Linux desktop environments, more robust <i>caffeine</i> applications (like <i>caffeine-ng</i>) began using D-Bus calls to interact directly with power management services (e.g., <i>org.freedesktop.ScreenSaver</i>, <i>org.gnome.SessionManager</i>, <i>org.kde.KScreen</i>), providing a more reliable and system-integrated way to prevent sleep. This evolution reflects a shift from low-level hacks to higher-level, desktop-environment-aware solutions.


title: SEE ALSO
content:
xdotool(1), xdg-screensaver(1), dbus-send(1), xset(1), gnome-screensaver-command(1), power-profiles-daemon(1)


title: PARAMETERS
content:
<b>-s, --select <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Select the specified <i>file</i> or <i>URI</i> in the opened window.<br><br><b>-d, --no-desktop</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not manage the desktop (e.g., draw icons, handle background).<br><br><b>--browser</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open a new browser window.<br><br><b>--new-window</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open a new window.<br><br><b>--new-tab</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open a new tab in the current window.<br><br><b>--geometry=GEOMETRY</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the initial window geometry (e.g., <i>800x600+100+50</i>).<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information.<br><br><b>-?, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a summary of command-line options.<br><br>


title: DESCRIPTION
content:
<i>caja</i> is the official file manager for the MATE desktop environment, offering a robust graphical interface for file and folder management. It enables users to easily navigate the file system, open files, and perform standard operations like creating, deleting, copying, moving, and renaming files and directories.<br><br>Beyond basic file operations, <i>caja</i> deeply integrates with the MATE desktop, responsible for drawing desktop icons, handling removable media, and managing desktop backgrounds. It originated as a fork of <i>Nautilus</i> (GNOME Files) from the GNOME 2 era, specifically designed to preserve the classic, user-friendly file manager experience.


title: CAVEATS
content:
As a primarily graphical application, <i>caja</i>'s command-line options are more for launching or influencing its initial state rather than scripting complex file operations. Its behavior can be significantly influenced by the active MATE desktop session settings, especially regarding how new windows or tabs are opened, or how it manages the desktop.


title: DESKTOP INTEGRATION
content:
When running as part of the MATE desktop session, <i>caja</i> is the component responsible for displaying desktop icons, setting the desktop background, and managing the automatic mounting and unmounting of removable storage devices like USB drives and CDs/DVDs.


title: EXTENSIBILITY
content:
<i>caja</i> supports a plugin architecture, allowing users and developers to extend its functionality. These extensions can add new features, context menu options, preview capabilities, and integrate with other applications, enhancing the file manager's versatility.


title: HISTORY
content:
<i>Caja</i>'s origins are deeply intertwined with the development of the MATE desktop environment. MATE emerged as a continuation of the classic GNOME 2 desktop after the significant shift to GNOME 3 and its <i>GNOME Shell</i>.<br><br>The original file manager for GNOME 2 was <i>Nautilus</i>. However, with GNOME 3, <i>Nautilus</i> underwent substantial changes, including the removal of features like desktop handling and spatial mode, which were central to the GNOME 2 experience. To preserve this familiar and popular file management interface, the MATE development team forked <i>Nautilus</i> and renamed it <i>Caja</i> (Spanish for 'box' or 'drawer').<br><br>Since its inception, <i>Caja</i> has been actively maintained and evolved by the MATE community, serving as the default and integral file manager for the MATE desktop environment, offering a stable and traditional user experience.


title: PARAMETERS
content:
<b><B>bake</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates various types of boilerplate code, such as models, controllers, views, components, and tests.<br><br><b><B>server</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts a local PHP development server for the CakePHP application.<br><br><b><B>routes</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a list of all defined routes within the application.<br><br><b><B>migrations</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages database schema changes (requires the CakePHP Migrations plugin).<br><br><b><B>plugin</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages CakePHP plugins, including installing, uninstalling, and loading.<br><br><b><B>cache</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides utilities for clearing or managing application caches.<br><br><b><B>i18n</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assists with internationalization and localization tasks, such as extracting translatable strings.<br><br><b><B>shell</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows execution of custom console commands (shells) written for the application.<br><br><b><B>--help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the main command or a specific subcommand.<br><br><b><B>--version</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the CakePHP framework version.<br><br>


title: DESCRIPTION
content:
The <b>cake</b> command is the primary command-line utility for the <i>CakePHP</i> web framework. Unlike standard Linux commands, it is not a standalone system tool but an integral part of a CakePHP application, typically found at <I>./bin/cake</I> or <I>./vendor/bin/cake</I> within a project directory.<br><br>It provides a robust and convention-driven interface for automating various development tasks, significantly boosting productivity. Developers use it to generate boilerplate code (models, controllers, views, components, etc., via the <b>bake</b> command), run a local development server, manage database migrations, interact with application caches, inspect routing configurations, and perform internationalization tasks.<br><br>The <b>cake</b> command extends the framework's capabilities beyond HTTP requests, allowing for administrative tasks, scheduled jobs, and custom scripting directly from the terminal. It leverages PHP's CLI environment and is crucial for the rapid application development (RAD) paradigm that CakePHP promotes.


title: CAVEATS
content:
The <b>cake</b> command is <B>not</B> a standard, system-wide Linux command. It is specific to the <i>CakePHP</i> web framework and must be executed within the context of a CakePHP project. It requires <i>PHP</i> and <i>Composer</i> to be installed on the system, and its functionality is entirely dependent on the CakePHP framework's version and configuration. Running it outside a CakePHP project directory or without proper environment setup will result in errors.


title: EXECUTION CONTEXT
content:
Typically, the <b>cake</b> command is executed from the root directory of a CakePHP project using its full path, such as <I>./bin/cake</I> or <I>./vendor/bin/cake</I>. For convenience, developers often add <I>./bin</I> to their system's PATH or create symbolic links to make the command directly accessible as just <I>cake</I>.


title: EXTENSIBILITY
content:
Developers can extend the functionality of the <b>cake</b> command by creating custom 'shells' or 'commands'. These are custom PHP classes that provide new command-line functionalities tailored to specific application needs, integrating seamlessly with the existing console toolset.


title: HISTORY
content:
The <b>cake</b> command has been a cornerstone of the CakePHP framework since its early versions, evolving alongside the framework's capabilities. Initially inspired by the Ruby on Rails command-line tools, it began primarily with code generation capabilities (<i>bake</i>). Over time, its functionality expanded to encompass a comprehensive set of development and administrative tools, reflecting the growing needs of web application development, including database migrations, plugin management, and sophisticated caching tools. It represents CakePHP's commitment to developer productivity and convention over configuration.


title: SYNOPSIS
content:
<b>cal</b> [<i>OPTIONS</i>] [[<i>MONTH</i>] <i>YEAR</i>]<br><b>cal</b> [<i>OPTIONS</i>] [<i>DAY</i>] <i>MONTH</i> <i>YEAR</i>


title: PARAMETERS
content:
<b>-3</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the previous, current, and next month.<br><br><b>-j</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display Julian dates (day of the year, 1-365 or 1-366).<br><br><b>-y</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a calendar for the entire year specified or the current year.<br><br><b>-m month</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the calendar for a specific month (1-12) of the current or specified year.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set Sunday as the first day of the week, overriding locale settings.<br><br><b>-w</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display week numbers (1-52 or 1-53) for each week.<br><br>


title: DESCRIPTION
content:
The <I>cal</I> command is a classic Unix utility used to display a calendar in the terminal. By default, when invoked without any arguments, it shows the calendar for the current month with the current day highlighted. It can display a specific month of a given year, or even an entire year's calendar. <br><br> One of its notable historical features is its accurate representation of the transition from the Julian calendar to the Gregorian calendar, which occurred in September 1752 in Great Britain and its colonies. This historical anomaly, where 11 days were removed from the calendar, is correctly depicted by <I>cal</I>, making it a fascinating tool for historical date lookups as well as current ones. Its simplicity, speed, and omnipresence on Unix-like systems make it a fundamental utility for quickly checking dates.


title: CAVEATS
content:
The first day of the week displayed by <I>cal</I> can vary depending on the system's locale settings. Users should be aware that while <I>cal</I> historically handles the 1752 calendar change, its primary function is basic calendar display rather than advanced date calculations or scheduling. For more feature-rich calendar views, consider <I>ncal</I>.


title: HIGHLIGHTING SPECIFIC DATES
content:
You can highlight a specific day by providing the day, month, and year as arguments. For example, to view December 25, 2024, with that day highlighted, you would use: <br> <I>cal 25 12 2024</I>


title: LOCALE IMPACT
content:
The default first day of the week (Sunday or Monday) can vary based on the system's configured locale. Use the <I>-s</I> (Sunday) or <I>-L</I> (Monday/ISO 8601) options to explicitly control this.


title: HISTORY
content:
<I>cal</I> is one of the oldest standard Unix commands, dating back to the early days of AT&T Unix. Its original implementation is notable for correctly handling the historical calendar change in September 1752, when the British Empire adopted the Gregorian calendar by omitting 11 days. This specific detail highlights its deep roots in Unix history and its commitment to precise date representation, even for historical anomalies. It has remained largely unchanged due to its fundamental utility and simplicity.


title: SYNOPSIS
content:
<b>calc</b> [<i>options</i>] [<i>expression ...</i>]<br>Common invocation: <b>calc</b> [<b>-e</b> <i>expression</i>] [<b>-f</b> <i>file</i>] [<b>-i</b>] [<b>-V</b>] [<b>-h</b>] [<i>expression ...</i>]


title: PARAMETERS
content:
<b><b>-e</b> or <b>--expression</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Evaluates the given <i>expression</i> directly from the command line. Multiple <b>-e</b> options can be used.<br><br><b><b>-f</b> or <b>--file</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads and executes expressions from the specified <i>file</i>. Useful for scripts or loading predefined functions/variables.<br><br><b><b>-i</b> or <b>--interactive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <b>calc</b> into interactive mode, even if input is being redirected from a pipe or file.<br><br><b><b>-h</b> or <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with command-line options and exits.<br><br><b><b>-V</b> or <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of the <b>calc</b> utility and exits.<br><br>


title: DESCRIPTION
content:
The <b>calc</b> command provides a highly versatile and powerful arbitrary-precision calculator for the command line. It is typically found as part of the <i>apcalc</i> package on Linux systems. This utility offers a rich set of features, including support for complex numbers, vectors, matrices, trigonometric functions, logarithms, and the ability to define user-specific variables and functions. <b>calc</b> supports various number bases such as binary, octal, decimal, and hexadecimal.<br><br>It can be used in an interactive mode for exploratory calculations or non-interactively to process expressions provided as command-line arguments or read from files, making it well-suited for scripting and automated tasks. Its arbitrary precision capabilities ensure that calculations, even those involving extremely large or very small numbers, are performed without the loss of precision often associated with fixed-precision floating-point systems.


title: CAVEATS
content:
The name <b>calc</b> can refer to different calculator programs on various Unix-like systems (e.g., <i>apcalc</i>, <i>GNU calc</i>). This analysis primarily describes the widely adopted <i>apcalc</i> version, which is common on Linux. While extremely powerful, its extensive features and unique syntax might present a steeper learning curve for new users. It is designed for numerical computation and does not offer advanced symbolic algebra capabilities found in Computer Algebra Systems.


title: <B>ARBITRARY PRECISION ARITHMETIC</B>
content:
<b>calc</b> supports arbitrary precision arithmetic, meaning calculations are performed with as many digits as necessary, limited only by available memory. This prevents the loss of precision commonly associated with fixed-precision floating-point systems, making it suitable for scientific and financial calculations requiring high accuracy.


title: <B>COMPLEX NUMBERS, VECTORS, AND MATRICES</B>
content:
Beyond basic arithmetic, <b>calc</b> natively supports complex numbers, vectors, and matrices. This robust capability allows users to perform advanced linear algebra operations and complex analysis directly from the command line, offering powerful functionality for engineers, mathematicians, and scientists.


title: <B>NUMBER BASES AND UNITS</B>
content:
Users can easily switch between and perform calculations in various number bases, including binary (e.g., <i>0b101</i>), octal (e.g., <i>0o777</i>), decimal, and hexadecimal (e.g., <i>0xFF</i>). Additionally, <b>calc</b> has support for physical units, allowing conversions and calculations with units directly (e.g., <i>10m + 5ft</i>).


title: HISTORY
content:
The most prominent <b>calc</b> utility on Linux systems, <i>apcalc</i>, was originally developed by Dave Gillespie. It has been a long-standing and essential tool in the Unix/Linux environment, providing advanced mathematical capabilities at the command line for decades. Its development has consistently focused on delivering arbitrary precision and a rich set of mathematical functions, solidifying its position as a go-to utility for complex numerical computations in both scripting and interactive usage.


title: SYNOPSIS
content:
<B>calcurse</B> <I>[-a | -d days | -g pattern | -i file | -n | -r | -s | -t | -x file]</I> <I>[-c file]</I> <I>[-D dir]</I> <I>[-N]</I> <I>[-v]</I> <I>[-h]</I>


title: PARAMETERS
content:
<b><B>-a</B>, <B>--appointment</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all appointments on standard output, ignoring the interactive interface.<br><br><b><B>-c</B> <I>file</I>, <B>--calendar-file</B>=<I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the specified <I>file</I> as the calendar data file instead of the default <I>apts</I> file in the data directory.<br><br><b><B>-d</B> <I>days</I>, <B>--days</B>=<I>days</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays appointments for the next <I>days</I> from the current date on standard output.<br><br><b><B>-D</B> <I>dir</I>, <B>--data-dir</B>=<I>dir</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the specified <I>dir</I> as the data directory where configuration and data files (appointments, to-dos, notes) are stored.<br><br><b><B>-g</B> <I>pattern</I>, <B>--grep</B>=<I>pattern</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for and displays all appointments and to-do items matching the specified <I>pattern</I> on standard output.<br><br><b><B>-h</B>, <B>--help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with command-line options and exits.<br><br><b><B>-i</B> <I>file</I>, <B>--import</B>=<I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Imports appointments and to-do items from the specified iCalendar (<I>.ics</I>) <I>file</I> into the <B>calcurse</B> data.<br><br><b><B>-N</B>, <B>--dont-check-config</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <B>calcurse</B> from checking for an existing configuration directory and automatically creating it on startup. Useful for specialized scripting.<br><br><b><B>-n</B>, <B>--next-appointment</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays details of the next upcoming appointment on standard output.<br><br><b><B>-r</B>, <B>--remote</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends commands to a running <B>calcurse</B> daemon. Primarily used for external scripts or notification systems to interact with the active instance.<br><br><b><B>-s</B>, <B>--status</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a concise status line showing the next appointment and pending to-dos. Ideal for integration into shell prompts or status bars.<br><br><b><B>-t</B>, <B>--todo</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all to-do items on standard output, ignoring the interactive interface.<br><br><b><B>-v</B>, <B>--version</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information for <B>calcurse</B> and exits.<br><br><b><B>-x</B> <I>file</I>, <B>--export</B>=<I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports all appointments and to-do items from <B>calcurse</B> into the specified iCalendar (<I>.ics</I>) <I>file</I>.<br><br>


title: DESCRIPTION
content:
<B>calcurse</B> is a powerful, customizable, and user-friendly text-based calendar and scheduling application for Linux and Unix-like systems. It operates entirely within the terminal, leveraging the ncurses library to provide an interactive, pseudo-graphical interface. Users can efficiently manage appointments, to-dos, and notes without leaving the command line.<BR><BR>Key features include persistent storage of data in plain text files, customizable color schemes, interactive filtering of events, and robust support for recurring appointments. It's ideal for command-line enthusiasts, system administrators, or anyone who prefers a lightweight yet full-featured personal information manager. Its flexibility allows for seamless integration into various workflows, including scripting and cron jobs for reminders. The plain text data storage simplifies backup, synchronization, and programmatic parsing.


title: CAVEATS
content:
As a purely text-based application, <B>calcurse</B> requires a terminal emulator to run and cannot directly provide graphical desktop notifications. While its plain text data files offer simplicity and ease of backup, they do not include built-in encryption, which might be a consideration for users storing sensitive personal information.


title: <B>INTERACTIVE INTERFACE</B>
content:
When launched without specific command-line options, <B>calcurse</B> presents an interactive three-panel interface: a date panel (showing a calendar view), an appointments panel (listing events for the selected date), and a to-do/notes panel. Users navigate and interact primarily using intuitive keybindings rather than mouse clicks, enabling a highly efficient workflow for managing schedules and tasks.


title: <B>KEYBINDINGS AND NAVIGATION</B>
content:
<B>calcurse</B>'s interactive mode is almost entirely controlled by keyboard shortcuts, making it very fast for power users. Common actions include 'a' (add appointment), 't' (add todo), 'n' (new entry), 'd' (delete entry), 'q' (quit), and arrow keys for navigation between panels and entries. A comprehensive list of keybindings is always available within the application by pressing the '?' key.


title: <B>CONFIGURATION AND DATA FILES</B>
content:
All <B>calcurse</B> data and user-specific configurations are stored in plain text files within the <I>~/.calcurse/</I> directory by default. Key files include <I>apts</I> (for appointments), <I>todo</I> (for to-do items), <I>notes</I> (for notes linked to events), and <I>conf</I> (the main configuration file controlling colors, layout, and general settings). This plain text approach greatly simplifies backups, synchronization across different systems, and integration with other scripts.


title: HISTORY
content:
<B>calcurse</B> was initiated by <I>Frederic Culot</I> and first publicly released around 2004. Developed in C and leveraging the ncurses library, it aimed to provide a robust, user-friendly, and efficient command-line calendar. Its development has been active and consistent, leading to a stable and feature-rich application that has gained a dedicated following among Linux and Unix users who prioritize efficient terminal-based tools for personal information management.


title: SYNOPSIS
content:
<b>calendar</b> [<i>-t month</i>] [<i>-A num</i>] [<i>-B num</i>] [<i>-f file</i>] [<i>-l num</i>] [<i>-w num</i>] [<i>-a</i>] [<i>-u</i>] [<i>-N</i>] [<i>-n</i>] [<i>-s</i>]


title: PARAMETERS
content:
<b><i>-A num</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays entries scheduled for <I>num</I> days <B>after</B> today, inclusive.<br><br><b><i>-B num</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays entries scheduled for <I>num</I> days <B>before</B> today, inclusive.<br><br><b><i>-f file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative <I>calendar</I> file to read instead of the default <I>~/calendar</I>.<br><br><b><i>-l num</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays entries for <I>num</I> days, starting from today. This overrides the default 'today and tomorrow' behavior.<br><br><b><i>-w num</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays entries for <I>num</I> days <B>after</B> today (similar to <I>-A num</I>).<br><br><b><i>-a</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Processes all <I>calendar</I> files found in a system-wide directory (e.g., <I>/etc/calendar</I>) rather than just the user's home directory file.<br><br><b><i>-u</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses Coordinated Universal Time (UTC) for date calculations instead of local time.<br><br><b><i>-N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses normal output; only reports syntax errors found within the <I>calendar</I> file(s).<br><br><b><i>-n</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Processes the <I>calendar</I> file for US holidays. The exact behavior may depend on system configuration and the presence of specific holiday definitions.<br><br><b><i>-s</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses error messages, running the command in silent mode.<br><br><b><i>-t month</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Debugging) Treats the specified <I>month</I> as the current month for date matching purposes.<br><br>


title: DESCRIPTION
content:
The <B>calendar</B> command acts as a <B>personal reminder utility</B> in Unix-like systems. It operates by reading a user-defined plain text file, typically named <I>calendar</I> and located in the user's home directory (<I>~/calendar</I>). The core function of the command is to scan this file for lines that contain dates matching <B>today</B>'s or <B>tomorrow</B>'s date, along with recognized holidays. When such matches are found, the corresponding lines are displayed to the standard output, effectively reminding the user of upcoming events. <br><br>The flexibility in date parsing allows for various formats within the <I>calendar</I> file, including '<i>Month Day</i>', '<i>MM/DD</i>', and special keywords like '<i>holiday</i>' or day abbreviations. Beyond its default behavior, <B>calendar</B> offers a range of options to customize its operation. Users can specify an alternative calendar file, adjust the range of days to check (e.g., several days before or after the current date using <I>-A</I> or <I>-B</I>), process system-wide calendar files using <I>-a</I>, or even use UTC for time calculations with <I>-u</I>. It's commonly automated via <B>cron</B> jobs to send daily reminders, providing a simple yet effective tool for managing personal schedules without the overhead of more complex calendaring applications.


title: CAVEATS
content:
The <B>calendar</B> command relies on a plain text <I>calendar</I> file, which requires manual maintenance and adherence to specific date formats for correct parsing. Its date parsing can be susceptible to locale settings and year ambiguity, especially for events spanning multiple years or specific recurring dates. It does not support complex scheduling features like event durations, multiple time zones (beyond the <I>-u</I> option), or direct integration with graphical calendaring systems. The default <I>calendar</I> file location (<I>~/calendar</I>) might vary slightly across different Unix-like distributions.


title: <B>CALENDAR FILE FORMAT</B>
content:
The <B>calendar</B> command reads a plain text file, typically named <I>calendar</I>. Each line in this file represents an event or reminder. Dates are usually placed at the beginning of the line, and the command is flexible in recognizing various formats such as '<i>January 1</i>', '<i>1/1</i>', '<i>1 Jan</i>', or '<i>01/01</i>'. It also recognizes specific day names like '<i>Mon</i>', '<i>Tue</i>' for weekly reminders, and keywords like '<i>holiday</i>'. Lines beginning with a '<i>#</i>' character are treated as comments and ignored. <br><br>The command performs a case-insensitive match, and leading zeros in dates are generally disregarded. This simplicity makes the <I>calendar</I> file easy to create and maintain manually, allowing users to quickly add or modify their reminders.


title: <B>TYPICAL USAGE WITH CRON</B>
content:
While <B>calendar</B> can be run manually, its power is often realized when combined with the <B>cron</B> daemon for automated execution. Many users set up a daily <B>cron</B> job to run <B>calendar</B> (e.g., at login or early morning). The output of the command is then typically emailed to the user or displayed upon login, providing a daily digest of upcoming events and reminders. This integration transforms <B>calendar</B> from a simple command-line tool into a passive, yet effective, personal assistant.


title: HISTORY
content:
The <B>calendar</B> command is one of the oldest utilities in Unix-like systems, tracing its roots back to early BSD distributions. Its design reflects the simplicity and efficiency characteristic of early Unix tools. While more sophisticated calendaring applications exist today, <B>calendar</B> remains a lightweight and accessible tool, often used in <B>cron</B> jobs to provide daily reminders without requiring user interaction. It exemplifies the Unix philosophy of creating small, specialized tools that perform one function exceptionally well.


title: PARAMETERS
content:
<b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables continuous detection and re-evaluation of display modes, useful for fine-tuning settings.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates non-interactive mode, attempting to auto-detect and set display parameters without requiring user input.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces verbose output, providing more detailed information about the detection and calibration process.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br>


title: DESCRIPTION
content:
<i>calibrate_ppa</i> is a specialized Linux command designed to configure display parameters for monitors connected to Apple PowerPC machines. These critical settings, including horizontal and vertical sync, screen size, and refresh rates, are stored in the system's PRAM (Parameter RAM). The Open Firmware and the Linux kernel utilize these PRAM settings during boot to establish the initial display mode.<br><br>The utility typically operates interactively, guiding the user through detection and adjustment of optimal display timings. It was a vital tool for achieving proper graphical output on PowerPC systems, especially before advanced display management solutions were prevalent or when Open Firmware settings needed specific tuning. It requires direct hardware access and is usually run from a text console, not within a graphical desktop environment.


title: CAVEATS
content:
This command is exclusively for Apple PowerPC hardware and is non-functional on x86/x64 or other architectures. It necessitates direct hardware interaction and should typically be executed from a text-mode console, not within a graphical environment (like an X server). Incorrect settings can lead to display issues such as an unreadable screen or no output, potentially requiring a PRAM reset or booting into Open Firmware. Due to its specific hardware and era, <i>calibrate_ppa</i> is largely considered obsolete on modern Linux systems.


title: USAGE CONTEXT
content:
<i>calibrate_ppa</i> is typically run immediately after a fresh Linux installation on a PowerPC Mac, or when changing monitors. It's often recommended to boot into runlevel 3 (multi-user text mode) or single-user mode to ensure no X server or other graphics processes interfere with its direct hardware access. After running, the new display settings are saved to PRAM, persisting across reboots.


title: PRAM INTERACTION
content:
The command interacts directly with the PowerPC's PRAM, which stores vital system configurations including boot device, network settings, and display parameters. By writing to PRAM, <i>calibrate_ppa</i> ensures that the selected display mode is used by the Open Firmware firmware during the boot process, affecting how the initial console and subsequently the graphical environment are rendered.


title: HISTORY
content:
<i>calibrate_ppa</i> was developed as a part of the 'powermac-utils' package, specifically to address display configuration challenges on Apple PowerPC machines running Linux (e.g., iMac G3/G4, Power Mac G4/G5, PowerBook G3/G4). Its inception addressed the need for users to manually configure video output parameters, which were crucial for the proper functioning of graphical user interfaces on these unique architectures. It played a significant role in making Linux a viable desktop OS on PowerPC Macs during the late 1990s and early 2000s, before its reliance diminished with the decline of PowerPC Macs in the Linux ecosystem and advancements in universal display management.


title: SYNOPSIS
content:
<b>calibre-server</b> [<i>OPTIONS</i>] [<i>calibre_library_path...</i>]<br><br><i>Example:</i><br><b>calibre-server</b> <i>--port</i> 8080 <i>--username</i> myuser <i>--password</i> mypass <i>--enable-write</i> <i>--daemonize</i> /path/to/my/Calibre/Library


title: PARAMETERS
content:
<b>--port <port></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the network port for the server to listen on. Default is 8080.<br><br><b>--listen-on <address></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the IP address on which the server will listen. Default is 0.0.0.0 (all interfaces).<br><br><b>--username <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines a username for server authentication. Requires --password.<br><br><b>--password <pass></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines a password for server authentication. Requires --username.<br><br><b>--enable-auth</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly enables user authentication for accessing the server.<br><br><b>--enable-https</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables HTTPS (SSL/TLS) for secure communication. Requires --ssl-certificate and --ssl-key.<br><br><b>--ssl-certificate <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the SSL certificate file (.pem format) for HTTPS.<br><br><b>--ssl-key <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the SSL private key file (.pem format) for HTTPS.<br><br><b>--daemonize</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the server in the background as a daemon.<br><br><b>--pidfile <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a file to write the process ID (PID) when daemonized.<br><br><b>--enable-write</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows logged-in users to modify the library (e.g., add/remove books). Use with extreme caution.<br><br><b>--url-prefix <prefix></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a URL path prefix for the server, useful when using a reverse proxy.<br><br><b>--max-connections <num></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the maximum number of simultaneous client connections (default 100).<br><br><b>--allowed-ext <ext1,ext2,...></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of allowed file extensions for download (e.g., epub,mobi).<br><br>


title: DESCRIPTION
content:
<i>calibre-server</i> is a robust command-line utility designed to host your <b>Calibre e-book libraries</b> as a web server. It provides a convenient way to access, browse, search, and download books from your collection using any web browser or Calibre's dedicated content server client. This tool supports serving <b>multiple libraries</b> simultaneously, offers <b>user authentication</b> for secure access, and can be configured to listen on specific network interfaces and ports. It's an indispensable component for sharing your digital library within a local network or over the internet, dynamically serving metadata, covers, and actual book files. The server also generates an <b>OPDS feed</b>, allowing compatible e-readers and applications to directly discover and download books.


title: CAVEATS
content:
Running <i>calibre-server</i> exposed to the internet without <b>HTTPS</b> and strong <b>authentication</b> is highly discouraged due to security risks. The <i>--enable-write</i> option grants significant power to logged-in users, allowing them to modify your valuable library; it should be used with extreme caution or avoided for public-facing servers. Ensure the specified port is open in your system's firewall to allow incoming connections.<br><br>Performance can be a concern with very large libraries or a high number of concurrent users, potentially consuming significant system resources.


title: TYPICAL DEPLOYMENT
content:
<i>calibre-server</i> is frequently deployed on home servers, Network Attached Storage (NAS) devices, or virtual private servers (VPS) to provide centralized access to an e-book collection. For internet-facing deployments, it is highly recommended to place <i>calibre-server</i> behind a <b>reverse proxy</b> (such as <b>Nginx</b> or <b>Apache</b>). This setup allows the proxy to handle SSL termination, load balancing, and more robust security features, while <i>calibre-server</i> focuses solely on serving the library content.


title: MULTIPLE LIBRARIES
content:
By specifying multiple Calibre library paths as arguments to the command (e.g., <i>calibre-server /path/to/libA /path/to/libB</i>), the server can simultaneously serve all of them. Each library will then be accessible via a distinct URL path on the server, typically like <i>/server/libraryA</i> and <i>/server/libraryB</i>.


title: OPDS SUPPORT
content:
The server automatically provides an <b>OPDS (Open Publication Distribution System)</b> feed. This standard allows many modern e-readers and mobile applications to browse, search, and download books from your Calibre library directly without needing a web browser, offering a seamless integration experience for dedicated e-book devices.


title: HISTORY
content:
<i>calibre-server</i> is an integral part of the Calibre e-book management suite, which was initially created by <b>Kovid Goyal</b> in 2006. Starting as a tool to convert e-book formats (<i>libprs500</i>), Calibre rapidly evolved into a comprehensive solution for e-book organization, conversion, and consumption. The content server functionality, provided by <i>calibre-server</i>, was introduced to enable remote access to Calibre libraries, making it a pivotal feature for users wishing to share or access their digital collections across various devices and networks. It has been under continuous active development, reflecting the evolving needs of digital book enthusiasts.


title: SYNOPSIS
content:
<b>calibredb</b> [<i>global_options</i>] <i>command</i> [<i>command_options</i>] [<i>arguments</i>]<br><br><i>Common command patterns:</i><br><b>calibredb</b> <b>add</b> [<i>options</i>] <i>path_to_ebook</i> [<i>path_to_ebook</i> ...]<br><b>calibredb</b> <b>list</b> [<i>options</i>]<br><b>calibredb</b> <b>search</b> <i>search_expression</i> [<i>options</i>]<br><b>calibredb</b> <b>remove</b> <i>book_id</i> [<i>book_id</i> ...]<br><b>calibredb</b> <b>set_metadata</b> <i>book_id</i> [<i>options</i>]


title: PARAMETERS
content:
<b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message for <i><b>calibredb</b></i> or a specific subcommand, then exits.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the program's version number and exits.<br><br><b>--library <i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the Calibre library to operate on. If omitted, the last opened library is used.<br><br><b>--with-library <i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the command while temporarily setting the library path for the duration of the command.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of the output, showing more details about operations.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates debug mode, providing extensive output for troubleshooting.<br><br>


title: DESCRIPTION
content:
<i><b>calibredb</b></i> is a powerful command-line utility provided with the Calibre ebook management software. It allows users to programmatically interact with Calibre libraries, performing operations such as adding, listing, searching, removing, and modifying ebook metadata. It is particularly useful for scripting, automation, and integrating Calibre functionality into other applications or workflows without needing the graphical user interface.<br><br>It can manage multiple libraries and access various book attributes, including authors, tags, series, and custom columns, making it an indispensable tool for advanced users and developers working with large ebook collections.


title: CAVEATS
content:
<i><b>calibredb</b></i> requires a Calibre library to operate on, typically located in your user's documents directory. Incorrect usage, especially with commands like <b>remove</b> or <b>set_metadata</b>, can lead to irreversible data loss or corruption of your Calibre library database. Always backup your library before performing large-scale or critical operations.<br><br>Metadata changes made via <i><b>calibredb</b></i> might not immediately reflect in the Calibre graphical user interface until it is refreshed or restarted.


title: SUBCOMMANDS AND THEIR OPTIONS
content:
While <i><b>calibredb</b></i> has global options, most of its functionality is accessed via <i>subcommands</i> (e.g., <b>add</b>, <b>list</b>, <b>search</b>). Each subcommand typically has its own set of specific options to control its behavior (e.g., <b>calibredb list --sort-by title</b> or <b>calibredb add --authors 'John Doe'</b>). Detailed help for each subcommand can be obtained by running <b>calibredb</b> <i>command</i> <b>--help</b>.


title: SCRIPTING AND AUTOMATION
content:
<i><b>calibredb</b></i> is primarily designed for non-interactive use, making it ideal for shell scripts, cron jobs, or integration into larger systems that need to manage ebook collections. Its consistent output formats (like CSV, JSON, or tab-separated) for commands such as <b>list</b> and <b>search</b> facilitate easy parsing and processing by other tools.


title: HISTORY
content:
<i><b>calibredb</b></i> was developed as an integral part of the broader Calibre project, initiated by Kovid Goyal in 2008. Its evolution has paralleled the growth of the Calibre graphical application, continuously expanding its capabilities to offer robust command-line access to library functions. This focus on command-line utility caters specifically to users and developers who require scripting, automation, or deeper integration of ebook management into their workflows.


title: SYNOPSIS
content:
While <i>caligula</i> itself is not a standard Linux command with a direct synopsis, its deployment typically involves compilation and insertion into the kernel as a module. A common 'invocation' pattern for such a rootkit would be:<br><br><b>  make<br>  sudo insmod caligula.ko [<i>module_options</i>]<br></b><br>Once loaded, it operates stealthily in the background, intercepting system calls and modifying kernel data structures without requiring further direct command-line interaction.


title: PARAMETERS
content:
<b>hide_pid</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A process ID (PID) to be hidden from system monitoring tools like <b>ps</b> and <b>top</b>.<br><br><b>hide_file</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A path to a file or directory that should be hidden from file system listings (e.g., <b>ls</b>).<br><br><b>magic_string</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A specific string that, when present in a process name or command, triggers rootkit actions, such as privilege escalation or opening a backdoor.<br><br><b>password</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A secret string used to authenticate and trigger privileged rootkit functionalities, like gaining a root shell.<br><br>


title: DESCRIPTION
content:
<i>Caligula</i> is not a standard, user-facing Linux command found in typical distributions. Instead, it is a well-known proof-of-concept Linux kernel rootkit designed to demonstrate advanced kernel-level stealth and malicious functionalities. Operating as a Loadable Kernel Module (LKM), it integrates deeply within the operating system to achieve its objectives.<br><br>Its primary purpose is to provide an attacker with covert control over a compromised system. Typical functionalities include hiding processes from standard tools like <b>ps</b>, concealing files and directories from commands like <b>ls</b>, and obfuscating network connections. It may also provide mechanisms for privilege escalation, allowing an attacker to gain root access without detection. Due to its kernel-level operation, <i>Caligula</i> is notoriously difficult to detect and remove, as it manipulates the very data structures that security tools rely on to inspect system state. Its existence highlights critical vulnerabilities that can be exploited in the Linux kernel.


title: CAVEATS
content:
Using or deploying the <i>Caligula</i> rootkit (or any rootkit) on systems without explicit authorization is illegal and unethical, carrying severe legal consequences. It poses an extreme security risk, compromising system integrity, stability, and confidentiality. Detection is challenging, and complete removal often requires a full system reinstallation. It can also lead to system instability, kernel panics, and data corruption. This tool is intended for security research purposes only and should never be used maliciously.


title: OPERATIONAL MECHANICS
content:
<i>Caligula</i> typically functions by hooking system calls (e.g., <b>read</b>, <b>readdir</b>, <b>getdents</b>, <b>kill</b>) and modifying kernel data structures directly in memory. By intercepting these calls, it can filter out information (like hidden PIDs or files) before it's returned to user-space programs. It might also directly manipulate process lists or file system structures to achieve stealth, making it extremely difficult for standard user-mode tools to detect its presence or the presence of hidden objects.


title: DETECTION
content:
Detecting <i>Caligula</i> and similar kernel rootkits is complex due to their low-level operation. Methods include:<br><br><b>  1. Integrity Checking:</b> Comparing hashes of critical system files and kernel modules against known good states.<br><b>  2. Behavioral Analysis:</b> Monitoring for unusual system behavior or resource consumption patterns.<br><b>  3. Rootkit Hunter Tools:</b> Specialized tools like <b>chkrootkit</b> or <b>rkhunter</b> attempt to find common rootkit traces or anomalies.<br><b>  4. Memory Forensics:</b> Analyzing kernel memory dumps for anomalies, hidden processes, or modified data structures.<br><b>  5. Cross-View Detections:</b> Comparing outputs from different commands (e.g., process list from <b>ps</b> vs. direct kernel traversal) to identify discrepancies that indicate hidden elements.


title: HISTORY
content:
The name <i>Caligula</i> is derived from the notoriously tyrannical Roman emperor, fittingly suggesting the malicious and authoritarian nature of this software. It emerged in the realm of cybersecurity research primarily as a proof-of-concept, demonstrating the feasibility and techniques of advanced Linux kernel rootkits. Its development focused on exploiting kernel-level vulnerabilities to achieve stealth and persistence, serving as a cautionary example of sophisticated threats rather than a tool for legitimate system administration.


title: PARAMETERS
content:
<b><I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional integer representing the depth in the call stack. If omitted or 0, it refers to the immediate caller. If <I>N</I> is 1, it refers to the caller of the immediate caller, and so on.<br><br>


title: DESCRIPTION
content:
The <B>caller</B> command is a <I>Bash built-in</I> that allows inspecting the call stack of shell functions. When executed inside a function, it outputs information about the function that called it. This information typically includes the <I>line number</I>, the <I>source file name</I>, and optionally the <I>name of the calling function</I>. It's an invaluable tool for <I>debugging complex shell scripts</I>, helping developers understand the flow of execution and identify where a particular function was invoked from.<br><br>By providing an optional integer argument <I>N</I>, <B>caller</B> can ascend the call stack, revealing information about callers further up the chain, making it powerful for analyzing deeply nested function calls.


title: CAVEATS
content:
The <B>caller</B> command is a <I>Bash built-in</I> and is not universally available in all shells (e.g., it might not exist or behave differently in zsh or ksh).<br><br>It <I>must be executed within a shell function</I> to provide meaningful output; calling it directly from the script's top level or a subshell will typically result in an error or empty output.<br><br>The output format (line number, file name, function name) is specific to Bash and might vary if an equivalent command exists in other shells.


title: OUTPUT FORMAT
content:
The standard output format for <B>caller</B> is <I>line_number filename [function_name]</I>. For example, <I>10 myscript.sh my_function</I>. If the caller was not a named function (e.g., a sourced script or the top level of the current script), <I>function_name</I> will be omitted.


title: COMMON USE CASES
content:
Beyond general debugging, <B>caller</B> is frequently used in <I>error handling functions</I> to report where an error originated. It's also useful in <I>logging</I> to add context (file, line, function) to log messages.


title: HISTORY
content:
The <B>caller</B> built-in was introduced in <I>Bash 2.0</I>. Its primary purpose was to provide better debugging capabilities for shell scripts, allowing scripters to understand the origin of function calls, which was previously difficult to ascertain without manual tracing or complex <B>trap</B> mechanisms.


title: PARAMETERS
content:
<b><i>file...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more diagram files to open when the application starts. If no file is specified, <i>calligraflow</i> will open an empty document.<br><br><b><I>--help</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available command-line options and exits.<br><br><b><I>--version</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information about the application and exits.<br><br><b><I>--author</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows author information for the application.<br><br><b><I>--license</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the licensing terms under which the application is distributed.<br><br><b><I>--fullscreen</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the application in fullscreen mode, occupying the entire screen.<br><br><b><I>--geometry &lt;geometry&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the initial size and position of the application's main window (e.g., <I>1024x768+100+50</I> for 1024x768 size at x=100, y=50).<br><br>


title: DESCRIPTION
content:
<i>calligraflow</i> is the dedicated flowchart and diagram editor component of the <B>Calligra Suite</B>, a comprehensive open-source office suite developed by KDE. It allows users to create various types of structured drawings, including flowcharts, organization charts, network diagrams, entity-relationship diagrams, and more. It provides a rich set of shapes, connectors, and tools for designing professional-looking diagrams.<br><br>As part of the Calligra Suite, <i>calligraflow</i> integrates well with other Calligra applications, enabling seamless embedding of diagrams into documents created with <i>calligrawords</i> or presentations with <i>calligrapresenter</i>. It supports the OpenDocument Drawing (ODG) format, ensuring interoperability with other office suites that adhere to the OpenDocument standard. Its user interface is designed to be intuitive and powerful, leveraging the KDE desktop environment's conventions for ease of use.


title: CAVEATS
content:
<i>calligraflow</i> is a graphical application and requires a running X server or Wayland compositor to function correctly. It is not intended for command-line scripting of diagram generation, as its primary interface is GUI-based. Full functionality relies on the complete installation of the <B>Calligra Suite</B> and its dependencies, typically found within a KDE Plasma desktop environment or a compatible Qt-based setup. Its command-line usage is mostly limited to opening files and basic window management, not complex document manipulation.


title: FILE FORMAT
content:
<i>calligraflow</i> primarily uses the <B>OpenDocument Drawing</B> format (<I>.odg</I>) as its native file format. This adherence to an open standard ensures compatibility and interoperability with other office suites and applications that support the ODF specification, such as LibreOffice Draw.


title: INTEGRATION WITH CALLIGRA SUITE
content:
As an integral part of the <B>Calligra Suite</B>, <i>calligraflow</i> benefits from shared components and a consistent user experience across the applications. Diagrams created in <i>calligraflow</i> can be easily embedded or linked into documents from <I>calligrawords</I>, spreadsheets from <I>calligrasheets</I>, and presentations from <I>calligrapresenter</I>, enhancing the suite's overall utility for content creation.


title: HISTORY
content:
<i>calligraflow</i> is the direct successor to <B>Kivio</B>, the diagramming application that was part of the earlier <B>KOffice</B> office suite. When KOffice development stalled and was eventually supplanted by the <B>Calligra Suite</B> project around 2010-2011, Kivio was rewritten and integrated into the new suite under the name <i>calligraflow</i>. This transition involved adopting a new codebase and infrastructure more aligned with modern Qt and KDE frameworks, while aiming to retain and improve upon the diagramming capabilities of its predecessor.


title: SEE ALSO
content:
calligra(1), calligrawords(1), calligrasheets(1), calligrapresenter(1), kword(1), kivio(1), inkscape(1), dia(1)


title: PARAMETERS
content:
<b><I>file...</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more spreadsheet files to be opened upon application launch. If no files are specified, a new blank document is typically opened.<br><br><b>--new-document</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the application to open a new, blank spreadsheet document.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with available command-line options and then exits.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version information of the <i>Calligra Sheets</i> application and then exits.<br><br><b>--author</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays information about the authors of the application.<br><br><b>--license</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the licensing information for the application.<br><br><b>--config <I>filename</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the specified configuration file instead of the default one.<br><br><b>--display <I>displayname</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to the specified X display, overriding the <i>DISPLAY</i> environment variable.<br><br><b>--geometry <I>WxH+X+Y</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial geometry (width, height, X-offset, Y-offset) of the main application window.<br><br>


title: DESCRIPTION
content:
<i>Calligra Sheets</i> is the robust spreadsheet component of the <b>Calligra Suite</b>, a comprehensive office suite developed by <b>KDE</b>. It provides users with a full set of tools for creating, editing, and managing spreadsheets, ranging from basic calculations to advanced data analysis and visualization. It supports a wide array of functions, charts, and pivot tables, making it suitable for both personal and professional use.<br><br>As a graphical user interface (GUI) application, <b>calligrasheets</b> primarily serves to launch the interactive spreadsheet environment. While it offers a few command-line options for opening files or specifying application behavior, its main interaction is through its visual interface. It is designed to be compatible with various spreadsheet file formats, including the OpenDocument Spreadsheet (ODS) format, Microsoft Excel (XLSX, XLS), and CSV.


title: CAVEATS
content:
<i>Calligra Sheets</i> is primarily a graphical application. Its command-line interface is limited to launching the GUI, opening files, and setting basic display/configuration options. It is <B>not</B> designed for headless operation, batch processing of spreadsheets via scripts, or complex data manipulation without user interaction. Users requiring command-line spreadsheet processing might need to look for specific libraries or other CLI tools.


title: HISTORY
content:
<i>Calligra Sheets</i> is a successor to <i>KSpread</i>, which was the spreadsheet component of the older <b>KOffice</b> suite. With the re-architecture and rebranding effort that led to the <b>Calligra Suite</b>, <i>Sheets</i> emerged as the new, modernized spreadsheet application. The development of <i>Calligra</i>, starting around 2010-2012, aimed to leverage newer technologies and provide a more robust and feature-rich office experience, including better support for OpenDocument formats and integration with KDE's desktop environment.


title: PARAMETERS
content:
<b><I>file...</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more paths to presentation files (e.g., ODP, PPTX) to be opened upon application launch.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message about general Qt and KDE command-line options and exits.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the application's version information and exits.<br><br><b>--author</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows information about the application's author(s) and exits.<br><br><b>--license</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the licensing terms under which the application is distributed and exits.<br><br><b>--desktop <I>desktopentry</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the desktop entry file name to use for the application.<br><br><b>--caption <I>caption</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the specified <I>caption</I> as the title in the application's window title bar.<br><br><b>--icon <I>icon</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the specified <I>icon</I> file as the application's window icon.<br><br><b>--geometry <I>geometry</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial size and position of the application's main window (e.g., <i>1024x768+100+100</i>).<br><br><b>--display <I>displayname</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to the X server specified by <I>displayname</I>.<br><br><b>--config <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses an alternative configuration <I>file</I> instead of the default.<br><br><b>--stylesheet <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies a custom stylesheet from the specified <I>file</I> to the application.<br><br>


title: DESCRIPTION
content:
<i><b>calligrastage</b></i> is the powerful presentation application within the Calligra Suite, a comprehensive office suite developed by KDE. It allows users to create professional and engaging multimedia presentations from scratch or by importing existing files. Key features include a robust slide editor, support for rich text, integration of images, charts, and various media types, as well as advanced vector graphics capabilities inherited from the Calligra framework.<br><br>Users can design master slides for consistent branding, apply a wide range of transitions and animations, and export presentations to various formats, including the OpenDocument Presentation (ODP) format, and import/export from Microsoft PowerPoint (PPTX). Its intuitive user interface, coupled with its focus on open standards and integration with the KDE desktop environment, makes it a viable choice for students, educators, and business professionals seeking a free and open-source alternative to proprietary presentation software.


title: CAVEATS
content:
<i><b>calligrastage</b></i> is primarily a graphical user interface (GUI) application. Its command-line interface is limited to opening files, displaying help/version information, and basic X/KDE environment configuration. Most functionality, such as creating content, editing slides, or managing presentations, is accessible only through the GUI. Performance may vary depending on system resources, especially with large presentations or complex graphics. Compatibility with presentations created in other office suites (e.g., Microsoft PowerPoint, LibreOffice Impress) is generally good but may occasionally show minor formatting discrepancies.


title: GUI-CENTRIC OPERATION
content:
Unlike many command-line utilities, <i><b>calligrastage</b></i>'s primary interaction model is through its graphical user interface. Command-line options are mainly for initial setup or opening specific files, with all creative and editing tasks performed within the application window. Users are expected to launch the application and then utilize its menus, toolbars, and canvas for presentation creation and management.


title: HISTORY
content:
<i><b>calligrastage</b></i> is a core component of the Calligra Suite, an office suite forked from KOffice in 2010. KOffice, which began development in 1997, aimed to provide a free and open-source office solution for the KDE desktop environment. The fork to Calligra was initiated to allow for more rapid development, a focus on modern technologies, and a broader scope beyond traditional office documents, including applications for graphic design and project management.<br><br>Stage, as the presentation application, inherited its foundational code from KOffice's KPresenter. Since the Calligra fork, it has undergone continuous development, focusing on improving user experience, feature parity with proprietary alternatives, and robust support for the OpenDocument Format (ODF), aligning with the open standards movement. Its development is closely tied to the KDE community and its release cycles.


title: SYNOPSIS
content:
<b>calligrawords</b> [<i>options</i>] [<i>file(s)...</i>]<br><b>calligrawords</b> [<b>--help</b>|<b>-h</b>|<b>--version</b>]<br><br>The <i>file(s)</i> argument specifies one or more document paths to open upon launching the application. If no files are specified, <i>Calligra Words</i> will open with a new, empty document.


title: PARAMETERS
content:
<b><i>file(s)...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more document files to be opened when <i>Calligra Words</i> starts. These files will be loaded into separate document windows or tabs.<br><br><b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a concise help message with available command-line options and then exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the application's version information and then exits.<br><br><b><i>Standard Qt/KDE options...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Calligra Words</i> supports many standard options provided by the Qt framework and KDE Plasma desktop environment for controlling window behavior, display, and session management. These include options like <b>--display</b> for X display, <b>--geometry</b> for window size and position, and others, though specific application-level options are minimal.<br><br>


title: DESCRIPTION
content:
<i>Calligra Words</i> is the full-featured word processing application that is part of the <i>Calligra Suite</i>, an integrated office productivity suite developed by KDE. It provides a robust environment for creating, editing, and formatting documents, ranging from simple letters to complex reports and books.<br><br>Users can incorporate text, images, tables, and various graphical elements within their documents. Words supports the Open Document Format (ODF) as its native file format, ensuring interoperability with other office suites like LibreOffice. Additionally, it offers capabilities for importing and exporting documents in various formats, including Microsoft Word's DOCX. While primarily a graphical user interface (GUI) application, <i>Calligra Words</i> can be launched from the command line, often with options to open specific files or control display settings.


title: CAVEATS
content:
<i>Calligra Words</i> is fundamentally a graphical application; its command-line interface is primarily for launching the GUI and opening files, not for headless processing or complex scripting. It requires a graphical environment (X or Wayland) and the necessary KDE/Qt libraries to function. Its availability depends on your Linux distribution's package repositories and whether the Calligra Suite is installed.


title: NATIVE DOCUMENT FORMAT AND INTEROPERABILITY
content:
<i>Calligra Words</i> uses the Open Document Format (ODF) as its native file format, specifically the ODT (Open Document Text) variant. This commitment to an open standard ensures compatibility and interoperability with other ODF-compliant office applications, such as LibreOffice Writer. While ODF is preferred, <i>Calligra Words</i> also provides import and export filters for proprietary formats like Microsoft Word's DOCX, though fidelity can vary with complex documents.


title: HISTORY
content:
<i>Calligra Words</i> traces its roots back to <i>KWord</i>, the word processing component of the <i>KOffice</i> suite, which was the original office suite for the KDE desktop environment. In 2010, the <i>KOffice</i> project underwent a significant architectural rewrite, leading to the creation of the <i>Calligra Suite</i>, with <i>KWord</i> being refactored and renamed to <i>Calligra Words</i>. This transition aimed to improve adherence to open standards like ODF, enhance extensibility, and streamline the codebase. While <i>KOffice</i> development eventually ceased, the <i>Calligra Suite</i> continued, focusing on unique features, robust ODF support, and integration within the KDE ecosystem.


title: DESCRIPTION
content:
The <b><I>cam</I></b> command does not appear to be a standard or widely recognized utility within typical Linux distributions. While many commands share similar spellings (e.g., <b><I>cat</I></b> for concatenating files, <b><I>cal</I></b> for displaying a calendar, or <b><I>cmp</I></b> for comparing files), there is no generic 'cam' command listed in standard Linux man pages or documentation. <br><br>Specific applications or hardware control utilities might include 'cam' as part of their name (like <b><I>camcontrol</I></b> for SCSI/ATA CAM or various webcam utilities), but these are not simply 'cam'. If you encountered this command, it is most likely a custom shell alias, a user-defined script, or part of a highly specialized or niche software package not commonly distributed across most standard Linux environments. Therefore, a generic analysis of a 'cam' command is not possible due to its non-standard nature.


title: CAVEATS
content:
As 'cam' is not a standard command, its existence and behavior on a specific system would be entirely dependent on local customizations. If found, it could be a simple alias, a complex script, or even a malicious executable. Using an undocumented 'cam' command without verifying its source and purpose could pose security risks or lead to unintended system modifications.


title: POTENTIAL TYPO OR ALIAS
content:
It is highly probable that 'cam' is a typo for a common command like <b><I>cat</I></b> or <b><I>cal</I></b>. Alternatively, it might be an alias created by a user or administrator. You can check for aliases using <b><I>alias cam</I></b>, and for its existence in your PATH using <b><I>which cam</I></b> or <b><I>type -a cam</I></b>.


title: HARDWARE-SPECIFIC COMMANDS
content:
While 'cam' itself isn't standard, commands related to camera hardware often exist. For instance, <b><I>v4l2-ctl</I></b> (Video4Linux2 control) is a common utility for configuring webcam devices, and various graphical applications (like <b><I>Cheese</I></b>) provide user-friendly interfaces for camera usage.


title: HISTORY
content:
There is no documented history or widely recognized development timeline for a generic 'cam' command in the context of standard Linux utilities, as it does not exist as such.


title: PARAMETERS
content:
<b>--id=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The event ID to play (e.g., "window-close", "dialog-information").<br><br><b>--description=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A verbose, human-readable description of the event.<br><br><b>--application-id=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The desktop file ID of the application playing the sound.<br><br><b>--application-name=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The verbose, human-readable name of the application.<br><br><b>--x11-display=<I>DISPLAY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The X11 display string of the application.<br><br><b>--x11-screen=<I>SCREEN</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The X11 screen of the application.<br><br><b>--x11-window=<I>WINDOW</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The X11 window ID of the application.<br><br><b>--x11-desktop=<I>DESKTOP</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The X11 desktop ID of the application.<br><br><b>--x11-window-name=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The X11 window name.<br><br><b>--x11-window-class=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The X11 window class.<br><br><b>--x11-window-icon-name=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The X11 window icon name.<br><br><b>--x11-window-role=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The X11 window role.<br><br><b>--x11-startup-id=<I>ID</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The X11 startup notification ID.<br><br><b>--media-role=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The media role (e.g., "event", "feedback", "notification", "alarm").<br><br><b>--event-id=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for <b>--id</b>.<br><br><b>--event-description=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for <b>--description</b>.<br><br><b>--channel=<I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the channel to play the sound on.<br><br><b>--property=<I>VALUE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A generic property key-value pair. Can be specified multiple times.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br>


title: DESCRIPTION
content:
<b>canberra-gtk-play</b> is a command-line utility designed to play sound events conforming to the FreeDesktop.org Sound Theme Specification. It integrates with GTK+ applications, allowing them to provide contextual sound feedback. When invoked without a specific file, it plays a sound event identified by its ID or description (e.g., "window-close", "dialog-information"). If a file path is provided, it will play that specified audio file.<br><br>The strength of <b>canberra-gtk-play</b> lies in its ability to associate sound playback with the current GTK+ application context. This enables sound servers (like PulseAudio or PipeWire) to apply specific policies, such as routing, volume adjustments, or even muting based on the application, window, or type of event. It's a key component for desktop environments like GNOME, KDE, and XFCE to implement coherent and context-aware sound themes, enhancing user experience through auditory cues for system events, notifications, and user interactions.


title: CAVEATS
content:
<ul><li>Requires a sound server (e.g., PulseAudio, PipeWire) that supports the <b>libcanberra</b> backend for full functionality and context-aware playback. Without it, it might fall back to simpler playback methods or fail.</li><li>Relies on a configured FreeDesktop.org sound theme. If no theme is active or the specified event ID is not found, the command might not produce any sound.</li><li>Primarily designed for GTK+ applications; its utility might be limited outside of desktop environments adhering to these standards.</li></ul>


title: FREEDESKTOP.ORG SOUND THEME SPECIFICATION
content:
This specification defines a standard way for desktop environments and applications to play system and event sounds. It includes naming conventions for common sound events (e.g., <b>dialog-information</b>, <b>window-close</b>) and mechanisms for themes to provide custom sounds for these events. <b>canberra-gtk-play</b> is a direct implementation of playing sounds according to this standard.


title: INTEGRATION WITH SOUND SERVERS
content:
<b>canberra-gtk-play</b> doesn't play sound directly but rather interfaces with the underlying sound server (e.g., PulseAudio or PipeWire via the <b>libcanberra</b> library). It passes metadata (like application ID, event ID, X11 window info) to the sound server, which can then use this context to apply sophisticated routing, volume control, or effects based on user preferences or system policies.


title: HISTORY
content:
<b>canberra-gtk-play</b> is part of the <b>libcanberra</b> project, which provides a simple, abstract interface for playing event sounds. The project was initiated around 2007-2008 to bring FreeDesktop.org Sound Theme Specification support to Linux desktops, aiming to standardize how applications play sounds, replace the aging ESD (Enlightened Sound Daemon) in some contexts, and integrate better with modern sound servers like PulseAudio. Its development was driven by the need for consistent and context-aware sound feedback in desktop environments, especially for GNOME and other GTK+-based interfaces.


title: SYNOPSIS
content:
cancel [ -E ] [ -U username ] [ -a ] [ -e ] [ -h hostname[:port] ] [ -u username ] [ id ] [ destination ] [ destination-id ]


title: PARAMETERS
content:
<b>-E</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Forces encryption when connecting to the server.</I><br><br><b>-U username</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specifies the username to use when connecting to the server. This is useful for authentication if the CUPS server requires it.</I><br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Cancels all jobs on the specified destination, or all jobs on the default destination if no destination is specified.</I><br><br><b>-e</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Cancels all jobs on the default destination for all users. This typically requires administrative privileges (e.g., root).</I><br><br><b>-h hostname[:port]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Connects to the specified CUPS server instead of the default local server. The port can be optionally specified.</I><br><br><b>-u username</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Cancels jobs owned by the specified user. This also typically requires administrative privileges if the user is not the invoking user.</I><br><br><b>id</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>The numeric ID of the print job to cancel. This ID is typically obtained using `lpq` or `lpstat`.</I><br><br><b>destination</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>The name of the printer or class where the job is spooled. When used with `id`, it cancels the specific job on that destination.</I><br><br><b>destination-id</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>A combination of the destination name and job ID (e.g., <I>printername-123</I>). This is a common and explicit way to specify a job.</I><br><br>


title: DESCRIPTION
content:
<I>`cancel` is a command-line utility used to remove print jobs from the CUPS (Common Unix Printing System) spooler. It allows users to terminate jobs that are pending, currently printing, or held, preventing them from being processed further by the printer. Users can specify which job to cancel using its unique job ID, the printer destination name, or a combination of both. When invoked without arguments, it attempts to cancel the current job on the default printer. To cancel jobs submitted by other users, administrative privileges (e.g., root or a member of the <I>lpadmin</I> group) are often required. This command is an essential tool for managing print queues, resolving printing issues, and maintaining efficient printer operation within a networked or local printing environment managed by CUPS.</I>


title: CAVEATS
content:
<I><b>Permissions are crucial:</b> A regular user can only cancel their own jobs. To cancel jobs belonging to other users or all jobs, administrative privileges (e.g., root, or being in the <I>lpadmin</I> group) are generally required.<br><b>Job IDs are temporary:</b> Once a job is processed or cancelled, its ID may be reused or become invalid.<br><b>Network connectivity:</b> When connecting to a remote CUPS server using <I>-h</I>, network issues can prevent the command from functioning correctly.</I>


title: <B>JOB IDENTIFICATION</B>
content:
<I>Jobs can be identified by their numeric job ID (e.g., `123`), by the printer destination name (e.g., `laserjet`), or by a combination of both (e.g., <I>laserjet-123</I>). When no arguments are provided, `cancel` attempts to cancel the currently active job for the user on the default printer. Using `lpstat -o` or `lpq` is recommended to get accurate job IDs before attempting to cancel.</I>


title: <B>DEFAULT BEHAVIOR</B>
content:
<I>If no arguments are provided, `cancel` attempts to cancel the "current" job on the default printer. The definition of "current" can sometimes be ambiguous, referring to the last job submitted or the one currently being processed. For reliable operation, it's generally safer to specify a job ID or destination explicitly, especially in environments with multiple active jobs.</I>


title: HISTORY
content:
<I>The `cancel` command is an integral part of the CUPS (Common Unix Printing System) package, which was originally developed by Easy Software Products and later acquired by Apple Inc. It provides a standardized and robust printing solution for Unix-like operating systems. `cancel` superseded older, less consistent job cancellation utilities found in traditional BSD or System V printing systems, providing a unified approach under CUPS. Its evolution has been tied directly to the development and widespread adoption of CUPS as the de facto standard for printing on Linux and macOS, ensuring consistent print job management.</I>


title: PARAMETERS
content:
<b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically play any cards that can be moved to the foundation.<br><br><b>-r <I>seed</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use <I>seed</I> as the random number seed for the card shuffle. Useful for replaying specific games or for debugging.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the score of the current game.<br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Terse output; display less explanatory text during gameplay.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information for the <I>canfield</I> command.<br><br>


title: DESCRIPTION
content:
<b>canfield</b> is a text-based implementation of the popular solitaire card game, Canfield Solitaire (also known as "Demon Solitaire"). It's typically found within the <i>bsdgames</i> collection on Unix-like operating systems. The game is played in the terminal, displaying cards using ASCII characters. The objective of Canfield Solitaire is to move all cards to the four foundation piles, building up in suit from a starting rank determined by the first card dealt to the foundations. The game starts with 13 cards in a reserve pile, one card starting a foundation pile, and four tableau piles. The game is known for being challenging to win, requiring strategic moves and a bit of luck. It provides a simple yet engaging way to pass time directly within the command line interface, without requiring a graphical environment. Users interact by entering commands to move cards between piles.


title: CAVEATS
content:
The <b>canfield</b> command is often part of the <i>bsdgames</i> package, which might not be installed by default on all Linux distributions. Users may need to install it separately. It's a purely text-based game, so it doesn't offer graphical user interface enhancements. Gameplay interaction is command-line driven, which can be less intuitive for users accustomed to graphical solitaire games.


title: GAMEPLAY CONTROLS
content:
Within the <b>canfield</b> game, users interact by typing single-letter commands followed by numbers or other parameters. Common commands include:<br><i>d</i>: deal a new card from the stock.<br><i>t</i>: move a card from the tableau to the foundation.<br><i>r</i>: move a card from the reserve to the tableau or foundation.<br><i>p</i>: move a card from the stock/discard pile to the tableau or foundation.<br><i>m</i>: move a card from one tableau pile to another.<br><i>a</i>: auto-play available moves to the foundation.<br><i>?</i> or <i>h</i>: display help.<br><i>q</i>: quit the game.<br>The exact syntax might vary slightly, but these are typical commands.


title: HISTORY
content:
The <b>canfield</b> command, like many other classic Unix games, originated in the Berkeley Software Distribution (BSD) UNIX systems. It was part of the <i>bsdgames</i> collection, which provided simple, character-based entertainment for users. Its development dates back to the early days of computing when graphical interfaces were not common or powerful enough for such applications. The core game logic and interface have remained largely consistent over the years, making it a nostalgic piece of software for many long-time Unix users and a testament to the versatility of terminal applications. It continues to be maintained as part of various <i>bsdgames</i> ports to Linux and other modern Unix-like operating systems.


title: PARAMETERS
content:
<b><b>--print</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the current capability sets (effective, permitted, inheritable, bounding, ambient), security bits, and UID/GID information.<br><br><b><b>--decode=<i>VALUE</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Decodes a hexadecimal capability bitmask <i>VALUE</i> into a human-readable list of capabilities.<br><br><b><b>--drop=<i>CAPS</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Drops specified capabilities from the current process's effective, permitted, and inheritable sets. <i>CAPS</i> is a comma-separated list of capabilities (e.g., <i>cap_net_raw,cap_sys_ptrace</i>) or '<i>all</i>'.<br><br><b><b>--add=<i>CAPS</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds specified capabilities to the current process's effective and permitted sets. Requires appropriate privileges to add capabilities not already present in the bounding set or the parent's inheritable set. <i>CAPS</i> format is the same as <b>--drop</b>.<br><br><b><b>--caps=<i>CAPS</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly sets the effective, permitted, and inheritable capability sets for the process. <i>CAPS</i> is a string like '<i>cap_net_raw=eip cap_chown=p</i>'.<br><br><b><b>--user=<i>NAME</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the effective and real user ID to that of <i>NAME</i>. Implies dropping privileges unless <b>--keep=1</b> is used.<br><br><b><b>--uid=<i>ID</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the effective and real user ID to <i>ID</i>. Similar to <b>--user</b>, implies privilege dropping.<br><br><b><b>--gid=<i>ID</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the effective and real group ID to <i>ID</i>.<br><br><b><b>--groups=<i>GIDS</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the supplementary group IDs to the comma-separated list of <i>GIDS</i>.<br><br><b><b>--chroot=<i>DIR</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a <i>chroot(2)</i> operation into <i>DIR</i> before executing a command or shell.<br><br><b><b>--chown=<i>UID:GID</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the ownership of the <b>--chroot</b> directory (if specified) to <i>UID:GID</i> before the <i>chroot</i> operation. Requires <i>cap_chown</i>.<br><br><b><b>--target=<i>PID</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Targets a running process specified by its Process ID (<i>PID</i>) to retrieve or manipulate its capabilities. Requires <i>CAP_SYS_PTRACE</i>.<br><br><b><b>--bounding=<i>CAPS</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the bounding capability set. Capabilities not in the bounding set cannot be gained or passed by `execve`.<br><br><b><b>--ambient=<i>CAPS</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the ambient capability set. Capabilities in the ambient set are preserved across `execve` of non-privileged executables.<br><br><b><b>--inhb=<i>CAPS</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the inheritable capability set for the process. These are capabilities that can be inherited by child processes (if also present in the file's permitted set).<br><br><b><b>--secbits=<i>VALUE</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the security bits, which control various capability-related behaviors (e.g., <i>SECBIT_NO_SETUID_FIXUP</i>, <i>SECBIT_NO_CAP_AMBIENT_RAISE</i>).<br><br><b><b>--keep=<i>1</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <b>--uid</b> or <b>--user</b>, this flag prevents `execve` from clearing permitted capabilities when switching from root (UID 0) to a non-root user. This is crucial for retaining capabilities when dropping privileges.<br><br><b><b>--command=<i>FILE</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the specified <i>FILE</i> as a command. This is an alternative to placing the command after <b>--</b>.<br><br><b><b>--</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Separates <b>capsh</b> specific options from the command and its arguments that should be executed. Any arguments following <b>--</b> are treated as the command and its arguments.<br><br>


title: DESCRIPTION
content:
The <b>capsh</b> command is a powerful utility from the <i>libcap</i> package, designed to inspect, modify, and test the Linux process capabilities for the current shell or a specified command. It allows administrators and developers to simulate privilege changes, drop or add specific capabilities, change user/group IDs, and manage security-related attributes like bounding and ambient capability sets. This tool is invaluable for understanding how capabilities affect program execution and for designing applications that run with the minimal necessary privileges, enhancing system security by adhering to the principle of least privilege.


title: CAVEATS
content:
Using <b>capsh</b> effectively requires a deep understanding of Linux capabilities (Effective, Permitted, Inheritable, Bounding, Ambient sets) and how they interact with privilege changes and `execve` calls. Incorrect use can lead to unexpected privilege escalation or privilege reduction. Many operations, especially adding or retaining capabilities, require root privileges or existing specific capabilities. Changes made by <b>capsh</b> are temporary and only affect the process it launches. The <b>--target</b> option requires <i>CAP_SYS_PTRACE</i> and can only inspect capabilities, not modify them directly on an external process.


title: UNDERSTANDING CAPABILITY SETS
content:
Linux capabilities are divided into several sets for each process: <b>Effective (E)</b> - the capabilities currently active and used by the process; <b>Permitted (P)</b> - the maximum set of capabilities a process can ever possess; <b>Inheritable (I)</b> - capabilities that are preserved across an <i>execve(2)</i> system call; <b>Bounding (B)</b> - a master set that limits the capabilities a process can ever obtain; and <b>Ambient (A)</b> - capabilities that are preserved across `execve` of non-privileged executables, bridging the gap between file capabilities and inherited capabilities.


title: PRIVILEGE DROPPING AND `--KEEP`
content:
When <b>capsh</b> changes the UID/GID to a non-root user, the kernel by default drops all permitted capabilities, adhering to the principle of least privilege. The <b>--keep=1</b> option is essential if you intend for the process to retain certain capabilities even after switching from UID 0 to a non-zero UID. This allows for fine-grained control over retained privileges during privilege dropping.


title: HISTORY
content:
The <b>capsh</b> utility is an integral part of the <i>libcap</i> project, which provides the user-space libraries and tools for Linux capabilities. It emerged as a necessary tool to interact with and test the Linux capability system, which replaced the traditional all-or-nothing root privilege model. Its development has mirrored the evolution of Linux capabilities, including the introduction of ambient capabilities and further refinements, making it a critical diagnostic and testing tool for secure application deployment.


title: PARAMETERS
content:
<b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints verbose comments and information to standard error during the conversion process, useful for debugging.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version number of the <i>ncurses</i> library that <b>captoinfo</b> is part of, then exits immediately.<br><br><b><b>-w</b> <i>level</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the warning level for the conversion. <i>level</i> can be 0 (no warnings), 1 (normal warnings, default), or 2 (verbose warnings).<br><br><b><b>-x</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables the parsing and emission of extended <i>terminfo</i> capabilities, allowing for more detailed and modern terminal control sequences to be included.<br><br><b><i>file...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more input files containing <i>termcap</i> definitions. If no files are provided, <b>captoinfo</b> reads from standard input.<br><br>


title: DESCRIPTION
content:
The <b>captoinfo</b> command serves as a crucial utility for systems transitioning from the older <i>termcap</i> database format to the modern <i>terminfo</i> format. While <i>termcap</i> represented terminal capabilities as a text file, suffering from limitations like size constraints and lack of structure, <i>terminfo</i> evolved to provide a more robust, compiled, and extensible database-driven approach.<br><br><b>captoinfo</b> reads a <i>termcap</i> source file (or standard input if no file is specified) and translates its definitions into a <i>terminfo</i> source file format. This output can then be compiled using the <b>tic(1)</b> command to integrate the terminal's capabilities into the system's <i>terminfo</i> database. It's an essential tool for maintaining compatibility with legacy terminal definitions or for environments that still rely on older <i>termcap</i> descriptions. It is part of the <i>ncurses</i> development libraries, which provide a robust framework for terminal-independent text user interface (TUI) programming.


title: CAVEATS
content:
While <b>captoinfo</b> performs a valuable translation, it's not always a perfect one-to-one conversion. Some highly specific or obscure <i>termcap</i> idioms may not have direct <i>terminfo</i> equivalents, potentially requiring manual adjustments to the generated <i>terminfo</i> source. It primarily handles the translation of known <i>termcap</i> capabilities to their <i>terminfo</i> counterparts; it doesn't invent new capabilities if they weren't present in the original <i>termcap</i> definition. It's a one-way conversion tool; converting <i>terminfo</i> back to a pure <i>termcap</i> source is generally not its direct function (though <b>infocmp(1)</b> can produce <i>termcap</i>-like output).


title: TYPICAL USAGE WORKFLOW
content:
A common workflow for <b>captoinfo</b> involves piping its output directly to the <b>tic(1)</b> command. For example: <br><code><b>captoinfo</b> old_terminal.termcap | <b>tic</b> -x -v</code><br>This command reads <i>termcap</i> definitions from <i>old_terminal.termcap</i>, converts them to <i>terminfo</i> source, and then <b>tic</b> compiles this source, integrating the new or updated terminal definition into the system's <i>terminfo</i> database. The <code>-x</code> flag ensures extended capabilities are handled, and <code>-v</code> provides verbose output during compilation.


title: LEGACY VS. MODERN STANDARD
content:
While <b>captoinfo</b> remains a valuable tool for specific migration and compatibility tasks, <i>terminfo</i> source files are now the standard for defining new terminal capabilities. Most modern terminal definitions are created directly in <i>terminfo</i> format and compiled with <b>tic(1)</b>, making direct use of <b>captoinfo</b> less common for everyday terminal management, but indispensable for historical conversions.


title: HISTORY
content:
The <i>termcap</i> database was the original mechanism for describing terminal capabilities in Unix-like systems, widely used in the 1970s and early 1980s. However, its limitations, such as a fixed-size buffer for entries and lack of strong typing, led to the development of <i>terminfo</i> in the mid-1980s as a more flexible, extensible, and compiled database. <b>captoinfo</b> emerged as a critical utility during this transition period, developed as part of the <i>ncurses</i> project. Its purpose was to assist administrators and developers in migrating their existing, often extensive, <i>termcap</i> definitions to the new <i>terminfo</i> format, thereby ensuring continued terminal compatibility for applications built on the evolving <i>terminfo</i> system.


title: SYNOPSIS
content:
<b>carbon-now</b> [<i>options</i>] [<i>file</i>]<br><b>carbon-now</b> [<i>options</i>] < <i>input</i>


title: PARAMETERS
content:
<b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message with available options.<br><br><b><b>--output</b> <I>path</I>, <b>-o</b> <I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the directory where the generated image will be saved.<br><br><b><b>--save-as</b> <I>filename</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define the output image filename, overriding the default.<br><br><b><b>--language</b> <I>lang</I>, <b>-l</b> <I>lang</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly set the programming language for syntax highlighting (e.g., <I>javascript</I>, <I>python</I>).<br><br><b><b>--theme</b> <I>theme-name</I>, <b>-t</b> <I>theme-name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the code's syntax highlighting theme (e.g., <I>seti</I>, <I>dracula</I>, <I>monokai</I>).<br><br><b><b>--background</b> <I>color</I>, <b>-b</b> <I>color</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the background color of the image, typically a hex code like #FF0000 or a named color.<br><br><b><b>--width</b> <I>pixels</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the width of the generated image in pixels.<br><br><b><b>--font-size</b> <I>size</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the font size of the code in pixels (e.g., <I>18px</I>).<br><br><b><b>--window-controls</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display macOS-like window controls on the code image.<br><br><b><b>--line-numbers</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display line numbers next to the code snippet.<br><br><b><b>--config</b> <I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load configuration options from a specified JSON file, allowing for presets.<br><br><b><b>--open-browser</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instead of saving the image, open the generated Carbon image in a web browser.<br><br>


title: DESCRIPTION
content:
The <b>carbon-now</b> command, more accurately known as <I>carbon-now-cli</I>, is a command-line interface tool that allows users to generate stylish, shareable images of their source code directly from the terminal. It leverages the popular <I>carbon.now.sh</I> web service, which provides a simple way to create aesthetically pleasing code snippets. Instead of manually visiting the website, pasting code, and downloading the image, <I>carbon-now-cli</I> automates this process.<br><br>Users can specify an input file or pipe code directly, along with various customization options such as syntax highlighting theme, programming language, background color, and window style. The generated image is then saved to a specified output directory or the current working directory. It's particularly useful for quickly creating code snippets for presentations, social media, or documentation, streamlining a common developer task.


title: CAVEATS
content:
The <b>carbon-now</b> command (carbon-now-cli) is not a standard Linux utility; it requires Node.js and npm for installation. It relies on the <I>carbon.now.sh</I> web service, meaning internet connectivity is required for image generation. Advanced features like headless browser rendering (which it uses internally) may require additional system dependencies (e.g., for Puppeteer).


title: INSTALLATION
content:
To install <I>carbon-now-cli</I>, ensure you have Node.js and npm installed, then use the following command:<br><code>npm install -g carbon-now-cli</code>


title: CONFIGURATION FILES
content:
For repetitive tasks or specific styles, users can define presets in a <code>.carbon-now.json</code> file in their home directory or project root. This file can contain default options, which can then be applied using the <b>--preset</b> <I>name</I> option.


title: HISTORY
content:
The <I>carbon.now.sh</I> web application gained significant popularity around 2017-2018 for its intuitive interface in creating aesthetically pleasing code snippets. The <I>carbon-now-cli</I> tool was subsequently developed to extend this functionality to the command line, enabling automation and integration into developer workflows without requiring manual browser interaction. It is an open-source project, primarily maintained by the community, leveraging Node.js and Puppeteer for headless browser automation.


title: SYNOPSIS
content:
<b>carbonyl</b> [<i>options</i>] [<i>URL</i>]<br><b>carbonyl</b> [<i>options</i>] <b>--input</b> <i>&lt;file&gt;</i>


title: PARAMETERS
content:
<b><i>URL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The web address to navigate to and render.<br><br><b><b>--input</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a local HTML or JavaScript file to load and execute instead of a URL.<br><br><b><b>--output</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Saves the resulting rendered HTML content or other output (e.g., PDF) to the specified file.<br><br><b><b>--screenshot</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Captures a screenshot of the rendered page and saves it to the given file path.<br><br><b><b>--user-agent</b> <i>&lt;string&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the User-Agent HTTP header for all requests made by the browser instance.<br><br><b><b>--no-javascript</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables JavaScript execution, rendering pages as static HTML.<br><br><b><b>--headers</b> <i>&lt;JSON_string&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides additional HTTP headers as a JSON string for all outgoing requests.<br><br><b><b>--timeout</b> <i>&lt;seconds&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a maximum timeout for page loading and script execution in seconds.<br><br>


title: DESCRIPTION
content:
Carbonyl is an innovative open-source project that implements a headless web browser, leveraging the performance and safety characteristics of the Rust programming language. It is designed to provide a lightweight and efficient alternative to traditional headless browser solutions like Puppeteer or Selenium, which often rely on full instances of Chrome or Firefox. Carbonyl aims to offer a minimalistic yet powerful environment for web scraping, automated testing, and general web content interaction without the overhead of a visible graphical user interface.<br><br>At its core, Carbonyl functions by rendering web pages in a non-graphical context, allowing developers and system administrators to programmatically interact with web content. This makes it ideal for tasks such as extracting data from websites, validating website functionality, or performing automated tasks that require a full browser engine but do not need visual rendering. Its Rust foundation means it compiles to a single, self-contained binary, leading to faster startup times and lower resource consumption compared to solutions that launch a separate browser process. While not a standard Linux command distributed with most distributions, Carbonyl can be compiled and installed on Linux systems, providing a versatile tool for command-line driven web automation.


title: CAVEATS
content:
Carbonyl is <i>not</i> a standard Linux command pre-installed on most distributions. It is an external open-source project that needs to be manually downloaded, compiled (if from source), and installed. Its features and stability might evolve as it is under active development. While aiming for high compatibility, it might not fully replicate every nuanced behavior of a full-fledged graphical browser like Chrome.


title: CORE USE CASES
content:
Common applications for Carbonyl include automated web scraping for data collection, end-to-end testing of web applications, generating PDF reports or screenshots from web pages, and performing synthetic monitoring of website availability and performance from a command-line interface.


title: INSTALLATION
content:
As Carbonyl is a Rust project, typical installation involves using Cargo, Rust's package manager. After installing Rust and Cargo, it can often be installed via <i><code>cargo install carbonyl</code></i> or by cloning its Git repository and building from source.


title: HISTORY
content:
Carbonyl was initiated by Badr Bouslikhin (fathyb) as an open-source project in Rust. Its development stemmed from the desire for a more efficient, less resource-intensive, and more robust alternative to existing headless browser solutions, which often rely on complex setups involving large browser binaries and external driver programs. It aims to provide a fast and secure tool for headless web interaction by leveraging Rust's performance characteristics.


title: PARAMETERS
content:
<b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display <B>cargo</B> version information.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display general help message or command-specific help.<br><br><b>--list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all installed subcommands.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use verbose output, showing more details like dependency information.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not print <B>cargo</B> log messages.<br><br><b>--color <WHEN></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Control coloring of output. <I>WHEN</I> can be 'auto', 'always', or 'never'.<br><br><b>build</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compile the current package and all of its dependencies.<br><br><b>run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compile and execute the current package.<br><br><b>test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the tests for the current package.<br><br><b>check</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Analyze the current package and report errors, but do not build.<br><br><b>new <NAME></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new Rust project (binary or library) at the specified path.<br><br><b>init</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new Rust project in an existing directory.<br><br><b>add <DEPENDENCY></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a dependency to <I>Cargo.toml</I> for the current package.<br><br><b>clean</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove generated artifacts and the <I>target</I> directory.<br><br><b>publish</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Upload the current package to the <I>crates.io</I> registry.<br><br><b>install <CRATE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Install a Rust binary (executable) from a given crate.<br><br>


title: DESCRIPTION
content:
<B>cargo</B> is the official package manager and build system for the Rust programming language. It is an indispensable tool for Rust developers, streamlining the entire development lifecycle from project creation to deployment. <B>cargo</B> handles various tasks, including managing project dependencies specified in <I>Cargo.toml</I>, downloading and compiling crates from <I>crates.io</I>, building the project, running tests, generating documentation, and publishing new versions of libraries and applications. It provides a consistent and reliable workflow, ensuring that all necessary components are correctly assembled and linked, significantly simplifying the complex build processes often associated with compiled languages. Its comprehensive feature set makes it central to the Rust ecosystem.


title: CAVEATS
content:
<B>cargo</B> is not a standard Linux command but part of the Rust toolchain. It requires the Rust programming language to be installed on the system, typically via <B>rustup</B>. While powerful, <B>cargo</B> operations can sometimes consume significant disk space and build times, especially for large projects with numerous dependencies. Dependency resolution conflicts can occasionally occur, requiring manual intervention or version adjustments in <I>Cargo.toml</I>.


title: <B>WORKSPACE SUPPORT</B>
content:
<B>cargo</B> natively supports workspaces, allowing multiple related Rust packages (crates) to be managed and built together from a single top-level <I>Cargo.toml</I> file. This feature is crucial for larger projects composed of several interdependent components, simplifying their development, ensuring consistent builds across all crates within the workspace, and enabling shared dependencies and build profiles.


title: HISTORY
content:
<B>cargo</B> was developed alongside the Rust programming language itself, driven by the crucial need for a robust and consistent build and dependency management system. Its initial development began around 2012-2013, predating Rust's 1.0 stable release in 2015. It quickly became an integral part of the Rust developer experience, ensuring that projects could be easily shared, built, and maintained across different environments. Its adoption significantly contributed to Rust's growth and widespread usage, effectively replacing earlier, more ad-hoc build solutions in the Rust ecosystem.


title: SEE ALSO
content:
rustc(1): The Rust compiler., rustup(1): The Rust toolchain installer and manager., make(1): A general-purpose build automation tool., cmake(1): A cross-platform build system generator.


title: PARAMETERS
content:
<b><i><CRATE_NAME></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the crate to add. Can optionally include a version, path, or URL after an '@' symbol (e.g., <i>serde@1.0</i>, <i>my-crate@./path/to/crate</i>, <i>my-repo@https://github.com/user/repo</i>).<br><br><b><b>--dev</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add the dependency to <i>[dev-dependencies]</i>.<br><br><b><b>--build</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add the dependency to <i>[build-dependencies]</i>.<br><br><b><b>--target</b> <i><TRIPLE></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add the dependency to <i>[target.'<TRIPLE>'.dependencies]</i>.<br><br><b><b>--optional</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add the dependency as an optional dependency.<br><br><b><b>--no-default-features</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not activate the crate's default features.<br><br><b><b>--default-features</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activate the crate's default features (default).<br><br><b><b>--features</b> <i><FEATURES></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Space-separated list of features to activate for the dependency.<br><br><b><b>--path</b> <i><PATH></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a local path dependency.<br><br><b><b>--git</b> <i><URL></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a Git repository dependency.<br><br><b><b>--branch</b> <i><BRANCH></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Branch to use for a Git dependency.<br><br><b><b>--tag</b> <i><TAG></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Tag to use for a Git dependency.<br><br><b><b>--rev</b> <i><REV></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specific revision to use for a Git dependency.<br><br><b><b>--version</b> <i><VERSION></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the exact version to add. Uses caret requirement by default if not specified (e.g., <i>^1.2.3</i>).<br><br><b><b>--rename</b> <i><NAME></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rename the dependency in <i>Cargo.toml</i>.<br><br><b><b>--package</b> <i><PKG_ID></i>, <b>-p</b> <i><PKG_ID></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add dependency to a specific package in a workspace.<br><br><b><b>--workspace</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add dependency to the workspace root's <i>Cargo.toml</i>.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not actually write to <i>Cargo.toml</i>, just show what would happen.<br><br><b><b>--offline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Go offline and use only locally cached dependencies.<br><br><b><b>--verbose</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use verbose output.<br><br><b><b>--quiet</b>, <b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;No output besides errors.<br><br><b><b>--color</b> <i><WHEN></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Control coloring of output (<i>auto</i>, <i>always</i>, <i>never</i>).<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print help information.<br><br>


title: DESCRIPTION
content:
<i>cargo-add</i> is a <b>Cargo</b> subcommand that simplifies the process of adding a dependency to your Rust project's <i>Cargo.toml</i> manifest file.<br><br>Instead of manually editing the file, <i>cargo-add</i> automatically determines the latest compatible version of the specified crate, adds the appropriate entry to the <i>[dependencies]</i> section (or <i>[dev-dependencies]</i>, <i>[build-dependencies]</i>, <i>[target.'...'.dependencies]</i> based on options), and updates your project's dependency graph. It supports adding regular, development, build, and target-specific dependencies, as well as dependencies from local paths or Git repositories. This command streamlines dependency management, making it quicker and less error-prone to set up new projects or introduce new libraries.


